postgresql,如何在引用另一个表的表上插入元素,但不是引用所述表而是引用它的派生表

问题描述 投票:0回答:2

我有一个表“Compra”,从中派生出“CompraVirtual”和“CompraFisica”。我还有表“Comprobante”,从中派生出“Boleta”和“Factura”。 Comprobante 的外键以这样的方式引用 Compra,例如,Boleta 能够引用 CompraVirtual,因为由于继承,CompraVirtual 或 CompraFisica 的每一行也是 Compra 的一行。然而这个:

INSERT INTO CompraFisica (ID, Fecha, Monto_total, Medio_Pago, DNI)  VALUES ('1',CURRENT_DATE,10.5,'si','20794189');
INSERT INTO Boleta (Numero, ID, DNI) VALUES ('1','1','15806955');

不起作用。它仅在我使 Boleta 引用 Compra 而不是 CompraFisica 时才有效,指出 Compra 中没有具有所需 id 的行。我怎样才能做到这一点?

我期望 Comprobante 由于继承而能够引用 Compra 的任何派生表,但它说在尝试执行此操作时找不到这些表,并且它仅适用于 Compra,而不适用于其任何派生表。

postgresql inheritance foreign-keys
2个回答
0
投票

您需要与

Boleta
e
Compra
创建关系。通过删除表
CompraFisica
并添加名为
tipo
的新行来识别
compra
是“虚拟”还是“física”。

之后,您需要创建一个新关系

Boleta
e
Compra
并设置表的外键
compra


0
投票

考虑重新定义您的数据库结构。不要直接引用来自

CompraFisica
的派生表
CompraVirtual
Boleta
,而是在
tipo
表中引入一个新列,例如
Compra
,以区分“虚拟”和“物理”购买。

然后,使用链接到

Boleta
表的外键创建
Compra
Compra
之间的关系,从而允许您通过此公共链接引用
CompraFisica
CompraVirtual

© www.soinside.com 2019 - 2024. All rights reserved.