Dans le domaine de la modélisation des données, l'établissement de relations hiérarchiques et parent-enfant est crucial pour de nombreuses applications. Cet article explore une manière efficace et efficiente d'atteindre cet objectif dans les contraintes d'un modèle de données donné.
Considérons une table de base de données qui stocke les informations du site et les relations parent-enfant :
<code class="language-sql">create table site ( site_Id int(5), parent_Id int(5), site_desc varchar2(100) );</code>
L'exigence est de récupérer tous les nœuds enfants d'un ID de site donné, représentant une hiérarchie comme celle-ci :
<code> A / \ B C / | \ /\ D E F G H /\ I J</code>
Entrée : Site B
Sortie : D, E, F, I, J
Les méthodes existantes impliquent plusieurs requêtes imbriquées et peuvent être inefficaces. Explorons une solution optimisée.
Dans le modèle de données donné, chaque nœud a un nœud parent, à l'exception du nœud racine. Cette contrainte limite les options disponibles pour une récupération hiérarchique efficace.
Bien que le modèle de liste de contiguïté fonctionne bien pour les données données, il est moins efficace lorsqu'il s'agit de hiérarchies profondes. Les tables de fermeture, les ensembles imbriqués et les modèles d'énumération de chemins fournissent des solutions plus efficaces, mais nécessitent des modifications du modèle de données, ce qui n'est pas possible dans ce cas.
Compte tenu des contraintes du modèle de données, nous recommandons d'utiliser un modèle de liste de contiguïté modifié et d'ajouter une colonne "root_id" :
<code class="language-sql">create table site ( site_Id int(5), parent_Id int(5), root_id int(5) );</code>
Pour chaque nœud, la colonne "root_id" stocke le nœud ancêtre le plus élevé dans son arborescence. Cela nous permet de récupérer l'intégralité de l'arbre avec une seule requête :
<code class="language-sql">SELECT * FROM site WHERE root_id = <root_id></code>
Algorithme :
Cette approche permet un parcours hiérarchique efficace sans surcharge de base de données, ce qui la rend adaptée aux arbres de taille moyenne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!