banderos120
@banderos120
Играю на балалайке

Организация хранения в БД динамических полей и их значений?

Здравствуйте.
Возникла проблема на этапе проектирования хранения данных. В рабочей версии приложения, созданного на Symfony, будет присутствовать возможность добавления дополнительных полей к объектам, и редактирования этих полей. Поля стандартные - text, textarea, radio, checkbox, группы radio и checkbox, file и т.д.
Первой мыслью было сделать таким образом:
FIELDS:
- id
- type
- name
- default
- size
FIELDS_VALUE:
- id
- field_id
- value
OBJECT_FIELDS_ID:
- field_id
- object_type
Однако у одного объекта планируется полей от 15 штук, а объектов будет более 200 000 .
Вопрос в том, как правильно можно организовать такую структуру динамического изменения полей объекта ? При организации, написанной выше, проблематичен поиск по значениям, так как будет очень медленным. Конечно можно было бы вынести поля в отдельную таблицу, но при изменении полей нет желания ковырять код.
Хотя бы в какую сторону смотреть ?
  • Вопрос задан
  • 3594 просмотра
Решения вопроса 2
benbor
@benbor
Помог ответ - не забудь лайкнуть
Вы сами себе описали положительные и отрицательные стороны EAV модели. Вам просто нужно сделать прототип. 200к полей не так уж и много, а еще вопрос как часто вы ищете по полям. Нужно брать xhprof( и тп) и оптимизировать уже. Для информации: Между прочим, MAGENTO полностью построена на EAV, и на нем куча магазинов.
Ответ написан
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Можно убрать одну таблицу

FIELDS:
- id
- type
- name
- default
- size
FIELDS_VALUE:
- id
- field_id
- value
- object_type

Пользуюсь таким вариантом, поиск работает быстро на один объект приходится примерно 10-20 записей полей.
50к объектов
160к значений полей
лагов не замечено
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Terranz
@Terranz
а вот как сделаете, вам откроется восхитительный мир индексов
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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