2013-10-13 79 views
0

我有一個數據庫,通常用戶是中心對象。
在數據庫中我有一個表rolesusers in roles,所以我可以給用戶不同的權限。
但現在我有一個疑問。
我一個數據庫之前與結構看到這樣的(用戶是在1:1相對於其他表):1對1數據庫設計

User{UserId, Username, Email etc.} 
Admin{UserId, some specific columns} 
Child{UserId, some specific columns} 
Admin{Parent, some specific columns} 

和其他表不通過用戶表,但通過Admin, Child and admin.
連接到用戶因爲現在我設計我的數據庫我有用戶和用戶可以是Admin, CompanyManager and Professor
我不知道應該像上面展示的那樣設計表格還是僅僅依靠角色?
第一種方法的優點是什麼?
而且在我的商業模式中,用戶不一定是CompanyManager或Professor,所以這實際上是1到0或1的設計。
用這樣的場景設計數據庫的好方法是什麼?

+1

這不是1:1的關係,它是1:0/1 –

回答

1

對於某些類型的用戶具有特定表的優點是存儲僅與該類用戶相關的信息。

在你的榜樣,

  • 也許所有用戶都將有一個經理 - 這樣的經理ID將在用戶欄去。
  • 經理有權查看某些信息,因此這將通過角色處理。
  • 只有教授纔會擁有主題或「HasTenure」屬性。所以這些信息將放在教授的桌子上。使用這種方法,您不需要在用戶表中有一個「主題」列,只要它適用於某個特定的用戶子集。因此,您避免了用戶表中的函數依賴關係,並且違反了第三範式。
+0

好吧,這個概念對我來說非常重要,因爲我發現這不是壞習慣。一個問題:我有一個用戶表和一般用戶列。我需要一些其他用戶,但需要一些額外的列。從你的答案我明白,最好的方法是創建與用戶表1到1的表。但是,當我在系統中註冊新用戶時,是否需要將他添加到所有那些1:1表中,或者我可以以某種方式使其成爲可選項?例如,註冊後只保存數據給用戶,後來根據用戶請求將其添加到教授例如? – 1110

+0

@ 1110您只能在Professors表中爲教授用戶創建條目 - 用戶和教授之間的關係通常表示爲1:0。如果您將所有用戶添加到教授表中,無論是否是教授,那麼對此設計都沒有任何益處:) – podiluska

0

我更喜歡這種方法:

enter image description here

通過這種方式,你可以很容易地組角色進行分類,並將它們分配給用戶。