2010-11-23 1320 views
1

你好 我有一个主表BASECOMPANYDATA BaseCompanyDataID作为PK。这是由 2其他表格客户& PRODUCTCOMPANIES。现在我有了我的联系人想要连接2个客户,产品公司将有0或 更多的联系人。所以我在CONTACTS中创建了一个FK(BaseCompanyID),并连接到 BASECOMPANYDATA PK(BaseCompanyDataID)。但是,当我试图插入 客户端中存在的记录时,出现以下错误: 错误:插入或更新表“xxxxx”违反外键约束“xxxxx” 细节:键(BaseCompanyDataID)=( 17)不存在于表“BaseCompanyData”中。 此ID存在于上述继承的表(BaseCompanyData)中。 有人可以解释为什么会发生这种情况?postgres错误:插入或更新表“xxxxx”违反外键约束“xxxxx”

在此先感谢

PS:嗯,我有4个表:

1.BASECOMPANYDATA与BaseCompanyDataID作为PK和其他一些领域。 2.客户从上面的表中继承,因此它具有CustomerID作为PK并且具有BASECOMPANYDATA表的字段,即BaseCompanyDataID等。 3.PRODUCTCOMPANIES从BASECOMPANYDATA继承,因此它具有字段ProductCompanyID作为PK和继承的字段表格,如BaseCompanyDataID等 4.与ContactID作为PK和BaseCompanyDataID作为FK的联系。我试图用两种不同的方式连接桌面联系人。一个。 CONTACTS-> BaseCompanyID与CUSTOMERS-> BaseCompanyDataID和CONTACTS-> BaseCompanyID与PRODUCTCOMPANIES-> BaseCompanyDataID b。 CONTACTS-> BaseCompanyID与BASECOMPANYDATA-> BaseCompanyDataID结果是相同的错误。如果有的话,我可以使用继承来创建FK。在此先感谢

+0

如果您在您的问题中添加了换行符,并且可能从您的表定义中选择了一个片段,那就太好了。 – 2010-11-23 05:18:17

回答

3

您是否阅读了继承文档?特别是5.8.1. Caveats部分?

http://www.postgresql.org/docs/9.0/static/ddl-inherit.html

...

Similarly, if we were to specify that cities.name REFERENCES some other table, this constraint would not automatically propagate to capitals. In this case you could work around it by manually adding the same REFERENCES constraint to capitals.

编辑:

继承只有一半Postgsresql实施。如果你想保存打字检查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) 
+0

这是我从SQL Server开始的,但我认为使用PostgreSQL的继承是很好的。似乎我会回到我在SQL Server中完成的工作。继承有很多问题。 – ekekakos 2010-11-24 06:21:43

相关问题