多对多个约束到同一个父表

时间:2013-09-06 21:55:25

标签: postgresql database-design many-to-many constraints

我试图限制两个实体之间的多对多关系确保这些实体共享相同的额外父实体。

即Job,Claim,Category,ClaimCategory

Claim有一个Job,Category有一个Job,ClaimCategory有一个Claim和一个Category。

ClaimCategory行必须确保Claim和Category都属于同一个Job。

我所做的是将ClaimJobId和CategoryJobId列添加到ClaimCategory表中。 Claim的外键是(ClaimId,ClaimJobId),Category的外键是(CategoryId,CategoryJobId)。然后我添加一个约束,确保ClaimJobId = CategoryJobId。

这是普遍接受的最佳做法吗?在连接行中冗余地指定JobId似乎是错误的。

如果该引擎提供任何独特的选项,我正在使用postgresql。

感谢。

1 个答案:

答案 0 :(得分:1)

我认为更好的解决方案是在Claim的(ClaimId,JobId)和Category的(CategoryId,JobId)上添加一个唯一约束,然后我只需要在连接表中有一个JobId。我可以将连接中的外键分别为(CategoryId,JobId)和(ClaimId,JobId)。