Nếu tôi sử dụng thiết kế bảng sau để ghi lại lịch sử ...:
CREATE TABLE MyTable (
insertion_timestamp TIMESTAMP,
deleted_flag BOOLEAN,
natural_key INT,
attribute VARCHAR
);
... Vậy khóa chính phải là gì?
(Cơ chế lịch sử là INSERT-only: các hàng cập nhật được chèn bằng một hàng khác insertion_timestampvà các hàng đã xóa được chèn bằng dấu thời gian khác và được deleted_flagđặt thành true.)
Tôi đang suy nghĩ PRIMARY KEY (insertion_timestamp, deleted_flag, natural_key), nhưng lý do duy nhất deleted_flagđể đưa vào là tính đến khả năng một hàng được chèn và sau đó (mềm) bị xóa ngay lập tức, sớm hơn dấu tích tiếp theo của mức độ chi tiết của TIMESTAMPloại dữ liệu. Cảm giác này quá hoang tưởng ...
insertedAt,isActive(!deleted_flag).