当前位置:蜗牛素材网>综合资讯>科技>正文

数据库规范化理论定义:4.数据库的规范化

人气:345 ℃/2023-10-16 17:30:56

数据库范式分类

一、第一范式

若关系模式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 次数。其缺点是需要管理冗余列, 查询所有数据需要连接操作。

搜索更多有关“数据库规范化理论定义:4.数据库的规范化”的信息 [百度搜索] [SoGou搜索] [头条搜索] [360搜索]
本网站部分内容、图文来自于网络,如有侵犯您的合法权益,请及时与我们联系,我们将第一时间安排核实及删除!
CopyRight © 2008-2024 蜗牛素材网 All Rights Reserved. 手机版