字段中的多个ID。 PostgreSQL的

时间:2013-09-13 02:44:56

标签: postgresql multivalue

所以,我正在使用数据库系统,用户可以随时注册,登录和更新他/她的详细信息。 该数据库包括5个角色:

1. Public
2. Member
3. Moderator
4. Coordinator
5. Admin

我希望能够为用户分配多个角色。例如,Admin也可以是成员。因此,在数据库中应该显示:

User_id    |    Role_ID
------------------------
user1      | 2, 5

^可以在postgresql中添加多值id吗?

2 个答案:

答案 0 :(得分:2)

您可以使用类型数组的字段来存储值列表。 但是我认为有更好的方法来组织你想要的东西。

制作一个表: role_names 和另一个角色,如下所示:

CREATE TABLE role_names
(
  id serial NOT NULL,
  name text NOT NULL,
  CONSTRAINT role_names_pkey PRIMARY KEY (id),
  CONSTRAINT role_names_name_key UNIQUE (name)
);

CREATE TABLE roles
(
  user_id bigint NOT NULL,
  role_id bigint NOT NULL,
  CONSTRAINT roles_pkey PRIMARY KEY (user_id, role_id),
  CONSTRAINT roles_role_id_fkey FOREIGN KEY (role_id)
      REFERENCES role_names (id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT
);

现在,在表 role_names 中,您可以放置​​所有要拥有的角色。 在表角色中,您可以为任何用户分配或删除任意数量的角色。 此外,您可以在表角色中搜索特定用户或特定角色 - 比我认为的搜索阵列更加整洁和快捷。

也可以为user_id字段添加FK约束。

答案 1 :(得分:1)

是的,您可以使用int array来存储角色列表。

以下是相关问题 - Junction tables vs foreign key arrays?