关系数据库的规范化-七种范式

用通俗的讲解,让你更懂关系数据库。

话不多说,接下来正文: 

第一范式(1NF)

书本定义:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。

试问就以上这种说法有多少人能理解?写书的人真不考虑读者的心。

接下来看我的:

我的定义:第一范式就是要求表中的每个字段都必须是原子性的,即每个字段只能包含一个值,不能包含集合、数组或重复的组。

目标:消除表中的重复列组,使得每个字段的值都是不可分割的原子值。

示例

        1. 不符合1NF

订单ID | 商品
-------|----------
1      | 商品A, 商品B
2      | 商品C

        2.符合1NF

订单ID | 商品
-------|------
1      | 商品A
1      | 商品B
2      | 商品C

第二范式(2NF)

书本定义:若关模式R∈(属于)1NF,且每一个非主属性完全依赖主码时,则关系式R是2NF。

这句话说的云里雾里的,完全不知道啥意思。

我的定义:第二范式要求表格首先满足第一范式,并且每个非主属性完全依赖于主键,而不是仅依赖于主键的一部分。也就是说,所有的非主键字段必须对整个主键有完全的函数依赖。

目标:消除对主键部分依赖的冗余数据。

示例

        1. 不符合2NF

学生ID | 课程ID | 学生姓名 | 课程名
-------|--------|----------|------
1      | 101    | 张三     | 数据库
1      | 102    | 张三     | 网络
2      | 101    | 李四     | 数据库

        其中"学生姓名"仅依赖于"学生ID",而不是"学生ID, 课程ID"这个复合主键。       

        2. 符合2NF

                学生表:

学生ID | 学生姓名
-------|---------
1      | 张三
2      | 李四

                课程表:

课程ID | 课程名
-------|------
101    | 数据库
102    | 网络

                学生课程表:

学生ID | 课程ID
-------|------
1      | 101
1      | 102
2      | 101

第三范式(3NF)

书本定义:当2NF消除了非主属性对主码的传递函数依赖,则成为3NF。

我的定义:第三范式要求表格首先满足第二范式,并且所有非主键字段之间不存在传递依赖。即非主键字段必须直接依赖于主键,而不能依赖于其他非主键字段。

目标:消除传递依赖,确保数据的完全依赖于主键。

示例

        1. 不符合3NF

学生ID | 学生姓名 | 学生所在系
-------|----------|-----------
1      | 张三     | 计算机系
2      | 李四     | 信息系

        "学生所在系"依赖于"学生姓名",而"学生姓名"依赖于"学生ID",形成了传递依赖。

        2. 符合3NF

                学生表:

学生ID | 学生姓名 | 系ID
-------|----------|-----
1      | 张三     | 1
2      | 李四     | 2

                系表:

系ID | 系名
-----|-----
1    | 计算机系
2    | 信息系

BCNF(博茨-科得范式)BC范式

书本定义:如果关系模式R∈(属于)1NF,且没个属性都不传递依赖于R的候选码,那么称R是BCNF范式。

我的定义:BCNF是第三范式的一个加强版,它要求表格中的每一个决定因素都必须是候选键。即,如果一个属性(或一组属性)决定了其他属性,那么这个决定因素必须是一个候选键。

目标:消除因非主属性决定主属性而导致的依赖性异常。

示例

        1.不符合BCNF

课程ID | 教师 | 课程名
-------|------|------
101    | 张老师 | 数据库
102    | 李老师 | 网络

        在这个例子中,"教师"决定了"课程名",但"教师"不是候选键,因此不符合BCNF。

        2. 符合BCNF

                课程表:

课程ID | 课程名
-------|------
101    | 数据库
102    | 网络

                教师课程表:

教师 | 课程ID
----|------
张老师 | 101
李老师 | 102

第四范式(4NF)

书本定义:如果关系模式R∈(属于)1NF,若对于R的每个非平凡多值依赖X->->Y且Y不包含于X时,X必含有码,则关系模式R(U,F)∈4NF。

我的定义:第四范式要求表格首先满足BCNF,并且消除多值依赖。即一个表格不能存在一个属性集合独立于其他属性集合的多值依赖。

目标:消除多值依赖,使得表中的每个属性集都是独立的。

示例

        1.不符合4NF

学生ID | 课程 | 兴趣
-------|------|-----
1      | 数学 | 阅读
1      | 物理 | 游泳

        在这个例子中,"学生ID"到"兴趣"和"课程"之间存在多值依赖。

        2.符合4NF

                学生课程表:

学生ID | 课程
-------|------
1      | 数学
1      | 物理

                学生兴趣表:

学生ID | 兴趣
-------|-----
1      | 阅读
1      | 游泳

剩余还有两种更高的范式:

第五范式(5NF)

定义:第五范式要求表格首先满足第四范式,并且消除连接依赖。即一个表格中的所有连接依赖都应由候选键来决定。

目标:确保所有数据可以通过候选键组合来完全表示。

示例

        1.不符合5NF

课程ID | 教师ID | 教室ID
-------|--------|-------
101    | 1      | A
101    | 2      | B
102    | 1      | A

        在这个例子中,"课程ID"与"教师ID"和"教室ID"之间的组合关系需要消除连接依赖。

        2.符合5NF

                课程表:

课程ID | 教师ID
-------|-------
101    | 1
101    | 2
102    | 1

                教室表:

课程ID | 教室ID
-------|-------
101    | A
101    | B
102    | A

第六范式(6NF)

定义:第六范式要求表格首先满足第五范式,并且消除所有的时间依赖。即在表格中,数据应当表示到时间戳级别的变化,以便处理涉及时间变化的数据。

目标:处理数据的时间依赖性,确保时间变化数据的准确性和完整性。

示例

        1.不符合6NF

员工ID | 部门 | 生效日期
-------|------|---------
1      | A    | 2023-01-01
1      | B    | 2024-01-01

          在这个例子中,"部门"的变化与时间依赖有关,需要消除时间依赖。

        2.符合6NF

                员工部门表:

员工ID | 部门
-------|------
1      | A
1      | B

                生效日期表:

员工ID | 部门 | 生效日期
-------|------|---------
1      | A    | 2023-01-01
1      | B    | 2024-01-01

总结:

        这些范式通过逐步消除数据冗余和异常,提高了数据库的设计质量和数据一致性。不同的范式侧重于解决不同类型的数据依赖和冗余问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值