你怎么知道SQL数据库何时需要更多规范化?

时间:2009-11-03 14:19:44

标签: sql sql-server database database-design normalization

是否在您尝试获取数据时并没有明显的简单方法?

当你发现某些东西应该是它自己的桌子时?

有哪些法律?

13 个答案:

答案 0 :(得分:7)

结帐Wikipedia。本文讨论了数据库规范化和不同形式(第一,第二,第三等)。大多数时候你应该至少瞄准third normal form。有时你想放松一些规则(将多个表连接在一起可能太昂贵,所以可能想要对一些规范进行去标准化)但是大多数情况下第三种正常形式都是好的。

答案 1 :(得分:6)

当您注意到必须重复相同的数据时,或者当您开始将单个字段用作数组时。

答案 2 :(得分:3)

虽然这是一个有点讽刺的答案,但是当您发现数据没有充分规范化时, 。网络上有许多关于规范化的级别(或更恰当地说,“形式”)的资源,它们比我在这里更完整地描述了形式。应该非常需要第一和第二范式。如果你不是第三(或者说,真的,第四)正常形式,你需要有充分的理由说明原因。

查看Wikipedia article on database normalization

答案 3 :(得分:2)

当您开始质疑SQL数据库是否需要更多规范化时。

答案 4 :(得分:2)

每当你有一个关系数据库.... <grin/>

不,实际上有法律,请查看此维基百科link

他们被称为五种正常形式或类似的东西。最初来自50年代/ 60年代发明关系数据库的人,E。F. Codd。

“关键是整个钥匙,只有钥匙,所以帮助我Codd”

这是一个概要:

  1. 第一范式(1NF)表 忠实地代表一种关系和 没有重复的小组
  2. 第二范式(2NF)没有 表中的非素数属性是 功能上依赖于某个部分 (适当的子集)候选键
  3. 第三范式(3NF)每一个 非素数属性是 非传递性依赖于每一个 表的关键表中的每个非平凡的函数依赖都是对超级键的依赖
  4. 第四范式(4NF)每一个     非平凡的多值依赖     在表中依赖于a     超密钥
  5. 第五范式(5NF)表中的超级键表示表中的每个非平凡连接依赖关系。域/密钥正规形式(DKNF)Ronald Fagin(1981)[19]表上的每个约束都是表的域约束和关键约束的逻辑结果
  6. 第六普通形式(6NF)表格没有 根本不重要的连接依赖关系 (参考广义连接 操作者)

答案 5 :(得分:2)

其他人已经指出正规化的正式规则。以下是我使用的一些非正式指南:

  1. 如果表中有列,其名称只有一个数字(例如Phone1和PHone2)。

  2. 如果表格中有任何列,只有填写表格中的其他列时才应填写这些列。

  3. 如果更新数据库中的“事实”(例如街道地址),则需要多个UPDATE。

  4. 如果同一个问题可以得到两个不同的答案,具体取决于您从哪个表中获取信息。

  5. 如果可以从数据库中获得任何非平凡问题的答案,而无需至少加入两个表格。

  6. 如果您在数据库中有任何基于数量的限制,而不是“只允许一件事”(即“只允许一个地址”),但“只允许两个地址”表示规范化问题)。

答案 6 :(得分:1)

3NF通常是您所需要的,它遵循三条规则:

表中的每一列都应依赖于:

  • 钥匙(1NF),
  • 整个密钥(2NF),
  • 除了钥匙(3NF)之外什么都没有(所以帮助我Codd就是引用通常结束的方式)。

出于性能原因,您通常可以“降级”为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)

当你必须搜索大量数据时,只是为了提取一些基本信息 - 即那里有什么样的产品类别或类似的东西。