首页 > 解决方案 > 如何为复杂的递归实体设计数据以实现持久化?

问题描述

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

{
  "UnqIdr": 125,
  "FrstNm": "Mark",
  "LastNm": "Antony",
  "Gndr": "Male",
  "DtOfBirth": "06-09-2020",
  "CtctDtls": {
  "Addr": [
    {
      "UnqIdr": "10001",
      "Ln1": "Street name",
      "Ln2": "Block Number",
      "Ln3": "Ward number",
      "Cty": "New York",
      "ZipCd": "60034",
      "Stat": "New Jersey",
      "Ctry": "North America",
      "IsPrmy": true
    }
  ],
    "PhneNb": [
      {
        "Nm": "Principal",
        "CtryCd": "+1",
        "Nb": "1234567890",
        "IsPrmy": true
      }
    ],
    "Email": "abc@def.com",
    "CtctURL": "www.def.com",
    "SclMdia": {
      "FacebookURL": "www.facebook.com/def",
      "LinkedInURL": "www.linkedin.com/us/def",
      "TwitterURL": "www.twitter.com/3634556"
    }
  },
  "IdntyProof": [{
    "UnqIdr": 16537,
    "Ctry": "India",
    "IdntyTp": 6548,
    "IdntyIdr": "INYHGB3462",
    "IsVerified": true,
    "VldFrm": "16-01-2000",
    "VldTill": "4-12-2023"
  }],
  "PrsnlIdnty": {
    "BldGrp": "A",
    "Id":[{
      "Nt": "Mole in right arm"
    }]
  },
  "Ethncty": "Nadar",
  "Rlgn": "Hindu",
  "Ntnlty": "Indian",
  "PrvsNtnlty": [{
    "Ntnlty": "Indian",
    "IdntyProof": [{
    "UnqIdr": 16537,
    "Ctry": "India",
    "IdntyTp": 6548,
    "IdntyIdr": "INYHGB3462",
    "IsVerified": true,
    "VldFrm": "16-01-2000",
    "VldTill": "4-12-2023"
    }]
  }],
  "MrtlSts": "Married",
  "Rltsh": [{
    "RltshTp": "Spouse",
    "UnqIdr": 134
  },{
    "RltshTp": "Divorcee",
    "UnqIdr": 130
  }]
}

但是,相同的信息适用于员工、客户等。

员工的结构可能是

{
  "UnqIdr": 125,
  "Department": "Chem Lab",
  "Person": {...}
}

但是,在构建逻辑时,我们发现员工也可以是客户。因此,我们想到了捆绑如下:

{
  //person-info
  "employee-info": {},
  "customer-info": {}
}

现在问题来了[如何查询员工信息或客户信息。

我知道这是数据设计;但是,我们同样使用 Java 11 和 Spring JPA。

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

标签: javadatabasedata-structuresspring-data-jpa

解决方案


使用关系数据库寻找数据规范化。

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

因此员工结构变为: { "UnqIdr": 125, "Department": "Chem Lab", "PersonId": 420 }


推荐阅读