首页 > 解决方案 > 使用主键节点将 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 保持同步。这也将允许我进行批量插入/更新。

标签: c#jsonfirebasetsqlnosql

解决方案


严格来说不是您要问的问题,但我建议阅读有关结构化数据的 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 以了解更多关于其原因和方式的信息),但这种结构是一个不错的起点。


推荐阅读