Ще предложа противоположно мнение към повечето коментари по този въпрос. Докато EAV е ЗЛО поради всички причини, които можете да намерите подробно обяснени много пъти тук на SO и DBA.SE и другаде, има едно наистина често срещано приложение, за което повечето от нещата, които не са наред с EAV, са до голяма степен ирелевантни и (малкото) предимства на EAV са много уместни. Това приложение е онлайн продуктови каталози.
Основният проблем с EAV е, че не позволява на базата данни да прави това, което наистина е добра, което помага да се даде подходящ контекст на различни атрибути на информация за различни обекти, като ги подрежда в схема . Наличието на схема носи много, много предимства относно достъпа, тълкуването и налагането на целостта на вашите данни.
Фактът за продуктовите каталози е, че атрибутите на даден продукт са почти напълно ирелевантни за каталожната система себе си. Системите с продуктови каталози правят (най-много) три неща с продуктови атрибути.
-
Покажете атрибутите на продукта в списък на крайните потребители във формата:{attribute name}:{attribute value}.
-
Показване на атрибутите на множество продукти в решетка за сравнение, където атрибутите на различни продукти се подреждат един срещу друг (продуктите обикновено са колони, атрибутите обикновено са редове)
-
Стимулирайте правила за нещо (напр. ценообразуване) въз основа на конкретни комбинации атрибут/стойност.
Ако всичко, което вашата система прави, е да връща информация, която е семантично ирелевантна (за системата), тогава схемата за тази информация е по същество безполезна. Всъщност схемата пречи в онлайн продуктов каталог, особено ако вашият каталог има много разнообразни типове продукти, защото винаги трябва да се връщате в схемата, за да се поправите с нея, за да разрешите нови категории продукти или типове атрибути.
Поради начина, по който се използва, дори типът данни на стойността на атрибут в продуктовия каталог не е непременно (жизненоважен) важен. За някои атрибути може да искате да наложите ограничения, като "трябва да е число" или "трябва да идва от този списък {...}". Това зависи от това колко важна е последователността на атрибутите за вашия каталог и колко сложно искате да бъде внедряването ви. Разглеждайки продуктовите каталози на няколко онлайн търговци на дребно, бих казал, че повечето са готови да компромисират простотата за последователност.
Да, EAV е зло, освен когато не е.