假設我有一個包含常規用戶名,密碼,電子郵件字段的用戶數據庫表。什麼是明智的方式來添加額外的布爾字段,以啓用/禁用任何給定用戶的功能。什麼是啓用/禁用數據庫對象功能的明智方法?
例如,
user_can_view_page_x
user_can_send_emails
user_can_send_pms
etc
添加到現有的用戶表一堆布爾列的似乎是錯誤的路要走。
假設我有一個包含常規用戶名,密碼,電子郵件字段的用戶數據庫表。什麼是明智的方式來添加額外的布爾字段,以啓用/禁用任何給定用戶的功能。什麼是啓用/禁用數據庫對象功能的明智方法?
例如,
user_can_view_page_x
user_can_send_emails
user_can_send_pms
etc
添加到現有的用戶表一堆布爾列的似乎是錯誤的路要走。
是的,我會認爲這是錯誤的做法。
我寧願創建
User_Features Table
與列類似
UserID
FeatureName
,並檢查是否給定用戶在啓用/在表中輸入問題的功能。
甚至可以創建Users_Groups
表,其中用戶也與組關聯,並且功能可以從組設置繼承/不允許。
我會用三張表。
一個是現有的用戶表:
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'
三聯是否真的有必要? – TheOne
@Ramin它提供了額外的數據完整性,因爲用戶只能分配給定義明確的權限集合。 –
這似乎是有效的,謝謝!我正在考慮做同樣的事情,但擔心功能名稱可能拼寫錯誤,但後來意識到,Web應用程序(或數據庫)可能只允許通過下拉某些功能。 – TheOne