Mysql
 sql >> Base de données >  >> RDS >> Mysql

Modèle de liste d'adjacence vs modèle d'ensemble imbriqué pour les données hiérarchiques MySQL ?

Le modèle d'ensemble imbriqué est aujourd'hui peu utilisé dans les bases de données, car il est plus complexe que le modèle de liste d'adiacence, étant donné qu'il nécessite de gérer deux "pointeurs" au lieu d'un seul. En fait, le modèle d'ensemble imbriqué a été introduit dans les bases de données lorsqu'il était complexe ou impossible de faire des requêtes récursives qui traversaient une hiérarchie.

Depuis 1999, le SQL standard inclut ce que l'on appelle les expressions de table communes récursives, ou CTE récursives, qui simplifient (et standardisent !) les requêtes qui traversent un chemin récursif dans une hiérarchie avec any nombre de niveaux.

Tous les principaux systèmes de SGBD ont maintenant inclus cette fonctionnalité, avec une exception notable :MySQL. Mais dans MySQL, vous pouvez surmonter ce problème en utilisant des procédures stockées. Voir, par exemple, ce message sur StackOverflow , ou ce message sur dba.stackexchange .

Donc, en résumé, voici mes conseils :

  1. Si vous pouvez toujours décider quel SGBD utiliser, considérez sérieusement certaines alternatives :par exemple, si vous souhaitez vous en tenir à une base de données open source, utilisez PostgreSQL , utilisez le modèle de liste d'adiacence et optez pour des CTE récursifs pour vos requêtes.
  2. Si vous ne pouvez pas modifier le SGBD, vous devez toujours utiliser le modèle de liste d'adiacence et utiliser des procédures stockées comme celles citées dans les références.

MISE À JOUR

Cette situation est en train de changer avec MySQL 8, qui est actuellement en développement et qui intégrera les CTE récursifs , de sorte qu'à partir de cette version, le modèle de liste d'adiacence sera plus simple à utiliser.