我应该如何在以下场景中设计表格?
我有一个父实体,可以有多个子实体,这很简单。现在我有另一个实体外部参考与这两个实体相关,这意味着父母可以拥有多个外部参考,孩子们也可以拥有自己的多个外部参考 STRONG>。我应该如何为外部引用设计表,我应该将所有表保存在一个表中,还是创建两个单独的表,一个用于父级引用,另一个用于子级引用。
将所有引用保留在同一个表中的第一种方法:
Parent - Parent_Id, other fields...
Child - Child_Id, Parent_Id (Foreign key to parent), other fields...
External Reference - Ref_Id, Parent_Id, Child_Id, other fields
但是,对于父级外部引用,child_id可以为null,因此无法使其成为外键。我必须在我的代码中维护该外键而不是DB约束。
通过在单独的表中保留引用来实现第二种方法:
Parent - Parent_Id, other fields...
Child - Child_Id, Parent_Id (Foreign key to parent), other fields...
Parent External Reference - Ref_Id, Parent_Id, other fields
Child External Reference - Ref_Id, Child_Id, other fields
如果用户需要两个级别的引用,则必须查看两个表。
实现这一目标的最佳方法是什么,这样我就可以将所有引用保存在一个地方,并在它们之间建立FK关系。
答案 0 :(得分:0)
你的困境是一个教科书的例子,当你应该使用association with a join table时(我们可以称之为第三种方法:),但它应该是第一个真正的)。
这样你就不会有一个实体的两个表,也不会有你提到的外键问题。在更多实体与ExternalReference
相关联的情况下,请考虑您的两种方法。在您的情况下,加入表是最具前瞻性和可扩展性的方法