【问题标题】:Unique constraint with foreign key具有外键的唯一约束
【发布时间】:2021-07-25 00:31:29
【问题描述】:

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

命令

Column Type
id Integer Primary Key
name VARCHAR(32)

选项

Column Type
id Integer Primary Key
name VARCHAR(32)
command_id FOREIGN KEY on COMMAND("id")

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

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

【问题讨论】:

    标签: sql postgresql foreign-keys unique postgresql-12


    【解决方案1】:

    如果命令表中的name 与选项列中的name 列相同。那么 Option 表中的那一列是多余的,您可以随时通过 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)
    );
    

    当然,命令表中的名称和 ID 应该是候选键的一部分。

    【讨论】:

      猜你喜欢
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多