Best Practice für SCD-Datumspaare (Schließ-/Öffnungszeitstempel)
-
20-12-2019 - |
Frage
Welcher Ansatz ist bei der Implementierung zeitlicher Datum-Uhrzeit-Paare der bessere?
Ansatz 1
_RK FROM_DTTM TO_DTTM
1 01-JAN-2012 00:00:00 31-DEC-2012 23:59:59 ------------> Old record closed out
1 01-JAN-2013 00:00:00 31-DEC-4949 23:59:59 ------------> New active record
Wird wie folgt mit einer Filterklausel verwendet:
where FROM_DTTM <= &FILTER_DATE <= TO_DTTM
Ansatz 2
_RK FROM_DTTM TO_DTTM
1 01-JAN-2012 00:00:00 01-JAN-2013 00:00:00 ------------> Old record closed out
1 01-JAN-2013 00:00:00 31-DEC-4949 23:59:59 ------------> New active record
Wird wie folgt mit einer Filterklausel verwendet:
where FROM_DTTM <= &FILTER_DATE < TO_DTTM
Überlegungen:
Ansatz 1 ist mit der BETWEEN-Klauselsyntax (einschließlich Bereich) kompatibel.Aus diesem Grund halte ich es für den besten Ansatz, aber – und das ist meine Sorge – es wird immer eine Lücke zwischen den Schließ- und Öffnungszeitstempeln geben!Beispielsweise wird Folgendes (aus geschäftlicher Sicht fälschlicherweise) nichts zurückgeben:
where FROM_DTTM <= '31-DEC-2012 23:59:59.1'dt <= TO_DTTM
Verschiedene Datenbanken weisen hier unterschiedliche Genauigkeitsgrade auf.Ich denke, es müsste Standard sein (beim Filtern immer auf die nächste Sekunde runden), aber ich habe mich nur gefragt, ob es andere Gründe gibt, Ansatz 1 zu unterstützen (z. B. die vorgeschlagene bitemporale „AS OF“-Syntaxkompatibilität)?Oder tatsächlich, ob (und warum) Ansatz 2 vorzuziehen wäre.
Lösung
Für Kontinuen (z. B. Datum/Uhrzeit oder numerische Maße) würde ich fast immer den halboffenen Intervallansatz (Ansatz 2) empfehlen.Wie Sie sagen, führt Ansatz 1 tendenziell zu Lücken, oder Sie müssen die genaue Genauigkeit kennen, um den Endpunkt zu berechnen.Die Berechnung der Endpunkte in Ansatz 2 ist tendenziell immer einfacher.
Der „Vorteil“ der Nutzungsfähigkeit BETWEEN
ist für mich ein sehr geringfügiges Problem im Vergleich dazu, sich schnell von der Richtigkeit der Anfrage überzeugen zu können.
Für nicht kontinuierliche Daten (Datumsangaben ohne Uhrzeit oder diskrete Zahlen) greife ich möglicherweise auf die Verwendung eines geschlossenen Intervalls zurück.