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

Posted by 刘知安 on 2018-11-15
文章目录
  1. Recall:
  • Normalization of Database
  • Problems Without Normalization
    1. 插入异常
    2. 更新异常
    3. 删除异常
  • 正规化的规则
    1. First Normal Form (1NF) 详细介绍1NF
    2. Second Normal Form (2NF) 详细介绍2NF
    3. Third Normal Form (3NF) 详细介绍3NF
    4. Boyce and Codd Normal Form (BCNF) 详细介绍BCNF
    5. Fourth Normal Form (4NF) 详细介绍4NF
  • 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只有一个学生(好像不太可能),有一天,这个学生真的太孤单了,他读不下去了,转去学管理了,很显然就要把他的信息删掉,问题就来了。因为我们的学生信息和专业的信息是绑在一起的,你删了这个唯一的同学,那这个专业、专业领导也被你删掉了,这样就有问题了。

    正规化的规则

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

    • 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.)

    后面会持续更新。