sqlite android中的两个id列。这合理吗?
我正在探索教育目的的源代码。我注意到一件有趣的事 在sqlite android中的两个id列。这合理吗?,android,sqlite,iosched,Android,Sqlite,Iosched,我正在探索教育目的的源代码。我注意到一件有趣的事 在ScheduleProvider中,他们使用两个id字段。例如,您可以看到,在块表中,它们使用众所周知的基本列。_ID和另一个BlocksColumns.BLOCK\u ID列 db.execSQL("CREATE TABLE " + Tables.BLOCKS + " (" + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
ScheduleProvider
中,他们使用两个id
字段。例如,您可以看到,在块表中,它们使用众所周知的基本列。_ID
和另一个BlocksColumns.BLOCK\u ID列
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
,所以他们创建了“\u id”列。但是他们也希望在没有名称冲突的情况下进行大量的联接,因此他们为每个表创建了“%table%\u id”列。我说得对吗?如果是的话,我还有一个问题。它们如何为每一新行生成唯一的“%table%\u id”
编辑:
我要问的不仅是那些研究过这段代码的人,还有可能遇到过相同方案的经验丰富的android程序员。这是合理的。正如您所看到的,只有一个主键。他们可能会把它用于其他目的,