Java 如何为复杂的递归实体设计数据以实现持久性?

Java 如何为复杂的递归实体设计数据以实现持久性?,java,database,data-structures,spring-data-jpa,Java,Database,Data Structures,Spring Data Jpa,我假设我有一个实体作为“人” 但是,同样的信息也适用于员工、客户和其他少数人 员工的结构可能是 { "UnqIdr": 125, "Department": "Chem Lab", "Person": {...} } 然而,在构建逻辑时,我们发现员工也可以是客户。因此,我们考虑如下捆绑: { //person-info "employee-info": {}, "customer-info": {} } 现在问题来了[如何查询员工信息或客户信息] 我知道这是数据设计;

我假设我有一个实体作为“人”

但是,同样的信息也适用于员工、客户和其他少数人

员工的结构可能是

{
  "UnqIdr": 125,
  "Department": "Chem Lab",
  "Person": {...}
}
然而,在构建逻辑时,我们发现员工也可以是客户。因此,我们考虑如下捆绑:

{
  //person-info
  "employee-info": {},
  "customer-info": {}
}
现在问题来了[如何查询员工信息或客户信息]

我知道这是数据设计;但是,我们正在使用Java11和SpringJPA进行同样的设计


此外,这将是设计解决方案的有效方法。即使使用NoSQL数据库也可以进行讨论。

寻找关系数据库的数据规范化

一个简单的解决方案是将Person对象存储在不同的表中,并为其分配personId字段

因此,员工结构变为: { “UnqIdr”:125, “部门”:“化学实验室”, “PersonId”:420
}

关系数据库是为这样的数据域设计的(最终的一致性适用于人……。请不要)

在这里查看一些涉及客户和员工的数据库设计:


现在,您仍然可以对这些人的公共属性进行Java继承。

因此我们走上了正确的道路。使用带有关系链接的特定域对象是正确的模式?这是我的建议
{
  //person-info
  "employee-info": {},
  "customer-info": {}
}