【发布时间】:2021-12-31 02:03:56
【问题描述】:
在我的项目中,前端需要,遵循这种格式的 JSON 数据。所以我为用户及其地址创建了两个表,
{
"data":{
"user":{
"cif":"102345678",
"username":"user_00002",
"fname":"Kevin",
"lname":"",
"contactDetails":{
"permanentAddress":{
"Line1":"no 1",
"Line2":"cross lane",
"city":"dilhi"
},
"correspondenceAddress":{
"Line1":"no 2",
"Line2":"main street",
"city":"dilhi"
},
"mobile":"32323",
"email":"tets1@.com"
}
}
}
}
所以我打算用这个表结构,
USER_TABLE
+------------+-------+-------+------------+--------+
| USERNAME | FNAME | LNAME | EMAIL | MOBILE |
+------------+-------+-------+------------+--------+
| user_00002 | Jhone | sean | tets1@.com | 32323 |
+------------+-------+-------+------------+--------+
| user_00003 | Kevin | Niga | tets2@.com | 23232 |
+------------+-------+-------+------------+--------+
| user_00005 | Mal | Ruvaw | tets3@.com | 34343 |
+------------+-------+-------+------------+--------+
USER_ADDRESS
+------------+----------------+-------+-------------+----------+
| USERNAME | ADDRESS_TYPE | LINE1 | LINE2 | CITY |
+------------+----------------+-------+-------------+----------+
| user_00002 | PERMANENT | no 1 | cross lane | dilhi |
+------------+----------------+-------+-------------+----------+
| user_00002 | CORRESPONDENSE | no 2 | main street | dilhi |
+------------+----------------+-------+-------------+----------+
| user_00003 | PERMANENT | no 33 | cross lane | jakartha |
+------------+----------------+-------+-------------+----------+
| user_00003 | CORRESPONDENSE | no 35 | main street | jakartha |
+------------+----------------+-------+-------------+----------+
我这样创建地址表是因为,每个用户都有两个地址,一个是永久的,另一个是对应的。那么这个很好的表结构可以处理这个问题吗?如果是,那么我需要从 sql 查询中获取以下输出,我该怎么做?
【问题讨论】:
-
那么,你的计划是什么?您有 JSON 输入。然后你在问题的最后向我们展示了一个表格,你需要从 JSON 中获取那个表格吗?这很简单。但是,您说您的真正计划是拥有这两个单独的表。您是否将问题末尾的表格用作中间(临时)步骤,从中创建两个不同的表格?你在这一步也需要帮助吗?
-
@mathguy 在这个项目中有点搞笑。我们的前端团队需要上面的 json 数据,他们不想改变它。所以仍然没有创建数据库结构。所以我的计划是像上面那样创建数据库表(USER_TABLE 和 USER_ADDRESS) 我只是想验证表结构的好坏,以及需要一些查询来检索显示表数据的图像。
-
两表结构就好了。您在帖子末尾显示的单表结构也很好,假设“地址类型”不能是“主要住所”或“通讯地址”以外的任何内容。如果地址类型可以变化——关键是,如果它只能从数据中知道——那么问题就更复杂了,两个表的排列是强制性的。 (两表排列在所有情况下都很好,但如果地址类型可能不同并且只能从数据中得知,则必须这样做。)
-
要从 JSON 输入生成两个表,您可以使用一个临时表将 JSON 数据展开到您在问题末尾显示的单表输出,然后生成数据这个单一的临时表中的两个表。或者,您可以直接从 JSON 填充两个表,但这需要两次解析 JSON。如果您有大量数据,那么选择可能很重要。如果您不这样做,则两次解析 JSON 可能是更简单的选择。那么,您希望自己的真实案例是什么?
-
除非...我误解了这个问题吗?也许:您将创建数据库,您将拥有这两个表,它们将包含数据,然后您想知道如何从表数据生成 JSON?如果是这样,那么这就是 JSON 函数的简单应用,但答案很大程度上取决于您的 Oracle 版本。你用的是什么版本?