PostgreSQL中数百万电话号码的适当存储方法

5
我正在处理一个关于电话号码元信息的项目。使用 postgres,我们将向数据库中填充数百万个电话号码,并且我担心该如何最好地存储这些信息。
目前,我考虑创建一个名为 phones 的表,每行表示电话号码作为一个字符串。然后简单地进行连接……就像下面这样:
+-----------------------+             +-----------------------+
|     phone_numbers     |             |     phones            |
+-----------------------+             +-----------------------+
| id: integer           +-------+     | id: integer           |
| digits: string        |       |     |                       |
|                       |       +-----+ phone_number: integer |
|                       |             |                       |
|                       |             |                       |
|                       |             |                       |
+-----------------------+             +-----------------------+

数据库模式在存储电话号码方面应该如何设计?

1
一个人可以有多个电话号码,多个人也可以拥有同一个电话号码:你缺少一个用于连接人和电话之间多对多关系的表。 - Frank Heikens
各位,感谢你们的评论。我更新了示例,更加关注关系而不是表格。我特别想知道如何存储可以轻松引用的电话号码...例如字符串、数字、分解成区号、前缀、后缀等。谢谢。 - SharkLaser
1个回答

8
您只能遵循国际电话号码的唯一模式,将其分成三个部分:
  1. 国际直拨前缀(可能带有相关表格以查找国家代码:http://en.wikipedia.org/wiki/List_of_country_calling_codes
  2. 电话号码本身。
  3. 分机号码
为了保留所需的格式化空格或前导零并验证它们是否遵循批准的模式,请将它们作为字符串存储。
选择是否存储国内电话号码“0”前缀--最好在可能的情况下坚持使用E.123号码表示法:http://en.wikipedia.org/wiki/E.123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接