2010-07-09 5 views

Répondre

11

J'ai trouvé la discussion dans le SQL Anti-patterns très utile, car elle se concentre également sur les inconvénients de chaque implémentation.

En outre, les diapositives 48-77 dans this presentation réitèrent que les analyses.

En résumé, il n'existe pas d'arborescence générique et pas de solution miracle pour les arborescences SQL. Vous devrez vous poser des questions sur les données, comment et combien seront-elles sélectionnées, modifiées, les branches seront-elles déplacées, etc., et en fonction de ces réponses, mettre en œuvre une solution appropriée.

3

Eh bien, le moyen le plus simple serait qu'un enregistrement ait une colonne ParentID afin qu'il sache quel enregistrement est son parent. C'est une pratique assez courante. Par exemple, un magasin en ligne peut avoir une hiérarchie de catégories de produits. Chaque catégorie aura un ParentID. Exemple: La catégorie "Jeans" dans une base de données de vêtements peut avoir "Pantalon" comme catégorie parent. C'est un peu plus difficile si vous voulez un enregistrement pour indiquer quels sont ses enfants, sauf si vous limitez le nombre d'enfants. Si vous voulez un arbre binaire, vous pouvez avoir des colonnes LeftChildID et RightChildID. Si vous autorisez un nombre quelconque d'enfants, vous pouvez avoir une colonne Enfants avec des ID délimités par des virgules (par exemple, 1,4,72,19) mais cela rendra l'interrogation plutôt difficile. Si votre base de données autorise les types de tableau dans les colonnes, vous pouvez probablement utiliser un tableau au lieu d'une chaîne délimitée, ce qui serait facile à interroger - mais je ne suis pas sûr que MS SQL Server le supporte ou non. A part cela, cela dépend du type de données que vous modélisez, et aussi du type d'opérations que vous envisagez de faire avec cet arbre.

2

Il existe deux approches générales

  1. Dans chaque enregistrement, stocker l'ID du parent dans une colonne nullable (la racine de l'arbre n'a pas de parent)
  2. Utiliser une technique de modèle ensemble imbriqué de Joe Celko expliqué here et (grâce au commentaire de @onedaywhen), aussi dans ce qui est la source d'origine here

EDIT: nouveau lien pour ce matériel est here.

Avantages et inconvénients ?? !! Tu plaisante, n'Est-ce pas ?!

+0

Celko attribue le modèle de jeu imbriqué à Michael Kamfonas, bien que Celko semble avoir inventé la phrase et certainement poli et popularisé la technique. – onedaywhen

+0

+1 - Je viens d'utiliser l'article de Celko il y a quelques semaines et c'était très utile. –

+0

Les liens dans cette réponse sont malheureusement cassés maintenant. Est-ce que quelqu'un sait où trouver cette information? – Qqwy

1

Je l'ai fait par le passé en stockant des données au format XML dans SQL.

Questions connexes