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

предложение за структура на таблицата на mysql?

Не, това е лош дизайн за релационна база данни. Това е пример за Entity-Attribute-Value дизайн. Той е гъвкав, но нарушава повечето правила за това какво означава да бъдеш релационна база данни.

Преди да се спуснете в дизайна на EAV като решение за гъвкава база данни, прочетете тази история:Лош CaRMa .

По-конкретно, някои от проблемите с EAV включват:

  • Не знаете какви атрибути съществуват за даден ID_NUM, без да правите заявка за тях.
  • Не можете да направите нито един атрибут задължителен, еквивалент на NOT NULL.
  • Не можете да използвате ограничения на базата данни.
  • Не можете да използвате SQL типове данни; value колоната трябва да е дълъг VARCHAR.
  • По-специално в MySQL, всеки VARCHAR се съхранява на собствена страница с данни, така че това е много разточително.

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

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

Написах повече за EAV в моята презентация Практически обектно-ориентиран Модели в SQL и в моя публикация в блога EAV FAIL , а в моята книга SQL Antipatterns:Избягване на клопките на програмирането на бази данни .



  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 Left Join COUNTS от множество таблици

  2. Как да актуализирате стойността на външния ключ в базата данни на mysql

  3. PHP цикъл, действащ като cronjob [осигурете работещ само един екземпляр]

  4. Каква е разликата между операторите <> и !=в MySQL?

  5. Най-добрият начин да направите претеглено търсене в множество полета в mysql?