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



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

{
"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数据库也是可以讨论的。

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

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

因此,员工结构变为: { "UnqIdr": 125, "部门": "化学实验室", "人 ID": 420 }

关系数据库是为这样的数据域而制作的(最终对人们来说是一致的......不请(。

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

https://www.oracletutorial.com/getting-started/oracle-sample-database/

现在,您仍然可以继承有关这些 People 公共属性的 Java。

最新更新