小编典典

SQL中是否有一种方法可以强制执行无向边缘的唯一性?

sql

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个不同的旅程,一个作为进路,一个作为回程。我想要对每个位置执行一次旅程。有哪些选择呢?


阅读 161

收藏
2021-04-14

共1个答案

小编典典

最简单的方法是强制执行“方向”,然后使用唯一约束:

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)
);

但是,您必须记住插入值,以便使用触发器来确保它们正确无误。

否则,可以对最小和最大值使用计算列,然后对此使用唯一约束。

2021-04-14