就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,访问帮助中心 /help/reopen-questions 以获得指导。
考虑以下关系来说明我的问题:
Person( name, street, city, zipcode )
name -> street , city , zipcode
street + city -> zipcode
因此,如果我们知道这个名字,我们也就知道这个人住在哪里。但邮政编码也(暂时)依赖于街道+城市。因此,这种关系被打破3NF
并且应该分成两个表以保持一致。
但在这种情况下,我们对邮政编码作为单独的实体不感兴趣。它是地址的一部分,并且恰好是瞬态相关的。我们永远不会单独使用它。
我明白为什么标准化是一件好事。但真的有必要吗always 规范化(从而使数据库更加复杂)?如果没有,你怎么知道什么时候可以跳过它?
(如果我的术语或符号有错误,欢迎您指正)
除了性能之外,未完全标准化的另一个原因可能是数据中存在一定的“模糊性”。
As far as I understand1 , ZIP may be specific to a city block or area, which means an especially long street could have more than one ZIP. And even if ZIP did correspond to city+street in US, that might not be true for postal codes in other countries, should you ever decide to go international.
但即使assuming 邮政编码确实是特定于城市+街道的,人们可能自己输入地址信息,这意味着他们可能会犯错误,包括错误的邮政编码。因此,对于相同的城市和街道组合,您最终可能会得到两个邮政编码。
完全规范化的数据库根本无法表示这一点 - 您必须选择其中一个 ZIPsomehow 。除非您能够访问所有 ZIP 的完整、最新的数据库,否则您没有解决此冲突的好方法。如果您最终选择了错误的 ZIP,all 同一个城市+街道上的人会有错误的邮政编码。
另一方面,非规范化数据库会让每个人保留自己的 ZIP,并在以后承受后果隔离中 来自其他人。您甚至可以实施自动完成建议并“您确定吗?”如果用户为已有邮政编码的现有城市+街道输入不同的邮政编码,则会发出警告,但如果他表示确定,则让他(或她)继续。
1 And I don't live in US, so I might be off.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)