sql >> Base de Datos >  >> RDS >> Mysql

¿Modelo de lista de adyacencia frente a modelo de conjunto anidado para datos jerárquicos de MySQL?

El Modelo de Conjunto Anidado en la actualidad no es de uso común en las bases de datos, ya que es más complejo que el Modelo de Lista de Adiacencia, dado que requiere manejar dos “punteros” en lugar de uno solo. En realidad, el modelo de conjunto anidado se introdujo en las bases de datos cuando era complejo o imposible realizar consultas recursivas que atravesaran una jerarquía.

Desde 1999, el SQL estándar incluye las denominadas Expresiones de tabla comunes recursivas, o CTE recursivas, que simplifican (¡y estandarizan!) la realización de consultas que recorren rutas recursivas dentro de una jerarquía con cualquiera número de niveles.

Todos los principales sistemas DBMS ahora incluyen esta función, con una notable excepción:MySQL. Pero en MySQL puede superar este problema con el uso de procedimientos almacenados. Ver, por ejemplo, esta publicación en StackOverflow , o esta publicación en dba.stackexchange .

Entonces, en resumen, estos son mis consejos:

  1. Si aún puede decidir qué DBMS usar, considere seriamente algunas alternativas:por ejemplo, si quiere quedarse con una base de datos de código abierto, use PostgreSQL , use el modelo de lista de adiacencia y vaya con CTE recursivos para sus consultas.
  2. Si no puede cambiar el DBMS, aún debe usar el Modelo de lista de adiacencia y usar procedimientos almacenados como los citados en las referencias.

ACTUALIZAR

Esta situación está cambiando con MySQL 8, que actualmente está en desarrollo y que integrará CTE recursivos , por lo que a partir de esa versión el Modelo de Lista de Adiacencias será más sencillo de utilizar.