2012-03-29 84 views
0

我正在開發一個在線網站(使用Django和Mysql)。我有一個測試表和用戶表。在數據庫中存儲的正確方法

我有表內的50個測試和每個用戶按照自己的節奏完成它們。 如何將測試狀態存儲在我的數據庫中?即來到我的腦海

一個想法是創建在用戶表中的附加列。該列包含用逗號或任何其他分隔符分隔的testid。

 
userid | username | testscompleted 
1  john  1, 5, 34 
2  tom  1, 10, 23, 25 

另一個想法是創建一個單獨的表來存儲userid和testid。所以,我只有2列但有數千行(沒有測試*沒有用戶),並且它們將一直持續增長。

 
userid | testid 
1  1 
1  5 
2  1 
1  34 
2  10 

回答

0

你的第二個選項是大大首選...你的第一個解決方案試圖通過多個值存儲在一個單一的領域,這將讓你很頭疼的道路打破normalization rules

第二個表不僅更容易嘗試添加或刪除值時保持,但也可能會表現得更好,因爲你將能夠有效地索引這些列。

0

有兩個短語應該自動取消任何數據庫的設計理念。

  • 創建每一個表[什麼]
  • 含有柱[什麼]由逗號

附表,兩列分開的 - 在正確的軌道上存在you're。

+0

但會導致表的大小增加。這是一個公共站點,假設所有用戶(比如10000)最終完成測試,將會有10000 * 50行。 – John 2012-03-30 02:41:25

+0

@John 500,000行似乎很多,但它依然是數據庫標準的一個非常小的表格。假設每行包含3個int列。這是每行12個字節。 12字節* 500k行只有* 5.7MB *。 – 2012-03-30 05:56:02

+0

@John:當你將有用的數據放入表中時,表應該會增長。 – 2012-03-30 09:54:30

相關問題