Предположим, у меня есть объект, с определенными полями, которые я хочу отслеживать историю, и определенными полями, которые я не хочу отслеживать историю. С точки зрения нормализации, следующая схема в порядке:
CREATE TABLE MyObject AS (
MyObjectId INT IDENTITY NOT NULL PRIMARY KEY,
MyObjectField1 VARCHAR(100) NOT NULL,
MyObjectField2 VARCHAR(100) NOT NULL,
MyObjectField3 VARCHAR(100) NOT NULL,
MyObjectTrackedField1 VARCHAR(100) NOT NULL,
MyObjectTrackedField2 VARCHAR(100) NOT NULL,
MyObjectTrackedField3 VARCHAR(100) NOT NULL,
)
CREATE TABLE MyObjectHistory AS (
MyObjectHistoryId INT IDENTITY NOT NULL PRIMARY KEY,
MyObjectId INT NOT NULL FOREIGN KEY REFERENCES MyObject(MyObjectId),
MyObjectTrackedField1 VARCHAR(100) NOT NULL,
MyObjectTrackedField2 VARCHAR(100) NOT NULL,
MyObjectTrackedField3 VARCHAR(100) NOT NULL,
)
где MyObjectHistory содержит отслеживаемые поля для всех, кроме последней версии. Или, если все отслеживаемые поля должны быть в одной таблице, а все версии, включая самые последние, должны быть в этой таблице, как в:
CREATE TABLE MyObject AS (
MyObjectId INT IDENTITY NOT NULL PRIMARY KEY,
MyObjectField1 VARCHAR(100) NOT NULL,
MyObjectField2 VARCHAR(100) NOT NULL,
MyObjectField3 VARCHAR(100) NOT NULL,
)
CREATE TABLE MyObjectHistory AS (
MyObjectHistoryId INT IDENTITY NOT NULL PRIMARY KEY,
MyObjectId INT NOT NULL FOREIGN KEY REFERENCES MyObject(MyObjectId),
MyObjectTrackedField1 VARCHAR(100) NOT NULL,
MyObjectTrackedField2 VARCHAR(100) NOT NULL,
MyObjectTrackedField3 VARCHAR(100) NOT NULL,
)