2011-10-04 46 views
0

你如何標記你的「代碼」,序列號(1,2,3,4 ... n)?數據庫設計 - 查找表

我的設備類型的查找表包含移動設備,並具有以下屬性

Id 
Code 
Name 
+0

你能解釋一下你正在嘗試做什麼嗎?您是否在尋找**代碼**作爲每個記錄的順序唯一ID? – Kirk

回答

0

如果您可以在序列中容忍的差距,你可以使用任何的建議,在其他的答案,您還可以使用Oracle SEQUENCEIDENTITY在MS SQL Server的IBM DB2或自增字段。

但是,如果您絕對需要避免差距,即使在併發環境中,情況也會突然變得不那麼簡單。實質上,你必須確定「候選者」的價值,然後嘗試插入它,然後準備好重試整個過程,如果一個併發事務插入它之前。

順便說一句,你可以使用code作爲主鍵,並完全放棄Id

+0

當然!我正在考慮丟棄Id,因爲Code是唯一的,永遠不會改變,但是它的確主鍵將使用varchar而不是int。那是問題嗎?還有代碼沒有固定長度,即「IPAD」「IPHONE」「ANDROID」 – 001

+0

@ 001在你的問題中,你說:「你怎麼給你的代碼貼上序號(1,2,3,4。 ...... N)?「*。所以我的理解是'code'是一個順序INT,而不是VARCHAR。也許你應該編輯你的問題,並使其更清楚? –

+0

@ 001試圖回答你的評論:你在這裏有兩個關鍵:一個自然('code')和一個代理('id')。這兩種策略(保持代理與不保留它)有優點和缺點,但這是沒有地方列出所有。對於一些提示,請參閱我的其他答案底部的項目符號點:http://stackoverflow.com/questions/7665735/how-do-i-organize-such-database-in-sqlite/7668726#7668726 –

0

在MySQL中,你可以描述字段(即列)爲「自動遞增」,這將在向表格中插入新聞行時更新您的code字段。我相信這對許多SQL系統(如果不是全部的話)都很常見。查看over here瞭解MySQL操作的描述。

0

在postgreSQL中,列類型是串行(或bigserial)來完成同樣的事情。然後,在插入時,將串行列留出,並且數據庫引擎將自動爲您增量,因爲Pete的優秀鏈接表示。

0

我們大多數人不會構建使用id號的表(通常是順序的)以及另外一個也是順序的代碼。沒有意義。

如果代碼是一個連續的唯一編號,則刪除id列並將代碼設置爲主鍵。

+0

我正在考慮刪除Id,因爲Code是唯一的,永遠不會改變,但是它的確如此,主鍵將使用varchar而不是int。那是問題嗎?另外,代碼沒有固定的長度,即「IPAD」「IPHONE」「ANDROID」 – 001

+0

「代碼」是一個相當短的VARCHAR()應該無關緊要。如果你使用一個ID號碼,你將永遠不得不使用一個連接;使用「代碼」你永遠不需要加入。我會讓「代碼」成爲主鍵。其他人會有其他意見。如果您確實要保留身份證號碼,請確保您聲明的「身份證號碼」列是唯一的。 –