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線程化影響? –