首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql复合主键

Mysql复合主键
EN

Stack Overflow用户
提问于 2013-03-16 22:21:57
回答 3查看 959关注 0票数 1

我想有一个查找表,链接两个相同的东西彼此。假设我有一个'Person‘表,我想要查找两个人之间的关系。我会让查找的第一列是'PersonId1‘,第二列是'PersonId2’,第三列是'Relationship‘。因为关系是双向的,所以我不需要切换PlayerId的重复记录。有没有办法让mysql对PlayerId1和PlayerId2组合执行唯一性,而不管它们的顺序是什么?

这有意义吗?

EN

回答 3

Stack Overflow用户

发布于 2013-03-16 22:53:57

简短的回答是:不。

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

更长的答案是:并不是所有的人际关系都是互换的(并不是所有的关系都是双向的)。那么“员工”或“母亲”关系呢?即使是“朋友”关系,假设是点对点的关系,如果你有单独的行,说A是B的朋友,B是A的朋友,可能会更好地表示出来。因此,您可能需要在此表上使用一个包含三个字段的组合键。

票数 2
EN

Stack Overflow用户

发布于 2013-03-16 22:35:25

您的意思是希望拥有来自PersonID1PersonID2列的唯一行记录(与Relationship列无关)?如果是这样的话,您可以使用复合键(多列键)。

下面是一个例子:

代码语言:javascript
复制
CREATE TABLE Person (
    PersonId1 INT,
    PersonId2 INT,
    PRIMARY KEY (PersonId1, PersonId2)
) 
票数 0
EN

Stack Overflow用户

发布于 2013-03-18 17:53:56

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

另请参阅:person data model example

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15450379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档