数据库规范化理论定义: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 次数。其缺点是需要管理冗余列, 查询所有数据需要连接操作。
- 11-14重庆优质学区房推荐,重庆十大宝藏学区推荐
- 04-16暗恋一个人的潜意识 暗恋一个人,是一种病
- 05-05五碗菜都需要准备什么?一年卖461016份的菜要用14个碗
- 12-13看图猜成语你猜对几个:看图猜成语每个都猜对算你厉害
- 01-01海王是什么片子?海王到底是一部怎样的电影
- 05-06steam三款史低大作推荐:主机玩家玩了半年的日本大作
- 04-15跟春节有关的古诗词十首:和春节有关的古诗词都在这了
- 01-15目前为止最硬核的太空游戏:不只有星空15款值得游玩的太空题材游戏
- 01-27古代宫廷音乐团有用唢呐乐器的吗?长知识,在古代组一支管弦乐队得需要这些乐器啊
- 11-14扶摇登皇位:扶摇出生时口含金莲妲己出生时万狐朝宗
- 12-14非洲雄狮威力有多大:非洲能傲视群雄拥有非凡战力
- 04-16成语故事一句话的概括:成语故事家喻户晓是怎么来的
- 02-28安家王子给朱闪闪算命:安家朱闪闪遇上白马王子
- 02-08打工最好的打油诗:诗就是生活,无需返回评王小妮诗歌那些人跑到河底工作
- 03-27小米新系统miui11桌面图标太大:小米MIUI继续减肥不可卸载应用仅剩8个
- 12-1835岁到40岁女性秋冬穿衣搭配 五六十岁的女性夏季这样穿最有范儿
热门
推荐
- 1打虎上山古筝谱_打虎上山古筝版在线播放234
- 2周公解梦梦见去国外有什么寓意457
- 3青海省省级预算审查监督条例379
- 4圣诞节音乐413
- 5GRE写作优秀范文:政治和生活432
- 6幼师面试技巧和注意事项170
- 7动漫超级恋人高清图片281
- 8女生去韩国留学学什么专业好141