Как правильно хранить в базе данных вложенные json объекты?

188
26 марта 2018, 22:48

Приветствую. Например, в базе данных мне нужно хранить объекты следующего вида:

{
    "id": 1,
    "order": 0,
    "descr": {
        "nom": "Слово", "gen": "Слова", "abl": "Слове"
    }
    "virtual": 1
}

Если бы не было поля descr, то всё тривиально - каждому ключу соответствует столбец в таблице. Но как хранить descr? Можно, конечно, просто хранить в таблице json, но тогда таблица не будет соответствовать правилу о том, что каждая ячейка должна хранить единственное значение.

Answer 1

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

Answer 2

Зависит от того, что вы собираетесь делать с вашими объектами. Если просто записать json в базу - прочитать json из базы, то можно ничего не делать, хранить весь json как одну строку. А если надо распарсить, разложить в БД по частям и обрабатывать части отдельно (например, делать поиск по атрибутам из descr), то сделайте две связанные таблицы. Первая будет хранить сам объект и иметь поля id, order, virtual, а вторая будет хранить описания. Поля будут, соответственно:

  • id - первичный ключ, его надо будет генерировать отдельно
  • object_id - внешний ключ, ссылка на объект
  • attribute - для названий атрибутов (nom, gen, abl)
  • value - для значений (Слово, Слова, Слове)

Для вашего json у вас будет, соответственно, одна строка в таблице объектов и 3 связанные строки в таблице описаний.

READ ALSO
Проблемы с кодировкой в C#

Проблемы с кодировкой в C#

Помогите разобраться с кодировкойХочу декодировать IBM866

204
Func в LINQ. Почему нет ошибки?

Func в LINQ. Почему нет ошибки?

Немного не догоняюВот в GroupBy описано, что я могу подать на вход функцию System

165
Проблема с float и масштаб сцены unity

Проблема с float и масштаб сцены unity

В процессе разработки иногда сталкивался что изначально был выбран размер для объектов на сцене, приходилось scale у трансформы уменьшать...

221
Как изменить размер картинки в picturebox через textbox?

Как изменить размер картинки в picturebox через textbox?

Не могу найти как можно изменять размер изображения picturebox через textbox, необходимо чтоб изменялась только картинка по размеру а не сам элементКто-нибудь...

401