通常のユーザー名、パスワード、電子メール フィールドを持つユーザー データベース テーブルがあるとします。特定のユーザーの機能を有効/無効にするブール値フィールドを追加する賢明な方法は何ですか。
例えば、
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
既存のユーザー テーブルに一連のブール列を追加するのは、間違った方法のように思えます。
3つのテーブルを使用します。
1つは既存のユーザーテーブルです。
USER table
----
user_id (pk)
name
email
...
もう1つは、可能なユーザー権限を含むテーブルです。
PRIVILEGE table
----
privilege_id (pk)
name
最後に、各ユーザーの各特権設定のエントリを含む結合テーブルがあります。
USER_PRIVILEGE table
----
user_id (pk) (fk)
privilege_id (pk) (fk)
allowed
2人のユーザーのサンプルデータを次に示します。1人はメール送信特権とpms送信特権を持ち、もう1人はページ表示特権を持っています。
ユーザーデータ
USER_ID NAME EMAIL
------- ----- -------------------
1 USER1 user1@somewhere.com
2 USER2 user2@somewhere.com
特権データ
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'
はい、これは間違ったアプローチだと思います。
むしろ作成したい
User_Features Table
のような列で
UserID
FeatureName
また、特定のユーザーが問題の機能を有効にしているかどうか、またはテーブルに入力されているかどうかを確認します。
Users_Groups
ユーザーがグループに関連付けられ、グループ設定から機能を継承/禁止できるテーブルを作成することもできます。