Je dois stocker un arbre dans une base de données, alors quelle est la meilleure façon de le faire? Montrez la méthode que vous utilisez et nommez ses avantages et ses inconvénients. (J'utilise SQL Server 2005)Comment stocker un arbre dans la base de données SQL
Répondre
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.
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.
essayez ceci: Hierarchies (trees) in SQL Server 2005
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
Je trouve qu'un guide très utile.
Il existe deux approches générales
- Dans chaque enregistrement, stocker l'ID du parent dans une colonne nullable (la racine de l'arbre n'a pas de parent)
- 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 ?!
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
+1 - Je viens d'utiliser l'article de Celko il y a quelques semaines et c'était très utile. –
Les liens dans cette réponse sont malheureusement cassés maintenant. Est-ce que quelqu'un sait où trouver cette information? – Qqwy
Je l'ai fait par le passé en stockant des données au format XML dans SQL.
- 1. Stocker plusieurs images dans la base de données SQL
- 2. Stocker datetime dans la base de données?
- 3. log4net: Comment stocker des données dans la base de données
- 4. Comment stocker le fichier dans la base de données?
- 5. Comment stocker un BLOB dans une base de données?
- 6. Comment stocker de grandes chaînes de données dans la base de données SQL Server 2005?
- 7. Comment stocker efficacement des graphiques dans une base de données SQL (par exemple, mysql)?
- 8. virgules stocker dans la base de données MySQL
- 9. Comment stocker l'arbre de dépendances dans une base de données?
- 10. Comment stocker l'argent de l'utilisateur dans la base de données?
- 11. Comment stocker un tableau mixte dans des données de base
- 12. Impossible de stocker la valeur dans la base de données
- 13. Comment stocker l'utilisateur actuellement connecté dans la base de données?
- 14. Comment stocker Euro Symbol dans la base de données mysql?
- 15. Comment stocker "wishlist" dans la base de données?
- 16. Comment stocker des valeurs dans la base de données C#?
- 17. Dans Asp.net (C#), comment stocker une image dans la base de données (linq à sql)?
- 18. Comment stocker des données modifiées dans une base de données?
- 19. Quelle est la meilleure façon de stocker une liste de messages/arbre fileté dans SQL?
- 20. Stocker des données simples dans la base de données mysql
- 21. C# stocker les paramètres utilisateur dans la base de données
- 22. Comment stocker et récupérer des images dans la base de données du serveur SQL via VB.NET
- 23. La meilleure façon de stocker ces données dans SQL Table
- 24. Comment les données de base peuvent-elles stocker un NSData?
- 25. Comment stocker un nom et un emplacement de fichier swf dans la base de données mySQL?
- 26. stocker des valeurs dans la base de données tamil
- 27. Stocker beaucoup de fichiers dans la base de données
- 28. CodeIgniter: Stocker une image dans la base de données?
- 29. requête dans la base de données sql
- 30. Rails: stocker des traductions dans la base de données
Ce lien est mort; il redirige vers la page d'accueil. – Qqwy