5

Wie würden Sie eine temporal Viele-zu-viele-Beziehung in SQL darstellen? Unter nicht-zeitlichen Umständen würde man eine junction table (alias link/bridge/map) verwenden, um die beiden Seiten zu verbinden.Wie würden Sie eine temporäre Viele-zu-Viele-Beziehung in SQL erstellen?

Wird das Hinzufügen von zeitlicher Verfolgung so einfach wie das Hinzufügen einer ValidStart- und einer ValidEnd-Spalte in der Junction-Tabelle? Wenn Sie dies getan haben, welche Probleme (falls vorhanden) sind aufgetreten? Gibt es eine bessere Methode, um Veränderungen im Laufe der Zeit in einer solchen Beziehung zu verfolgen?

Wenn es überhaupt hilft, in meinem Fall verwende ich speziell SQL 2008 und die temporalen Daten sind nicht bitemporal, da ich nur gültige Zeit tracking bin.

Antwort

5

Ich arbeite an einem Projekt (seit einigen Jahren), das sowohl temporäre Daten als auch zeitliche Viele-zu-Viele-Beziehungen verwendet. Jede Tabelle hat Spalten ValidFrom und ValidUntil (nur Daten speichern).

Zuerst müssen Sie die Semantik der Spalten Valid * definieren, d. H. Ob ValidUntil im Gültigkeitsbereich enthalten oder ausgeschlossen ist. Sie müssen außerdem angeben, ob NULL-Daten gültig sind und welche Bedeutung sie haben.

Als nächstes brauchen Sie ein paar Funktionen, wie dbo.Overlaps2() und dbo.Overlaps3(), die jeweils 2 und 3 Datumsbereiche erhalten, und geben 1 zurück, wenn sich die Datumsbereiche überschneiden und andernfalls 0.

Darüber hinaus definierte ich Ansichten für die Viele-zu-viele-Beziehungen mit dbo.Overlap3 (...) = 1.

Ein weiterer Punkt ist eine Reihe von Funktionen, die den effektiven Gültigkeitsbereich anhand von Daten in 2 oder 3 zusammenhängenden Tabellen berechnen.

Kürzlich musste ich Funktionalität hinzufügen, damit ein Benutzer alle verfügbaren Daten oder nur aktuell gültige Daten anzeigen kann. Ich speichere diese Einstellung in einer Benutzertabelle, verknüpfe die SPID beim Öffnen einer Verbindung mit dem Benutzer und filtere die Datensätze in einem anderen Satz von Ansichten.

+0

Wow, Sie haben damit viel gearbeitet. Ich dachte zum Beispiel zuerst an eine "effektive Preisgestaltung" auf einer Produkttabelle, aber es gibt natürlich viel mehr Anwendungsmöglichkeiten für eine "effektive Datierung" als diese. – jeremcc