2010-07-09 17 views

Antwort

11

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.

3

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.

2

Es gibt zwei allgemeine Ansätze

  1. in jedem Datensatz, speichern die ID der Eltern in einer Spalte von -zulässige (die Wurzel des Baumes hat kein übergeordnetes)
  2. 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 ?!

+0

Celko schreibt das verschachtelte Set-Modell Michael Kamfonas zu, obwohl Celko den Ausdruck geprägt und die Technik sicherlich poliert und popularisiert hat. – onedaywhen

+0

+1 - Ich habe Celkos Artikel vor ein paar Wochen benutzt und es war sehr hilfreich. –

+0

Die Links in dieser Antwort sind jetzt leider unterbrochen. Weiß jemand, wo sonst diese Informationen zu finden sind? – Qqwy

1

Ich habe dies in der Vergangenheit durch Speichern von Daten als XML in SQL getan.

Verwandte Themen