存储在数据库中的地址应该正常化吗?

问题描述:

快速问题。存储在数据库中的地址应该正常化吗?

考虑下表(英国):

  • 客户ID(PK)
  • House_No /名称
  • 街道
  • 邮编

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

本来我分隔这关看起来是这样的:

客户表

  • 客户ID(PK)
  • AddressID(FK)

地址表

  • AddressID(PK)
  • 邮编(FK)
  • House_Number_name

邮编表:

  • 邮编(PK)
  • StreetName
  • CityID(FK )

市表

  • CityID(PK)
  • CITYNAME

,除非我有我的假设错了一个邮政编码唯一标识streetname和城市这不是在3NF?

+2

MySQL和MS-Access?不要标记不涉及的产品。 – jarlh

+0

这是为了什么国家?至少在美国,邮编不表示街道,甚至不一定是城市。但我不能确定其他国家。 –

+0

大家好,这是英国。 – satkin859

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

如果这是一个实际的规则而不是假设,我只是把它们放在一张表中。

但是,假设把'屁股'放在'你'和'我'中。

因此,发挥安全sperate地址到另一个表。 但它看起来像你正在采取规范化太远从你的例子。

+0

太好了,谢谢。所以你建议只用客户,名字,地址做一个表格而不是将其分开? – satkin859

+0

只有当您确定每个客户只能拥有1个且不会更改时。 但我确实说过要安全地玩,请把它放在单独的桌子上。 – AntDC

+0

如果地址改变,为什么还需要一张独立的表格?肯定会在客户表中更新? – satkin859

这一切都取决于你的要求,但因此没有必要另一对一的关系,因为你可以把它放在相同的关系,你上面提到的客户不能有多个地址。
但根据我的经验,我建议你将它分解成另一个到多个关系,因为未来的需求。

+0

感谢您的回复。但在3NF方面,房号,街道名称和城市是否依赖邮编。因为如果是这样的话,我将不得不分开到另一张桌子上吗? – satkin859

+0

哦,好吧,所以客户表,AddressTable与客户的地址表中的FK?有没有一个合适的自然钥匙可以考虑或应该使用AddressID? – satkin859

是的,我会地址拆分为单独的表。

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

无论你继续像邮政编码的归一化的东西是口味的问题。在一个更“业余”的数据库中,我不认为这是必要的。但是,对于真实客户的大型数据库,我倾向于将其拆分。它有助于确保邮政编码的准确性。此外,他们随着时间而改变。而且,例如,您可能会在邮政编码级别购买其他信息。

个人而言,我会把地址在另一个表,并把它们连接在一起。

业务假设/规则可能会改变,当你分割这些事情你必须适应任何可能的业务规则没有重大重做的最佳机会。

例如 - 哎呀,客户有不同的帐单地址比他们的送货地址,或哎呀,我们需要知道的东西,去年实际出货即使客户改变了自己的地址,今年等

+0

Thankyou的评论,我的下一个问题是:房子号码,街道名称和城市取决于邮编,因为如果他们这样做,身份证需要把这些在一个单独的表中在3NF – satkin859