私は現在、SQL Server Compact 3.5 データベースを使用するタブレット用のアプリケーションに取り組んでいます。タブレット間でデータを同期する必要性が高まっています。いくつかの調査 (つまり、これとこれ) の後、私のチームと私は、SQL Server 2008 R2 によってホストされる中央データベースを持つことにしました。
この例を実装した後、このアプローチにはいくつかの欠点がありました。
テーブルのサブセットだけでなく、データベース全体を同期したいと考えています。これには、主キーがないテーブルに主キーを追加する必要があり、各テーブルを同期スコープに追加することは言うまでもありません。
同期方向に応じて、サーバー データベース (SQL Server 2008 R2 によってホストされる) またはクライアント データベース (SQL Server Compact 3.5) のいずれかが優先されます。つまり、一方のデータベースのデータが他方のデータベースによって作成されたデータを上書きする可能性があります。
私は、変更の追跡が役立つと信じており、該当する場合は、次のシナリオの解決策を見つけるために活用したいと考えています。
サーバーと 3 つのテーブルは現在、データベース内の同じデータベースと同期されています。
ID | NAME
---------
1 | JIM
2 | BOB
3 | JANE
3 台のタブレットは、それぞれの作業を行うためにオフラインになります。
タブレット 1 には、次の内容が追加されています。
4 | JOE
タブレット 2 は以下を追加します (タブレット 1 の後と仮定):
4 | BILL
タブレット 3 では、以下が追加されます (タブレット 2 以降を想定):
4 | DAVE
その後、タブレットはオンラインで再接続して、任意の順序で同期します。結局のところ、同期を行った後、サーバー データベースとクライアント データベースには次のデータが必要です。
ID | NAME
---------
1 | JIM
2 | BOB
3 | JANE
4 | JOE
5 | BILL
6 | DAVE
DBA の観点からは、マージ レプリケーションがありますが、db サーバーに対する sysadmin 権限 (または sql サーバーで自分自身に sysadmin 権限を付与するための PC 自体に対する管理者権限) がありません。したがって、可能であればこのルートを避け、同期フレームワーク (またはそれ以上) を使用したソリューションのコーディングに固執したいと思います。
上記の例を実装した後、最終的にシナリオの解決策を見つけるために正しい方向に進んでいますか、それとも他に何かする必要がありますか?