是否在您尝试获取数据时并没有明显的简单方法?
当你发现某些东西应该是它自己的桌子时?
有哪些法律?
答案 0 :(得分:7)
结帐Wikipedia。本文讨论了数据库规范化和不同形式(第一,第二,第三等)。大多数时候你应该至少瞄准third normal form。有时你想放松一些规则(将多个表连接在一起可能太昂贵,所以可能想要对一些规范进行去标准化)但是大多数情况下第三种正常形式都是好的。
答案 1 :(得分:6)
当您注意到必须重复相同的数据时,或者当您开始将单个字段用作数组时。
答案 2 :(得分:3)
虽然这是一个有点讽刺的答案,但是当您发现数据没有充分规范化时, 。网络上有许多关于规范化的级别(或更恰当地说,“形式”)的资源,它们比我在这里更完整地描述了形式。应该非常需要第一和第二范式。如果你不是第三(或者说,真的,第四)正常形式,你需要有充分的理由说明原因。
答案 3 :(得分:2)
当您开始质疑SQL数据库是否需要更多规范化时。
答案 4 :(得分:2)
每当你有一个关系数据库.... <grin/>
不,实际上有法律,请查看此维基百科link。
他们被称为五种正常形式或类似的东西。最初来自50年代/ 60年代发明关系数据库的人,E。F. Codd。
“关键是整个钥匙,只有钥匙,所以帮助我Codd”
这是一个概要:
答案 5 :(得分:2)
其他人已经指出正规化的正式规则。以下是我使用的一些非正式指南:
如果表中有列,其名称只有一个数字(例如Phone1和PHone2)。
如果表格中有任何列,只有填写表格中的其他列时才应填写这些列。
如果更新数据库中的“事实”(例如街道地址),则需要多个UPDATE。
如果同一个问题可以得到两个不同的答案,具体取决于您从哪个表中获取信息。
如果可以从数据库中获得任何非平凡问题的答案,而无需至少加入两个表格。
如果您在数据库中有任何基于数量的限制,而不是“只允许一件事”(即“只允许一个地址”),但“只允许两个地址”表示规范化问题)。
答案 6 :(得分:1)
3NF通常是您所需要的,它遵循三条规则:
表中的每一列都应依赖于:
出于性能原因,您通常可以“降级”为2NF,如果您了解其含义并且仅在遇到问题时,但3NF应该是您所有设计的初始目标..
答案 7 :(得分:1)
正如其他人所说,你知道什么时候你开始在多个表中有太多的重复列。
话虽如此,在多个表中包含冗余列有时很有用。这可以减少在复杂查询中必须执行的JOIN数量。只是要小心保持所有表格同步,否则你只是在寻找麻烦。
答案 8 :(得分:0)
这是一篇非常好的文章。正常是科学,而不是艺术。现在知道什么时候去标准化...这是一门艺术。
http://www.alvechurchdata.co.uk/hints-and-tips/softnorm.html
答案 9 :(得分:0)
答案 10 :(得分:0)
您目前处于什么级别的正常化状态?如果你不能回答我认为你的数据库是一个讨厌的混乱。我总是在初始设计时达到第3次正常,并在需要时进一步去标准化或标准化。
答案 11 :(得分:0)
我假设您正在讨论支持交互式应用程序的事务数据库,但是它的价值是什么......
专门用于报告且仅由ETL过程更新的OLAP数据库可能受益于较不规范化的结构。在这些应用程序中,您接受冗余数据存储和复制的成本,以获得更少连接的性能优势,并增加(有时技术性较差)数据分析师和业务分析师的易用性。
交易数据库应始终在实际范围内(至少3NF)进行标准化,然后仅在需要时选择性地非规范化 。理想情况下,非规范化的需要应基于实际的性能测试结果。
答案 12 :(得分:-1)
当你必须搜索大量数据时,只是为了提取一些基本信息 - 即那里有什么样的产品类别或类似的东西。