sql - 如何在 Postgresql 数据库的一列中制作一组 id?
问题描述
我在 postgres 表中有权限表
CREATE TABLE public.permissions
(
permission_id integer NOT NULL,
crud_signature text COLLATE pg_catalog."default" NOT NULL,
object_id uuid NOT NULL,
object_type text COLLATE pg_catalog."default" NOT NULL,
include_subcategories boolean NOT NULL,
CONSTRAINT permissions_pkey PRIMARY KEY (permission_id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.permissions
OWNER to postgres;
并有 ROLES 表。每个角色都有多个权限。
CREATE TABLE public.roles
(
role_id integer NOT NULL,
role_name text COLLATE pg_catalog."default" NOT NULL,
role_description text COLLATE pg_catalog."default",
permissions integer[],
CONSTRAINT roles_pkey PRIMARY KEY (role_id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
将表 public.roles 所有者更改为 postgres;
当我尝试创建一个类似Posgrespermissions
类型的外键列时,给我一个错误,即这些字段具有无与伦比的类型 -并且integer[]
integer
integer[]
我应该怎么办?
解决方案
我实际上建议不要在这里使用数组。相反,使用联结表来表示每个角色-权限关系,如下所示:
CREATE TABLE roles_permissions (
role_id integer NOT NULL,
permission_id integer NOT NULL,
CONSTRAINT rp_pkey PRIMARY KEY (role_id, permission_id)
);
roles
然后通过删除权限数组来修改当前表。您当前的方法使用非规范化数据,因为您试图将一组权限存储在一个数组中,用于每个单独的角色。
推荐阅读
- python - 我可以获得模块别名并且它是全局导入的吗?
- python-3.x - 如何修复非可迭代套接字对象的类型错误
- ios - 当我从基类以编程方式替换 UIViewController 的根 UIView 时,我的 Outlets 为零
- r - 子集 data.frame 与 data.table
- powershell - Powershell - 命令在界面中有效,但不在脚本中
- javascript - 跨域读取阻塞 (CORB) 问题是准确的,即使我使用 JSONP
- javascript - Jinja - 将元素转换为字符串并调用 JS 函数
- node.js - 使用谷歌云功能将令牌转移给用户
- c++ - 即使没有明确包含在任何文件中,也强制静态类成员初始化
- spring-boot - MQRC_CLIENT_CONN_ERROR 与 IBM MQ 在 Docker 中使用 CCDT + Spring Boot