在PostgreSQL中为“部分”主键添加外键约束

时间:2010-02-17 13:25:12

标签: database postgresql foreign-keys constraints

我正在尝试向PostgreSQL 8.4数据库中的表添加外键约束,但它失败了,因为目标字段虽然是多列主键的一部分,但它本身并不是唯一的。

数据库具有以下结构:

表1(主要ID的名称):

PrimaryType, Name
[Primary key = "PrimaryType"]

表2(每种主要ID的子ID名称):

PrimaryType, SubType, Name
[Primary key = "PrimaryType, SubType"]
[Foreign key = "Table2.PrimaryType = Table1.PrimaryType"]

表3(包含主要和子ID的日志):

PrimaryType, SubType, DATA1, DATA2, ..., DATAN
[Foreign key = "Table3.PrimaryType = Table1.PrimaryType" AND "Table3.SubType = Table2.SubType"]

显然,表3的外键的第二部分是造成问题的原因。我只需要确保日志中的主要和子类型ID对是有效的组合。

提前致谢。

1 个答案:

答案 0 :(得分:2)

对于表3的外键,请更改:

foreign key PrimaryType references Table1(PrimaryType)
foreign key SubType references Table2(Subtype)

foreign key (PrimaryType, SubType) references Table2(PrimaryType, SubTYpe)