0

現在、サーバー間でデータを同期する必要があるアプリを開発しています。このアプリは SQLite を多用しているため、生の sqlite に移行し、FMDatabase を使用することにしました。データの状態を管理せず、データを収集して送信するだけであるため、テーブルは非正規化されており、キーはありません。一定の時間間隔でテーブルを更新しています (サーバーから取得して新しいコンテンツを挿入する) が、サーバーにデータを送信する頻度が高くなります。

サーバーからのデータは、id 値 (char 型の GUID 値) を持つ完全なレコードとして提供されるため、これらの id 列で構成されるテーブルの PK キーを作成しました。問題は、サーバーからデータを取得するときに、新しいレコードを挿入するだけでよいということです。現在、これらの id 値を使用して挿入を行っています。一部のレコードは挿入され (新規)、一部は ID 列の一意の PK 制約により失敗します。私にとっては、まったく問題ありません。コンソールのメッセージを煩わせるだけで(一意のキーに違反しています)、パフォーマンスなどに影響を与えているかどうかはわかりません。新しいレコードを挿入する前にレコードをループして、既存のレコードを見つけて、本当に新しいレコードだけを挿入することもできますが、私は思うそれは無駄です。

また、明示的な内部 int id を作成することもできます (PK インデックスの方が高速です) が、テーブルは FK とは関係がないため、冗長になります。それについて何か考えはありますか?

4

1 に答える 1

1

INSERT ステートメントにはオプションの ON CONFLICT 句が付属しているため、警告を抑制したい場合は、単に INSERT OR IGNORE を使用すると、重複した PK が無視されます。

于 2012-04-16T21:10:54.837 に答える