数据库规范化理论定义:4.数据库的规范化
数据库范式分类
一、第一范式若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。
二、第二范式若关系模式R∈1NF,且每一个非主属性完全依赖主键时,则关系式R是2NF(第二范式)。在第一范式的基础上,要求非主属性对主属性是完全函数依赖,即不存在部分函数依赖。举个例子:学生成绩表这样一个关系sc(sno,sname,cno,cname,grade),对于这样一个关系是不满足第二范式的。首先分析出主属性,即学号sno和课程号cno,其他属性均为非主属性,再看学生姓名sname这个非主属性,很显然只依赖于sno就可以确定,不依赖cno而确定,所以这样一个关系存在部分依赖,故不满足第二范式。
三、第三范式即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。即在任一主键都可以确定所有非主键字段值的情况下,不能存在某非主键字段 A 可以获取 某非主键字段 B。
仍然用一个经典例子来解析
学号 | 姓名 | 班级 | 班主任 |
001 | 小黄 | 一年级(1)班 | 高老师 |
这个表中,学号是主键,它可以唯一确定姓名、班级、班主任,符合了第二范式,但是在非主键字段中,我们也可以通过班级推导出该班级的班主任,所以它是不符合第三范式的。
那怎么设计表结构,才是符合第三范式的呢?
1. 学生表
学号 | 姓名 | 班级 |
001 | 小黄 | 一年级(1)班 |
2. 班级表
班级 | 班主任 |
一年级(1)班 | 高老师 |
通过把班级与班主任的映射关系另外做成一张映射表,我们就成功地消除了表中的传递依赖了。
四、BCNF鲍依斯-科得范式(BCNF是3NF的改进形式)。
对于关系式R,每个函数依赖的决定因素都包含键值。一个满足BCNF的关系模式的条件:
1.所有非主属性对每一个码都是完全函数依赖。
2.所有的主属性对每一个不包含它的码,也是完全函数依赖。
3.没有任何属性完全函数依赖于非码的任何一组属性。
关系模式R(S,T,J)中,S表示学生,T表示教师,J表示课程。(1)每一教师只教一门课T->J,每门课由若干个教师教。(2)但某一学生选定某门课,就确定了一个固定的教师(S,J)->T。(3)某个学生选修某个教师的课就确定了所选课的名称 :(S,T)->J。T->J(S,J)->T(S,T)->J候选键∶(S,J)和(S,T) STJ都是主属性不存在非主属性对码的部分函数依赖和传递依赖, STJ∈3NF。
关系模式R(城市名,街道名,邮政编码)函数依赖关系集为:F={(城市名,街道名)->邮政编码,邮政编码->城市名}(1)一个城市名和一个街道名,对应一个邮政编码(2)一个邮政编码对应一个城市名。候选键(城市名,街道名)->非主属性邮政编码完全依赖于候选键,且无传递依赖,属于3NF。对于决定因素(城市名,街道名),它包含键(城市名,街道名),其实它本身就是键了,没问题;对于决定因素邮政编码,它不包含键(城市名,街道名)所以它不属于BCNF。在关系模式R中,如果每一个决定因素都包含码,则R属于BCNF。
规范化
五、反规范化(1) 增加冗余列
增加冗余列是指在多个表中具有相同的列, 它常用来在查询时避免连接操作。例如: 以规范化设计的理念,学生成绩表中不需要字段“ 姓名”, 因为“ 姓名” 字段可以通过学号查询到, 但在反规范化设计中, 会将“ 姓名” 字段加入表中。这样查询一个学生的成绩时, 不需要与学生表进行连接操作, 便可得到对应的“ 姓名”。
(2) 增加派生列
增加派生列指增加的列可以通过表中其他数据计算生成。它的作用是在查询时减少计算量, 从而加快查询速度。例如: 订单表中, 有商品号、商品单价、采购数量, 我们需要订单总价时, 可以通过计算得到总价, 所以规范化设计的理念是无须在订单表中设计“ 订单总价” 字段。但反规范化则不这样考虑, 由于订单总价在每次查询都需要计算, 这样会占用系统大量资源, 所以在此表中增加派生列“ 订单总价” 以提高查询效率。
(3) 重新组表
重新组表指如果许多用户需要查看两个表连接出来的结果数据, 则把这两个表重新组成一个表来减少连接而提高性能。
(4) 分割表
有时对表做分割可以提高性能。表分割有两种方式。
水平分割: 根据一列或多列数据的值把数据行放到两个独立的表中。水平分割通常在下面的情况下使用。
情况 1 : 表很大, 分割后可以降低在查询时需要读的数据和索引的页数, 同时也降低了索引的层数, 提高查询效率。
情况 2 : 表中的数据本来就有独立性, 例如表中分别记录各个地区的数据或不同时期的数据, 特别是有些数据常用,而另外一些数据不常用。
情况 3 : 需要把数据存放到多个介质上。
垂直分割: 把主码和一些列放到一个表, 然后把主码和另外的列放到另一个表中。如果一个表中某些列常用, 而另外一些列不常用, 则可以采用垂直分割, 另外垂直分割可以使得数据行变小, 一个数据页就能存放更多的数据, 在查询时就会减少 I/ O 次数。其缺点是需要管理冗余列, 查询所有数据需要连接操作。
- 10-08翡翠玉蝉有什么说道?看了才知道适不适合你
- 04-02人性的弱点第八章总结 人性的弱点第一章第三节后感
- 04-18高考化学经典易错100题解析,继续连载高考化学易错点之20条
- 09-2072岁王薇薇状态未修图:73岁王薇薇秀无遮挡胯部
- 01-13你是怎么读书的给大家分享一下?我逢人便安利微信读书的5个理由
- 09-14兰蔻安瓶:兰蔻安瓶,小蓝瓶
- 03-29女儿可以造什么句子?造人难还是造句子难
- 04-26镜的高端操作孤影 轩子巨二兔参加EAF次元电竞节引热议
- 12-21液压缸的拆卸视频:液压缸的零件如何拆卸
- 03-09一只眼睛模糊有层雾挡,视物不清是怎么回事
- 02-08会游泳的不一定都是鱼 只有会游泳的人才能到彼岸
- 02-27给学生讲错题怎么和家长解释?答家长问,初二学生一看就懂
- 02-12乡下习俗哭嫁 农村的,哭嫁是怎么回事
- 04-17超声检查注意哪些?超声检查注意事项
- 03-25100个常用修辞列表 一文弄懂九种常考修辞知识点
- 11-27为啥尾巴尖是白色的狗不能养:为什么农村老人说弯不起尾巴的狗
热门
推荐
- 1议论文成功与失败范文118
- 2小暑节气祝福语401
- 3床上用品经典广告词大全303
- 4一年级新生快速学习生字的四种记忆方法及需要养成的学习习惯!132
- 5小学科学下册复习计划390
- 6怎么电脑浏览器看视频花屏313
- 7试论多媒体教学手段在英美文学课程中的运用107
- 8公司员工周工作报告146