我正在探索用于教育目的的google io schedule 应用程序的源代码。我注意到一件有趣的事情。
在ScheduleProvider
他们使用两个id
领域。例如,您可以在块表中看到他们使用 well knownBaseColumns._ID
和 another 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'?
编辑:
我不仅在问那些探索过这段代码的人,也问那些可能遇到过相同方案的有经验的安卓程序员。