java - 如何为复杂的递归实体设计数据以实现持久化?
问题描述
我假设我有一个实体作为“人”。
{
"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, "Department": "Chem Lab", "PersonId": 420 }
推荐阅读
- amazon-web-services - 使用 AWS API Gateway 和 Lambda,我看到的路径都以 $default 为前缀
- powershell - 对 Azure 存储表运行查询返回 403 AuthenticationFailed,但返回表中的所有条目返回 200 OK
- python - 我无法使用 pyaudio 。我无法用这个库录制声音
- android - 我需要为响应 URL 和请求 URL 创建一个单独的网页以与 iPay88 集成吗?
- html - 如何使用 curl 命令(或其他东西)等待网站上的异步处理完成
- ms-access - 在 Access 中更改表查询
- html - 在 Web 表单上,如何使用 javascript 控制台将值从“未选择”组移动到“已选择”组?
- python - 我需要帮助使用 Python/BeautifulSoup 从网页中提取嵌入式 .xlsx 链接
- c++ - 我这个函数有问题,输出结果不正确
- javascript - Vue.js 将动态 v-for 值发布到数据库(Firebase)