@brechi
Mir ist aus deinen Beschreibungen nicht klar geworden, wie den eigentlich die Beziehungen zwischen den Daten sind, bzw. welche zeitlichen Abhängigkeiten abgebildet werden müssen.
Die Strasse bekommt erstmal eine eigene Tabelle:
Alle Daten die sich nicht ändern, werden entweder in dieser Tabelle gespeichert oder 1:N verknüpft.
Bleibt die Frage, was beschreibt 'Gueltig'?
Zumindest scheint klar, das eine Historie gemeint ist, also eine zeitliche Abfolge von Werten oder Zuordnungen gespeichert werden soll (kein Protokoll).
Code:
Strassen_Historie
ID:
GUID; <- PK
STRASSEN_ID:
GUID; <- FK <- IDX
GUELTIG_AB: TDateTime; <- IDX
TYP: INTEGER; <- IDX (Optional, für mehrere unabhängige Historien)
PK = Primärkey
FK = Foreignkey
IDX = eindeutiger Index (hier über mehrere Felder)
Alle Daten die einen Zustand beschreiben, der zu einem bestimmten Zeitpunkt vorliegt/vorlag werden in dieser Tabelle gespeichert oder 1:N verknüpft. Der Zustand gilt ab GUELTIG, bis er durch einen neuen Eintrag für einen anderen Zustand ersetzt wird.
Werden mehrere unabhägige Historien geführt, sind die eigentlichen Daten abhängig vom Typ in verschiedenen Tabellen gespeichert und 1:N oder 1:1 verknüpft.
Ob die Strasse befahrbar ist oder nicht, könnte man als Boolean in der Historie Speichern.
Da Änderungen im Namen der Strasse kaum relevant sind, wäre dieses Feld eher in der Tabelle Strasse unterzubringen.
Ist die Aufteilung der Strasse in Abschnitte konstant, wird auf die Strasse verknüpft, sonst auf die Historie.
Gehören die Abschnitte zur Historie, so kann es mehrere Abschnitte mit der Nummer 1 geben, aber zu einem bestimmten Zeitpunkt bzw. einem Eintrag in der Historie, ist nur einer gültig.