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

Дизайн на база данни:опции за EAV?

Макар и минималистична, както е показано, таблицата с атрибути на Model2 въвежда концепцията за мета-данни в микса, с всичко добро, което идва от него. Има и други предимства на Model2, например повишаването на производителността свързано с по-малък размер на редове (от таблицата със стойности), но бих искал да се съсредоточа върху концепцията за метаданни.

Дори както е Таблицата с атрибути на Model2 представлява хранилище на всички валидни атрибути (с model1 ще трябва да изпълните своеобразна обобщена заявка, за да получите такъв списък). Също така и както е , хранилището е достатъчно, за да въведе ограничения за външни ключове за да подпомогне поддържането на целостта на набора от данни (с модел 1 ще са необходими външни форми на валидиране на стойностите, съхранени в колоната с атрибути.

С няколко прости допълнения, таблицата с атрибути може да се превърне в универсално хранилище, което може да се използва за различни цели. Например таблицата може да включва някои от следните

  • информация, като например удобно за показване име на всеки атрибут
  • някои флагове, указващи типа на полето (числова спрямо низ срещу дата и т.н.), за диференцирана обработка/обработка
  • конкретната таблица със стойности, където се съхранява основният атрибут (моделът показва само една таблица, но оптимизацията/мащабирането понякога изисква разделяне на таблиците)
  • фактът, че атрибутът може да се съхранява като собствена колона в таблицата „Стойност“ (отново форма на оптимизация, по същество извличаща най-доброто от двата свята:гъвкавостта на схемата на модела EAV, но производителността на традиционните релационен модел за атрибутите, които са най-използваните и/или най-често срещаните за всички обекти.
  • възможността за преименуване на атрибути, без да се нарушава основната таблица. Промени само на ниво метаданни.
  • различна семантика, ориентирана към приложението. Например индикатори, че даден атрибут трябва да се предлага като едно от основните полета за търсене спрямо разширените.

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

Сега... обърнете внимание на коментара от zerkms , под самия въпрос. Въпреки всичките си предимства, моделът EAV идва и със своя дял от недостатъци и предизвикателства, както намекна сложността на заявките, които идват на ум, както и проблеми с производителността. Тези опасения обаче не трябва да дисквалифицират априори EAV:има много случаи на употреба, при които EAV е по-добър подход.
Ако приемем, че EAV е изборът от Model2, или дори нещо малко по-сложно е определено по-добро от model1.



  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 от Php регистрационна форма

  2. MySQL динамична централна таблица

  3. Преход от mysql към PDO

  4. Mysqli_fetch_assoc($result), показалецът се премества към следващия запис. Има ли някакъв начин да нулирате показалеца към началото на резултата от заявката?

  5. недефиниран индекс Име