微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带外键的唯一约束

如何解决带外键的唯一约束

我有两个包含以下列的 Postgres 表:

命令

类型
id 整数主键
名称 VARCHAR(32)

选项

类型
id 整数主键
名称 VARCHAR(32)
command_id COMMAND("id") 上的外键

我想添加一个约束,其中命令 name 列和选项 command_id 列是绑定的,这样两个命令可以共享相同的名称,前提是它们属于不同选项的一部分。我将如何做出这样的约束?不加约束,只允许后端在输入数据前做必要的检查会更好吗?

编辑:我意识到对于我的简单用例我想得太多了,存储一个 JSON 字段就足够了。但是,如果表结构碰巧更复杂,那么这个问题仍然有效。

解决方法

如果 Command 表中的 name 与 Option 列中的 name 列相同。那么选项表中的那一列是多余的,你总是可以通过你已经拥有的 FK 来获取名称 (command_id)。

但通常您可以将 composite key 用于 FK,例如:

 create table Options(
    id int primary key,name varchar(32),command_id int,foreign key fk_name (name,command_id) references Command(name,id)
);

当然,命令表中的 name 和 id 应该是候选键的一部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。