Seite 1 von 1
Brauche Hilfe bei DB-Struktur
Verfasst: 20.09.2004 12:15
von JumpinJack
Also ich zerbreche mir den Kopf und bin mir nicht so sicher wie ich das am besten anstellen kann. Vielleicht könnt ihr mir ja helfen.
Also ich habe Objekte sagen wir mal Hausnummern. Eine Hausnummer wird definiert aus 2 Informationen. Straßenname und Hausnummer.
Das ist meine erste Tabelle. ID - Straßenname - Hausnummer
Nun wurden im laufe der Jahre die Hausnummern geändert. Also möchte ich eine Historie einbauen. Mein Problem ist, wo schreibt man die Historie hin?
Also ich habe eine alte Hausnummer (Schloßstraße 4) welche geändert wurde auf (Schloßstraße 46). Sollte man die Information zur Änderung bei der Schloßstraße 4 oder bei der Schloßstraße 46 schreiben? Oder sogar bei beiden? Nach dem Motto jede Hausnummer bekommt ein Feld VorgängerHausnummer und Nachfolgerhausnummer.
Versteht ihr meine Frage überhaupt? Wenn ja ich hoffe ich ihr könnt mir weiterhelfen, wenn nein bitte fragt nach. Ich versuche es dann besser zu beschreiben!

Verfasst: 20.09.2004 12:26
von Acid
ID - Straßenname - Hausnummer - alte Hausnummer
..genügt nich?
Oder willst du es in einer neuen Tabelle speichern?
ID - relative id zu Einträge der 1. Tabelle - alter Straßenname - alte Hausnummer
Verfasst: 20.09.2004 13:10
von JumpinJack
Ja ich werde das in mehreren Tabellen unterbringen da Daten mit dieser Tabelle verknüpft werden. Wie Lage, Bauherren etc.
Ich muss es aber mit der ID machen, da es ja sein kann das es schon früher die Hausnummer gab. Beispielsweise bei einer Eingemeindung. Da gabs 12 mal die Hauptstraße 10. Nur aus welche Hauptstraße 10 wurde nun meine Bergstraße 40?!
Ich denke es wäre sinnvoll nur den Vorgänger bei der Hausnummer zu hinterlegen. Den Nachfolger zu hinterlegen würde ja mehr Daten bedeuten.
Verfasst: 20.09.2004 22:15
von D@ve
Also ich würde folgende Tabelle Anlegen:
id
strasse
hausnummer
timestamp
Die ID ist eine eindeutige Nummer (primary key) und über einen timestamp speicherst Du das Datum der Erstellung, so kannst Du ohne Probleme zurückverfolgen wann welche Adresse sich wie geändert hat...
Gruß, Dave
Verfasst: 20.09.2004 23:07
von PhilippK
Auch 'ne nette Lösung wäre, eine optionale Verknüpfung zur gleichen Tabelle durch ein neues Feld replaced_by oder so zu machen.
Ist das Feld leer, so ist der Datensatz aktuell - ansonsten ist die ID des Datensatzes drin, der als Nachfolger definiert ist. Abfragen kannst du dann mit einer rekursiven Abfrage.
Gruß, Philipp
Verfasst: 21.09.2004 12:20
von JumpinJack
Hey PhilippK.
Klasse Idee. So in etwa habe ich mir das auch gedacht. Ich denke das wäre wohl das Sinnvollste. Der Timestamp ist zwar auch ncht schlecht, aber mit der Verlinkung auf eine ID des Nachfolgers.
Meine Frage ist nun, wo kommt die Verlinkung hin? Zum Nachfolger oder zum Vorgänger.
Also bekommt jeder eine Tabellenspalte wo der Vorgänger drin steht oder jeder eine Spalte wo der Nachfolger drin steht.
Der Vorteil von der Version das man beim Nachfolgerdatensatz den Vorgänger notiert ist, das man beim alten Datensatz nichts ändern muss.
Man legt einen neuen an und verweist direkt bei diesen das er den alten ersetz. Der alte Datensatz wird so nicht angerührt.
Ist das wirklich ein Vorteil? Ist das umständlich? Bin ich auf dem Holzweg?
Verfasst: 21.09.2004 13:04
von D@ve
Also normalerweise macht man sowas immer mit parent_id, wüßte auch nichts was in diesem Fall dagegen sprechen würde...
Gruß, Dave
Verfasst: 21.09.2004 23:02
von PhilippK
Das hängt ein bischen davon ab, was du genau damit machen willst...
Wenn du im ersten Schritt die Ausgangsdatensätze anzeigen willst, ist die Methode mit dem Link auf den Vorgänger idealer, wenn du hingegen mit den aktuellen Datensätzen anfangen willst, ist der Nachfolger idealer.
Gruß, Philipp