1. ホーム
  2. iphone

[解決済み] Sqliteのアプリ内データベース移行のためのベストプラクティス

2022-12-21 05:48:48

質問

iphoneにsqliteを使用していますが、データベーススキーマが時間と共に変化することが予想されます。 毎回うまく移行するために気をつけるべきこと、命名規則、およびゴチャゴチャしたことは何ですか?

例えば、私はデータベース名にバージョンを追加することを考えました(例:Database_v1)。

どのように解決するのですか?

私は定期的にsqliteデータベースを更新し、古いデータベースを新しいスキーマに移行する必要があるアプリケーションを保守していますが、ここで私が行うことは次のとおりです。

データベースのバージョンを追跡するために、私はsqliteが提供する組み込みのユーザバージョン変数を使用します(sqliteはこの変数に対して何もしませんので、好きなように自由に使用してください)。 0から始まり、以下のsqliteステートメントでこの変数を取得/設定することができます。

> PRAGMA user_version;  
> PRAGMA user_version = 1;

アプリが起動すると、現在のユーザー バージョンをチェックし、スキーマを最新の状態にするために必要な変更を適用し、ユーザー バージョンを更新します。 私は更新をトランザクションでラップし、何か問題が発生しても変更がコミットされないようにします。

スキーマを変更するために、sqliteは特定の操作(テーブルの名前の変更や列の追加)に対して"ALTER TABLE"構文をサポートします。 これは、既存のテーブルをインプレースで更新する簡単な方法です。 こちらのドキュメントを参照してください。 http://www.sqlite.org/lang_altertable.html . 列の削除や、"ALTER TABLE" 構文でサポートされていないその他の変更については、私は新しいテーブルを作成し、そこに日付を移行して、古いテーブルを削除し、新しいテーブルの名前を元の名前に変更します。