Преобразование TSQL в NoSQL с узлами первичного ключа

# #c# #json #firebase #tsql #nosql

Вопрос:

Как можно вернуть следующие результаты запроса TSQL в формате JSON, где первичными ключами являются boardId, StoreID и код?

Бордид StoreID Код Количество
070 001 20011 2
070 006 20011 1
070 001 20074 67
070 002 20074 15
070 004 20074 51

Преобразование будет выглядеть следующим образом: в качестве пути используется код boardId, StoreID, код:

 "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"       
      }...
 

Можно ли это сделать с помощью запроса TSQL с использованием «для JSON»? Кажется, я ничего не могу найти, не сделав что-то на заказ в приведенном выше примере. Открыт для альтернативных предложений. Мне нужно синхронизировать некоторые таблицы SQL с Firebase. Это также позволило бы мне выполнять массовые вставки/обновления.

Ответ №1:

Не совсем то, о чем вы спрашиваете, но я рекомендую прочитать документацию Firebase по структурированию данных, в частности раздел об уменьшении вложенности данных.

Ближайшим эквивалентом вашей структуры данных SQL в базе данных Firebase в реальном времени является:

 "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 и посмотреть Firebase для разработчиков SQL, чтобы узнать больше о том, почему и как это происходит), но эта структура является достойной отправной точкой.

Комментарии:

1. Отличный Ответ, Спасибо! Также спасибо за рекомендации.