Tuple-Versionierung und zusammengesetzter Primärschlüssel

9

Ich muss eine Datenbank erstellen und sicherstellen, dass wir die Daten so laden können, wie sie zu einem bestimmten Datum waren, also habe ich beschlossen, Tupel-Versionierung .

Nehmen wir an, wir haben die folgenden zwei Tabellen:

%Vor%

Wenn ich zum ersten Mal einen neuen Autor eintrage, erzeuge ich eine neue GUID. Ich verwende diese GUID auch in der Büchertabelle, um auf den Autor zu verweisen.

Wenn es ein Update für den Autor gibt, erstelle ich einen neuen Datensatz mit der gleichen GUID, aber definiere das aktuelle Datum als "ValidFrom" und setze auch "ValidUntil" vom ursprünglichen Datensatz auf das aktuelle Datum.

Ich muss die Büchertabelle nicht ändern, da sich Autor.Id nicht geändert hat.

Das Problem, vor dem ich jetzt stehe, ist, dass ich eine Fremdschlüsseleinschränkung für Book.AuthorId = Author.Id

hinzufügen möchte

Leider funktioniert das nicht, weil ich einen zusammengesetzten Primärschlüssel verwende. Ich möchte nicht den Autor.ValidFrom meiner Book-Tabelle hinzufügen, da ich nur auf den neuesten und nicht auf eine bestimmte Version verweisen möchte.

Irgendeine Idee, wie ich das lösen kann? Ich denke, ich könnte einen Trigger hinzufügen, der sicherstellt, dass Sie einen Autor nicht löschen können, wenn bereits ein Buch aufgezeichnet wurde, aber ich habe keine Lösung, um das Löschen in Kaskade zu erlauben.

Ich bin dankbar für jeden Hinweis oder Rat.

    
MFox 20.05.2011, 14:09
quelle

1 Antwort

3

Dies funktioniert für 2008 (beruht auf der Verwendung einer MERGE-Anweisung, um zu ändern, auf welche Zeile von Book atomar verwiesen wird). Es führt neue Spalten ein, die Sie möglicherweise hinter einer Ansicht verbergen möchten:

%Vor%

Bei einer Lösung für die Zeit vor 2008 glaube ich nicht, dass Sie bessere Ergebnisse erzielen können als Auslöser. Sie können eine zweite Author-Tabelle einführen, die nur die Spalte Id (eindeutig) enthält, gegen die Sie Buch vorlesen können, und aus dieser Tabelle in das Buch Buchen verzweigen. Dann brauchen Sie nur einen Löschtrigger für Autor, so dass Sie die Zeile aus dieser neuen Tabelle löschen, wenn Sie die letzte Zeile aus dem Autor für eine bestimmte Autoren-ID entfernen.

    
Damien_The_Unbeliever 20.05.2011 14:45
quelle

Tags und Links