我有以下结构:
-- 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
表中。
答案 0 :(得分:2)
要强制每次使用 只有一个角色,您应该将role_id添加到users表,使其成为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);
答案 1 :(得分:0)
如果规范不会更改,则可以将RoleID存储在用户表中。为了扩展,如果您希望将来为每个用户支持更多角色,您可能拥有UserRoles表。现在:
Users(UserID, UserName, ..... RoleID);