私はではありません。監査または履歴追跡が必要です。SQL 2005/2008データベーストラックフィールドの変更
私は、外部ソースからデータを取得するアプリケーションを持っています。 独自のDBで外部テーブルをミラー化します。ユーザーはDB内のデータを更新できます。 次回、システムが外部データと同期するときに、ローカルで変更されていないフィールドだけが上書きされます。私はこの
1を行うには、2つの方法)各オブジェクトのストア2行と考えることができます私の頭の上オフ
。最初の1は外部バージョンで、2番目の行は外部バージョンにリンクしますが、フィールドが変更されている場合はそのフィールドにデータのみが含まれます。例:
id | parentId | field1 | field2
1 | null | foo | bar
2 | 1 | new foo | null
これは、ローカルユーザーがフィールド1を変更したときのデータの外観を示しています。 変更が発生しなかった場合、最初の行のみが存在します。
2)表の列数を2倍にします。 例えば name_external name_internal
それは良好な分離および照会すると2つのオブジェクト間のコードの比較で行うことが容易を提供しますようにそれはそうと、私はオプション1より良いが好き。唯一の欠点は、結果的に行が増えることですが、DBはかなり小さくなります。
他にも使用できるパターンはありますか?それとも私は、.NET 4つのWCFサービス
ソリューション
を使用するオプション1
で行くべきではない理由は、私は以下に2つのテーブルの答えとなります。ローカルに変更されているフィールドは、DBがしかUIシステムを介して更新されることができるようになり、私のように
SELECT
a.[ID],
isnull(b.[firstName], a.[firstName]),
isnull(b.[lastName], a.[lastName]),
isnull(b.[dob], a.[dob]),
isnull(b.active, a.active)
From tbl1 a
left join tbl2 b on a.[ID] = b.[ID]
orginal値と合併した行を返すために、次のSQLを使用します。そして、人々が空の文字列を入力する代わりに値としてNULLを入力することを許可されないようにすることができます。これは、私はあなたがオプション1
を選択した場合、ユーザーがデータを更新できるようにすると、あなたはどちらかを意味しますについて考えることができる2つの問題があります。私は、ユーザーが
いくつのフィールドがありますか?何行ですか?どんなSQL版? – Hawxby
20テーブル、各テーブルの2〜20カラム。各テーブルは100 - 5000行の間にあります – Daveo