如何在数据库中存储地址

How to store address in database

我正在开发一个 CRM 应用程序,用于存储与我们合作的公司的一些数据。例如:首席执行官的姓名和总部的实际地址。我经常需要查找位于特定城市的公司,然后按街道名称对搜索结果进行排序。

我知道正确的解决方案很可能是整数类型的地址列,它将指向地址 table,它本身将包含其他列,如州、城市、街道、housing_number, office_number 所有这些本身要么是指向相关 tables(城市、州、街道)的整数,要么是最终数据(housing_number、office_number).

问题不仅仅在于我更愿意table处理一两个链接的tables,而不是在 3、4 之间使用困难的 JOIN(比如我之前假设的设计)甚至更多 tables,而且我真的不明白不做这样的事情的意义:

| id  |      name       |  ceo_name   |    city     |     street       | house  | office |
|-----|-----------------|-------------|-------------|------------------|--------|--------|
|  1  | Company Name 1  | CEO Name 1  | New-York    | 5th Ave          |    22  |     12 |
|  2  | Company Name 2  | CEO Name 2  | New-York    | 44th St.         |    42  |     88 |
|  3  | Company Name 3  | CEO Name 3  | Boston      | Irish Lane       |     2  |     14 |
|  4  | Company Name 4  | CEO Name 4  | Washington  | Tahoe boulevard  |    54  |     19 |

如果我实施这样的解决方案,我 运行 会遇到什么问题?我拥有所有原子,因此如果需要增加,我以后总是可以实施 3-NF 解决方案。

听听你的第一个命题是正确的书解,但它确实需要在SQL和关系数据库中感觉舒适table,就像计算机科学中的一切一样,这都是效率问题,table 有多大?请记住,在 SQL 中,引擎总是绘制所有列,即使您在 SELECT 中发出一些列,如果您的数据类型更重(占用更多内存字节的字符等),那么显然table会越来越重。如果您的用途只是通过 id(主键)吸引用户,那么无论查询有多大,您的查询都不会真正变慢。

这完全是一个缩放问题,以及在构建数据时您将如何处理这些数据,就像您为未来计划的第一个建议,但您牺牲了现在的时间。

类似数据库应用程序的实际架构,可能用作样板文件: