2013-03-06 67 views
1

我有關於定義關係數據庫中的代碼的原則問題。假設(情況1)我們有一個代碼,例如,國籍代碼:sql數據庫 - 數字或字符串數​​據類型

1 
2 
... 
23 
... 
125 
... 

什麼是使用這種代碼的首選數據類型(?例如INT(3)VARCHAR(3))。範圍是1到999

之間

現在,假設我們再有一個數字代碼(案例2),但有固定的長度,例如,4:

2342 
3252 
2641 
... 

會是怎樣在這種情況下,適當的數據類型?

在這兩種情況下,沒有信息,就是一個數字的位置已經沒有任何意義,代碼只是一個區別ID。

我將不勝感激任何評論。謝謝。

+0

答案可能取決於它是否是真正國籍代碼或別的東西,因爲有在國際化中使用的標準縮寫,例如「EN-US」。但通常你會使用某種形式的整數。 Int16,int32,smallint。取決於關係數據庫中可用的內容。 – Tim 2013-03-06 11:00:09

回答

3

整數通常快於VARCHAR處理搜索,並採取了少一點空間,讓我說,如果有不涉及其他因素,去爲整數。

+0

非常感謝。性能是選擇整數的一個很好的理由。 – giordano 2013-03-06 11:08:39

+0

@giordano當然,性能增益/損失將取決於您選擇的RDBMS和「INT」類型,因此請確保自己進行測試。 – 2013-03-06 11:31:11

1

字符串較大,數據庫較慢。如果你不需要像「0289」那樣的東西,那麼用整數。

如果性能對你很重要的話,你可以將事件其存儲爲整數的數據庫和應用程序中的「289」就可以完成它爲「0289」程序,但它實際上取決於。

數據庫中的字符串索引不是首選的順便說一句。

+0

謝謝!我將使用整數。你關於索引的陳述會產生一個問題:索引對分類變量沒有意義,也就是說,它必須被轉換/映射到一個整數並且索引新變量?或者索引的分類變量的性能好於非索引的,但它不是最優的,並且在非常龐大而繁忙的數據庫中產生問題? – giordano 2013-03-06 11:31:25