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

Hibernate 如何设计数据库表(或休眠实体),hibernate,database-design,Hibernate,Database Design,在下面的场景中,我应该如何设计我的表 我有一个父实体,它可以有多个子实体,这很简单。现在我有了另一个实体外部引用,它与这两者都相关,这意味着父级可以有多个外部引用,子级也可以有自己的多个外部引用。我应该如何为外部引用设计表,我应该将所有内容保存在一个表中还是创建两个单独的表,一个用于父级引用,另一个用于子级引用 第一种方法是将所有引用保持在同一个表中: Parent - Parent_Id, other fields... Child - Child_Id, Parent_Id (Foreign

在下面的场景中,我应该如何设计我的表

我有一个实体,它可以有多个实体,这很简单。现在我有了另一个实体外部引用,它与这两者都相关,这意味着父级可以有多个外部引用,子级也可以有自己的多个外部引用。我应该如何为外部引用设计表,我应该将所有内容保存在一个表中还是创建两个单独的表,一个用于父级引用,另一个用于子级引用

第一种方法是将所有引用保持在同一个表中:

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
但对于父级外部引用,子\u 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关系

你的困境是一个教科书上的例子,说明什么时候你应该使用一种方法(我们可以称之为第三种方法:),但实际上它应该是第一种方法)


这样,您就不会有一个实体的两个表,也不会有您提到的外键问题。考虑更多的实体将与<代码>外部引用< /代码>相关的两种方法。Join table(联接表)是未来最可靠、最具可扩展性的方法

通常,父外部引用和子外部引用之间存在足够的差异,因此它们应该是两个独立的表。但是,您的具体需求可能会有所不同。