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

Твърде много маси; MySQL може да използва само 61 таблици в обединение

Използвате дизайн на EAV и се опитвате да преконструирате един ред от променлив брой атрибути. Това посочва една от многото противопехотни мини, които ще срещнете, използвайки дизайна на EAV:има практическо ограничение за броя на присъединяванията, които можете да направите в една SQL заявка.

Особено в MySQL - има твърдо ограничение, както открихте. Но дори и в други марки RDBMS има ефективно ограничение, тъй като цената на обединяването е геометрична по отношение на броя на таблиците.

Ако използвате EAV, не се опитвайте да конструирате отново ред в SQL сякаш имате конвенционален дизайн на база данни. Вместо това извлечете атрибутите като редове, сортирани по идентификатора на обекта. След това ги обработете след това в кода на приложението си. Това означава, че не можете да изхвърлите данните в една стъпка – трябва да напишете код, за да обиколите редовете с атрибути и да реформирате всеки ред данни, преди да можете да ги изведете.

EAV не е удобен дизайн на база данни. Използването му има много скъпи недостатъци и току-що сте уцелили един от тях.

Вижте http://www.simple-talk.com/opinion /opinion-pieces/bad-carma/ за страхотна история за това как използването на EAV обрича един бизнес.

И също вижте http://en.wikipedia.org/wiki/Inner-platform_effect защото EAV е пример за този анти-шаблон.

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

  • Дефинирайте реална колона в основната таблица за всеки атрибут, който е общ за всички типове продукти. Име на продукта, цена, количество на склад и т.н. Работете усилено, за да си представите каноничния продукт обект, така че можете да включите възможно най-много атрибути в този набор.

  • Дефинирайте още една колона от тип TEXT за всички допълнителни атрибути на всеки даден тип продукт. Съхранявайте в тази колона като Сериализиран LOB от атрибутите, в какъвто формат ви подхожда:XML, JSON, YAML, собствен домашен DSL и т.н.

    Третирайте това като една колона във вашите SQL заявки. Всяко търсене, сортиране или показване, което трябва да направите въз основа на тези атрибути, изисква да извлечете целия TEXT blob във вашето приложение, десериализирайте го и анализирайте атрибутите с помощта на код на приложението.



  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. Как да актуализирате MySql DB с помощта на Flex

  3. Код на грешка:1290. MySQL сървърът работи с опцията --secure-file-priv, така че не може да изпълни този израз

  4. Отпадането на таблицата кара MySQL да виси

  5. Съхранение на данни от полето с богат текст в база данни с форматиране