存储电话号码国家/地区代码

时间:2015-06-16 07:59:03

标签: database

我将电话号码拆分为两部分:

  • 国家/地区前缀(例如+49)
  • 电话号码不带领0

我的问题是,哪种方法可以将国家/地区代码原样(+49)外键存储到国家/地区代码?

3 个答案:

答案 0 :(得分:2)

您应该使用数据库的正常表单。 https://en.wikipedia.org/wiki/Database_normalization

有一些规则要解决这个问题。

/ M

答案 1 :(得分:0)

选择取决于:

  1. 否。或记录
  2. 使用的数据库
  3. 否。与其他表的关系
  4. 因为,国家代码是一个重复列,它可以放在varchar类型列中,因为它是例如+ 91-9654637268。这将允许不同格式的电话号码,但在数据库级别没有验证输入的值必须是您需要在代码级别验证的号码。使用varchar必须是存储电话的首选数字与国家代码,因为它会通过避免连接更快。

    但是如果你需要大量的操作,请使用bigint来存储数字,例如9764536377443前两位数字是国家代码,其余数字是电话号码部分。

    或者您可以为国家/地区代码添加一个单独的列,这将添加一个不必要的连接,但如果在多个地方需要国家/地区代码并且必须经过充分验证和约束,则可能会有所帮助,也可以通过使用任何一个来实现以上技术。

    希望它有用。

答案 2 :(得分:0)

交易数据库

如果这是一个事务数据库(大量更新)或通用数据库(查询和更新),那么就像Jonathan所说的那样使用数据库规范化。所以有一个名为Country with structure

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

通过这种方式,您可以将国家/地区代码及与其相关的描述信息与有关电话号码的数据保持一致。所以说一个国家更改其名称或国家代码,而不是更新电话号码表中的每个受影响的行,您只需更新国家/地区表中的一行。

然后是一个表,其余的电话号码(取决于你是否想要拆分区号等...),其中一列引用了作为外键的CountyCode ID

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

但请记住,这是一种通用的做事方式,在查询繁重的情况下,数据量较大(dataMart,datawarehouse),不同的方法最好看Star Schemas