私のシステムは、サーバーから更新のみを取得する必要があります。データベースを設計するにはどうすればよいですか?監査テーブルがありますか、それとも他の設計メカニズムがありますか?私が計画しているのは、デバイスから更新IDを送信し、新しい更新を取得することです。これを実際に実装する方法は?
3 に答える
SQLServerレプリケーションを探しているようです。2つの一般的なモデルと、SQLサーバーを使用して支援する方法について説明しているtechnetの記事「モバイルユーザーとのデータ交換」を参照することをお勧めします。
監査テーブルを使用して独自のロールを作成することもできますが、レプリケーションサービスが解決を支援することを目的とした更新の衝突の問題を管理する必要があります。
あなたが述べたように、何が変わったかを監査または変更テーブルに書き込むことは1つのアプローチです。
SQLServerを使用している場合は、タイムスタンプ列もあります。これはデータ時間の列ではありません。名前は誤解を招く恐れがあります。代わりに、それは増分番号であり、行がタッチされると、次の番号を取得します。最大タイムスタンプを取得してから、それよりも長いタイムスタンプを持つすべての行をクエリすると、変更/追加された行が取得されます。
http://msdn.microsoft.com/en-us/library/ms182776(v=sql.90).aspx
SQL Serverのタイムスタンプデータ型は、時刻や日付とは関係ありません。SQL Serverのタイムスタンプは、データベースでデータの変更が行われた相対的な順序を示す2進数です。タイムスタンプデータ型は元々、SQLServer回復アルゴリズムをサポートするために実装されました。
私が特に警戒するアプローチの1つは、透かしとして日時を使用することです。それはシフトし、変化する可能性があり、アルゴリズムでの使用には適していません-特に何が変化したかを検出するために。信頼できる透かしのアプローチとして日時に依存しようとしてシステムがダウンするのを見てきました。
数年前、私はこの種の設計を実装しました。それは非常に些細なことでしたが、うまくいきました。私が理解している限り、あなたはアドビのようにクライアントにアップデートをプッシュしたいと思っています。データベースにテーブルを保持します(テーブルである必要はなく、XMLでエントリを保持できます)。クライアントアプリケーションがロードされたら、サーバーに対してバージョンを確認します。不一致の場合は、最新の更新をダウンロードしてから、クライアントバージョンを更新します。それ以外の場合は、通常、クライアントアプリケーションをロードします。