2

教育目的で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 プログラマーにもお願いしています。

4

0 に答える 0