Hallo,
ich habe eine Baumstruktur aus ca. 10 verschiedenen Klassen (teilweise mit zusätzlich erbenden Klassen), in der Java-GUI mit einem Swing JTree abgebildet.
Die Hierarchie ist höchstens 4-5 Ebenen tief.
Die Reihenfolge der Elemente im Baum ist wichtig.
Diesen Baum möchte ich nun in einer relationalen DB abbilden.
Dazu habe ich bisher 2 Ansätze, die mich aber beide bisher nicht überzeugen und vielleicht habt ihr andere Ideen oder vielleicht wisst ihr, wie ich den ein oder anderen Ansatz verbessern könnte.
- Ansatz: Ich habe eine Tabelle „Node“, die mir die Hierarchie-Struktur abbildet und eine Tabelle „Attribute“, die die Attribute der jeweiligen Knoten-Objekte beinhalten. Die Attribute-Tabelle hat dann einen Fremdschlüssel auf Tabelle „Node“. Ein Java-Objekt wird dann aus einem Node-Eintrag und den zugehörigen Attribute-Einträgen zusammengesetzt.
Vorteil: Schlanke DB-Struktur.
Nachteil: In der „Attribute“-Tabelle lassen sich nur Attribute vom Typ int, boolean, String o.ä. ablegen. Meine Baumobjekte haben jedoch als Attribute teilweise selbst wieder Objekte. Diese Attribut-Objekte sind teilweise wieder Knoten aus dem Baum oder vom Baum unabhängige Objekte. Diese Attribut-Objekte lassen sich nicht in der Attribute-Tabelle abbilden.
Des weiteren müsste Java die Hauptarbeit übernehmen, indem jeder Attribute-Eintrag auch dem richtigen Objekt-Attribut zugewiesen wird. Das hieße, ich bräuchte in meiner Geschäftslogik eine Art Mapping-Layer, der mir aus den Einträgen der beiden Tabellen jeweils immer das korrekte Objekt mit den korrekt initialisierten Attributen genriert. Wie das Ganze umgekehrt funktionieren soll, dass heißt, wie ich bei Ändern des Objekt-Zustands über die GUI die entsprechenden DB-Einträge identifizieren und updaten soll, weiß ich bisher auch nicht.
- Ansatz: Straight forward: Für jeden Knotentyp bilde ich eine eigene Tabelle und verknüpfe diese mit ihren entsprechenden Eltern-Knoten über einen Fremdschlüssel.
Vorteil: Ein gutes Objekt-Datenbank Mapping und intuitiver als Ansatz 1.
Nachteil: Viele Tabellen (mit einigen Zusatztabellen mind. 17).
Wie würdet ihr dieses Problem lösen und einen JTree auf die DB abbilden?
Danke im Voraus für die Hilfe,
Victor