c# - 使用主键节点将 TSQL 转换为 NoSQL
问题描述
以下 TSQL 查询结果如何以 JSON 形式返回,其中主键为 BoardId、StoreId 和 Code?
BoardId | 商店 ID | 代码 | 数量 |
---|---|---|---|
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 保持同步。这也将允许我进行批量插入/更新。
解决方案
严格来说不是您要问的问题,但我建议阅读有关结构化数据的 Firebase 文档,特别是有关减少数据嵌套的部分。
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 数据建模并观看面向 SQL 开发人员的 Firebase 以了解更多关于其原因和方式的信息),但这种结构是一个不错的起点。
推荐阅读
- elasticsearch - 索引创建成功,但不会重新索引新数据
- html - 为什么无论我把它放在哪里,关闭 div 标签都不起作用?
- javascript - useEffect 没有在 Hoc 内部触发
- java - 这些 SQL 查询是否等效?哪个更好还是有更好的选择?
- java - 获取resttemplate请求期间的httpclienterror
- symfony - Symfony 4 路由问题 -- debug:router 显示路由,route:match 说'没有路由匹配路径 X'
- sql - 查询以选择具有最小不同列值的行
- beagleboneblack - u-boot 中未探测 pwm-backlight 驱动程序
- javascript - Array.prototype.fill({}) 引用
- .net - 在日期时间列中强制执行精度