Я бы избегал EAV, если бы я не создавал медицинское хранилище с тысячами сотен продуктов.Наследование таблиц классов является правильным решением, и изменение схемы во время выполнения не так уж и плохая идея.
Предположим, вы создаете интернет-магазин, если у вас есть разные товары с разными атрибутами.Обычно продукт использует набор атрибутов.Используя шаблон наследования таблиц классов, вы можете иметь по одной таблице на каждый набор продуктов, наследуя общую таблицу с общими атрибутами продукта.Когда требуется новый атрибут, у вас есть две опции:
- изменить таблицу множеств и добавить новый столбец с именем атрибута
- создать новый набор (то есть новую таблицу) сновый столбец и установите текущий набор продуктов для наследования нового, добавив, таким образом, новый атрибут.
Изменение таблицы во время выполнения может действительно вызвать проблемы из-за блокировки, возникающей во время изменения.Однако, начиная с MySQL 5.6, программист может указать тип LOCK, т.е. LOCK = NONE, а также ALTER ONLINE | OFFLINE.Очевидно, что поставщики БД работают в этом направлении, чтобы обеспечить возможность чередования баз данных во время выполнения.
Проблем с блокировкой таблицы также можно избежать / минимизировать.Проблемы с блокировкой обычно возникают при изменении огромных таблиц, т.е. более 100 тыс. Записей.Однако наследование позволяет распределять продукты в разных наборах и, таким образом, иметь относительно небольшое количество записей в таблице.
Например, если у нас есть 10 различных типов продуктов, у нас есть 10 различных таблиц.Предположим, что у нас есть 10 000 товаров для каждого типа, это означает, что у нас более 100 000 товаров, однако добавление нового атрибута в набор приведет к добавлению нового столбца в таблицу, содержащую только 10 000 строк.Добавление нового столбца в таблицу с 10-тысячными строками займет меньше секунды, так что изменение схемы базы данных во время выполнения при работе с наследованием таблиц классов - действительно плохая идея?
Я был бы рад услышать большемнения здесь на этот.Спасибо, ребята.