在 Postgres 中正确存储数百万 Phone 个数字

Proper Storage of Millions of Phone Numbers in Postgres

我正在从事一个专注于 phone 数字元信息的项目。

使用 postgres,我们将用数百万 phone 个数字作为数据库的种子,我很关心存储此信息的最佳方式。

现在我一直在考虑 phones table,每一行都将 phone 数字表示为一个字符串。然后简单地加入......如下所示:

+-----------------------+             +-----------------------+
|     phone_numbers     |             |     phones            |
+-----------------------+             +-----------------------+
| id: integer           +-------+     | id: integer           |
| digits: string        |       |     |                       |
|                       |       +-----+ phone_number: integer |
|                       |             |                       |
|                       |             |                       |
|                       |             |                       |
+-----------------------+             +-----------------------+

关于 phone 数字的存储,应该如何设计数据库架构?

对于国际 phone 号码,您真正可以遵循的唯一模式是将它们分成三个部分:

  1. 国际直拨前缀(可能与table关联以查找国家代码:http://en.wikipedia.org/wiki/List_of_country_calling_codes
  2. phone 号码本身。
  3. 分机号码

将它们存储为字符串以保留任何所需的格式空格或前导零,并验证它们是否遵循批准的模式。

选择是否存储国内 phone 号码“0”前缀——最好尽可能坚持 E.123 号码表示:http://en.wikipedia.org/wiki/E.123