0

我正在寻找一种解决方案,以最有效的方式为社交网站设计一个表格(使用mySQL)。这里是我当前表设置了:(高达约万成员与9999级的消息给各有关成员即100个军用行)
社交网站的数据库设计。帮帮我!

 
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... 

我知道,第一个由于User_ID列具有重复值,所以规范化规则被破坏。
我宁愿为User_ID设置一个唯一的键索引列,并在新用户注册时使用Auto_Increment,从而生成矩阵格式。即。标题行中的列& Peer_ID中的User_ID。
但是在这种情况下,需要多达10000个列(对于每个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... 

我如何能创建一个更有效的表设计任何想法?
在此先感谢...

+3

不,你是对的第一次。只要user_id列和peer_id列是外键到某些“用户”表中,那么你已经明白了,没有*值*重复,只有*引用*重复。 – SingleNegationElimination

回答

2

您的第一个表格设计很好,重复行到行的值没有任何问题。我认为你误解了重复组的概念,即重复列与列之间的重复。 (这第二个设计采用。)

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

1

我做了一个邮件系统。如果您想让它像Gmail和Facebook中的对话一样很有趣。

您是否打算在单个对话中显示消息?如果不是,它非常简单。

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

+0

如果我错了,请更正我的错误,但是不会仅添加一个映射到另一个邮件主键的“答复”列,以便您轻松创建菊花链式Gmail线程化影响? –