Мне было поручено провести рефакторинг проекта, который в настоящее время использует модель EAV для хранения данных.
В некоторых реализациях основная таблица содержит несколько миллионов строк. Как вы можете себе представить, я считаю это мерзостью.
Рефакторинг обусловлен необходимостью выполнять пространственный поиск, который на самом деле не работает, когда ваши широта и долгота хранятся в виде текста через запятую в поле VARCHAR ... но я отвлекся.
Природа проекта означает, что о создании статического набора нормализованных таблиц заранее не может быть и речи. Думайте об этом как о некоем конструкторе динамических форм, где число полей в новой форме неизвестно, число вариантов раскрывающегося списка неизвестно и т. Д.
Я играю над идеей создания класса "DynamicTable", который бы содержал словарь полей и управлял динамически создаваемым набором таблиц. Кэширование уже очень хорошо реализовано (с использованием memcached), поэтому к словарю нужно обращаться только при изменении схемы (редко после первоначальной фиксации) и при перезагрузке (еще реже).
Мои первые попытки обрисовать хотя бы что-то базовое заставляют меня осознать весь масштаб того, что я хочу сделать, и мои поиски подобных проектов были довольно бесплодными.
Может кто-нибудь:
- Похвалите мой текущий подход и пожелайте мне удачи.
- Рекомендовать альтернативный подход, который лучше, даже если он не обязательно проще.
- Посоветуйте любые проекты, которые я могу посмотреть, чтобы достичь аналогичной цели (мой поиск ничего не дает!)
Ура, ребята!