Wenn ich das folgende Tabellendesign verwende, um den Verlauf zu erfassen ...:
CREATE TABLE MyTable (
insertion_timestamp TIMESTAMP,
deleted_flag BOOLEAN,
natural_key INT,
attribute VARCHAR
);
... was soll dann der Primärschlüssel sein?
(Der Verlaufsmechanismus ist INSERT-only: Aktualisierte Zeilen werden mit einem anderen eingefügt insertion_timestamp, und gelöschte Zeilen werden mit einem anderen Zeitstempel eingefügt und auf deleted_flaggesetzt true.)
Ich denke PRIMARY KEY (insertion_timestamp, deleted_flag, natural_key), aber der einzige Grund für das Einschließen deleted_flagbesteht darin, die Möglichkeit zu berücksichtigen, dass eine Zeile eingefügt und dann (weich) sofort gelöscht wird, früher als das nächste Häkchen der Granularität des TIMESTAMPDatentyps. Das fühlt sich übermäßig paranoid an ...
insertedAt,isActive(!deleted_flag).