1

我想要一个查找表,将两个相同的事物相互链接。假设我有一个“人”表,我想查找两个人之间的关系。我将查找的第一列是“PersonId1”,第二列是“PersonId2”,第三列是“关系”。由于关系是双向的,因此我不需要在 PlayerId 切换时重复记录。有什么方法可以让 mysql 对 PlayerId1 和 PlayerId2 组合强制唯一性,而不管它们的顺序是什么?

那有意义吗?

4

3 回答 3

2

简短的回答:没有。

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

更长的答案:并非所有人际关系都是可交换的(并非所有关系都是双向的)。“员工”或“母亲”关系呢?如果你有单独的行说 A 是 B 的朋友,B 是 A 的朋友,即使是可能是点对点的“朋友”关系也可能会更好地表示。因此,也许您想要此表上的三字段复合键。

于 2013-03-16T14:53:57.083 回答
0

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

另请参阅:人员数据模型示例

于 2013-03-18T09:53:56.390 回答
0

你的意思是你想有一个唯一的行记录PersonID1PersonID2列(不管Relationship列)?如果是这样,您可以使用复合键(多列键)。

这是一个例子:

CREATE TABLE Person (
    PersonId1 INT,
    PersonId2 INT,
    PRIMARY KEY (PersonId1, PersonId2)
) 
于 2013-03-16T14:35:25.193 回答