2012-09-26 15 views
0

假設我有一個包含常規用戶名,密碼,電子郵件字段的用戶數據庫表。什麼是明智的方式來添加額外的布爾字段,以啓用/禁用任何給定用戶的功能。什麼是啓用/禁用數據庫對象功能的明智方法?

例如,

user_can_view_page_x 
user_can_send_emails 
user_can_send_pms 
etc 

添加到現有的用戶表一堆布爾列的似乎是錯誤的路要走。

回答

1

是的,我會認爲這是錯誤的做法。

我寧願創建

User_Features Table 

與列類似

UserID 
FeatureName 

,並檢查是否給定用戶在啓用/在表中輸入問題的功能。

甚至可以創建Users_Groups表,其中用戶也與組關聯,並且功能可以從組設置繼承/不允許。

+0

這似乎是有效的,謝謝!我正在考慮做同樣的事情,但擔心功能名稱可能拼寫錯誤,但後來意識到,Web應用程序(或數據庫)可能只允許通過下拉某些功能。 – TheOne

1

我會用三張表。

一個是現有的用戶表:

USER table 
---- 
user_id (pk) 
name 
email 
... 

另一種是包含可能的用戶權限表:

PRIVILEGE table 
---- 
privilege_id (pk) 
name 

最後是一個包含每個權限設置每個用戶的條目的連接表:

USER_PRIVILEGE table 
---- 
user_id (pk) (fk) 
privilege_id (pk) (fk) 
allowed 

以下是兩位用戶的一些示例數據,其中一位發送電子郵件特權和發送PMS特權,另外一視圖頁面特權:

用戶數據

USER_ID NAME EMAIL 
------- ----- ------------------- 
1  USER1 [email protected] 
2  USER2 [email protected] 

權限數據

PRIVILEGE_ID NAME 
------------ ----------- 
1    view_page_x 
2    send_email 
3    send_pms 

USER_PRIVILEGE數據

USER_ID PRIVILEGE_ID ALLOWED 
------- ------------ ------- 
1  1    'N' 
1  2    'Y' 
1  3    'Y' 
2  1    'Y' 
2  2    'N' 
2  3    'N' 
+0

三聯是否真的有必要? – TheOne

+0

@Ramin它提供了額外的數據完整性,因爲用戶只能分配給定義明確的權限集合。 –

相關問題