您好 我有一个主表BASECOMPANYDATA与BaseCompanyDataID作为PK。这是固有的 其他2个表CUSTOMERS& PRODUCTCOMPANIES。现在我有表格联系我 想要与其他2个人联系,因为客户和产品公司将有0或 更多联系人。所以我在CONTACTS中创建了一个FK(BaseCompanyID)并连接到了 BASECOMPANYDATA PK(BaseCompanyDataID)。但是,当我试图插入联系人 CUSTOMERS中存在的记录我收到以下错误: 错误:在表“xxxxx”上插入或更新违反外键反对“xxxxx” 详细信息:表“BaseCompanyData”中不存在Key(BaseCompanyDataID)=(17)。 此ID存在于上面继承的表(BaseCompanyData)中。 有人可以解释为什么会这样吗?
提前致谢
PS :好吧,我有4张桌子:
1.BASECOMPANYDATA,BaseCompanyDataID为PK和其他一些字段。 2.CUSTOMERS继承自上表,因此它的CustomerID为PK,并且具有BASECOMPANYDATA表的字段,即BaseCompanyDataID等。 3.PRODUCTCOMPANIES继承自BASECOMPANYDATA,因此它具有ProductCompanyID作为PK的字段和继承的表的字段,如BaseCompanyDataID等。 4.CONACACTS,ContactID为PK,BaseCompanyDataID为FK。我尝试用两种不同的方式连接表CONTACTS。一个。 CONTACTS-> BaseCompanyID with CUSTOMERS-> BaseCompanyDataID and CONTACTS-> BaseCompanyID with PRODUCTCOMPANIES-> BaseCompanyDataID b。 CONTACTS-> BaseCompanyID with BASECOMPANYDATA-> BaseCompanyDataID结果是相同的错误。关于如何使用继承创建FK的任何答案,如果有的话。提前致谢
答案 0 :(得分:3)
您是否阅读了继承文档?特别是5.8.1. Caveats
部分?
http://www.postgresql.org/docs/9.0/static/ddl-inherit.html
...
同样,如果我们要指定cities.name REFERENCES其他一些表,则此约束不会自动传播到大写。在这种情况下,您可以通过手动将相同的REFERENCES约束添加到大写来解决它。
编辑:
Postgsresql中继承仅一半实现。如果您想保存输入,请在create table
中查看like
在你的第一个问题中,我看到这个人的推荐与我说的完全相同。现在你有问题了吗?嗯......
这是我从你的转发中得到的伪sql:
base
baseid
customers(base)
baseid
id
products(base)
baseid
id
contacts
id
baseid references base(baseid)
以旧式的方式做到这一点!
base
id
customers
base_id references base(id)
id
products(base)
base_id references base(id)
id
contacts
id
base_id references base(id)