Normalization of Database——数据库的正规化

版权声明:本文为博主原创文章,如需转载,请注明出处。 https://blog.csdn.net/qq_37174526/article/details/82776291

Recall:

数据库中的一些术语:(后面的中文可能翻译不准确,我自己这么称呼它们)
relation —— 关系模型
tuple entity—— 表中的一条记录,也成为实体
attribute/column —— 每个表头即属性
domain —— 属性的取值域
FD(functional dependency)—— 函数依赖
MVD(Multi-Valued Dependency) —— 多值依赖。。这个真不知道该怎么翻译

Normalization of Database

数据库正规化是数据库中如何合理且有效组织数据的一门技术,它也为我们提供了一套系统地消除数据冗余(redundancy)异常(anomaly)的方法。

正规化主要就是两个目的:

  • 消除数据冗余(或者说没意义的数据)
  • 确保数据之间的依赖关系是合乎逻辑的

Problems Without Normalization

假如在设计数据库关系的时候没考虑正规化,不仅会因为数据间的冗余从而浪费存储空间,同时,它也会给我们更新、删除数据时带来很多麻烦,也就是上面说到的异常,下面举例说明。
在这里插入图片描述

表头分别是学生id,学生姓名,学生具体的专业方向,hod(Head of Department) 学院的领导,办公电话。

插入异常

假如来了个新生,他还没细分具体专业方向,于是乎在后三栏我们就没办法添了,只能用NULL来补充了,这样就很不方便了;相反,假如软件工程专业有50个学生,那么这50个学生的后三栏就会重复,但我们不得不重复地插入。

更新异常

好,假如某天Mr. X不当领导了,然后换了个领导Mr. Y,那么每个学生都需要将他的hod改成Mr. Y了。万一数据库管理员不小心漏了几个同学的没改,那这些学生的学籍就有错误了。

也许你会说:哎呀,那你管理员细心一点不就好了?

那我会说:你为什么不可以换一种设计数据表的方式呢?

删除异常

再假设,某个branch只有一个学生(好像不太可能),有一天,这个学生真的太孤单了,他读不下去了,转去学管理了,很显然就要把他的信息删掉,问题就来了。因为我们的学生信息和专业的信息是绑在一起的,你删了这个唯一的同学,那这个专业、专业领导也被你删掉了,这样就有问题了。

正规化的规则

主要分为以下几种(越往后,要求越严格):

扫描二维码关注公众号,回复: 4534015 查看本文章
  • First Normal Form
  • Second Normal Form
  • Third Normal Form
  • BCNF(Boyce-Codd Normal Form)
  • Fourth Normal Form

First Normal Form (1NF) 详细介绍1NF

如果一个表是满足一范式的,那么它需要满足以下条件:

  1. 每个属性的取值必须是原子的atomic
  2. 每一列的domain必须是一样的
  3. 不存在相同的列名
  4. 列的排列顺序,以及每个tuple间的排列顺序可以交换。

Second Normal Form (2NF) 详细介绍2NF

如果一个表是满足二范式的,那么它需要满足以下条件:

  1. 它必须是满足一范式的
  2. 它不含有部分依赖(Partial Dependency)

Third Normal Form (3NF) 详细介绍3NF

如果一个表是满足三范式的,那么它需要满足以下条件:

  1. 它必须是满足二范式的
  2. 它不含有传递依赖(TransitiveDependency)

Boyce and Codd Normal Form (BCNF) 详细介绍BCNF

BCNF其实是第三范式的更高约束版本,它可以处理一些3NF处理不了的异常
如果一个表是满足BCNF的,那么它需要满足以下条件:

  1. 它必须是满足三范式的
  2. 对任意一个FD ( X → Y ), X应该是个超键(superkey).

Fourth Normal Form (4NF) 详细介绍4NF

如果一个表是满足三范式的,那么它需要满足以下条件:

  1. 它必须是满足BCNF的
  2. 它不含有多值依赖( Multi-Valued Dependency.)

后面会持续更新。

猜你喜欢

转载自blog.csdn.net/qq_37174526/article/details/82776291