教育目的でGoogle io スケジュール アプリのソース コードを調査しています。そして、興味深いことに気づきました。
ScheduleProvider
彼らは2つのフィールドを使用していますid
。たとえば、ブロックの表で、よく知られているものBaseColumns._ID
と別のものを使用していることがわかりますBlocksColumns.BLOCK_ID column
。
db.execSQL("CREATE TABLE " + Tables.BLOCKS + " ("
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ BlocksColumns.BLOCK_ID + " TEXT NOT NULL," // BlocksColumns.BLOCK_ID == "block_id"
+ BlocksColumns.BLOCK_TITLE + " TEXT NOT NULL,"
+ BlocksColumns.BLOCK_START + " INTEGER NOT NULL,"
+ BlocksColumns.BLOCK_END + " INTEGER NOT NULL,"
+ BlocksColumns.BLOCK_TYPE + " TEXT,"
+ BlocksColumns.BLOCK_SUBTITLE + " TEXT,"
+ "UNIQUE (" + BlocksColumns.BLOCK_ID + ") ON CONFLICT REPLACE)");
だから私の質問は:なぜ彼らは2つの列が必要なのid
ですか?
私は1つの仮定を持っています。標準ツールのようなものを拒否したくないSimpleCursorAdapter
ので、「_id」列を作成したと思います。しかし、彼らはまた、名前の競合なしで多くのことをしたいjoins
ので、各テーブルに「%table%_id」列を作成しました。私は正しいですか?もしそうなら、私は別の質問があります。新しい行ごとに一意の「%table%_id」を生成する方法は?
編集:
このコードを調査した人だけでなく、おそらく同じスキームに出くわした経験豊富な Android プログラマーにもお願いしています。