数据库设计范式-_第1页
数据库设计范式-_第2页
数据库设计范式-_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库设计三大范式引言数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入insert、删除delete和更新update操作特别.反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗 余信息.范式说明第一范式1NF:数据库表中的字段都是单一属性的,不行再分.这个单一属性由基本类型构成,包括整型、实数、字符型、规律型、日期型等.例如,如下的数据库表是符合第一范式的: 而这样的数据库表是不符合第一范式的:很明显,在当前的任何关系数据库管理系统DBMS中,傻瓜也不行能做出不符合第一范式的数据库,由于这些 DB

2、MS 不允许你把数据库表的一列再分成二列或多列.因此,你想在现有的DBMS 中设计出不符合第一范式的数据库都是不行能的.其次范式2NF:数据库表中不存在非关键字段对任一候选关键字段的部分函数依靠部分函数依靠指的是存在组合关键字中的某些字段打算非关键字段的状况,也即全部非关键字段都完全依靠于任意一组候选关键字.假定选课关系表为SelectCourse,关键字为组合关键字,由于存在如下打算关系: 这个数据库表不满足其次范式,由于存在如下打算关系: 即存在组合关键字中的字段打算非关键字的状况. 由于不符合 2NF,这个选课关系表会存在如下问题: 数据冗余:同一门课程由n 个同学选修,学分就重复 n-

3、1 次;同一个同学选修了m 门课程,#和年龄就重复了m-1 次. 更新特别:若调整了某门课程的学分,数据表中全部行的学分值都要更新,否则会消灭同一门课程学分不同的状况. 插入特别:假设要开设一门新的课程,临时还没有人选修.这样,由于还没有学号关键字,课程名称和学分也无法记录入数据库. 删除特别:假设一批同学已经完成课程的选修,这些选修记录就应当从数据库表中删除 .但是,与此同时,课程名称和学分信息也被删除了.很明显,这也会导致插入特别.把选课关系表SelectCourse 改为如下三个表: 同学:Student;课程:Course;选课关系:SelectCourse.这样的数据库表是符合其次范

4、式的,消退了数据冗余、更新特别、插入特别和删除特别. 另外,全部单关键字的数据库表都符合其次范式,由于不行能存在组合关键字.第三范式3NF:在其次范式的基础上,数据表中假如不存在非关键字段对任一候选关键字段的传递函数依靠则符合第三范式 .所谓传递函数依靠,指的是假如存在A B C 的打算关系,则 C 传递函数依靠于 A.因此,满足第三范式的数据库表应当不存在如下依靠关系:关键字段 非关键字段 x 非关键字段 y假定同学关系表为Student,关键字为单一关键字学号,由于存在如下打算关系: 这个数据库是符合 2NF 的,但是不符合 3NF,由于存在如下打算关系: 即存在非关键字段学院地点、学院对

5、关键字段学号的传递函数依靠.它也会存在数据冗余、更新特别、插入特别和删除特别的状况,读者可自行分析得知.把同学关系表分为如下两个表:同学:; 学院:.这样的数据库表是符合第三范式的,消退了数据冗余、更新特别、插入特别和删除特别. 范式应用我们来逐步搞定一个论坛的数据库,有如下信息:1 用户:用户名,email,主页,2 帖子:发帖标题,发帖内容,回复标题,回复内容第一次我们将数据库设计为仅仅存在表:用户名email主页发帖标题 发帖内容 回复标题 回复内容这个数据库表符合第一范式,但是没有任何一组候选关键字能打算数据库表的整行,唯一的关键字段用户名也不能完全打算整个元组.我们需要增加发帖 ID

6、、回复 ID字段,即将表修改为:用户名 email 主页发帖 ID 发帖标题 发帖内容 回复 ID 回复标题 回复内容这样数据表中的关键字能打算整行: 但是,这样的设计不符合其次范式,由于存在如下打算关系: 即非关键字段部分函数依靠于候选关键字段,很明显,这个设计会导致大量的数据冗余和操作特别.我们将数据库表分解1 用户信息:用户名,email,主页,2 帖子信息:发帖 ID,标题,内容3 回复信息:回复 ID,标题,内容4 发贴:用户名,发帖 ID5 回复:发帖 ID,回复 ID这样的设计是满足第 1、2、3 范式要求的,但是这样的设计是不是最好的呢? 不肯定.观看可知,第 4 项发帖中的用

7、户名和发帖 ID之间是 1:N 的关系,因此我们可以把 发帖合并到第 2 项的帖子信息中;第5 项回复中的发帖 ID和回复 ID之间也是 1:N 的关系,因此我们可以把回复合并到第 3 项的回复信息中.这样可以肯定量地削减数据冗余,新的设计为:1 用户信息:用户名,email,主页, ,2 帖子信息:用户名,发帖 ID,标题,内容3 回复信息:发帖ID,回复ID,标题,内容数据库表 1 明显满足全部范式的要求;数据库表 2 中存在非关键字段标题、内容对关键字段发帖 ID的部分函数依靠,即不满足其次范式的要求,但是这一设计并不会导致数据冗余和操作特别;数据库表 3 中也存在非关键字段标题、内容对关键字段回复 ID的部分函数依靠,也不满足其次范式的要求,但是与数据库表2 相像,这一设计也不会导致数据冗余和操作特别.由此可以看出,并不肯定要强行满足范式的要求,对于 1:N 关系,当 1 的一边合并到N 的那边后,N 的那边就不再满足其次范式了,但是这种设计反而比较好! 结论满足范式要求的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论