社交网站的数据库设计。救命!

时间:2011-06-29 00:46:19

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

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

User_ID  Peer_ID   Message   
001      002       msg from 001 to 002
001      003       msg from 001 to 003
001      004       msg from 001 to 004
001      005       msg from 001 to 005
002      001       msg from 002 to 001
002      003       msg from 002 to 003
002      004       msg from 002 to 004
002      005       msg from 002 to 005
003      001       msg from 003 to 001
003      002       msg from 003 to 002
003      004       msg from 003 to 003
003      005       msg from 003 to 005
and so on...

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

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

User_ID  001             002             003             004            005
001      NA              msg:001 to 002  msg:001 to 003  msg:001 to 004 msg:001 to 005
002      msg:002 to 001  NA              msg:002 to 003  msg:002 to 004 msg:002 to 005
003      msg:003 to 001  msg:003 to 002  NA              msg:003 to 004 msg:003 to 005
004      msg:004 to 001  msg:004 to 002  msg:004 to 003  NA             msg:004 to 005
005      msg:005 to 001  msg:005 to 002  msg:005 to 003  msg:005 to 004 NA
and so on...

关于如何创建更高效​​的桌面设计的任何想法?
提前感谢...

2 个答案:

答案 0 :(得分:2)

你第一次表设计没问题,从行到行重复值没有错。我认为你误解了重复组的概念,这是指列到列的重复。 (这是你的第二个设计所使用的。)

请参阅http://en.wikipedia.org/wiki/First_normal_form

答案 1 :(得分:1)

我做过一个邮件系统。如果你想让它像Gmail和Facebook中的对话那么有趣。

您是否计划在一次对话中显示消息?如果没有,那就非常简单。

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