数据库范式设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国海洋大学实验报告年月日姓名系年级2012级专业计算机学号科目数据库题目通过实验体会关系数据理论,函数依赖以及范式。
❖实验要求
1.设计一个关系,使之满足2NF而不满足3NF;
设计一个关系,使之满足3NF而不满足BCNF;
2.详细描述关系的语义,分析关系中存在的函数依赖;
3.使用商用数据库SQL Server设计实现,录入数据;
4.体会数据冗余、增加异常、删除异常、修改复杂。
❖实验环境
Windows7系统下 Microsoft SQL Server
❖实验步骤
1.首先要弄清楚2NF、3NF、BCNF的定义与区别,再开始设计;
2.满足2NF而不满足3NF,则代表了这个关系消除了非主属性对码的部分
依赖,但没有消除非主属性对码的传递函数依赖,那么就可以开始设计
了:设这个关系为R1,设u={Sno,Sclass,Cmon},Sno代表学生的
学号,Sclass代表班号,Cmon代表班主任的工号,且存在这样的函数依
赖:Sno->Sclass,Sclass->Cmon,Sno->Cmon;Sno为主码,Sno为主属
性,Sclass、Cmon为非主属性。容易知道,Sclass与Cmon的真子集都
无法函数确定Sno,所以非主属性Sclass、Cmon对Sno完全函数依赖,
所以满足2NF;而由于Sno->Sclass(Sclass不是Sno的子集,也不能函
数确定Sno),Sclass->Cmon,所以非主属性Cmon对码Sno传递函数依赖,
所以它不是3NF。因此,R1满足2NF而不满足3NF。
3.满足3NF而不满足BCNF,代表了这个关系消除了非主属性对码的部分依
赖、传递依赖,但并不是每一个决定因素都包含码,那门就可以从这里
入手了:设这个关系为R2,要满足要求,则需找到一个或一组属性,让
它既不是码,又能够函数决定另外一个或一组属性,为了简单方便,这
里只找一个而不是一组;设u={Sno,Tno,Cno},Sno代表学生的学号,Tno代表教师的工号,Cno代表课程号,一个老师只教授一门课,但一门课可以由多个教师来上,一个学生选定一门课,那么就对应一个固定的老师。即(Sno,Cno)->Tno,Tno->Cno,且由Tno->Cno可以推出(Sno,Tno)->Cno,再根据候选码的定义可以知道,(Sno,Cno)与(Sno,Tno)都是候选码,而Tno不是,但Tno是决定因素,所以R2不是BCND;又可以容易看出R2中不存在非主属性对码的部分依赖与传递依赖,所以R2满足3NF。因此,R2是3NF而不是BCNF。
4.R1的实现:
输入数据
5.R2的实现:
输入数据:
6.数据冗余:如图所示:R1中
R2中
7.增加异常:R1中不存在,因为学生一入学就会有一个独一无二的学号,
R2中存在,一个学生想选一门新加入的课,可能这门课还没有分配老师,
只是请了一些人暂时代课,那么这条记录就无法添加了。
8.删除异常:R1中不存在,R2中也不存在;
9.修改复杂:R1中,如果有两个同学是同一个班级的,那么如果这个班级
换了班主任,修改数据时,在修改了一个条目之后,会导致数据库内容
不一致,需要将另外一个条目也修改才可以;R2中,如果一个老师换了
教授的课程,那么在数据库中可能有很多条选了这个老师的学生的所在
条目要作出修改。
❖实验心得
1.设计一个好的数据库,需要多次反复地思考、实践,并不能一蹴而就,需要
考虑到很多方面的内容;
2.在测试时还要想到方方面面不同情况的例子,来检验各种异常,否则容易有
局限性;
3.BCNF是一个比较难以掌握的范式,必须要多看定义、多加理解、多看例子进
行分析,才能够进一步理解范式。