存储在数据库中的地址应该正常化吗?
快速问题。存储在数据库中的地址应该正常化吗?
考虑下表(英国):
- 客户ID(PK)
- 名
- 姓
- House_No /名称
- 街道
- 市
- 邮编
你会将地址分隔到另一个表中吗?基本业务假设是一个客户不能有多个地址。
本来我分隔这关看起来是这样的:
客户表
- 客户ID(PK)
- 姓
- 姓
- AddressID(FK)
地址表
- AddressID(PK)
- 邮编(FK)
- House_Number_name
邮编表:
- 邮编(PK)
- StreetName
- CityID(FK )
市表
- CityID(PK)
- CITYNAME
,除非我有我的假设错了一个邮政编码唯一标识streetname和城市这不是在3NF?
是的,我会地址拆分为单独的表。
但是,原因不是正常化本身(在大多数情况下)。主要原因是它是一个缓慢变化的维度,查找以前的地址可能会有用。
无论你继续像邮政编码的归一化的东西是口味的问题。在一个更“业余”的数据库中,我不认为这是必要的。但是,对于真实客户的大型数据库,我倾向于将其拆分。它有助于确保邮政编码的准确性。此外,他们随着时间而改变。而且,例如,您可能会在邮政编码级别购买其他信息。
个人而言,我会把地址在另一个表,并把它们连接在一起。
业务假设/规则可能会改变,当你分割这些事情你必须适应任何可能的业务规则没有重大重做的最佳机会。
例如 - 哎呀,客户有不同的帐单地址比他们的送货地址,或哎呀,我们需要知道的东西,去年实际出货即使客户改变了自己的地址,今年等
Thankyou的评论,我的下一个问题是:房子号码,街道名称和城市取决于邮编,因为如果他们这样做,身份证需要把这些在一个单独的表中在3NF – satkin859
MySQL和MS-Access?不要标记不涉及的产品。 – jarlh
这是为了什么国家?至少在美国,邮编不表示街道,甚至不一定是城市。但我不能确定其他国家。 –
大家好,这是英国。 – satkin859