Skip to main content

数据库规范化的基础知识

P86 数据库设计三范式 —— MySQL教程零基础从入门到精通 (六月 2025)

P86 数据库设计三范式 —— MySQL教程零基础从入门到精通 (六月 2025)
Anonim

如果你已经在数据库工作了一段时间,你很可能听说过标准化这个术语。也许有人问你“这个数据库是否正常化了?”或者“这是在BCNF吗?”正常化往往被视为奢侈品,只有学者才有时间。但是,了解规范化的原则并将它们应用到日常数据库设计任务中并不是那么复杂,它可以极大地提高DBMS的性能。

在本文中,我们将介绍规范化的概念,并简要介绍最常见的常规形式。

什么是规范化?

规范化是在数据库中有效组织数据的过程。规范化过程有两个目标:消除冗余数据(例如,将相同数据存储在多个表中)并确保数据依赖性有意义(仅将相关数据存储在表中)。这两个都是有价值的目标,因为它们减少了数据库消耗的空间量并确保数据以逻辑方式存储。

正常形式

数据库社区已经制定了一系列准则,以确保数据库正常化。这些被称为正常形式,并且从一个(归一化的最低形式,称为第一正常形式或1NF)到五(第五正常形式或5NF)编号。在实际应用中,您经常会看到1NF,2NF和3NF以及偶尔的4NF。第五种常规形式很少见,本文不讨论。

在我们开始讨论正常形式之前,重要的是要指出它们只是指南和指南。偶尔,有必要偏离它们以满足实际的业务需求。但是,当发生变化时,评估它们可能对您的系统产生的任何后果以及可能的不一致性是非常重要的。也就是说,让我们探索正常形式。

第一范式(1NF)

第一范式(1NF)为有组织的数据库设置了非常基本的规则:

  • 消除同一个表中的重复列。
  • 为每组相关数据创建单独的表,并使用唯一列或一组列(主键)标识每一行。

第二范式(2NF)

第二范式(2NF)进一步解决了删除重复数据的概念:

  • 满足第一范式的所有要求。
  • 删除应用于表的多行的数据子集,并将它们放在单独的表中。
  • 通过使用外键在这些新表及其前任之间创建关系。

第三范式(3NF)

第三范式(3NF)更进了一步:

  • 满足第二范式的所有要求。
  • 删除不依赖主键的列。

Boyce-Codd普通形式(BCNF或3.5NF)

Boyce-Codd Normal Form,也被称为“第三和半(3.5)正常形式”,增加了一个要求:

  • 满足第三范式的所有要求。
  • 每个决定因素必须是候选键。

第四范式(4NF)

最后,第四范式(4NF)还有一个额外要求:

  • 满足第三范式的所有要求。
  • 如果没有多值依赖关系,则关系在4NF中。

请记住,这些规范化指南是累积的。对于2NF的数据库,它必须首先满足1NF数据库的所有条件。

我应该正常化吗?

虽然数据库规范化通常是一个好主意,但这不是绝对的要求。事实上,在某些情况下,故意违反规范化规则是一种很好的做法。有关此主题的更多信息,请阅读我应该规范化我的数据库吗?

如果您想确保数据库规范化,请首先学习如何将数据库放入First Normal Form。