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

Database 存储电话号码国家/地区代码,database,Database,我将电话号码分为两部分: 国家前缀(例如+49) 没有前导0的电话号码 我的问题是,存储国家代码的最佳方法是(+49)还是将外键存储到国家表中?您应该使用数据库的标准格式。 有一些规则可以处理这样的问题 /选择取决于: 编号或记录 使用的数据库 与其他表的关系数 作为,国家/地区代码将是一个重复列。可以将其放置在varchar类型列中,例如+91-9654637268。这将允许不同格式的电话号码,但不允许在数据库级别验证输入的值必须是您需要在代码级别验证的号码。使用varchar必须是存储

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

  • 国家前缀(例如+49)
  • 没有前导0的电话号码

我的问题是,存储国家代码的最佳方法是(+49)还是将外键存储到国家表中?

您应该使用数据库的标准格式。

有一些规则可以处理这样的问题


/选择取决于:

  • 编号或记录
  • 使用的数据库
  • 与其他表的关系数
  • 作为,国家/地区代码将是一个重复列。可以将其放置在varchar类型列中,例如+91-9654637268。这将允许不同格式的电话号码,但不允许在数据库级别验证输入的值必须是您需要在代码级别验证的号码。使用varchar必须是存储电话号码的第一选择电话号码和他们的国家代码,因为它会更快地避免加入


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


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


    希望对您有所帮助。

    事务数据库

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

    | ID | CountyCode | CountryName |
    | 1  | +49        | Germany     |
    | 2  | +1         | USA         |
    
    这样,您就可以将国家/地区代码及其相关的描述信息与电话号码数据分开。因此,假设一个国家更改其名称或国家代码,而不必更新电话号码表中的每一行,您只需更新国家表中的一行即可

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

    | ID | CountyCodeID | TelNumber |
    | 1  | 1            | 12345     |
    
    但是请记住,这是一种通用的处理方式,在查询量大、数据量大的情况下(dataMart、datawarehouse),最好使用另一种方法