Bon Aperçus
De manière générale, vous êtes prise d'une décision rapide entre les temps de lecture (par exemple ensemble imbriqué) ou rapide le temps d'écriture (liste d'adjacence). Habituellement, vous vous retrouvez avec une combinaison des options ci-dessous qui correspondent le mieux à vos besoins. Le texte qui suit présente certains à la lecture approfondie:
- Un Imbriqués Intervalles vs la Contiguïté de la Liste de comparaison: le meilleur de la comparaison de la Liste d'Adjacence, Chemin Matérialisé, Ensemble Imbriqué et Imbriquées Intervalle, j'ai trouvé.
- Les modèles de données hiérarchiques: les lames avec de bonnes explications de compromis et exemple d'utilisation
- Représentant des hiérarchies dans MySQL: très bon aperçu de l'Ensemble Imbriqué en particulier
- Des données hiérarchiques dans les Sgbdr: plus complet et le mieux organisé une série de liens que j'ai vu, mais pas beaucoup dans la voie de l'explication
Options
Ceux que je suis au courant et caractéristiques générales:
-
La Contiguïté De La Liste:
- Colonnes: ID, ParentID
- Facile à mettre en œuvre.
- Pas cher nœud se déplace, des insertions et des suppressions.
- Cher pour trouver niveau (peut stocker qu'une colonne calculée), de l'ascendance et la descendance (Table de Bridge combiné avec le niveau de la colonne peut résoudre), chemin (de la Lignée de la Colonne peut résoudre).
- L'utilisation d'Expressions de Table Communes dans ces bases de données qui les aident à traverser.
-
Ensemble imbriqué (un.k.une modification de la Précommande Arbre Transversal)
- Popularisé par Joe Celko dans de nombreux articles et son livre des Arbres et des Hiérarchies dans SQL pour les Smarties
- Colonnes: À Gauche, À Droite
- Pas cher niveau, de l'ascendance, de descendance
- Par rapport à la Liste d'Adjacence, les coups, les insertions, les suppressions plus cher.
- Nécessite un ordre de tri (par exemple créé). Donc un tri de tous les descendants dans un ordre différent nécessite plus de travail.
-
Imbriqués Les Intervalles De
- Combinaison de Imbriquée Sets et Chemin Matérialisé où de gauche/droite des colonnes sont des nombres à virgule des décimales au lieu de nombres entiers et de coder les informations de chemin d'accès. Dans le développement ultérieur de cette idée imbriquée intervalles a donné lieu à la matrice de codage.
-
Table de Bridge (un.k.un. Fermeture de la Table: quelques bonnes idées sur la façon d'utiliser des déclencheurs pour le maintien de cette approche)
- Colonnes: ancêtre, descendant
- Se démarque de tableau qu'il décrit.
- Peut inclure des nœuds dans plus d'une hiérarchie.
- Bon marché de l'ascendance et de la descendance (mais pas dans l'ordre)
- Pour compléter la connaissance de la hiérarchie doit être combinée avec une autre option.
-
Table À Plat
- Une modification de la Liste d'Adjacence, qui ajoute un Niveau et le Rang (par exemple, la commande) colonne pour chaque enregistrement.
- Cher déplacer et de supprimer des
- Bon marché de l'ascendance et de descendance
- Bon Usage: fils de discussion - forum / blog de commentaires
-
La lignée de la Colonne (un.k.un. Chemin Matérialisé, Chemin De L'Énumération)
- Colonne: la lignée (par exemple, /parent/enfant/petit enfant/etc...)
- De limite à la profondeur de la hiérarchie peut être.
- Les Descendants à bas prix (par exemple,
LEFT(lineage, #) = '/enumerated/path'
) - Ancestry délicate (base de données des requêtes spécifiques)
-
Plusieurs colonnes de lignage
- Colonnes: une pour chaque lignée niveau, se réfère à tous les parents jusqu'à la racine, les niveaux plus bas que les éléments de niveau sont mis à NULL
- De limite à la profondeur de la hiérarchie peut être
- Pas cher ascendants, descendants, niveau
- Bon marché insérer, supprimer, déplacer des feuilles
- Cher, insérer, supprimer, déplacer des nœuds internes
Base De Données Des Notes Spécifiques
MySQL
Oracle
- L'utilisation de CONNECTER PAR de parcourir les Listes d'Adjacence
PostgreSQL
- ltree type de données pour le Chemin Matérialisé
SQL Server
- Résumé général
- 2008 offre HierarchyId type de données apparaît pour vous aider avec la Lignée de la Colonne d'approche et d'étendre la profondeur qui peut être représenté.