我有一个表“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,而不适用于其任何派生表。
您需要与
Boleta
e Compra
创建关系。通过删除表 CompraFisica
并添加名为 tipo
的新行来识别 compra
是“虚拟”还是“física”。
之后,您需要创建一个新关系
Boleta
e Compra
并设置表的外键 compra
考虑重新定义您的数据库结构。不要直接引用来自
CompraFisica
的派生表 CompraVirtual
和 Boleta
,而是在 tipo
表中引入一个新列,例如 Compra
,以区分“虚拟”和“物理”购买。
然后,使用链接到
Boleta
表的外键创建 Compra
和 Compra
之间的关系,从而允许您通过此公共链接引用 CompraFisica
和 CompraVirtual
。