加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 数组成员的外键约束?

发布时间:2020-12-13 16:19:45 所属栏目:百科 来源:网络整理
导读:假设我有一个包含工作角色的表: CREATE TABLE roles( "role" character varying(80) NOT NULL,CONSTRAINT "role" PRIMARY KEY (role)); 假设我还有一个表,用户和每一行(特定用户)可以拥有任意数量的工作角色: CREATE TABLE users( username character vary
假设我有一个包含工作角色的表:
CREATE TABLE roles
(
  "role" character varying(80) NOT NULL,CONSTRAINT "role" PRIMARY KEY (role)
);

假设我还有一个表,用户和每一行(特定用户)可以拥有任意数量的工作角色:

CREATE TABLE users
(
  username character varying(12) NOT NULL,roles character varying(80)[] NOT NULL,CONSTRAINT username PRIMARY KEY (username)
);

我应该确保users.roles []的每个成员都存在于roles.role中.在我看来,我想要的是对users.roles []的每个成员的外键约束,如果引用roles.role.

postgres似乎不太可能.我是以错误的方式看待这个吗?建议的“正确”方法是什么?

支持数组外键的目的是将其引入PostgreSQL 9.3,但由于性能和可靠性问题,它没有为发布做出决定.似乎没有为9.4工作.

此时,您需要坚持使用“连接表”来模拟m:n关系的常用关系方法.

CREATE TABLE user_roles (
   username character varying(12) references users(username),"role" character varying(80) references roles("role"),PRIMARY KEY(username,"role")
);

我建议在这种情况下使用surrogate keys,而不是直接在连接表中存储用户名/角色名称.第一次要重命名用户或角色时,您会很高兴使用了代理键.只需对角色设置一个唯一约束.“role”和users.username.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读