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程序员。

这是合理的。正如您所看到的,只有一个主键。他们可能会把它用于其他目的,