@codercat

Как правильно хранить большие объекты с вложенными сущностями?

Есть объект недвижимости, у него множество внутренних сущностей:
{
    "id": 1,
    "kind": "house",
    "location": {
        "latitude": 55.7178497,
        "longitude": 37.1396065,
        "country_id": 1,
        ...
    },
    "rent_offer": {
        "rub": 668687000,
        "usd": 10500000,
        "eur": 9438000,
        ...
    },
    "sale_offer": {
        "rub": 668687000,
        "usd": 10500000,
        "eur": 9438000,
        ...
    },
    "communication": {
        "sewerage_supply": "septic",
        ...
    },
    ...
}


По этим вложенным полям будут выборки.

Как обычно хранят вложенные объекты/объединяют в один?

Пока что пришли только такие идеи:
1) Завести основную таблицу objects и поделить на дополнительные objects_locations, objects_communications, ... потом связывать их джоинами.
2) В основной таблице сделать большое количество полей, но 50-100 полей не считаю удобным вариантом.
3) ???

Очень интересен опыт решения подобных задач, буду рад любым ответам :)
  • Вопрос задан
  • 932 просмотра
Решения вопроса 1
max-kuznetsov
@max-kuznetsov
Главный IT-архитектор
Очень похоже на многомерный куб. Смотрите в сторону OLAP и, соответственно, в сторону схемы БД "звезда". Хотя, в Вашем случае может быть более приемлемой "снежинка".
Создаёте одну таблицу объектов со сложным ключом, содержащим поля со ссылками на таблицы измерений. Измерения - это расположение, оферы, коммуникации и т.п. Нормализация пострадает, увеличатся затраты на регистрацию/изменение/удаление объекта, но анализ в таком кубе будет идти оптимальнее.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
Для этого предназначены внешние ключи и связи один ко многим и один к одному.
Ответ написан
xSkyFoXx
@xSkyFoXx
1) +1 предыдущему оратору;
2) Уровень нормализации данных выбирать только вам как и оценивать ущерб от избыточности.
3) Можете взять MongoDB если испытываете трудности с реляционными БД. Как раз сможете прямо туда положить свой JSON.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
У mysql 5.7 (и выше) есть возможность использования JSON и выполнения поиска по ним в нативном режиме.
Конечно же, не нужно запихивать всю структуру в одну ячейку.
Ваш пример, можно записать одной строкой в таблицу и разнести по разным ячейкам начиная с 1-го уровня: id, kind, location, rent_offer, sale_offer и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы