我想要一个查找表,将两个相同的东西链接到彼此。假设我有一个'人'表,我想查找两个人之间的关系。我将查找第一列为'PersonId1',第二列为'PersonId2',第三列为'Relationship'。由于关系是双向的,因此我不需要在切换PlayerId的情况下重复记录。有没有办法让mysql在PlayerId1和PlayerId2组合上强制执行唯一性,无论它们在哪个顺序?
这有意义吗?
答案 0 :(得分:2)
简短回答:不。
更长的答案:你可以设置一个触发器来交换两个人ID的顺序,如果第二个人小于第一人,然后写下它们,并使用复合键。
更长的答案:并非所有人际关系都是可交换的(并非所有关系都是双向的)。那么“员工”或“母亲”关系呢?如果你有单独的行说A是B的朋友而B是A的朋友,那么即使是“朋友”关系,大概是点对点,也可能更好地代表。所以也许你想在这张桌子上使用三场复合键。
答案 1 :(得分:0)
您的意思是您希望从PersonID1
和PersonID2
列(不管Relationship
列)获得唯一的行记录?如果是这样,您可以使用复合键(多列键)。
以下是一个例子:
CREATE TABLE Person (
PersonId1 INT,
PersonId2 INT,
PRIMARY KEY (PersonId1, PersonId2)
)
答案 2 :(得分:0)
+1。为了防止重复组合,一个额外的varchar列,例如带有唯一约束的personid1 + personid2,可能是一个解决方案......