2011-12-10 42 views
0

我正在建立一個非常重要的州立機構的數據庫。到目前爲止,對於主鍵列,我有時使用數字,特別是int32或int64,有時我使用了char,但仍然只存儲數字字符。由於這是一項非常重要的任務,我必須使其性能和舒適性更高效。現在我想知道,如果考慮到char列中的值仍然是數字字符,對PK列使用數字或字符有什麼區別。主鍵列的數字或字符

P.S.你可能想知道,如果我反正存儲數字字符,使用char是什麼。原因是由於PK欄由很多部分組成,如國家3個字符,省3個字符,城市3個字符,一個人6個字符。除此之外,我可以在這些列上進行字符串操作,而不用擔心顯式轉換(我知道在Oracle中存在隱式轉換,但不建議依靠它)。

+2

你爲什麼要用char列來存儲數字?使用數字列將會更加高效和靈活。 – Joe

回答

6

既不是這樣。 你的主要關鍵應該是代孕。 Int或big int,如果縮放將成爲問題,則爲Guid。 那麼你應該有國家,省,市和人作爲一個獨特的複合關鍵。 「智能」號碼通常不是一個好主意。

+0

謝謝你,託尼。我想我會按照你的建議使用代理。 –

2

通常用於主鍵的整數數據類型,數據索引的性能不如varchar。如果您需要另一個獨特的鍵,如字符組合,您可以將其添加到標記爲唯一的主鍵旁邊。

另一個重要的原因,對我來說,使用通用數據作爲主鍵如整數或GUID是爲了靈活性。例如,您可以使用電子郵件地址作爲用戶表的主鍵。但幾天後,當您需要更改您的應用程序規則時,一個用戶可以擁有多個電子郵件地址。你將會更難以改變你的數據結構。