看看下面的情况,它到底意味着什么? 'fromCity'和'toCity'都是字符串,所以比较这两者是否有意义?
目标是找到一个解决方案,保证表格永远不会存储从Y到X的距离,如果它已经有从X到Y的距离。
CREATE TABLE Distances (
fromCity TEXT,
toCity TEXT,
distance INT,
CONSTRAINT only_one_direction CHECK (fromCity < toCity)
) ;
答案 0 :(得分:3)
您需要一个唯一约束(或索引)来确保这一点。仅检查约束不会阻止再次添加相同的组合(它还会对客户端施加一些限制,以便在插入之前对两个名称进行排序)。
更好的方法是一个唯一的索引,确保只能存储一个组合:
CREATE TABLE distances
(
fromcity TEXT,
tocity TEXT,
distance INT,
);
create unique index on distances ( least(fromcity,tocity), greatest(fromcity,tocity) );
表达式索引将始终以相同的顺序存储城市,从而确保组合是唯一的。