2011-03-07 79 views
0

這可能是一個簡單的問題,但是當創建數據庫時,您可以改爲指定id而不是自動增量?指定android數據庫ID

我想要做的是與人建立數據庫,我可以使用他們的電話號碼進行查詢,以獲取有關該人在其他列中的更多信息。

可以這樣做,或者我可以做同樣的事情創建數據庫與自動遞增ID?

回答

1

Android使用sqlite數據庫;他們帶有一個「隱藏」的id列,該列自動增量,並且鏈接到您定義爲PRIMARY KEY的任何INTEGER列。

所以你不能擺脫額外的自動遞增列(它由sqlite內部使用)。但是沒有任何東西能夠讓你定義自己的不是INTEGER類型的PRIMARY KEY列。如果你這樣做,隱藏的_id列保持隱藏狀態。

所以,你可以這樣做:

 
CREATE TABLE people (
    phone_number VARCHAR(12) PRIMARY KEY, 
    firstname VARCHAR(32), 
    lastname VARCHAR(32), 
    ... 
); 

,並使用PHONE_NUMBER在此表的主鍵而不用擔心隱藏的_id列。

但是,我也建議(如Farray那樣)使用整數ID。電話號碼是一個非常糟糕的主鍵,因爲人們的電話號碼可能會改變,這意味着您必須更新大量表格。另外,如果您不存儲國際電話號碼,則您的電話號碼可能不是唯一的,因此將作爲主鍵失敗。

1

我建議讓用戶使用他們的電話號碼,並使用該表中的_id列作爲鏈接​​其他表的列表。這將使您的維護更容易。

+0

我明白_id的用法,但用戶不知道該用戶的ID,因此無法以這種方式進行搜索。基本上我想要做的是當有人發送短信文本消息從消息中獲取電話號碼,並通過數據庫交叉引用該號碼並獲取該號碼信息以使用 – tyczj 2011-03-07 19:14:12

+0

@tyczj該ID實際上僅用於內部使用 - JOIN您的查詢中的語句等。用戶(或處理入站SMS消息)不需要知道實際ID,只需將電話號碼傳遞給您的函數,然後讓您的SQL處理其餘的問題。它將有助於國際化和維護(更改數字等)。另外,我相信適當的索引應該使'int' PK更快地查詢。 (除非你打算將你的電話號碼存儲爲int) – Farray 2011-03-07 23:38:27