【问题标题】: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