PostgreSQL -子表中的一列可以引用父表中两列的连接吗?

smdnsysy  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(135)

我有两张table。主键为(categoryID,productID)的父表:
| categoryID|产品ID|产品名称|
| - -----|- -----|- -----|
| 零零一|零零一|苹果|
| 零零一|零零二|香蕉|
| 零零二|零零一|笔记本电脑|
以及主键(id)的子表:
| id|数量|已付|
| - -----|- -----|- -----|
| 001001|二十个|真的|
| 001002|十五|真的|
| 零零二一|3|假的|
我可以通过标准PostgreSQL 15语法定义外键约束来将子表链接到父表吗?
外键约束应该能够以某种方式连接两个父列(categoryID,productID),以链接到子表的“id”列。
我尝试在子表定义中定义以下FK,但没有多大希望:
FOREIGN KEY(id)REFERENCES public.“parent table”(categoryID)||public.“parent table”(productID)
但事实上,这并没有奏效。
我不拆分子表中的id列的原因是,在填充时,我的原始数据总是有一个奇怪的格式,这使得我更方便地加载它们。
有人能帮忙吗?

7ajki6be

7ajki6be1#

您可以在父表中创建一个冗余的生成列,其中包含串联,并在该生成列上放置一个唯一约束。然后外键可以引用该列。但这将是一个很高的代价来支付一个方便:一个额外的索引和一个生成的列,这将降低所有数据修改的速度。
在加载数据时拆分值似乎很简单。如果您想不出在数据库之外执行此操作的方法,那么可以使用一个带有INSTEAD OF INSERT触发器的视图来执行拆分并插入到目标表中。

相关问题