使用主键节点将 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的主要内容,如果未能解决你的问题,请参考以下文章

TSQL 将行转换为列

如何将 Tsql 标量函数转换为表函数?

如何使用节点将表单数据(文本/纯文本)转换为 json?

从任何点将米转换为纬度经度

TSQL - 更好的 INT 转换函数

如何将此 Informix 嵌套联接转换为 tsql 嵌套联接?