2017-01-30 66 views
-1

我有一個映射表,它基本上將一個表的主鍵映射到另一個表的主鍵(以及其他一些列)。這兩個引用主鍵的列上都有索引。依賴於rowid而不是_id主鍵(SQLite)的優點/缺點

我想知道是否需要映射表的_id主鍵。在查詢中,我可以簡單地引用rowid而不是_id。 FWIW,數據庫在創建後未被修改。

創建_id列有什麼優點?

+0

不要求缺點,而不要求浪費空間。你會設想用它來訪問一行或多行(可能不是)?一個好處是如果使用遊標適配器,就像遊標適配器需要_id列(很容易繞過)一樣,想不出其他任何東西。關於插入的 – MikeT

回答

1

Android框架的許多部分期待您的查詢返回稱爲_id獨特的整數列。

如果映射表的內容從不在此類Android組件中顯示(例如,在列表視圖中查找這兩個名稱並顯示name1/name2映射),則不需要它。

然而,(almost)所有表都具有內部rowid,所以它不會傷害到明確聲明它爲_id,特別是如果你不知道,如果你也許需要它。

將其稱爲rowid並不總是一個好主意,因爲沒有明確的列,its value might change

+0

關於VACUUM潛在改變rowid的優點。我不知道。據推測,它不會改變行的順序。無論如何,我希望不會! – techehcet

1

如果_id是主鍵和整數類型,則它將成爲別名rowid

所以沒有太大的區別。

雖然它可能是不方便插入到包括的rowid:INSERT INTO test1(rowid, a, b) VALUES(123, 5, 'hello'); (From sqlite.org)

+0

,這兩種情況不是同義詞嗎? INSERT INTO test1(rowid,a,b)...與INSERT INTO test1(_id,a,b)... – techehcet

+0

@techehcet是的,但在'_id'的情況下,您可以簡單地使用INSERT INTO test1 VALUES'。無需指定列名稱。 – cshu

+0

啊好吧,我推測這會起作用,但現在我猜不是! – techehcet