Ответ 1
Я собираюсь предложить противоположное мнение большинству комментариев по этому вопросу. В то время как EAV - это EVIL по всем причинам, которые вы можете найти много раз здесь, на SO и DBA.SE и в другом месте, есть одно действительно распространенное приложение, для которого большинство вещей, которые не соответствуют EAV, в значительной степени неактуальны, и ( мало) преимущества EAV очень многолетние. Это приложение является онлайн-каталогами продуктов.
Основная проблема с EAV заключается в том, что он не позволяет базе данных делать то, что действительно хорошо делает, что помогает придать надлежащий контекст различным атрибутам информации о разных объектах, упорядочив их в схеме. Наличие схемы дает много преимуществ для доступа, интерпретации и обеспечения целостности ваших данных.
Факт о каталогах продуктов заключается в том, что атрибуты продукта почти полностью не относятся к самой системе каталогов. Системы каталогов продуктов (не более) имеют три свойства с атрибутами продукта.
-
Отобразить атрибуты продукта в списке конечным пользователям в форме: {имя атрибута}: {значение атрибута}.
-
Отображение атрибутов нескольких продуктов в сетке сравнения, где атрибуты разных продуктов выстраиваются друг против друга (продуктами обычно являются столбцы, обычно атрибуты - строки)
-
Правила для чего-либо (например, ценообразование) на основе конкретных комбинаций атрибутов и значений.
Если все, что делает ваша система, сбрасывает информацию, которая семантически не имеет отношения к системе, тогда схема для этой информации в основном бесполезна. Фактически схема мешает в онлайн-каталоге продуктов, особенно если ваш каталог имеет много разных типов продуктов, потому что вам всегда нужно вернуться в схему, чтобы поработать с ним, чтобы разрешить новые категории товаров или типы атрибутов.
Из-за того, как он используется, даже тип данных значения атрибута в каталоге продукта не обязательно (жизненно) важен. Для некоторых атрибутов вы можете наложить противоречия, например "должно быть числом" или "должно быть из этого списка {...}". Это зависит от того, насколько важна согласованность атрибутов в вашем каталоге и насколько сложна ваша реализация. Если посмотреть на каталоги продуктов нескольких интернет-магазинов, я бы сказал, что большинство из них готовы к простоте для согласованности.
Да, EAV - это зло, за исключением случаев, когда это не так.