我想知道这两种将历史信息保存在表格中的方法有哪些优点或缺点。
我知道SQL Server 2014
中有一些自动方式,例如CDC
或TDC
,但我想要一些自定义内容。
假设有一张员工表:
CREATE TABLE dbo.Employee
(
EmployeeId INT NOT NULL PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
DepartmentId INT,
StatusId INT,
CreatedDate datetime,
ModifiedUserId INT,
ModifiedDate datetime
)
我想的第一种方法是创建一个这样的历史表:
CREATE TABLE dbo.EmployeeHistory
(
EmployeeHistoryId INT NOT NULL PRIMARY KEY,
ActionTypeId INT, -- INSERT/UPDATE/DELETE
EmployeeId INT NOT NULL,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
DepartmentId INT,
StatusId INT,
ModifiedUserId INT,
ModifiedDate datetime
)
对于每次插入/更新/删除,我将在此历史记录表上创建一条记录所有信息的新记录。
第二种方法是让另一个具有不同结构的历史表只保留一条记录,其中包含已更改的特定信息,例如,如果我只更改FirstName
,我将保存一条记录旧的价值和新的价值就是这样。结构如下:
CREATE TABLE dbo.EmployeeHistory
(
EmployeeHistoryId INT NOT NULL PRIMARY KEY,
ActionTypeId INT, -- INSERT/UPDATE/DELETE
EmployeeId INT NOT NULL,
FieldName NVARCHAR(50),
OldValue NVARCHAR(50),
NewValue NVARCHAR(50),
ModifiedUserId INT,
ModifiedDate datetime
)