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

Модел на списък на съседство срещу модел на вложен набор за йерархични данни на MySQL?

В днешно време моделът на вложен набор не се използва често в бази данни, тъй като е по-сложен от модела на Adiacency List, като се има предвид факта, че изисква управление на два „указателя“ вместо един. Всъщност моделът на вложен набор е въведен в бази данни, когато е било сложно или невъзможно да се правят рекурсивни заявки, които преминават през йерархия.

От 1999 г. стандартният SQL включва така наречените рекурсивни изрази за обща таблица или рекурсивни CTE, което прави по-лесно (и стандартизирано!) да се правят заявки, които преминават през рекурсивния път в рамките на йерархия с всякакви брой нива.

Всички основни СУБД вече включват тази функция, с особено изключение:MySQL. Но в MySQL можете да преодолеете този проблем с използването на съхранени процедури. Вижте, например, тази публикация в StackOverflow , или тази публикация на dba.stackexchange .

И така, в обобщение, това са моите съвети:

  1. Ако все пак можете да решите коя СУБД да използвате, обмислете силно някои алтернативи:например, ако искате да се придържате към база данни с отворен код, използвайте PostgreSQL , използвайте модела на списъка на Adiacency и използвайте рекурсивни CTE за вашите заявки.
  2. Ако не можете да промените СУБД, все пак трябва да използвате модела на списъка на Adiacency и да използвате съхранените процедури като тези, цитирани в препратките.

АКТУАЛИЗИРАНЕ

Тази ситуация се променя с MySQL 8, който в момента е в процес на разработка и който ще интегрира рекурсивни CTE , така че от тази версия моделът Adiacency List ще бъде по-лесен за използване.




  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. PDO:Връзка с база данни на отдалечен уебсайт

  3. Производителност на MySQL:Преобразуване на MySQL в MariaDB

  4. Ограничаване на ляво присъединяване до връщане на един резултат?

  5. Вземете стойностите за последните 6 месеца в mysql