# Wie persistiert man eine Tree-ähnliche Datenbankstruktur?



## bobndrews (30. Mrz 2009)

Hallo miteinander, 

ich möchte ein Tool zur Projektplanung schreiben und überlege mir nun, wie ich die Daten am besten in einer DB speichern kann. 

Da die Vorgänge eines Projekts in einer Baumstruktur angeordnet sind, sah ich eine Vorgangstabelle, die eine Information über eine Parent-Vorgang besitzt, als naheliegendste Lösung an. Hinzu kommen noch etliche flache Hilfstabellen, die mit der Vorgangstabelle als zentraler Struktur zusammenhängen. 

Nachdem ich mich nun durch einige Foren gewühlt habe, habe ich aber das leise Gefühl, das dies nicht die "richtige" Lösung für ein ERD wäre. 
Ich las, daß Baumstrukturen in einer DB nie wirklich relational sein könnten und das bei der Nutzung eines Object/Relational-Mappers wie Hibernate Performance-Probleme auftreten könnten!?

Hat jemand von Euch Erfahrung mit diesem Thema und kann mir eine Einschätzung dazu geben?


----------



## maki (30. Mrz 2009)

Ich kenne grundsäzlich 3 Möglichkeiten (unabhängig ob ein ORM benutzt wird):
1. rekursive Netzwerke, rate davon ab
2. Nested Sets
3. Ein Tabelle welche ein Feld mit der ID des Parent Records enthält (Nullable)

Nested Sets sind schnell wenn sich die Struktur nicht häufig ändert, aber auch komplexer.

Die 3. Möglichkeit geht, ist aber inperformant, ausser man hat zusätzlich so etwas wie eine Tree ID, führt aber zu Redundanzen.


----------



## ARadauer (30. Mrz 2009)

mhn vorgänge eines projekts... wie wäre es mit der id des parent und des root elements (praktisch das projekt) und vielleicht noch die ebenen... root ist zb 1

mit einem select kannst du jetzt alle Elemente eines projektes laden und dann dynamisch den baum aufbauen
bzw wenn sehr viele elmente in einem projekt sind, nur bis auf eine gewisse ebene laden ...


----------

