2022年数据库范式详解推荐 .pdf

上传人:Q****o 文档编号:27839362 上传时间:2022-07-26 格式:PDF 页数:7 大小:93.16KB
返回 下载 相关 举报
2022年数据库范式详解推荐 .pdf_第1页
第1页 / 共7页
2022年数据库范式详解推荐 .pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《2022年数据库范式详解推荐 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库范式详解推荐 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert) 、删除( delete )和更新( update )操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎, 可能存储了大量不需要的冗余信息。范式说明1.1 第一范式( 1NF)无重复的列所谓第一范式(1NF )是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值, 即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF

2、)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式( 1NF)的数据库就不是关系数据库。例如,如下的数据库表是符合第一范式的:字段 1 字段 2 字段 3 字段 4 而这样的数据库表是不符合第一范式的:字段 1 字段 2 字段 3 字段 4 字段 3.1 字段 3.2 数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS

3、不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS 中设计出不符合第一范式的数据库都是不可能的。1.2 第二范式( 2NF)属性完全依赖于主键 消除部分子函数依赖 如果关系模式R 为第一范式,并且R 中每一个非主属性完全函数依赖于R 的某个候选键,则称为第二范式模式。第二范式( 2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF) 。第二范式( 2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。 为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。例如员工信息表中加上了

4、员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 简而言之,第二范式(2NF)就是非主属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性(设有函数依赖W A,若存在 XW,有 XA成立,那么称W A是局部依赖,否则就称W A是完全函数依赖) 。如果存在, 那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实

5、体与原实体之间是一对多的关系。假定选课关系表为SelectCourse( 学号 , 姓名 , 年龄 , 课程名称 , 成绩 , 学分 ), 关键字为组合关键字 (学号 , 课程名称 ),因为存在如下决定关系:(学号 , 课程名称 ) (姓名 , 年龄 , 成绩 , 学分 ) 这个数据库表不满足第二范式,因为存在如下决定关系:(课程名称 ) (学分 ) (学号 ) (姓名 , 年龄 ) 即存在组合关键字中的字段决定非关键字的情况。由于不符合2NF,这个选课关系表会存在如下问题:(1) 数据冗余:同一门课程由n 个学生选修, 学分 就重复 n-1 次;同一个学生选修了m 门课程, 姓名和年龄就重复

6、了m-1 次。(2) 更新异常:若调整了某门课程的学分,数据表中所有行的学分 值都要更新, 否则会出现同一门课程学分不同的情况。(3) 插入异常:假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有学号 关键字,课程名称和学分也无法记录入数据库。(4) 删除异常:假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是, 与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。把选课关系表SelectCourse改为如下三个表:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -

7、 - - - - - 第 2 页,共 7 页 - - - - - - - - - 学生: Student(学号 , 姓名 , 年龄 );课程: Course(课程名称 , 学分 );选课关系: SelectCourse( 学号 , 课程名称 , 成绩 )。这样的数据库表是符合第二范式的,消除了数据冗余、更新异常、插入异常和删除异常。另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。1.3 第三范式( 3NF)属性不依赖于其它非主属性 消除传递依赖 如果关系模式R 是第二范式,且每个非主属性都不传递依赖于R 的候选键,则称R 为第三范式模式。满足第三范式(3NF )必须先满足

8、第二范式(2NF) 。第三范式(3NF )要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id) 、部门名称、部门简介等信息。 那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。第三范式( 3NF) :在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。简而言之,第三范式就是属性不依赖于其它非主属性。所谓传递函数依赖,指的是如果存在A B C的决

9、定关系,则C 传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:关键字段 非关键字段x 非关键字段y 假定学生关系表为Student(学号 , 姓名 , 年龄 , 所在学院 , 学院地点 , 学院电话 ),关键字为单一关键字 学号 ,因为存在如下决定关系:(学号 ) (姓名 , 年龄 , 所在学院 , 学院地点 , 学院电话 ) 这个数据库是符合2NF 的,但是不符合3NF,因为存在如下决定关系:(学号 ) (所在学院 ) (学院地点 , 学院电话 ) 即存在非关键字段学院地点 、学院电话 对关键字段 学号 的传递函数依赖。它也会存在数据冗余、更新异常、插入异常和删除异常的

10、情况,读者可自行分析得知。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 把学生关系表分为如下两个表:学生: (学号 , 姓名 , 年龄 , 所在学院 );学院: (学院 , 地点 , 电话 )。这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。1.4 鲍依斯 -科得范式( BCNF是 3NF的改进形式)若关系模式R 是第一范式,且每个属性都不传递依赖于R 的候选键。这种关系模式就是 BCNF模式。即

11、在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合鲍依斯-科得范式。假设仓库管理关系表为StorehouseManage( 仓库 ID, 存储物品ID, 管理员 ID, 数量 ),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:(仓库 ID, 存储物品ID) (管理员 ID, 数量 ) (管理员 ID, 存储物品 ID) (仓库 ID, 数量 ) 所以, (仓库 ID, 存储物品 ID)和(管理员 ID, 存储物品 ID)都是 StorehouseManage 的候选关键字,表中的唯一非关键字段为数量,它是符合第三范

12、式的。但是,由于存在如下决定关系:(仓库 ID) (管理员 ID) (管理员 ID) (仓库 ID) 即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况:(1) 删除异常:当仓库被清空后,所有存储物品ID和数量 信息被删除的同时,仓库 ID和管理员 ID信息也被删除了。(2) 插入异常:当仓库没有存储任何物品时,无法给仓库分配管理员。(3) 更新异常:如果仓库换了管理员,则表中所有行的管理员ID 都要修改。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第

13、4 页,共 7 页 - - - - - - - - - 把仓库管理关系表分解为二个关系表:仓库管理: StorehouseManage(仓库 ID, 管理员 ID);仓库: Storehouse(仓库 ID, 存储物品 ID, 数量 )。这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。四种范式之间存在如下关系:范式应用我们来逐步搞定一个论坛的数据库,有如下信息:(1) 用户:用户名,email,主页,电话,联系地址(2) 帖子:发帖标题,发帖内容,回复标题,回复内容第一次我们将数据库设计为仅仅存在表:用户名email 主页电话联系地址发帖标题发帖内容回复标题回复内容这个

14、数据库表符合第一范式,但是没有任何一组候选关键字能决定数据库表的整行,唯一的关键字段用户名也不能完全决定整个元组。我们需要增加发帖 ID、回复 ID字段,即将表修改为:用户名email 主页电话联系地址发帖 ID 发帖标题发帖内容回复 ID 回复标题回复内容这样数据表中的关键字(用户名,发帖ID,回复 ID)能决定整行:(用户名 ,发帖 ID,回复 ID) (email, 主页 ,电话 ,联系地址 ,发帖标题 ,发帖内容 ,回复标题 ,回复内名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -

15、 第 5 页,共 7 页 - - - - - - - - - 容) 但是,这样的设计不符合第二范式,因为存在如下决定关系:(用户名 ) (email,主页 ,电话 ,联系地址 ) (发帖 ID) (发帖标题 ,发帖内容 ) (回复 ID) (回复标题 ,回复内容 ) 即非关键字段部分函数依赖于候选关键字段,很明显, 这个设计会导致大量的数据冗余和操作异常。我们将数据库表分解为(带下划线的为关键字):(1) 用户信息:用户名,email,主页,电话,联系地址(2) 帖子信息:发帖ID,标题,内容(3) 回复信息:回复ID,标题,内容(4) 发贴:用户名,发帖ID (5) 回复:发帖ID,回复 I

16、D 这样的设计是满足第1、2、3 范式和 BCNF范式要求的,但是这样的设计是不是最好的呢?不一定。观察可知,第4 项 发帖中的 用户名 和发帖 ID之间是 1:N 的关系,因此我们可以把发帖合并到第2 项的 帖子信息 中;第 5 项回复 中的 发帖 ID和回复 ID之间也是1:N 的关系,因此我们可以把回复 合并到第3 项的 回复信息 中。这样可以一定量地减少数据冗余,新的设计为:(1) 用户信息:用户名,email,主页,电话,联系地址(2) 帖子信息:用户名,发帖ID,标题,内容(3) 回复信息:发帖ID,回复 ID,标题,内容数据库表1 显然满足所有范式的要求;数据库表2 中存在非关键

17、字段标题 、内容 对关键字段 发帖 ID的部分函数依赖,即不满足第二范式的要求,但是这一设计并不会导致数据冗余和操作异常;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 数据库表3 中也存在非关键字段标题 、内容 对关键字段 回复 ID的部分函数依赖,也不满足第二范式的要求,但是与数据库表2 相似,这一设计也不会导致数据冗余和操作异常。由此可以看出,并不一定要强行满足范式的要求,对于1:N 关系,当 1 的一边合并到N 的那边后

18、, N 的那边就不再满足第二范式了,但是这种设计反而比较好!对于 M:N 的关系, 不能将 M 一边或 N 一边合并到另一边去,这样会导致不符合范式要求,同时导致操作异常和数据冗余。对于 1:1 的关系,我们可以将左边的1 或者右边的1 合并到另一边去,设计导致不符合范式要求,但是并不会导致操作异常和数据冗余。结论满足范式要求的数据库设计是结构清晰的,同时可避免数据冗余和操作异常。这并意味着不符合范式要求的设计一定是错误的,在数据库表中存在1:1 或 1:N 关系这种较特殊的情况下,合并导致的不符合范式要求反而是合理的。在我们设计数据库的时候,一定要时刻考虑范式的要求。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁