Mysql复合主键

时间:2013-03-16 14:21:57

标签: mysql database-design primary-key

我想要一个查找表,将两个相同的东西链接到彼此。假设我有一个'人'表,我想查找两个人之间的关系。我将查找第一列为'PersonId1',第二列为'PersonId2',第三列为'Relationship'。由于关系是双向的,因此我不需要在切换PlayerId的情况下重复记录。有没有办法让mysql在PlayerId1和PlayerId2组合上强制执行唯一性,无论它们在哪个顺序?

这有意义吗?

3 个答案:

答案 0 :(得分:2)

简短回答:不。

更长的答案:你可以设置一个触发器来交换两个人ID的顺序,如果第二个人小于第一人,然后写下它们,并使用复合键。

更长的答案:并非所有人际关系都是可交换的(并非所有关系都是双向的)。那么“员工”或“母亲”关系呢?如果你有单独的行说A是B的朋友而B是A的朋友,那么即使是“朋友”关系,大概是点对点,也可能更好地代表。所以也许你想在这张桌子上使用三场复合键。

答案 1 :(得分:0)

您的意思是您希望从PersonID1PersonID2列(不管Relationship列)获得唯一的行记录?如果是这样,您可以使用复合键(多列键)。

以下是一个例子:

CREATE TABLE Person (
    PersonId1 INT,
    PersonId2 INT,
    PRIMARY KEY (PersonId1, PersonId2)
) 

答案 2 :(得分:0)

复合pk的

+1。为了防止重复组合,一个额外的varchar列,例如带有唯一约束的personid1 + personid2,可能是一个解决方案......

另请参阅:person data model example

相关问题