我想要一个查找表,将两个相同的事物相互链接。假设我有一个“人”表,我想查找两个人之间的关系。我将查找的第一列是“PersonId1”,第二列是“PersonId2”,第三列是“关系”。由于关系是双向的,因此我不需要在 PlayerId 切换时重复记录。有什么方法可以让 mysql 对 PlayerId1 和 PlayerId2 组合强制唯一性,而不管它们的顺序是什么?
那有意义吗?
我想要一个查找表,将两个相同的事物相互链接。假设我有一个“人”表,我想查找两个人之间的关系。我将查找的第一列是“PersonId1”,第二列是“PersonId2”,第三列是“关系”。由于关系是双向的,因此我不需要在 PlayerId 切换时重复记录。有什么方法可以让 mysql 对 PlayerId1 和 PlayerId2 组合强制唯一性,而不管它们的顺序是什么?
那有意义吗?
简短的回答:没有。
更长的答案:如果第二个小于第一个,您可以设置一个触发器来交换两个人 id 的顺序,然后编写它们,并使用复合键。
更长的答案:并非所有人际关系都是可交换的(并非所有关系都是双向的)。“员工”或“母亲”关系呢?如果你有单独的行说 A 是 B 的朋友,B 是 A 的朋友,即使是可能是点对点的“朋友”关系也可能会更好地表示。因此,也许您想要此表上的三字段复合键。
+1 用于复合 pk。为了防止重复组合,一个额外的 varchar 列,例如 personid1+personid2 ,它有一个唯一的约束可能是一个解决方案......
另请参阅:人员数据模型示例
你的意思是你想有一个唯一的行记录PersonID1
和PersonID2
列(不管Relationship
列)?如果是这样,您可以使用复合键(多列键)。
这是一个例子:
CREATE TABLE Person (
PersonId1 INT,
PersonId2 INT,
PRIMARY KEY (PersonId1, PersonId2)
)