Datenbankdesign Stadt Straßen

Hallo Forum,

ich habe eine Reihe von Objekten, die ich bisher per Serialisierung persistent gemacht habe. Jetzt überlege ich, dieses alternativ über eine Datenbank (vielleicht Derby) zu erledigen. Meine Objekte enthalten schwer zu beschreibende abstrakte Datenstrukturen, aber stellen wir uns einfach vor, es wären Städte, die in ArrayListen Straßenobjekte, diese wiederum Häuserobjekte und diese Bewohnerobjekte enthalten. Ich frage mich, wie ich diese nun in eine Tabellenstruktur einer Datenbank hineinbringe, denn die muss ja, so wie ich es kenne, eine identische Zahl von Spalten je Datensatz enthalten. Orientiert man sich hier am längsten Datensatz - also ermittelt man etwa die Stadt mit der größten Anzahl von Straßen und lässt dann die entsprechenden Felder für Städte mit weniger Straßen frei, oder bringt man die Daten in unterschiedlichen Tabellen unter? Wie sähe ein sinnvoller Ansatz für derartige Objekte aus? Könnt Ihr mir, als blutigstem Anfänger, hier einen Wink geben? Vielen Dank schonmal!

In einer relationalen Datenbank (Derby wäre eine) gibt es verschiedene Möglichkeiten, Objektstrukturen abzubilden. Wenn keine Vererbung im Spiel ist, ist das noch relativ einfach. Pro Klasse kannst du dann eine Tabelle erstellen: Stadt, Strasse, Haus, Bewohner.
In jeder Tabelle ist zusätzlich zu den zu speichernden Werten eine Spalte “id” vom Typ INT.
Nun kannst du die Städte speichern und erzeugst pro Stadt eine eindeutige ID.
Da du mehrere Straßen in einer Stadt haben kannst, ist dies eine 1:n-Beziehung (1 Stadt hat n Straßen). Um das abzubilden, benötigst du in der Straßentabelle eine Spalte “stadt_id”. Dort legst du dann für die zu speichernde Straße die eindeutige ID der zugehörigen Stadt ab.

Ebenso gehst du bei den anderen Listen vor.

Wieso in „eine“?

Sicher. Straßen und Häuser sind relativ eigenständige Objekte. Siedlungen bestehen aus Straßen und Häusern. Wenn man diese Objekte vernünftig pflegen und das Datenmodell skalierbar halten will, müssen diese Objekte in eigenen Tabellen gepflegt werden.
Wie man das sinnvoll implementiert hängt vom konkreten Anwendungsfall ab.Sind Straßen als eigenständige Objekte für das Modell relevant oder „dienen“ sie nur als Adresse für die Häuser? Davon abhängig ist die Art der Beziehung zu implementieren.
Allgemein gesprochen: Es gibt Tabellen, welche die Objekte und deren Attribute enthalten und es gibt Tabellen die die Beziehung einzelner Objekte zueinander beschreiben.

Danke für eure Hinweise, die machen es schon etwas klarer!

Das ist eine gute Info. In meinem Denken wollte ich in der Stadttabelle auflisten, welche Straßen enthalten sind. Auf die Idee, die Relation in der Straßentabelle festzulegen, war ich gar nicht gekommen.
Vielen Dank! :slight_smile:

Das ist mit die wichtigste Sache beim Abbilden von einem Objektgraphen in eine relationale Datenbank.
Was bei einfachen Objektmodellen seltener vorkommt, aber ebenfalls wichtig ist, sind n:m-Beziehungen, beispielsweise eine Freundschaftsbeziehung zwischen Personen.
Um das abzubilden benötigt man eine Hilfstabelle, in der es zwei Spalten gibt: die IDs von beiden an der Beziehung beteiligten Datensätzen.