什么是在表格中跟踪历史信息的最佳方法

时间:2015-12-22 14:35:23

标签: sql-server sql-server-2014

我想知道这两种将历史信息保存在表格中的方法有哪些优点或缺点。

我知道SQL Server 2014中有一些自动方式,例如CDCTDC,但我想要一些自定义内容。

假设有一张员工表:

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
)

0 个答案:

没有答案