使用主键节点将 TSQL 转换为 NoSQL
Posted
技术标签:
【中文标题】使用主键节点将 TSQL 转换为 NoSQL【英文标题】:Convert TSQL to NoSQL with primary key nodes 【发布时间】:2021-11-14 10:09:03 【问题描述】:以下 TSQL 查询结果如何以 JSON 形式返回,其中主键为 BoardId、StoreId 和 Code?p>
BoardId | StoreId | Code | Quantity |
---|---|---|---|
070 | 001 | 20011 | 2 |
070 | 006 | 20011 | 1 |
070 | 001 | 20074 | 67 |
070 | 002 | 20074 | 15 |
070 | 004 | 20074 | 51 |
转换如下所示,使用 BoardId、StoreId、Code 作为路径:
"70" :
"001" :
"20011" :
"BoardId" : 70,
"Code" : "20011",
"Quantity" : 2,
"StoreId" : "001",
"TimeStamp" : "2021-09-20T12:37:18.9300502-04:00"
,
"20074" :
"BoardId" : 70,
"Code" : "20074",
"Quantity" : 67,
"StoreId" : "001",
"TimeStamp" : "2021-09-20T12:37:18.9797415-04:00"
,
"20163" :
"BoardId" : 70,
"Code" : "20163",
"Quantity" : 3,
"StoreId" : "001",
"TimeStamp" : "2021-09-20T12:37:18.9807881-04:00"
,
"20611" :
"BoardId" : 70,
"Code" : "20611",
"Quantity" : 1,
"StoreId" : "001",
"TimeStamp" : "2021-09-20T12:37:18.9807923-04:00"
...
这可以通过使用“for JSON”的 TSQL 查询来完成吗?如果不对上面的示例进行自定义,我似乎找不到任何东西。接受其他建议。我需要让一些 SQL 表与 Firebase 保持同步。这也将允许我进行批量插入/更新。
【问题讨论】:
【参考方案1】:严格来说不是您要问的,但我建议阅读 structuring data 上的 Firebase 文档,特别是 reducing data nesting 上的部分。
在 Firebase 实时数据库中与您的 SQL 数据结构最接近的等价物是:
"70_001_20011" :
"BoardId" : 70,
"Code" : "20011",
"Quantity" : 2,
"StoreId" : "001",
"TimeStamp" : "2021-09-20T12:37:18.9300502-04:00"
,
"70_001_20074" :
"BoardId" : 70,
"Code" : "20074",
"Quantity" : 67,
"StoreId" : "001",
"TimeStamp" : "2021-09-20T12:37:18.9797415-04:00"
,
"70_001_20163" :
"BoardId" : 70,
"Code" : "20163",
"Quantity" : 3,
"StoreId" : "001",
"TimeStamp" : "2021-09-20T12:37:18.9807881-04:00"
,
"70_001_20611" :
"BoardId" : 70,
"Code" : "20611",
"Quantity" : 1,
"StoreId" : "001",
"TimeStamp" : "2021-09-20T12:37:18.9807923-04:00"
...
因此,我们在这里将三个值组合为您在 SQL 中的主键,并将它们组合到 Firebase 中每个节点的键中。这样我们就有了一个平面的节点列表,就像你在 SQL 中有一个平面的行列表一样。
数据库的行为仍然会有所不同(我建议阅读 NoSQL data modeling 并观看 Firebase for SQL developers 以了解更多关于为什么以及如何做到这一点),但这种结构是一个不错的起点。
【讨论】:
很好的答案,谢谢!也感谢您的建议。以上是关于使用主键节点将 TSQL 转换为 NoSQL的主要内容,如果未能解决你的问题,请参考以下文章