为一行关系创建关系表?

时间:2012-11-24 13:44:31

标签: mysql database relationship

我有以下结构:

-- 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表中。

2 个答案:

答案 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);