Jon*_*han 1 normalization foreign-key primary-key
我经常看到,您不应该将所有地址字段(邮编、街道、城市、州、国家/地区等)与用户信息表(pk_id、姓名、电子邮件...)放在同一个表中。
这将违反第 3 次规范化。这是有道理的,所有地址字段都不是基于用户(或用户的 pk)。
但是,我已经不止一次看到邮政编码是解决这个问题的一个很好的主/外键?嗯?示例:数据库规范化
显然不止一个人可以住在同一个邮政编码中,所以这对我来说没有意义。将邮政编码保留在用户表中但将其余地址保留在另一个表中对我来说似乎很奇怪。
分离地址表但仍遵守规范化规则的标准最佳方法是什么?
您链接到的页面很简单,是错误的。
邮政编码作为地址表中的主键是没有意义的。正如您所说,您希望在同一个邮政编码中有多个地址。邮政编码跨越城市、县和州界线,这使得它作为一个键变得非常糟糕(其他国家的邮政编码可能没有那么大的问题,但数据建模者总是不得不担心最坏的情况)。另外,邮政编码会随着时间的推移而变化,而您的主键中并不需要这些地址。
一般而言,鉴于地址往往没有任何可用作自然主键的内容,您的地址表将需要一个合成主键 ( address_id),它没有任何意义,仅用作主键。数据库有不同的方法来生成合成主键,序列和自增列是常见的方法。