postgresql - 一个字段中有多个 ID。 PostgreSQL

标签 postgresql multivalue

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

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

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

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

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

最佳答案

您可以使用数组类型的字段来存储值列表。 不过,我认为有更好的方法来组织您想要的内容。

创建一个表:role_names 和另一个roles,如下所示:

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 约束。

关于postgresql - 一个字段中有多个 ID。 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777461/

相关文章:

java - Hashmap - 单键,多值 - 如何检索?

json - Elasticsearch查询以选择包含一个字段的值的所有文档多值字段

php - 如何在不使用模式前缀的情况下访问模式中的表 (Postgres + PHP)?

sql - 如何在postgresql中修改单列的多行?

java - Hibernate Spatial 5.0.4.Final 和 PostgreSQL 几何列上的映射错误

database - 替代 MS Access 中的多值字段

database - 绑定(bind)的组合框项是指不同的字段项

reporting-services - SSRS - 多值参数 "Select All"问题

sql - 列属性的条件组

function - Postgres ON DELETE CASCADE 会在后续表上触发 ON DELETE 触发器吗?