本实验报告详细探讨了数据库范式设计的基本原则和方法,并通过具体案例分析展示了如何应用这些理论来优化数据库结构,提高数据一致性和减少冗余。
中国海洋大学实验报告
日期:年 月 日
姓名:
系年级:2012级
专业:计算机
学号:
科目:数据库
题目:通过实验体会关系数据理论,函数依赖以及范式。
**实验要求**
1. 设计一个满足第二范式(2NF)而不符合第三范式的(3NF)的关系模式;
设计另一个满足第三范式但不符合巴斯-科德规范形式(BCNF)的关系模式。
2. 详细描述关系的语义,并分析其中存在的函数依赖。
3. 使用商用数据库SQL Server设计并实现,然后录入数据;
4. 分析实验中出现的数据冗余、插入异常、删除异常以及修改复杂性等问题。
**实验环境**
Windows7系统下 Microsoft SQL Server
**实验步骤**
1. 首先理解2NF, 3NF 和 BCNF 的定义与区别。
满足第二范式而不满足第三范式的例子:
设关系模式为R1,属性集U={Sno(学号),Sclass(班号),Cmon(班主任工号)},
函数依赖包括: Sno -> Sclass, Sclass-> Cmon 和 Sno -> Cmon。
其中主码是Sno。因为非主属性对主键完全函数依赖,所以满足2NF;但存在传递性依赖,因此不满足3NF。
满足第三范式而不符合BCNF的例子:
设关系模式为R2, 属性集U={Sno(学号),Tno(教师工号),Cno(课程编号)},
函数依赖包括:(Sno,Cno) -> Tno 和 Tno-> Cno。
其中(Sno,Cno)与 (Sno,Tno)都是候选码。虽然不存在非主属性对码的部分和传递函数依赖问题,但因Tno不是包含在任一候选键中的决定因素, 所以该模式不满足BCNF。
4. 通过SQL Server实现关系R1 和 R2,并录入数据;
5. 观察并记录实验中出现的数据冗余情况;
6. 描述插入异常的情况:
对于R1,因每个学生入学时都会获得唯一的学号而不存在插入异常。然而对于R2,当一个新课程被添加且尚未分配教师时可能会遇到插入障碍。
7. 分析删除操作的限制;
8. 探讨更新复杂性的问题;
**实验心得**
通过此次试验我深刻体会到设计良好数据库的重要性:这需要反复思考和实践,并不能一蹴而就,必须考虑到多个方面。同样,在测试过程中也需要考虑各种各样的情况来检验是否会出现异常现象。最后,我认为BCNF是一个比较难以掌握的范式,因此有必要多看定义、多加理解以及通过实例分析进一步加深对范式的认识与应用能力。