如何在数据库中存储地址

时间:2019-01-18 12:23:48

标签: sql database-design street-address

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

我知道适当的解决方案很可能类似于整数类型的地址列,该地址列将指向地址表,该地址表本身将包含其他列,如州,城市,街道,房屋编号,办公室编号,所有这些都将本身可以是指向相关表(城市,州,街道)的整数,也可以是最后一个数据(housing_number,office_number)。

问题不仅仅在于我更喜欢​​使用一个或两个链接表,而不是在3、4(如我先前设想的设计)或更多表上使用困难的JOIN,这是事实,但是另外我真的不明白不做这样的事情的意思:

| 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解决方案。

2 个答案:

答案 0 :(得分:0)

听你的第一个命题是书本解决方案的正确,但是它确实需要在SQL和关系数据库中感到自在,就像计算机科学中的一切一样,这都是效率问题,规模有多大桌子会吗?请记住,在SQL中,即使您在SELECT中发出一些列,引擎也会始终绘制所有列,如果您的数据类型更重(字符占用更多的内存字节等),那么表显然会变得更重更重。如果您的使用仅通过id(主键)吸引用户,那么无论查询多大,它都不会真正变慢。

所有这些都是扩展性的问题,以及在构建数据时将如何处理这些数据,就像您的第一个建议一样,您计划未来,但现在却会浪费时间。

答案 1 :(得分:0)

类似的db应用程序的实际模式,可以用作样板:

enter image description here