2015-06-16 164 views
0

我分割兩個部分的電話號碼:貯藏電話號碼國家代碼

  • 國字頭(例如+49)
  • 電話號碼沒有前導0

我的問題是,這是最好的方法來儲存國家代碼因爲它是(+49)外鍵到一個國家表?

回答

0

的選擇取決於:

  1. 號或記錄
  2. 該數據庫使用
  3. 關係與其它表

如號國家代碼將是一個重複列,它可以放在varchar類型列中,就像它是例如+ 91-9654637268。這將允許不同格式的電話號碼,但不能在數據庫級驗證輸入的值必須是您需要在代碼級別驗證的數字。使用varchar必須是存儲電話的首選號碼與他們的國家代碼,因爲它會避免加入更快。


但是,如果你需要大量的操作,使用一個bigint將存儲數字,例如, 9764536377443其中前兩位是國家代碼,其餘的數字是電話號碼部分。


或者你可以爲國家代碼單獨的列這將增加不必要的加入,但如果需要的國家代碼在幾個地方,必須很好的驗證和約束whihc也可以通過實現可幫助使用上述任何技術。

希望它有幫助。

0

事務數據庫

如果這是一個事務型數據庫(很多更新),或通用數據庫(查詢和更新),然後使用數據庫正常化喬納森說。因此,有一個叫國表結構

| ID | CountyCode | CountryName | 
| 1 | +49  | Germany  | 
| 2 | +1   | USA   | 

這樣你就可以保持國家代碼和大約的電話號碼數據與它走描述信息。所以說一個國家改變其名稱或國家代碼,而不必更新電話號碼錶中的每個受影響的行,只需更新國家/地區表中的一行即可。

然後爲電話號碼的其餘部分(根據您是否想要分割區號等等))與列,作爲一個外鍵引用CountyCode ID

| ID | CountyCodeID | TelNumber | 
| 1 | 1   | 12345  | 

但是記住,這是用大量的數據(數據集市,數據倉庫做的事情,在查詢重的情況下的通用方式),那麼不同的方法最好看Star Schemas

相關問題