首页 > 解决方案 > 用于 JOINed 表的 PostgreSQL UNIQUE

问题描述

给定以下示例:

CREATE TABLE bom (
    id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    name varchar(255) NOT NULL
);

CREATE TABLE bom_item (
    id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    bom_id_fk INT REFERENCES bom(id) NOT NULL,
    pcb_identifier varchar(50) NOT NULL
)

除了使它们两者兼而有之之外,是否可以对某些事物施加UNIQUE约束? 其背后的逻辑是,a在某个 BOM 中可能只存在一次bom_item.pcb_identifierbom_id_fkPRIMARY KEY
pcb_identifier

标签: sqlpostgresqlddlunique-constraint

解决方案


在 Postgres 中,您通常会为此使用部分唯一索引

create unique index on bom_item(pcb_identifier) where(bom_id_fk = ?)

问号应替换bom_id_fk为您要为其强制唯一性的值pcb_identifier


推荐阅读