2010-12-05 79 views
1

我有一個MySQL表與我的用戶...每個用戶有像Verified(是/否),成員(是/否)等各種屬性..我不需要解釋更多。 。是一個很常見的情況......Mysql體系結構最佳實踐:用戶屬性

我一直alwasy使用來構建我的單排這樣的,也許對lazyness或僅僅是因爲我從來沒有建立大DB到目前爲止表...

userId | userName | Verified | Member 
--------------------------------------- 
    3213 | Jon  | 1  | 0 

但我想知道是否有任何優勢將其構建到單獨的表中,並在稍後創建關係,如

用戶表

userId | userName | 
------------------- 
    3213 | Jon  | 

成員表

memberId | userId | Member | 
-------------------------------- 
    555748 | 3213  | 0  | 

考證表

memberId | userId | Verified | 
---------------------------------- 
    555748 | 3213  | 1   | 

什麼是第二次選擇的真正好處?

+0

您可能想要熟悉[數據庫規範化](http://en.wikipedia.org/wiki/Database_normalization) – khachik 2010-12-05 18:28:46

回答

4

這裏沒有真正的優勢,只有缺點。表之間存在1:1的關係,現在必須加入這兩個表才能獲得用戶的驗證狀態。此外,現在還有更多可能的情況:用戶可以驗證(1)未驗證(0)或記錄可能不存在。

您最好將這些額外的字段放在同一個表中,除非存在一對多的關係。例如,用戶可以有帖子,朋友,圖片,您可以將它們存儲在單獨的表格中,因爲您不知道需要保存多少個。

+0

好極了,實際上就是我所做的,現在我明白了......謝謝! – Francesco 2010-12-06 16:40:49

2

做它的第一種方式,它消耗更少的空間,並且只要它是1:1關係,它的速度也可以提高。

0

分離的關鍵是允許一對多,多對一或多對多的記錄。只要你的數據字段都不可能包含相同的信息,平坦的表就是首選。

0

我可能會簡化一點。由於沒有指示成員/驗證的標誌是有價值的。表分離爲你做。另外,你不需要在每個表中都有userId。您可能有一個UserMember表,它包含用戶和成員的身份。所以建立這種關係就足夠了。另外,如果你有1:1的關係,你也可以在同一張表中放置標誌。具有1:x關係對於標準化更具有適用性。