権限を持つユーザーにとって最適な mysql データベース モデルは何ですか?

okwaves2024-01-25  10

この質問にはすでに答えがあります: ルックアップ テーブルはどのくらい重要ですか?

(答えは7つ)

3 年前

に閉店しました。

各ユーザーが権限のリストを持つ必要があるユーザーのテーブルがあります。 別の回答では、特定のユーザーに権限を割り当てるには、ユーザー ID を持つ権限と呼ばれる 2 番目のテーブルを使用する必要があると赤色で回答しました。

userID  | permission   
--------|----------
     1  | read
     1  | write
     1  | delete

このソリューションを使用すると、ユーザーの ID を持つすべての権限を選択するだけで、特定のユーザーのすべての権限を取得できます。

これについて非効率だと思うのは、このテーブル内のさまざまなユーザーに対してすべての権限が繰り返されるという事実です。

userID  | permission   
--------|----------
     1  | read
     1  | write
     1  | delete
     2  | write <- repeating with different userid

私の場合、少なくとも 150 人のユーザーとおそらく 100 を超える権限が必要です テーブルが大きくなってしまいますか?

これは非常に一般的なケースだと思います。しかし、より良い方法が見つかりませんでした。

100x150=15k、これは決して大きくありません。たとえあなたの許可があったとしてもon フィールドの長さはレコードあたり平均 10 バイトですが、正規化モデルの場合は 1 バイト / tinyint なので、サイズの違いは約 135 KB です。実際に正規化を推進するのはテーブルのサイズではありません。

– シャドウ

2020 年 9 月 3 日 12:14



------------------------

すべての可能な権限のリストを含む新しいテーブルを作成し、それらの ID をユーザー ID にリンクするだけです。

- Permissions      ( ID     | Description  )
- User Permissions ( UserId | PermissionID )

単一ユーザーのすべての権限を選択するには

    SELECT Permissions.* 
    FROM UserPermissions 
    LEFT JOIN Permissions ON Permissions.id = UserPermissions.PermissionId
    WHERE UserPermissions.UserID = {userId}



------------------------

このように 3 番目のテーブルを作成してみてはいかがでしょうか?

userID  | other columns for users
--------|-------------------------
     1  | 
     2  | 
     3  | 

userID  | permissionID   
--------|----------
     1  | 1
     1  | 2
     1  | 3
     2  | 2

permissionID  | permissionName   
--------------|----------
           1  | read
           2  | write
           3  | delete

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。