我有一组带有孩子的孩子的表,如下:
客户端(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)
代替?如果两种设置都没有规范化,那么采用标准化的方法是什么?
答案 0 :(得分:1)
不,不应重复外键,因为您可以通过简单的连接访问此信息。将它添加到孙子孙女会增加冗余,当两者失去同步时会产生问题。你的第一个设计看起来比第二个好。
根据单词property
的含义,您可能正在使用entity attribute value(EAV)模型来存储客户端属性。在某些情况下,EAV模型是合适的,但一般情况下你应该尽量避免它。如果可能,请尝试使用固定架构。
进一步阅读:
答案 1 :(得分:0)
对于PropertyDetail / Case,您不需要同时具有两个外键。这些可以导航到。
答案 2 :(得分:0)
不需要再次重复外键 - 您可以通过查看Property的ClientID来确定属性详细信息的ClientID。
您需要的所有信息都可以通过简单的连接来确定。