2015-06-16 135 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

相关问题