1

我有两个表:

  1. Articles(artID, artContents, artPublishDate, artCategoryID, publisherID).

  2. ArticleUpdated(upArtID, upArtContents, upArtEditedData, upArtPublishDate, upArtCategory, upArtOriginalArticleID, upPublisherID)

    用户登录应用程序并在 (artContents) 列更新文章的内容。我想知道:

    1. 用户对文章内容进行了哪些更改?

    2. 我想存储文章的两个版本,原始版本和编辑版本!

我应该怎么做以上两个任务:

  • 对表格进行任何必要的更改吗?

  • 获取精确编辑数据的查询(artContents)

    • (确切的编辑数据意味着,coloumns 中可能有 5000 个字符,用户可以在中间或列字符中的其他位置编辑 200 个字符,我想要精确的那些编辑的字符,在编辑之前和之后)

注意:我使用 ASP.NET 和 C# 进行开发

4

2 回答 2

1

您将无法使用 SQL 进行精确的编辑。您需要一种算法,例如diff文件上的 Unix(在行级别上工作)。在字符级别,算法将是Levenshtein distance的一些变化。如果diff满足您的需求,您可以下载它,编写一个存储过程来调用它,然后在数据库中使用它。这将是相当昂贵的。

您维护不同版本的问题要容易得多。我会在每条记录上添加两个 colmnnsEffDate​​ 和。您可以通过查找并找到在任何给定时间处于活动状态的 EndDate版本来获取最新版本。通常对于维护这样的表很有用。EndDate is NULLMerge

于 2013-02-14T13:18:01.790 回答
0

基本上这种类型的需求需要自定义日志记录。

您提供的示例,即“确切的编辑数据意味着,coloumns 中可能有 5000 个字符,用户可以在中间或列字符中的其他位置编辑 200 个字符,我想要在编辑和编辑后"

可能会有用户从文本的不同位置更新特定单词的情况。

您可以使用http://nlog-project.org/进行日志记录,它是我们通常用于进行 .net 日志记录的快速而强大的工具。

你也可以看看 http://www.codeproject.com/Articles/38756/Two-Simple-Approaches-to-WinForms-Dirty-Tracking Asp.net Event for change tracking of entity 什么是最好的实现方式对象上的更改跟踪

以上网址将清除一些空气,如何做到这一点。

您显然需要追踪并存储每个更改。

于 2013-02-13T09:10:04.037 回答