0

私はまだ思考段階にあるので、コードがまだない理論的な質問が少しあります。ユーザーが DropBox Datastore などを介して他のユーザーとデータを共有できるようにアプリを更新したいと考えています。ただし、ユーザーがデバイス上の複数の sqlite テーブルに入力されるデータを作成する場合、各テーブルには、データをリンクするために他のテーブルで外部キーとして使用される主キーとして自動増分整数があります。

実際にデータを作成して共有しているユーザーが複数いる場合、主キー列が明らかに問題になります。データをダウンロードしてローカルに保存すると、ユーザー 1 のキー値をユーザー 2 のデータ テーブルに挿入することはできません。これは、まず自動インクリメントが原因であり、次にユーザー 2 がそのキー値で保存された共有されていないデータを既に持っている可能性があるためです。 .

いくつかのオプションについて考えましたが、特に魅力的または堅牢なものはありません。デバイスを識別するためにUUIDを作成することを考えていました。その値は各テーブルに格納する必要があり、主キーはその列と現在の主キー整数の組み合わせであり、明らかにauto-インクリメントが削除されました。したがって、各テーブルからすべての関連データを取得するには、id 列と UUID 列の両方を使用する必要があります。

これを達成するためのより堅牢な方法が必要だと思いますが、より良い提案はありますか?

4

1 に答える 1

1

私がよく理解しているのであれば、ローカルアプリと通信するためにクラウド内にある種の集中型データベースが必要ですよね? クライアントは、そのようなシステムの ID を作成しないでください。これらの場合の通常のプラクティスは、クラウド内の DB によって作成されたリモート ID を常に持つことです。この値がまだない場合はいつでも、フォールバック値 (ローカルで作成されたローカル ID - これとは異なります) を持つことができます。リモートのもの)。

したがって、私の言葉を説明するために、次の例を設定できます。アプリはメッセージをデータベースに保存します。ローカル ID が 1、2、3 のメッセージを作成するとします。これらの ID は、クラウド内の中央データベースで一意になることは決してありません。代わりに、それらをローカル フォールバックとして使用します。これら 3 つのメッセージを中央データベースに送信できるとすぐに、一意の手段として使用する 3 つの新しいリモート ID (つまり、35、46、54) が与えられます。

複数のリクエスタ/ユーザーが 1 つの同じデータベースにアクセスしている場合、説明したアプローチに従うか、クラウド内のデータベースに対して事前にオンデマンドで特定の数の一意の ID をクエリしない限り、一意性を保証する方法がないことに注意してください。実際の真実は、サーバー内のデータベースによってのみ提供されることに注意してください。

于 2013-10-31T15:37:47.457 に答える