我想有一个查找表,链接两个相同的东西彼此。假设我有一个'Person‘表,我想要查找两个人之间的关系。我会让查找的第一列是'PersonId1‘,第二列是'PersonId2’,第三列是'Relationship‘。因为关系是双向的,所以我不需要切换PlayerId的重复记录。有没有办法让mysql对PlayerId1和PlayerId2组合执行唯一性,而不管它们的顺序是什么?
这有意义吗?
发布于 2013-03-16 22:53:57
简短的回答是:不。
更长的答案:如果第二个人的ids小于第一个人的ids,那么可以设置一个触发器来交换两个人的ids的顺序,然后编写它们,并使用组合键。
更长的答案是:并不是所有的人际关系都是互换的(并不是所有的关系都是双向的)。那么“员工”或“母亲”关系呢?即使是“朋友”关系,假设是点对点的关系,如果你有单独的行,说A是B的朋友,B是A的朋友,可能会更好地表示出来。因此,您可能需要在此表上使用一个包含三个字段的组合键。
发布于 2013-03-16 22:35:25
您的意思是希望拥有来自PersonID1和PersonID2列的唯一行记录(与Relationship列无关)?如果是这样的话,您可以使用复合键(多列键)。
下面是一个例子:
CREATE TABLE Person (
PersonId1 INT,
PersonId2 INT,
PRIMARY KEY (PersonId1, PersonId2)
) 发布于 2013-03-18 17:53:56
复合主键+1。为了防止重复的组合,一个额外的varchar列,例如带有唯一约束的personid1+personid2,可能是一个解决方案...
另请参阅:person data model example
https://stackoverflow.com/questions/15450379
复制相似问题