php / Mysql meilleure structure de l'arbre
Je dois construire un arbre qui contiendra environ 300 nœuds à l'intérieur. L'arbre n'a pas de profondeur de limitations. Donc, il peut avoir 3 ou 15 niveaux. Chaque nœud peut avoir un nombre illimité d'enfants.
La priorité est d'obtenir une arborescence complète /sous-arbre le plus vite possible, mais j'ai aussi besoin d'ajouter des nœuds ou déplacer des nœuds parfois, mais pas souvent.
Je veux savoir la meilleure façon de stocker l'arbre dans la base de données et la meilleure façon de récupérer les données, si possible, en php.
- C'est ce que MySQL recommande: dev.mysql.com/tech-resources/articles/hierarchical-data.html
- Que le lien est cassé 🙁
- Ce site est un copier/coller de ce qui se trouvait sur le site de mysql: mikehillyer.com/articles/managing-hierarchical-data-in-mysql
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un Ensemble Imbriqué Modèle car il donne de très efficace des requêtes. Découvrez La gestion Hiérarchique des Données dans MySQL et lisez la section intitulée Ensemble Imbriqué Modèle.
Si vous utilisez un ORM comme Doctrine, il comprend l'ensemble imbriqué capacités.
Il peut être difficile pour certains de saisir l'ensemble imbriqué concepts de gauche et droit. J'ai trouvé que l'utilisation de ces chiffres comme une analogie pour les numéros de ligne, d'ouvrir/fermer les balises dans un document XML, gens trouvent qu'il est plus facile à saisir.
Par exemple, prenez l'exemple de données de MySQL lien ci-dessus:
Si vous prenez le lft, tar champs et de les utiliser comme des numéros de ligne pour un document XML, vous obtenez:
De le voir de cette façon peut rendre beaucoup plus facile pour certains de visualiser l'résultant ensemble imbriqué de la hiérarchie. Il rend également plus claire de la raison pour laquelle cette approche améliore l'efficacité car elle permet de sélectionner des nœuds sans le besoin pour plusieurs requêtes ou des jointures.
C'est un grand article sur le sujet: La gestion Hiérarchique des Données dans MySQL. Je l'ai utilisé pendant une longue période.
Si vous avez quelques fonctions mathématiques, vous pouvez vraiment comprendre pourquoi il est si grand!