Хранение словаря <строка, строкa> в базе данных

В какой-то момент в моем коде я создаю словарь типа Dictionary<string, string>, и мне интересно, что лучший способ сохранить его в базе данных с точки зрения преобразования его в строку, а затем обратно в словарь.

Спасибо.

Ответ 1

Если вы действительно хотите сохранить полный словарь в виде одной строки, вы можете сериализовать словарь в JSON (или XML) и сохранить результат в базе данных.

Ответ 2

Здесь есть несколько вариантов.

  • Вы можете перейти по пути нормализации и использовать отдельную таблицу с парой ключей/значений столбцов.

  • Некоторые базы данных предоставляют вам тип данных, который аналогичен тому, что вам нужно. PostgreSQL имеет тип hstore, где вы можете сохранить любые пары ключ-значение, а MS SQL имеет тип данных XML, который также может использоваться с некоторым простым массированием ваших данных перед вставкой.

  • Без такого типа поддержки конкретной базы данных вы можете просто использовать столбец TEXT или BLOB и сериализовать словарь, используя формат, дружественный к DB, такой как форматы сериализации JSON, XML или языка.

Компромиссы заключаются в следующем:

  • Отдельная таблица с столбцами "ключ/значение" делает дорогой запрос и является PITA в целом, но вы получаете максимальную гибкость запросов и переносимы между базами данных.
  • Если вы используете тип словаря на базе базы данных, вы получаете поддержку в запросах (например, "выберите строки, где атрибут, хранящийся в словаре, соответствует определенному условию" ). Без этого вам остается выбирать все и фильтровать в своей программе, но
  • Вы теряете переносимость базы данных, если вы не кодируете средний слой, который абстрагирует это, и вы теряете легкость манипулирования данными в своем коде (потому что вещи "работают", как будто в вашей базе данных есть столбец с этими данными).

Базы данных NoSQL, которые " ориентированы на документы, предназначены именно для этого типа хранилища. В зависимости от того, что вы делаете, вы можете посмотреть некоторые варианты. MongoDB - популярный выбор.

Правильный выбор зависит от шаблонов запросов для данных и других нефункциональных проблем, таких как поддержка базы данных и т.д. Если вы расширите функциональность, которую вам нужно реализовать, я могу расширить свой ответ.

Ответ 3

У вас есть несколько вариантов. Вы можете сериализовать объект в XML, или JSON, как указано в @M4N. Вы также можете создать таблицу с по меньшей мере двумя столбцами: один для ключа и один для значения.

Это действительно зависит от того, как выглядят модели вашего домена и как вам нужно управлять данными. Если значения словаря или клавиши меняются (переименование IE, коррекция и т.д.) И должны отражаться на многих объектах, зависящих от данных, то создание таблицы поиска для этой карты непосредственно для словаря может быть лучше. В противном случае сериализация данных будет одной из наиболее эффективных параметров.