【问题标题】:Mysql table layout with multiple values for same column同一列具有多个值的Mysql表布局
【发布时间】:2018-06-25 16:49:17
【问题描述】:

我正在为我的网站集成好友系统...

我对 mysql 表的一个问题是如何设置它。

我是否会为他们添加的每个朋友设置很多列,例如 freind 1、2、3、4、5 等等,并且该行将是添加他们的用户。

有没有更好的方法来做到这一点?我的第一个想法是这样做意味着一个人可以拥有的朋友数量上限......

【问题讨论】:

  • 这样做你会有一个 1 行表,不是吗?这不是真正聪明的数据库设计。我正在考虑类似 1 个表(id、friend.id、friend_id_who_added)和其他表朋友(id、名称)

标签: mysql database-design


【解决方案1】:

您对多列的建议将违反first normal form。除了人为地限制朋友的数量外,这种结构使用起来很乏味且效率低下。

您需要一个用于朋友的联结表,其中包含构成复合主键的 2 列 (userid1,userid2)。两列都与user 表有FK 关系。

在许多 RDBMS 中,您还会有一个检查约束 userid1 > userid2,因此关系只能以一种形式存储,但我相信检查约束是 somewhat broken in MySQL

【讨论】:

  • +1:唯一需要注意的是复合主键不会阻止反向重复。 IE:1,2 和 2,1 被认为是有效的复合 PK 值
  • 好的,您有任何可以学习这项技术的链接吗,谢谢
  • @carlgoder - 我的回答的要点实际上是关于标准化。值得阅读关于 firstsecondthird 正常形式的 wiki 文章。
【解决方案2】:

您将需要一个额外的表格,其中包含会员拥有的每个朋友的记录。例如:

members (id, name)
friends (member1, member2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2017-07-22
    • 1970-01-01
    • 2015-10-05
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多