Hallo,
ich zerbrech mir nun seit geraumer Zeit den Kopf darüber, wie man am sinnvollsten Änderungen am Datenbestand protokollieren sollte/kann.
Ich habe bereits mehrere Foren zu diesem Thema durchstreift, allerdings keine befriedigende Antwort gefunden.
Es geht z.B. um eine Adresstabelle. Gegeben sei mal Vorname, Nachname, Straße, Plz und Ort.
Für eine Jahresstatistik - die monatlich aufgeteilt ist - ist es wichtig zu wissen, ob jemand Ortsfremd ist oder nicht, z.B. zieht eine Person im April in den Ort, dann ist diese Person von Jan-Mrz ortsfremd und von Apr-Dez eben nicht mehr.
Möglichkeit 1: Ich erstelle 2 Tabellen, z.B. Person (Id, Vorname, Nachname) und Adresse (Id, Straße, Plz, Ort, GültigAb, fkPersonId) - klassische 1:n-Beziehung. Für jede Adressänderung erstelle ich einen neuen Datensatz und bei der Abfrage lass ich dann nach GültigAb sortieren und mir den letzten Satz ausgeben.
Möglichkeit 2: Per Update-Trigger kopiere ich den Originalsatz in eine "Änderungstabelle". Ich müsste mich dann nur bei der Statistik mit mehrfach Datensätze rumschlagen.
Aus meiner Sicht, macht bei meiner Adresstabelle natürlich Möglichkeit 1 am meisten Sinn, da am einfachsten zu händeln.
Was mach ich aber, wenn ich z.B. auch die Änderung des Namens wissen muss, z.B. für eine Referenz auf eine Rechnung. Angenommen Frau Müller bestellt etwas, später wird der Name in Maier geändert, dann möchte ich natürlich die Rechnung noch immer mit Müller verknüpft wissen.
Ich habe bei Experts Exchange eine Hinweis auf einen zusammengesetzten Primärschlüssel gelesen, z.B. PersonId und Änderungsdatum. Leider wurde dort nicht genauer beschrieben, wie man das ganze umsetzt. Der Personen-Datensatz würde demnach mehrfach in der Tabelle vorkommen z.B. mit dem zusammengesetzten Primärschlüssel (1/20.01.2010) und (1/05.02.2010). Der jeweilige Schlüssel wäre dann in der Rechnungstabelle referenziert. Was mach ich dann aber mit meiner Adresstabelle? Die Adresse müsste ja beide Schlüssel referenzieren, d.h. ich bräuchte eine Interselektionstabelle (m:n), oder nicht?
Bin für jede Hilfe dankbar. Trotz Cross-Search gibts kein Cross-Posting
Gruß
ich zerbrech mir nun seit geraumer Zeit den Kopf darüber, wie man am sinnvollsten Änderungen am Datenbestand protokollieren sollte/kann.
Ich habe bereits mehrere Foren zu diesem Thema durchstreift, allerdings keine befriedigende Antwort gefunden.
Es geht z.B. um eine Adresstabelle. Gegeben sei mal Vorname, Nachname, Straße, Plz und Ort.
Für eine Jahresstatistik - die monatlich aufgeteilt ist - ist es wichtig zu wissen, ob jemand Ortsfremd ist oder nicht, z.B. zieht eine Person im April in den Ort, dann ist diese Person von Jan-Mrz ortsfremd und von Apr-Dez eben nicht mehr.
Möglichkeit 1: Ich erstelle 2 Tabellen, z.B. Person (Id, Vorname, Nachname) und Adresse (Id, Straße, Plz, Ort, GültigAb, fkPersonId) - klassische 1:n-Beziehung. Für jede Adressänderung erstelle ich einen neuen Datensatz und bei der Abfrage lass ich dann nach GültigAb sortieren und mir den letzten Satz ausgeben.
Möglichkeit 2: Per Update-Trigger kopiere ich den Originalsatz in eine "Änderungstabelle". Ich müsste mich dann nur bei der Statistik mit mehrfach Datensätze rumschlagen.
Aus meiner Sicht, macht bei meiner Adresstabelle natürlich Möglichkeit 1 am meisten Sinn, da am einfachsten zu händeln.
Was mach ich aber, wenn ich z.B. auch die Änderung des Namens wissen muss, z.B. für eine Referenz auf eine Rechnung. Angenommen Frau Müller bestellt etwas, später wird der Name in Maier geändert, dann möchte ich natürlich die Rechnung noch immer mit Müller verknüpft wissen.
Ich habe bei Experts Exchange eine Hinweis auf einen zusammengesetzten Primärschlüssel gelesen, z.B. PersonId und Änderungsdatum. Leider wurde dort nicht genauer beschrieben, wie man das ganze umsetzt. Der Personen-Datensatz würde demnach mehrfach in der Tabelle vorkommen z.B. mit dem zusammengesetzten Primärschlüssel (1/20.01.2010) und (1/05.02.2010). Der jeweilige Schlüssel wäre dann in der Rechnungstabelle referenziert. Was mach ich dann aber mit meiner Adresstabelle? Die Adresse müsste ja beide Schlüssel referenzieren, d.h. ich bräuchte eine Interselektionstabelle (m:n), oder nicht?
Bin für jede Hilfe dankbar. Trotz Cross-Search gibts kein Cross-Posting
Gruß
Comment