Как лучше использовать РСУБД для данных с динамической струк
От: vsb Казахстан  
Дата: 28.09.18 09:25
Оценка:
Например есть разные типы сущностей, у них разные дополнительные поля (к примеру витрина в магазине, типов товаров может быть очень много вплоть до разделения "процессор", "оперативная память" и тд) и у каждого типа могут быть свои характеристики, по которым потенциально может быть необходимо сортировать, фильтровать и тд. Как для такой задачи лучше организовать схему БД?

1. Для каждой сущности держать отдельную таблицу (ну или одну общую и к ней джойнится куча отдельных). Соответственно при редактировании списка столбцов базе данных высылаются команды вроде alter table. Плюс — БД хорошо делает то, для чего она вроде как предназначена. Минус — замороченность софта а также отдельный запрос на каждую сущность, если грузятся сущности разных типов (ну или миллион left join-ов).

2. Данные хранятся в одной таблице вида (row_id, attr_id, value), по сути таблица разворачивается по столбцам. Плюс — схема БД не меняется, вроде как работать с таким попроще. Минус — наверняка будут запросы, которые тяжело будет оптимизировать на стороне БД.

3. Все динамические столбцы упаковываются в JSON и хранятся в одном поле. Подразумевает современную БД, которая умеет смотреть внутрь JSON-а, например PostgreSQL. Вроде на первый взгляд сплошные плюсы, тут и сортировку можно делать и фильтрацию и индекс создать. Но я с таким никогда не работал и наверняка есть минусы.
Отредактировано 28.09.2018 9:26 vsb . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.