【发布时间】:2021-05-08 02:20:14
【问题描述】:
我有两张桌子。在table_b 中,我想从table_a 引用两列(不是主键)(当我加入这两个表时,我想同时加入product_id 和group_id)。我还希望这两个键的组合是唯一的。如果我在table_b 上没有主键 ID,那么这个外键本质上是一个复合键吗?在table_b 中创建这个外键对我来说有意义吗(即使它没有引用来自table_a 的主键?
在table_b 上设置如下两个约束是否有意义?
CREATE TABLE table_a(
id SERIAL PRIMARY KEY,
product_id VARCHAR, // can be null
group_id VARCHAR NOT NULL,
)
CREATE TABLE table_b(
id SERIAL PRIMARY KEY,
product_id VARCHAR NOT NULL,
group_id VARCHAR NOT NULL,
CONSTRAINT fk_key FOREIGN KEY(product_id, group_id) REFERENCES table_a(product_id, group_id)
CONSTRAINT unique_id UNIQUE (product_id, group_id);
)
注意table_a product_id 可以为空,但table_b 中的不能为空。仅当 product_id 和 group_id 不为空时,table_b 中的 table_a 的所有引用才会包括在内。谢谢!
【问题讨论】:
-
我被这句话困住了:“我想引用两列(不是主键)。”我无法想象引用两个 text 列比一个漂亮、简单的整数主键更可取的场景。
标签: sql postgresql unique-constraint