1

私は2つのテーブルを持っています:

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

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

    アプリケーションにログインし、(artContents)列で記事のコンテンツを更新するユーザー。私が知りたいのは:

    1. ユーザーが記事の内容に加えた変更はどれですか?

    2. 記事の元のバージョンと編集されたバージョンの両方のバージョンを保存したいです!

上記の2つのタスクを実行するにはどうすればよいですか。

  • テーブルに必要な変更はありますか?

  • の正確に編集されたデータを取得するためのクエリ(artContents)

    • (正確に編集されたデータは、列に5000文字ある可能性があることを意味します。ユーザーは、列の文字の中央または他の場所で200文字を編集できます。編集前と編集後の、正確に編集された文字が必要です)

注:開発にはC#でASP.NETを使用しています

4

2 に答える 2

1

SQL を使用して正確な編集を行うことはできません。diffUnix on files (行レベルで機能する)などのアルゴリズムが必要です。文字レベルでは、アルゴリズムはレーベンシュタイン距離のバリエーションになります。diff必要に応じてダウンロードし、それを呼び出すストアド プロシージャを記述して、データベースで使用することができます。これはかなり高価になります。

さまざまなバージョンを維持するという質問の部分は、はるかに簡単です。各レコードに 2 つの列EffDateを追加します。いつでもアクティブなバージョン EndDateを探して見つけることで、最新のバージョンを取得できます。通常、このようなテーブルを維持するのに役立ちます。EndDate is NULLMerge

于 2013-02-14T13:18:01.790 に答える
0

基本的に、このタイプの要件にはカスタム ロギングが必要です。

あなたが提供した例、つまり「正確な編集データは、列に5000文字ある可能性があり、ユーザーは列の文字の途中または他の場所で200文字を編集できることを意味します。編集前の正確な編集文字が必要です。編集後」

ユーザーが特定の単語をテキストとは別の場所から更新する場合があります。

ロギングにはhttp://nlog-project.org/を使用できます。これは、通常 .net ロギングを行うために使用する高速で堅牢なツールです。

また 、エンティティの変更追跡のためのhttp://www.codeproject.com/Articles/38756/Two-Simple-Approaches-to-WinForms-Dirty-Tracking Asp.net Event を ご覧ください。オブジェクトの変更追跡

上記のURLは、それを行う方法について、いくらか空気をきれいにします。

明らかに、すべての変更を追跡して保存する必要があります。

于 2013-02-13T09:10:04.037 に答える