如何设计数据库表(或休眠实体)

时间:2016-03-05 19:05:20

标签: hibernate database-design

我应该如何在以下场景中设计表格?

我有一个实体,可以有多个实体,这很简单。现在我有另一个实体外部参考与这两个实体相关,这意味着父母可以拥有多个外部参考,孩子们也可以拥有自己的多个外部参考 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关系。

1 个答案:

答案 0 :(得分:0)

你的困境是一个教科书的例子,当你应该使用association with a join table时(我们可以称之为第三种方法:),但它应该是第一个真正的)。

这样你就不会有一个实体的两个表,也不会有你提到的外键问题。在更多实体与ExternalReference相关联的情况下,请考虑您的两种方法。在您的情况下,加入表是最具前瞻性和可扩展性的方法