Mysql
 sql >> база данни >  >> RDS >> Mysql

Проектиране на таблицата на обект-атрибут-стойност

Ще предложа противоположно мнение към повечето коментари по този въпрос. Докато EAV е ЗЛО поради всички причини, които можете да намерите подробно обяснени много пъти тук на SO и DBA.SE и другаде, има едно наистина често срещано приложение, за което повечето от нещата, които не са наред с EAV, са до голяма степен ирелевантни и (малкото) предимства на EAV са много уместни. Това приложение е онлайн продуктови каталози.

Основният проблем с EAV е, че не позволява на базата данни да прави това, което наистина е добра, което помага да се даде подходящ контекст на различни атрибути на информация за различни обекти, като ги подрежда в схема . Наличието на схема носи много, много предимства относно достъпа, тълкуването и налагането на целостта на вашите данни.

Фактът за продуктовите каталози е, че атрибутите на даден продукт са почти напълно ирелевантни за каталожната система себе си. Системите с продуктови каталози правят (най-много) три неща с продуктови атрибути.

  1. Покажете атрибутите на продукта в списък на крайните потребители във формата:{attribute name}:{attribute value}.

  2. Показване на атрибутите на множество продукти в решетка за сравнение, където атрибутите на различни продукти се подреждат един срещу друг (продуктите обикновено са колони, атрибутите обикновено са редове)

  3. Стимулирайте правила за нещо (напр. ценообразуване) въз основа на конкретни комбинации атрибут/стойност.

Ако всичко, което вашата система прави, е да връща информация, която е семантично ирелевантна (за системата), тогава схемата за тази информация е по същество безполезна. Всъщност схемата пречи в онлайн продуктов каталог, особено ако вашият каталог има много разнообразни типове продукти, защото винаги трябва да се връщате в схемата, за да се поправите с нея, за да разрешите нови категории продукти или типове атрибути.

Поради начина, по който се използва, дори типът данни на стойността на атрибут в продуктовия каталог не е непременно (жизненоважен) важен. За някои атрибути може да искате да наложите ограничения, като "трябва да е число" или "трябва да идва от този списък {...}". Това зависи от това колко важна е последователността на атрибутите за вашия каталог и колко сложно искате да бъде внедряването ви. Разглеждайки продуктовите каталози на няколко онлайн търговци на дребно, бих казал, че повечето са готови да компромисират простотата за последователност.

Да, EAV е зло, освен когато не е.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL диакритично нечувствително търсене (испански акценти)

  2. Navicat за MySQL

  3. Как да изведем грешка в MySQL функция

  4. Как да разбера коя транзакция причинява състояние на заключване на метаданните на таблицата?

  5. Изберете най-често срещаната стойност от поле в MySQL