Ich muss einen Baum in einer Datenbank speichern, also was ist der beste Weg, dies zu tun? Zeigen Sie die verwendete Methode und benennen Sie die Vor- und Nachteile. (Ich verwende SQL Server 2005)Wie man einen Baum in der SQL-Datenbank speichert
Antwort
Ich fand die Diskussion in der SQL Anti-patterns sehr hilfreich, da es sich auch auf die Nachteile jeder Implementierung konzentriert.
Auch die Slides 48-77 in this presentation wiederholen, dass analisys.
Unter dem Strich gibt es keinen generischen Baum und keine Silberkugel für SQL-Bäume. Sie müssen sich die Daten fragen, wie und wie stark sie ausgewählt, geändert, verzweigt werden usw. und basierend auf diesen Antworten eine geeignete Lösung implementieren.
Nun, der einfachste Weg wäre für einen Datensatz eine ParentID-Spalte zu haben, so dass es weiß, welcher Datensatz seine Eltern ist. Dies ist eine ziemlich übliche Praxis. Zum Beispiel könnte ein Online-Shop eine Hierarchie von Produktkategorien haben. Jede Kategorie hat eine ParentID. Beispiel: Die Kategorie "Jeans" in einer Bekleidungsdatenbank hat möglicherweise "Hosen" als übergeordnete Kategorie. Es ist ein bisschen schwieriger, wenn ein Datensatz angeben soll, welche seine untergeordneten Elemente sind, es sei denn, Sie beschränken die Anzahl der untergeordneten Elemente. Wenn Sie einen Binärbaum wünschen, könnten Sie die Spalten LeftChildID und RightChildID haben. Wenn Sie eine beliebige Anzahl von untergeordneten Elementen zulassen, könnten Sie eine Children-Spalte mit IDs haben, die durch Kommata getrennt sind (z. B. 1,4,72,19
). Dies erschwert jedoch die Abfrage. Wenn Ihre Datenbank Array-Typen in Spalten zulässt, können Sie wahrscheinlich anstelle einer begrenzten Zeichenfolge ein Array verwenden, das leicht abgefragt werden kann. Ich bin mir jedoch nicht sicher, ob MS SQL Server dies unterstützt oder nicht.
Ansonsten hängt es davon ab, welche Art von Daten Sie modellieren und welche Art von Operationen Sie mit diesem Baum durchführen möchten.
versuchen Sie dies: Hierarchies (trees) in SQL Server 2005
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
ich, dass ein sehr hilfreicher Begleiter gefunden.
Es gibt zwei allgemeine Ansätze
- in jedem Datensatz, speichern die ID der Eltern in einer Spalte von -zulässige (die Wurzel des Baumes hat kein übergeordnetes)
- Verwenden Joe Celko der Nested Sets Technik erklärt here und (dank von @onedaywhen Kommentar), auch in dem, was der ursprünglichen Quelle ist here
EDIT: Ein neuer Link für dieses Material ist here.
Pro und Contra? !! Du machst Scherze, oder ?!
Celko schreibt das verschachtelte Set-Modell Michael Kamfonas zu, obwohl Celko den Ausdruck geprägt und die Technik sicherlich poliert und popularisiert hat. – onedaywhen
+1 - Ich habe Celkos Artikel vor ein paar Wochen benutzt und es war sehr hilfreich. –
Die Links in dieser Antwort sind jetzt leider unterbrochen. Weiß jemand, wo sonst diese Informationen zu finden sind? – Qqwy
Ich habe dies in der Vergangenheit durch Speichern von Daten als XML in SQL getan.
- 1. Wie erstellt man einen Baum in C++?
- 2. Wie man einen Baum in Haskell schmückt
- 3. Wie beschneidet man einen Baum in R?
- 4. Wie löscht man einen Baum in ExtJs?
- 5. Xampp - PHP - SQLDatenbank
- 6. Wie man Daten über einen spezifischen Knoten in einer binären Suche speichert Baum
- 7. AngularJS - Wie macht man einen ziehbaren Baum?
- 8. Wie erstellt man einen Skill-Baum?
- 9. Wie speichert man einen trainierten Klassifikator?
- 10. Wie speichert man einen NSUInteger mit NSCoding?
- 11. Wie speichert man Passwörter in der Datenbank?
- 12. C/C++: Wie man Daten in einer Datei in B-Baum speichert
- 13. Wie erstellt man einen Enum-Style-Baum in Java?
- 14. Wie man einen Preis in zwei Ganzzahlen in swift speichert
- 15. Wie man einen multi Baum in vb.net durchquert
- 16. Wie man einen B-Baum in Java visuell anzeigt?
- 17. Einsetzen in einen Baum
- 18. wie man Datenbankpasswort speichert
- 19. Wie man Einstellungen speichert
- 20. Wie man einen Wert dauerhaft in Android speichert?
- 21. Wie speichert man einen Verweis auf eine Klasse in Java?
- 22. Wie speichert man einen booleschen Wert in einem NSArray?
- 23. Einen Baum verfolgen?
- 24. Wie man Objekt durchläuft und einen Baum erzeugt Objekt
- 25. Wie man einen Baum von Ja/Nein-Entscheidungen brutal macht?
- 26. Wie bekommt man Abhängigkeiten Baum?
- 27. Wie man Baum zu threadartigem binärem Baum umwandelt
- 28. Wie speichert man Chat-Nachrichten in Echtzeit in der Datenbank?
- 29. Wie speichert man eine Variable in der Datenbank in CakePHP?
- 30. Wie transformiert man einen Baum mit Scrap Your Boilerplate?
Dieser Link ist tot; es leitet auf die Homepage um. – Qqwy