create table Location ( id integer primary key(1, 1), latitude decimal(8,6), longitude decimal(9,6), address varchar(100), name varchar(60) unique ); create table Journey ( id integer primary key(1,1), id_from integer foreign key references Location(id), id_to integer foreign key references Location(id), name varchar(100) unique, unique(id_from, id_to) );
使用此架构,您可以为两个位置创建2个不同的旅程,一个作为进路,一个作为回程。我想要对每个位置执行一次旅程。有哪些选择呢?
最简单的方法是强制执行“方向”,然后使用唯一约束:
create table Journey ( id integer primary key, id_from integer foreign key references Location(id), id_to integer foreign key references Location(id), name varchar(100) unique, unique(id_from, id_to), check (id_from < id_to) );
但是,您必须记住插入值,以便使用触发器来确保它们正确无误。
否则,可以对最小和最大值使用计算列,然后对此使用唯一约束。