Database design 是否有合法的理由将国际代码与其他数字分开存储?
我看过谷歌图书馆的libphonenumber,我想用它来格式化国际网站上用户输入的电话号码。最终结果需要一致,因为内部CRM与电话系统集成,以便在客户打电话时提取正确的用户帐户详细信息。电话系统将始终包含该用户的国际代码,即使呼叫来自与办公室相同的国家/地区 因此,我打算提供一个国际拨号代码下拉列表,然后将电话字段的其余部分保留为自由形式,但仅限于数字、空格、括号和破折号。然后通过去除除数字以外的所有内容来清除条目 libphonenumber将进行初始健全性检查,以确定它是否为有效数字,然后将其转换为正确的国际格式 我认为将区号和用户号码分开会有点过分,但我的问题是,是只存储最终的完全国际格式的条目,还是将国际代码单独存储到号码的其余部分(例如,2 db字段)。这样做是否有合法的技术原因,还是纯粹的商业决策 。。。我的问题是,是只存储最终的完全国际格式的条目,还是将国际代码单独存储到数字的其余部分(例如,2 db字段)。这样做是否有合法的技术原因,还是纯粹的商业决策 无论何时在数据库行中创建字段,都需要有存储该信息的业务原因 在您的示例中,单独存储国际拨号代码可以确定您有多少来自不同国家/地区的客户(根据国际拨号代码分组和求和)。另外,在同一个国家拨打电话时,您不需要国际拨号代码。因此,在大多数情况下,显示没有国际拨号代码的电话号码可能不会让用户感到困惑Database design 是否有合法的理由将国际代码与其他数字分开存储?,database-design,internationalization,phone-number,Database Design,Internationalization,Phone Number,我看过谷歌图书馆的libphonenumber,我想用它来格式化国际网站上用户输入的电话号码。最终结果需要一致,因为内部CRM与电话系统集成,以便在客户打电话时提取正确的用户帐户详细信息。电话系统将始终包含该用户的国际代码,即使呼叫来自与办公室相同的国家/地区 因此,我打算提供一个国际拨号代码下拉列表,然后将电话字段的其余部分保留为自由形式,但仅限于数字、空格、括号和破折号。然后通过去除除数字以外的所有内容来清除条目 libphonenumber将进行初始健全性检查,以确定它是否为有效数字,然后
将国际电话号码划分为不同的领域对大多数企业来说是很困难的,而且可能是矫枉过正的。然而,如果您有这样做的商业理由,您可以将大多数电话号码分为地区、地区和地区段。(我不熟悉所有的国际电话号码格式,因此您可能需要添加额外的段。)在数据库中存储两个字段:
| countryCode | nationalNumber
--------------------------------
| US | 800-flowers
可按如下方式使用(假设如此):
//谷歌的libphonenumber库
从“google libphonenumber”导入libphonenumber;
//抓住我们需要的部分
const phoneUtil=libphonenumber.PhoneNumberUtil.getInstance();
const phoneFormat=libphonenumber.PhoneNumberFormat;
//解析这个数字——假设我们已经从数据库中得到了这个数字
让我们解析;
试一试{
parsed=phoneUtil.parse(db.nationalNumber,db.countryCode);
}捕获(e){
抛出新错误(“无法解析电话号码”);
}
//现在打印几个示例
log(phoneUtil.format(已解析,phoneFormat.NATIONAL));
log(phoneUtil.format(已解析,phoneFormat.INTERNATIONAL));
log(phoneUtil.format(已解析,phoneFormat.E164));
将输出:
(800)356-9377
+1800-356-9377
+18003569377
。。。这足以分别显示给本地用户、国际拨号和编程使用(比如短信)