鉴于:
CREATE TABLE operation
(
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY;
);
CREATE TABLE listing
(
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
operation_id BIGINT REFERENCES operation (id)
);
CREATE TABLE listing_card
(
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
listing_id BIGINT REFERENCES listing (id),
listing_operation_id BIGINT REFERENCES operation (id),
index SMALLINT NOT NULL,
UNIQUE (listing_operation_id, index)
);
- 多个列表可能引用相同的操作。
如何确保该表listing
包含与's匹配的(id, operation_id)
组合?listing_card
(listing_id, listing_operation_id)
我想要一些类似的东西,FOREIGN KEY (listing_id, listing_operation_id) REFERENCES listing (id, operation_id)
但我不能这样做,因为(id, operation_id)
它不是唯一的(多个列表可以引用相同的操作)。
操作由不同类型的表引用。上述模式的最终目标是确保它listing_card.index
在任何列表操作中都是唯一的。单个操作可能会被 3 个不同的列表引用,但它们的卡片索引在彼此之间必须是唯一的(在整个操作中)。