微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单向多列 UNIQUE 约束

如何解决单向多列 UNIQUE 约束

我有一个系统,我试图在其中描述两个目标之间基于事件的交互。在我们的系统中,一个事件(交互)有一个“源”和一个“目标”(基本上是谁对谁[做了什么]):

-- tried to remove some of the "noise" from this for the sake of the post:
CREATE TABLE interaction_relationship (
    id integer CONSTRAINT interaction_pk PRIMARY KEY,source_id integer CONSTRAINT source_fk NOT NULL REFERENCES entity(id),target_id integer CONSTRAINT target_fk NOT NULL REFERENCES entity(id),-- CONSTRAINT(s)
    CREATE CONSTRAINT interaction_relationship_deduplication UNIQUE(source_id,target_id)
);

约束 interaction_relationship_deduplication 是我问题的来源:

在我们的系统中,单个源可以与单个目标多次交互,但这种关系只能存在一次,即如果我是一名修理汽车的机械师,我可能会在我的商店多次看到那辆车,但是我和那辆车只有一种关系:

id source_id target_id
123abc 456def
b 123abc 789ghi

理想情况下,此表也代表单向关系。 source_id 始终是交互的“所有者”,即如果汽车 456def 碾过机械师 123abcinteraction_relationship 表中将有另一个条目:

id source_id target_id
1 123abc 456def
2 123abc 789ghi
3 456def 123abc

那么,我的问题是:多列上的 UNIQUE 是否考虑了值顺序?或者以上会导致失败?

解决方法

多列上的 UNIQUE 是否考虑值顺序?

是的。元组(123abc,456def)与元组(456def,123abc)不同,它们可能同时存在于表中。


也就是说,您可能想从关系表中删除 surrogate id,它几​​乎没有任何用处。关系表(相对于实体表,甚至实体表)对于多列主键完全没问题,它是 naturally 源和目标的组合。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。