【问题标题】:Database design for a social network site. Help!社交网站的数据库设计。帮助!
【发布时间】:2011-09-24 18:30:31
【问题描述】:

我正在寻找一种解决方案,以最有效的方式为社交网站设计表(使用 mySQL)。这是我目前的餐桌布置:

User_ID Peer_ID 消息 001 002 从 001 到 002 的消息 001 003 从 001 到 003 的消息 001 004 从 001 到 004 的消息 001 005 从 001 到 005 的消息 002 001 消息从 002 到 001 002 003 从 002 到 003 的消息 002 004 从 002 到 004 的消息 002 005 从 002 到 005 的消息 003 001 消息从 003 到 001 003 002 从 003 到 002 的消息 003 004 从 003 到 003 的消息 003 005 从 003 到 005 的消息 等等...

(最多约 10,000 名成员,每个成员有 9,999 条消息。即 1 亿行)

我知道,由于 User_ID 列具有重复值,因此规范化的首要规则之一已被破坏。
我宁愿为 User_ID 设置一个唯一的键索引列,并在新用户注册时使用 Auto_Increment,从而形成矩阵格式。 IE。列中的 User_ID 和标题行中的 Peer_ID。
但是,在这种情况下,最多需要 10,000 个列(对于每个 Peer_ID),并且无法在新用户注册时自动生成新列。见下文:

用户 ID 001 002 003 004 005 001 不适用 msg:001 至 002 msg:001 至 003 msg:001 至 004 msg:001 至 005 002 味精:002 至 001 不适用 味精:002 至 003 味精:002 至 004 味精:002 至 005 003 味精:003 至 001 味精:003 至 002 不适用 味精:003 至 004 味精:003 至 005 004 味精:004 至 001 味精:004 至 002 味精:004 至 003 不适用 味精:004 至 005 005 味精:005 至 001 味精:005 至 002 味精:005 至 003 味精:005 至 004 不适用 等等...

关于如何创建更高效​​的表格设计有什么想法吗?
提前致谢...

【问题讨论】:

  • 不,你第一次是对的。只要 user_id 列和 peer_id 列是一些“用户”表的外键,那么你就做对了,没有 values 重复,只有 references 是重复。

标签: mysql database-design indexing normalization social-networking


【解决方案1】:

您的第一个表格设计很好,从行到行重复值没有错。我认为您误解了重复组的概念,它指的是列到列的重复。 (您的第二个设计采用的。)

见http://en.wikipedia.org/wiki/First_normal_form

【讨论】:

    【解决方案2】:

    我已经完成了一个消息传递系统。如果您想让它像 Gmail 和 Facebook 中的对话一样,这很有趣。

    您是否计划在单个对话中显示消息?如果没有,那就很简单了。

    您只需要更多的文件。已读/未读标志和日期/时间。

    【讨论】:

    • 如果我错了,请纠正我,但不仅仅是添加一个映射到另一封邮件主键的“回复”列,让您可以很容易地创建菊花链式 Gmail 线程影响?
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多