您应该规范化数据库中存储的地址吗?

问题描述 投票:0回答:4

请考虑下表(英国):

  • 客户 ID (PK)
  • 名字
  • 姓氏
  • 房屋_编号/名称
  • 街道
  • 城市
  • 邮政编码

您会将地址拆分到另一个表中吗? 基本业务假设是一位客户不能拥有多个地址。

最初我把它分开看起来像这样:

顾客表

  • 客户 ID (PK)
  • 名字
  • 姓氏
  • 地址ID (FK)

地址表

  • 地址ID(PK)
  • 邮政编码(FK)
  • 房屋_号码_名称

邮编表:

  • 邮政编码 (PK)
  • 街道名称
  • 城市ID(FK)

城市表

  • 城市ID(PK)
  • 城市名称

除非我的假设错误,即邮政编码唯一标识街道名称和城市,这不是在 3NF 中吗?

mysql sql database ms-access
4个回答
2
投票

就个人而言,我会将地址放在另一个表中,并将它们链接在一起。

业务假设/规则可能会发生变化,当您拆分这些内容时,您最有可能适应任何可能的业务规则,而无需进行重大重做。

例如 - 哎呀,客户的账单地址与送货地址不同,或者哎呀,我们需要知道去年的实际发货地点,即使客户今年更改了地址,等等。


0
投票

基本的业务假设是客户不能拥有超过 一个地址。

如果这是一条实际规则而不是假设,我会将它们保留在一个表中。

但是,假设将“ass”放在“u”和“me”中。

因此,请谨慎行事,将地址分散到另一个表中。 但看起来你的标准化与你的例子太过分了。


0
投票

是的,我会将地址分成一个单独的表。

但是,原因并不是标准化本身(在大多数情况下)。 主要原因是它是一个缓慢变化的维度,查找以前的地址可能会很有用。

是否继续将邮政编码之类的东西标准化是一个品味问题。 在比较“业余”的数据库中,我认为没有必要。 然而,对于真实客户的大型数据库,我倾向于将其分开。 它有助于确保邮政编码的准确性。 而且,它们会随着时间的推移而改变。 而且,例如,您可能会在邮政编码级别购买附加信息。


0
投票

这一切都取决于您的要求,但正如您上面提到的,客户不能有多个地址,因此不需要另一种一对一的关系,因为您可以将其置于同一关系中。但由于未来的需求,我建议您将其分解为另一种一对多关系。

© www.soinside.com 2019 - 2024. All rights reserved.