Организация хранения в БД динамических полей и их значений?
Здравствуйте.
Возникла проблема на этапе проектирования хранения данных. В рабочей версии приложения, созданного на 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 .
Вопрос в том, как правильно можно организовать такую структуру динамического изменения полей объекта ? При организации, написанной выше, проблематичен поиск по значениям, так как будет очень медленным. Конечно можно было бы вынести поля в отдельную таблицу, но при изменении полей нет желания ковырять код.
Хотя бы в какую сторону смотреть ?
Вы сами себе описали положительные и отрицательные стороны EAV модели. Вам просто нужно сделать прототип. 200к полей не так уж и много, а еще вопрос как часто вы ищете по полям. Нужно брать xhprof( и тп) и оптимизировать уже. Для информации: Между прочим, MAGENTO полностью построена на EAV, и на нем куча магазинов.
FIELDS:
- id
- type
- name
- default
- size
FIELDS_VALUE:
- id
- field_id
- value
- object_type
Пользуюсь таким вариантом, поиск работает быстро на один объект приходится примерно 10-20 записей полей.
50к объектов
160к значений полей
лагов не замечено