0

私は次の構造を持っています:

-- Table Users ---
-  User1
-  User2
-  User3

-- Table Roles ---
-  Role1
-  Role2
-  Role3
-  Role4

すべてのユーザーは、多かれ少なかれではなく、1 つの行を持つ必要があります。たとえば、新しいテーブルを作成する必要があります。「user_roles」を作成し、次のようにユーザーの役割をそこに保存します。

-- Table user_roles --
-  user_id = User1     role_id = Role2
-  user_id = User2     role_id = Role1
-  user_id = User3     role_id = Role4

または、ユーザーの役割をUsersテーブルに保存する必要がありますか? Users各ユーザーには常に 1 つのロールしかないため、テーブルに保持しない理由はありません。私は正しく考えていますか、それとも別の表にすべきですか? 非常に単純な質問ですが、私は長い間疑問に思っていました。過去に、私は「鍵」をUsersテーブルに保管していました。

4

2 に答える 2

2

すべての使用必ず 1 つのロールが必要であることを強制するには、ユーザー テーブルに role_id を追加し、それnot nullを作成してロール テーブルを参照する必要があります。

create table roles 
(
  id integer primary key,
  role_name varchar(50) not null
);

create table users
(
   id integer not null primary key,
   username varchar(50) not null,
   role_id integer not null,
   ... other columns ...
);
alter table users 
   add constraint fk_users_rol 
   foreign key (role_id) references roles(id);
于 2012-11-24T13:49:04.113 に答える
0

仕様が変更されない場合は、RoleID を user テーブルに格納できます。拡張のために、将来、ユーザーごとにより多くのロールをサポートしたい場合は、UserRoles テーブルを使用できます。今のところ:

Users(UserID, UserName, ..... RoleID);
于 2012-11-24T13:49:42.680 に答える