一些wiki平台使用的一种方法是分离识别数据和您正在审核的内容。 它增加了复杂性,但您最终得到了完整记录的审计跟踪,而不仅仅是已编辑的字段列表,您必须将其混搭以便让用户了解旧记录的外观。
例如,如果您有一个名为Opportunities的表来跟踪销售交易,您实际上会创建两个单独的表:
机会
Opportunities_Content(或类似的东西)
“机会”表将包含您用于唯一标识记录的信息,并包含您为外键关系引用的主键。 Opportunities_Content表将包含您的用户可以更改的所有字段以及您希望保留审计跟踪的字段。 内容表中的每条记录都包含自己的PK以及修改日期和修改日期数据。 机会表将包括对当前版本的引用以及有关何时最初创建主记录以及由谁创建的信息。
这是一个简单的例子:
CREATE TABLE dbo.Page(
ID int PRIMARY KEY,
Name nvarchar(200) NOT NULL,
CreatedByName nvarchar(100) NOT NULL,
CurrentRevision int NOT NULL,
CreatedDateTime datetime NOT NULL
内容如下:
CREATE TABLE dbo.PageContent(
PageID int NOT NULL,
Revision int NOT NULL,
Title nvarchar(200) NOT NULL,
User nvarchar(100) NOT NULL,
LastModified datetime NOT NULL,
Comment nvarchar(300) NULL,
Content nvarchar(max) NOT NULL,
Description nvarchar(200) NULL
我可能会使内容表的PK成为PageID和Revision提供的多列密钥,并且Revision是一个标识类型。 您可以使用“修订”列作为FK。 然后通过JOINing拉出合并记录,如下所示:
SELECT * FROM Page
JOIN PageContent ON CurrentRevision = Revision AND ID = PageID
那里可能有一些错误......这是我的头脑。 不过,它应该让你了解另一种模式。