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.
总结以上是内存溢出为你收集整理的postgresql – 数组成员的外键约束?全部内容,希望文章能够帮你解决postgresql – 数组成员的外键约束?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)