【问题标题】:What do you consider to be the best balance of columns within an address table?您认为地址表中列的最佳平衡是什么?
【发布时间】:2010-11-27 09:04:10
【问题描述】:

几乎每次我构建应用程序时,我都会发现自己创建了一个“地址”表来包含系统的地址。

您在您的“地址”表中创建了哪些列(或者,如果您将多个地址归一化,则为表),您的理由是什么?

【问题讨论】:

标签: sql database-design data-modeling street-address


【解决方案1】:

在理想情况下,每个应用程序都会以规范格式(例如 UPU 或 BS7666)存储地址。将结构化地址合并为单个字符串以进行打印比随后从单个文本块中提取地址元素要容易得多。因为迟早会有人,也许不是你,会想要用地址信息“做点什么”。如今,数据仓库非常流行。

不幸的是,实现BS7666 之类的东西通常需要地址验证软件。要求普通用户将地址适应 procrustean 格式是不合理的:我们不能指望他们会理解 localitytownpost town 之间的区别。并且在未经验证的情况下将某些东西吹捧为标准格式是一种误导。

但是选择某种形式的结构。此外,至少使用正则表达式验证邮政编码/zip 以确保其格式正确。

【讨论】:

    【解决方案2】:

    我要折腾一个“取决于”的答案。如果您的应用程序只关心正确打印的地址标签的布局,那么一组行(line1、line2、line3 等)就足够了。文本 blob 也可以工作,具体取决于输入数据的方式。给用户一个盒子让他们打字?让它们适合 3、4、5 行?随便。

    但是,如果您希望能够对数据进行“处理”,例如按邮政编码排序、按城市、州和/或国家/地区分析分布,或者跟踪您的街道地址中有多少位数(10 Main St. vs. 54321 Main St.),那么您需要为每条重要信息设置单独的列。

    似乎要求将是“包括地址空间”,关于地址实际处理的决定将在稍后提出......此时他们将希望能够排序/计数/取幂/无论如何,即使他们永远不会真正做到。根据其他帖子中引用的链接,一旦你走向国际,它确实会变得非常复杂。我想说尽量保持简单合理,其中“合理”取决于需求背后的业务推理。

    【讨论】:

      【解决方案3】:
      • 第 1 行
      • 第 2 行
      • 第 3 行
      • 地区
      • 地区
      • 邮政编码
      • 国家(作为国家表的外键)

      不包括国家,所有这些字段都是文本(varchar)。

      这假定收件人存储在其他地方。

      也可以是适当的,例如,丢失其中一行并将其替换为:

      • 街道号码
      • 街道名称

      因为这有助于验证、通过 Web 服务查找地址等。

      【讨论】:

      • 您是否考虑过将“行”聚合到单个文本列中并包含换行符?你有什么理由喜欢这种设计吗?
      • 多行的原因是用户将在 99.9% 的情况下输入他们的地址,如果您要邮寄一些东西,如何正确格式化它,这通常是您想要的格式.
      • @Josiah:cletus 的推荐是合理的。一个地址最多可以包含 4 条可选线路:例如 c/o 线路、RR(农村路线)、街道、套房。
      • @rexem:我同意这是一个合理的建议,但是我认为通过包含由换行符分隔的行的单个“文本”列可以提供更大的灵活性(例如,如果用户需要有 4 行地址)。这些信息如何显示给用户并不重要,可以显示为 3 行。更改表单比更改数据库以及与之相关的所有重构要容易得多。
      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多