Ich bin mir ziemlich sicher, dass viele Anwendungen, kritische Anwendungen, Banken usw. dies täglich tun.
Die Idee dahinter ist:
- Alle Zeilen müssen einen Verlauf haben
- Alle Links müssen kohärent bleiben
- Es sollte einfach sein, Anfragen zu stellen, um "aktuelle" Spalten zu erhalten
- Kunden, die veraltete Produkte gekauft haben, sollten weiterhin sehen, was sie gekauft haben, obwohl dieses Produkt nicht mehr im Katalog enthalten ist
und so weiter.
Hier ist, was ich tun möchte, und ich erkläre die Probleme, mit denen ich konfrontiert bin.
Alle meine Tabellen haben diese Spalten:
idid_origindate of creationstart date of validitystart end of validity
Und hier sind die Ideen für CRUD-Operationen:
- erstelle = füge eine neue Zeile mit
id_origin=id,date of creation= now,start date of validity= now,end date of validity= null ein (= bedeutet, es ist der aktuell aktive Datensatz) - update =
- read = liest alle Datensätze mit
end date of validity== null - Aktualisiere den "aktuellen" Datensatz
end date of validity= null mitend date of validity= now - erstelle einen neuen mit den neuen Werten und
end date of validity= null (= bedeutet, es ist der aktuell aktive Datensatz)
- read = liest alle Datensätze mit
- delete = Aktualisiere den "aktuellen" Datensatz
end date of validity= null mitend date of validity= now
Also hier ist mein Problem: mit vielen zu vielen Assoziationen. Nehmen wir ein Beispiel mit Werten:
- Tabelle A (id = 1, id_origin = 1, start = now, end = null)
- Tabelle A_B (start = now, end = null, id_A = 1, id_B = 48)
- Tabelle B (id = 48, id_origin = 48, start = now, end = null)
Jetzt möchte ich Tabelle A aktualisieren, Datensatz-ID = 1
- Ich markiere die Datensatz-ID = 1 mit end = now
Ich füge einen neuen Wert in Tabelle A ein und ... verdammt, ich habe meine Beziehung A_B verloren, es sei denn, ich dupliziere auch die Beziehung ... dies würde zu einer Tabelle führen:
Tabelle A (id = 1, id_origin = 1, start = now, end = now + 8mn)
- Tabelle A (id = 2, id_origin = 1, start = now + 8mn, end = null)
- Tabelle A_B (start = now, end = null, id_A = 1, id_B = 48)
- Tabelle A_B (start = now, end = null, id_A = 2, id_B = 48)
- Tabelle B (id = 48, id_origin = 48, start = now, end = null)
Und ... nun, ich habe ein anderes Problem: die Beziehung A_B: soll ich (id_A = 1, id_B = 48) als veraltet markieren oder nicht (A - id = 1 ist veraltet, aber nicht B - 48)?
Wie gehe ich damit um?
Ich muss das in großem Maßstab gestalten: Produkte, Partner und so weiter.
Welche Erfahrungen haben Sie damit gemacht? Wie würden Sie tun (wie haben Sie getan)?
- Bearbeiten
Ich habe diesen sehr interessanten Artikel gefunden , aber er befasst sich nicht richtig mit "Cascasding Obsolescence" (= was ich eigentlich frage)