我们有一个团队为软件开发人员设计表格和关系。在我们的组织中,他们对执行3NF标准化非常严格-坦白地说,鉴于我们的组织规模以及需求或客户随时间的变化,我同意。我对他们的设计决定背后的原因只有一个不清楚的地方:地址。
虽然这主要针对美国的地址,但我认为这可以适用于任何这样做的国家。地址的每个部分在地址表中都有自己的列。例如,以这个肮脏的美国地址为例:
Attn: Jane Doe
485 1/2 N Smith St SW, APT 300B
Chicago, IL 11111-2222
它会像这样在数据库中拆分:
- 街道号:485
- 街道分数:1/2
- 街道定向:N(北)
- 街道名称:史密斯
- 街道类型:ST(街道)
- 街后:SW(西南)
- 城市:芝加哥
- 州:IL(伊利诺伊州)
- 邮政编码:11111
- 邮政编码:2222
- 国家(假设为美国)
- 注意:Jane Doe
- 邮政信箱:NULL
- 居住类型:APT(公寓)
- 居住人数:300B
并且还会有其他几列与乡村路线和合同路线相关。此外,我们的特定应用程序可能会包含一些国际地址。数据建模人员表示,他们将添加特定于国际地址的列,即通常的第1行,第2行字段。
起初我以为这太过分了。反复进行在线研究是指使用地址行1、2、3和可能的4,然后划分城市,地区和邮政编码。对于这种粒度很有用的新应用程序,我们确实有一个用例。我们必须验证用户没有创建重复业务,并且检查地址是验证之一。我们可以使其与地址线1和2一起使用,但这会更加困难。
对于我们的特定应用程序,我们需要为企业和个人存储多种地址(实体地址,邮件地址,运输地址等)。我们可能需要生成可打印的套用信函,但到目前为止尚未讨论该要求。
我们组织中的应用程序还需要支持其他一些功能:
- 审核(带有完整的历史记录表)
- 打印邮件标签
- 生成打印表格
- 报告(针对国家和地区政府)
虽然我们的应用程序可能无法像其他应用程序那样做所有事情,但是将地址拆分为多个组件是我工作的企业标准。无论我们的应用程序是否将从中受益,我们都被迫这样做。
半相关的StackOverflow问题:一个好的地址解析器在哪里被关闭,但是它说明了解析地址有多困难。
为了让我更好地了解他们的设计决策,并向我们的客户推销该想法...
将街道地址分为几列可以解决哪些问题?
对于实施了这样的系统的任何人,如果他们遇到了问题,就会获得加分。