Два столбца идентификатора в SQLite Android. Это разумно?

Я изучаю исходный код приложения Google io schedule в образовательных целях. И я заметил интересную вещь.

В ScheduleProvider они используют два 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)");

Итак, мой вопрос: зачем им два столбца для id?

У меня есть одно предположение. Я думаю, что они не хотят отказываться от стандартных инструментов, таких как SimpleCursorAdapter поэтому они создали столбец "_id". Но они также хотят сделать много joins без конфликтов имен, поэтому они создали столбец "%table%_id" для каждой таблицы. Я прав? Если так, у меня есть другой вопрос. Как они генерируют уникальный "%table%_id" для каждой новой строки?


РЕДАКТИРОВАТЬ:

Я спрашиваю не только тех, кто исследовал этот код, но и опытных программистов Android, которые, вероятно, сталкивались с той же схемой.

0 ответов

Другие вопросы по тегам