【问题标题】:MYSQL Composite Key for "FriendList"“FriendList”的 MYSQL 复合键
【发布时间】:2014-01-18 08:48:43
【问题描述】:

我有一个存储“朋友”关联的表格。所以第 1 列是用户 ID,第 2 列是朋友 ID(其中,朋友 ID 只是用户表中的另一个用户 ID。

我一直计划每个关系有两个条目。解释一下,假设用户 100 想与 200 成为朋友。我的表如下所示:

USERID = 100
FRIENDID = 200
STATUS = 'friend'

但也有

USERID = 200
FRIENDID = 100
STATUS = 'friend'

在他们接受好友请求后。这个想法是,关系是在两个方向上定义的,因此我可以根据他们是“请求友谊”还是用户想要对朋友进行分类或添加自定义注释来设置不同的状态。

我想使用 userID 和 FriendID 列作为复合键,但是如果我在两个地方有相同的 userID 和 FriendID 组合(即使它们被颠倒了),MYSQL 会死吗?

【问题讨论】:

    标签: mysql composite-primary-key


    【解决方案1】:

    您应该将 FriendID 和 UserID 作为复合键。这意味着您不能为同一友谊拥有 2 个不同的状态。 MySQL 为什么会崩溃?

    【讨论】:

    • 如果我有一行用户 ID 为 100 和朋友 ID 200,MYSQL 是否将其视为不同于用户 ID 200 和朋友 ID 100?如果两者都具有“朋友”的身份呢?两行之间的值相同,但顺序不同。我无法确定 Mysql 在这种情况下会做什么。
    • 我对其进行了测试,它似乎可以正常工作。我想我担心什么。只要键没有以相同的顺序出现且具有相同的值,它就不会抱怨。你确实说了一些关于它不喜欢相同的状态值的事情......我尝试在 PHPadmin 中手动设置它,但它似乎并不在意,所以我不确定你的意思,但它正在工作,所以谢谢!
    • 这意味着如果您尝试添加 2 行具有相同用户 ID 和相同朋友 ID 的行,第二行将失败,除非您的 INSERT 查询中有“ON DUPLICATE KEY UPDATE”子句。
    猜你喜欢
    • 2013-03-05
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多