0

我有以下结构:

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

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

每个用户都必须有一行,不多也不少。我应该创建一个新表,例如。`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表中。我的想法是正确的还是应该放在单独的表格中?很简单的问题,但我想了很久。过去我一直把“钥匙”放在Users桌子上。

4

2 回答 2

2

为了强制每个用户必须有一个角色,你应该在 users 表中添加一个 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 存储在用户表中。为了扩展,如果您希望将来支持每个用户的更多角色,您可能有 UserRoles 表。目前:

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