外国钥匙是否需要出现在儿童的孩子身上?

时间:2010-09-17 19:38:58

标签: foreign-keys primary-key parent-child children

我有一组带有孩子的孩子的表,如下:

客户端(PK ClientID)是父(一对多)到

属性(PK PropertyID,FK ClientID),它是父(一对多)到

属性详细信息(PK PropDetailID,FK PropertyID)和案例(PK CaseID,FK PropertyID)。

是否应该进一步重复父表的外键?也就是说,如果我的表格看起来像这样:

客户端(PK ClientID)

属性(PK PropertyID,FK客户端ID)

PropertyDetail(PK PropDetailID,FK PropertyID,FK客户ID)

案例(PK CaseID,FK PropertyID,FK ClientID)

代替?如果两种设置都没有规范化,那么采用标准化的方法是什么?

3 个答案:

答案 0 :(得分:1)

不,不应重复外键,因为您可以通过简单的连接访问此信息。将它添加到孙子孙女会增加冗余,当两者失去同步时会产生问题。你的第一个设计看起来比第二个好。

根据单词property的含义,您可能正在使用entity attribute value(EAV)模型来存储客户端属性。在某些情况下,EAV模型是合适的,但一般情况下你应该尽量避免它。如果可能,请尝试使用固定架构。

进一步阅读:

答案 1 :(得分:0)

对于PropertyDetail / Case,您不需要同时具有两个外键。这些可以导航到。

答案 2 :(得分:0)

不需要再次重复外键 - 您可以通过查看Property的ClientID来确定属性详细信息的ClientID。

您需要的所有信息都可以通过简单的连接来确定。