Мы должны перепроектировать устаревшую базу данных POI от MySQL до PostgreSQL. В настоящее время все объекты имеют атрибуты 80-120 +, которые представляют индивидуальные свойства.
Мы попросили рассмотреть гибкость, а также хороший подход к разработке новой базы данных. Однако новый дизайн должен позволять:
-
n нет. атрибутов/свойств для любого объекта, то есть никаких атрибутов для любого объекта не являются фиксированными и могут меняться на регулярной основе.
-
позволяют админам контента добавлять новые свойства существующим сущностям на лету, используя интерфейсы администратора, а не постоянно вносить изменения в схему db.
Существует довольно много дискуссий о проблемах с производительностью EAV, но если мы не будем использовать гибридный EAV, мы закончим:
- имея много пустых столбцов (мы по-прежнему добавляем новые столбцы, даже если 99% данных не имеют этих свойств)
- тратить больше времени на поддержку базы данных. когда атрибуты продолжают меняться.
- не позволяет админам контента добавлять новые свойства к существующим объектам.
В любом случае, что мы думаем о новом дизайне (включая базовый ERD):
-
Имеют отдельные таблицы для каждого объекта, содержащего некоторую базовую информацию, которая является эксклюзивной, например. id, имя, адрес, контакт, созданный и т.д.
-
Имейте тип атрибута 2 атрибута и атрибут для хранения информации о свойствах.
-
Свяжите каждую сущность с атрибутом, используя отношение "многие-ко-многим".
-
Сохранять адреса в другой таблице и ссылаться на сущности, используя внешний ключ.
Мы думаем, что это позволит нам быть более гибкими при добавлении, удалении или обновлении свойств.
Эта конструкция, однако, приведет к увеличению числа соединений при извлечении данных, например, для отображения всех "атрибутов" для данного стадиона у нас может быть запрос с 20 + объединениями для извлечения всех связанных атрибутов в одной строке.
Каковы ваши мысли об этом дизайне, и каковы будут ваши советы по его улучшению.
Спасибо, что прочитали.