实验报告
课程名称: 数据库原理 实验项目名称: 数据库设计 班级与班级代码:
实验室名称(或课室): 专 业:
任课教师: 学 号: 姓 名: 实验日期: 年 月 日
广东商学院教务处 制
姓名 实验报告成绩
评语:
评分项目 预习情况 实验方案 评分内容 是否完成预习工作。要求按实验指导书进行预习、并完成实验报告初稿、编写程序。 实验方案是否可行。要求目的、任务明确、原理清楚、步骤可操作、对实验过程数据有记录方案、对可能的错误有预备方案。 实验结果是否正确。要求完成实验过程中的数据记录、记录要完整和准确、内容要详细,实验结果要与预期的正确结果一致。 实验结论是否正确。要求根据实验原理对实验过程中的数据、实验结果进行分析,得出实验结论。 分值 评分结果 20 30 实验过程 与结果 实验结论 35 15 100 总 分
指导教师(签名) 年 月 日
说明:指导教师评分后,实验报告交院(系)办公室保存。
实验六 教学管理数据库设计
一、实验目的
1、数据库设计就是要使学生采用本课程中学习的数据库设计方法,运用其基本思路与主要图表工具完成一个自己所了解的业务的数据库应用系统信息需求分析与数据库的概念设计、逻辑设计、物理设计以及处理功能设计
2、熟悉数据库管理系统、SQL语言开发和实现该数据库,并测试、评价、优化改进。
3、通过本设计进一步弄懂数据库系统及其相关的基本概念,理解数据库系统的系统结构、主要特点,掌握数据库设计的原理、方法及其基本过程,初步具备数据库应用设计的能力,形成对数据库设计在处理实际问题的基本素质。 二、实验原理
根据数据库设计的方法和步骤,进行需求分析、概念结构设计、逻辑结构设计、物理设计以及进行规范化、无损连接和优化改进等处理,再根据数据操作的原理和语法测试数据库的功能。 三、实验要求
完成对教学管理数据库的以下操作
1、需求分析:功能分析、总框架图、业务流程图、数据流图、数据字典
2、概念模型设计(E-R图)
3、逻辑设计(表、要验证函数依赖、规范化、无损连接) 4、物理设计
5、数据库实施和执行阶段(数据库的建立、数据录入、插入、删除、
查询、更新、查询优化等) 四、实验设备
微型计算机一台、WinXP和Microsoft SQL Server 2000软件 五、结果预测
成功完成教学管理数据库的设计过程,各种操作顺利执行。 六、实验内容和步骤 1、需求分析阶段
1·1教学管理数据库的功能分析:教学管理数据库要实现对学生基本信息、学生选课信息、课程基本信息、教师基本信息、学生课程成绩及教师教务信息的管理
1·2教学管理系统的总框架图如下图1-1所示:
图1-1 总框架图
1.3教学管理系统业务流程图如下图1-2所示: 学校 部门 教师信息表 7 统计处 理 教务处 1 学 籍 处 理 教务处 统计数据库 学生 学生登记表 学生信息记录 学生选课和课程信息 记录 6 成绩管 理 教务处 5 选课 学生 学校 组织 院系 教师计划 2 教师基本信息管理 教务处 教师信息记录 教师任课 信息表 3 制定教学计划 教务处 课程信息记录 4 排课 教务处 课表信息记录 教师任课记录 教师任课课表 学生课表 教师 学生 图1-2 业务流程图
1·4 调查用户需求: ① 教务处需求 学籍信息处理: 新生入学档案信息的录入 毕业学生档案信息的处理
学生档案的处理包括插入,删除以及修改 学生基本信息的查询 教师信息系统的管理: 教师档案的录入 教师基本信息的查询
教师基本信息的更新包括修改,添加和修改 制定教学计划:
根据有关部门提供的教师任课信息表制定教学计划 把教学计划输入课程管理数据库和教师任课数据库 排课:
根据教学计划为学生排课 每个学生可以查询自己的课程 教务处可以根据教学计划修改课程表
将课程表分发给老师,学生,教室管理员和院系 统计:
统计学生的成绩情况、男女人数、选课情况等 ② 学生 查询功能: 查询自己的基本信息 查询考试成绩及排名 查询课程信息 查询任课老师的信息 ③教师 查询:
查询自己的基本信息 查询课程表
查询学生的总体成绩 1·5数据字典
经分析,该系统要用到六个基本表:课程信息表、教学任务表、教师档案表、学生档案表、学生选课表、学生成绩表,数据结构定义如下表1-3所示: 数据结构名 课程信息表 教学任务表 教师档案表 学生档案表 含义说明 定义了课程的有关信息 组成 课程ID、课程名称、课程类别、学分、学时 定义了教师教授学生的有关信息 课程ID、教师ID、学期、年度 定义了教师的有关信息 定义了学生的有关信息 教师ID、姓名、性别、职称、单位 学号、姓名、性别、出生日期、籍贯、专业、班级 学生选课表 学生成绩表 定义了选课的基本信息 定义了学生的成绩的相关信息 学号、课程类别、课程ID 学号、课程ID、平时成绩、期末成绩、总成绩 表1-3 数据结构说明 经分析,数据项定义如下表1-5所示: 数据项名 类别 长度 课程ID char 6 课程编号 课程名称 varchar 40 表示课程的名称 说明 前2个字符大写字母,表示课程类别,后面4个字符为数字,表示课程类别 char 8 包含基础必修,专业必修,限选和任选 学分 real 4 0.5<=学分<=5.0 学时 int 4 8的整数倍,每16个学时为一个学分
教师ID char 8 教师的号码,8位数字 学期 int 4 只能选择1或2 年度 char 10 1990<=年度<=2010 姓名 varchar 16 教师和学生的姓名 性别 char 1 教师和学生的性别,用大写字母M、F表示,M表示男,F表示女 职称 varchar 8 包含教授、副教授、讲师、助教 单位 varchar 20 可以是会计系、物流系、信管系、经济系、工商管理系 课程类别 学号 姓名 出生日期 籍贯 专业 班级 平时成绩 char char varchar char 8 8 16 8 包括正选、旁听、重修 由八位数字组成 学生的名字 出生日期>=1970 学生出生地 学生所在专业 学生所在班级 小数点后一位 datatime 8 varchar int real 16 4 4 期末成绩 real 4 小数点后一位 总成绩 real 4 小数点后一位,计算公式:总成绩=平时成绩*(1-a%)+期末成绩*a% 表1-4 数据项说明
1·6数据流图 学生 教师
信 息 查 询 身份信息 基本信息处理 身份信息 验证信息 选课 学生选课表 更新、修改、删 除、增加信息 信息维 护 课程信息表 验证信息 查询需求 教学任务表 教师档案表 学生成绩表 学生档案表 2、概念结构设计阶段(E-R图设计)
经过分析数据字典和数据流图设计E—R图如下图2-1所示: 班级 学号 姓名 性别 出生日期 课程名称 课程ID 性别 职称 单位 教师ID 姓名 学期 m 教师 教学 年度 n 课程类别 课程 学分 学时 b 1 选修 学生 a 课程类别 总成绩 籍贯
1 专业 成绩统计 平时成绩 期末成绩 图2-1 E—R图
3、逻辑结构设计阶段
3·1 由E—R图向关系模型的转换如下:
学生(学号,姓名,性别,出生日期,籍贯,专业,班级) 课程(课程ID,课程名称,课程类别,学分,学时) 教师(教师ID,姓名,性别,职称,单位) 选课(学号,课程ID,课程类别)
成绩(学号,课程ID,平时成绩,期末成绩,总成绩) 教务(课程ID,年度,学期,教师ID) 3·2 各张表的逻辑结构设计如下所示: “课程信息表”结构 字段名 课程ID 类型 长度 Char 6 字,表示课程编号 备注 主键,前2个字符大写字母,表示课程类别,后面4个字符为数课程名称 Varchar 40 课程类别 Char 8 包含基础必修,专业必修,限选和任选 学分 Real 4 0.5<=学分<=5.0 学时 int 4 8的整数倍,每16个学时为一个学分 “教学任务表”结构 字段名 课程ID 类型 Char 长度 6 表示课程编号 备注 主键,前2个字符大写字母,表示课程类别,后面4个字符为数字,教师ID Char 8 教师档案表的外键,8位数字 学期 Int 4 只能选择1或2 年度 char 10 1990<=年度<=2010
“教师档案表”结构 字段名 教师ID 类型 Char 长度 8 备注 主键,与教学任务表里的教师ID一致,也是八位数字 姓名 Varchar 16 教师的姓名 性别 Char 1 用大写字母M、F表示,M表示男,F表示女 职称 Varchar 8 包含教授、副教授、讲师、助教 单位 varchar 20 可以是会计系、物流系、信管系、经济系、工商管理系
“学生档案表”结构 字段名 学号 姓名 性别 出生日期 籍贯 专业 班级 类型 char Varchar char Char 长度 8 16 1 8 主键,由八位数字组成 学生的名字 备注 用大写字母M、F表示,M表示男,F表示女 出生日期>=1970 Datatime 8 Varchar Int 16 4
“学生选课表”结构 字段名 学号 类型 Char 长度 8 主键,由八位数字组成 备注 课程类别 Char 8 包括正选、旁听、重修 课程ID char 6 课程信息表和教学任务表的外键,前2个字符大写字母,表示课程类别,后面4个字符为数字,表示课程编号 “学生成绩表“结构 字段名 学号 类型 Char 长度 8 主键,由八位数字组成 备注 课程ID Char 6 前2个字符大写字母,表示课程类别,后面4个字符为数字,表示课程编号 平时成绩 Real 4 小数点后一位 期末成绩 Real 4 小数点后一位 总成绩 real 4 小数点后一位,计算公式:总成绩=平时成绩*(1-a%)+期末成绩*a% 3·3 以上六张表有如下逻辑依赖关系,表现出各表间主键与外键的关联关系,如图3-1所示: 学号 姓名 性别 出生日期 籍贯 专业 班级 课程ID 课程名称 课程类别 学分 学时 学号 课程ID 课程类别 课程ID 年度 学期 教师ID 学号 课程ID 平时成绩 期末成绩 总成绩
图3-1 表的逻辑关系图
教师ID 姓名 性别 职称 单位 3·4 根据需求分析和以上的逻辑关系图确定数据依赖。分别写出每个关系内部属性的以及不同关系模式属性间的数据依赖如下: a、课程信息表的数据依赖:{课程ID->课程名称,课程ID->课程类别,课程ID->学分,课程ID->学时}
b、教学任务表的数据依赖:{(课程ID,年度,学期)->教师ID} c、教师档案表的数据依赖:{教师ID->姓名,教师ID->性别,教师ID->职称,教师ID->单位}
d、学生档案表的数据依赖:{学号->姓名,学号->性别,学号->出生日期,学号->籍贯,学号->专业,学号->班级}
e、学生选课表的数据依赖:{(学号,课程ID)->课程类别} f、学生成绩表的数据依赖:{(学号,课程ID)->平时成绩,(学号,课程ID)->期末成绩,(学号,课程ID)->总成绩} 3·5 证明以上关系模式均符合第三范式
以学生档案表这一关系模式的数据依赖为例证明(其他五个模式的证明同下):{学号->姓名,学号->性别,学号->出生日期,学号->籍贯,学号->专业,学号->班级}中不存在部分函数依赖和传递函数依赖,所以满足第三范式。 3·6 证明模式分解具有无损连接性
以学生档案表、课程信息表、和学生选课表三个模式为例证明该分解具有无损连接性(其他模式分解的无损连接性的证明同下): a、课程信息表的数据依赖:{课程ID->课程名称,课程ID->课程类别,课程ID->学分,课程ID->学时}
d、学生档案表的数据依赖:{学号->姓名,学号->性别,学号->出生日期,学号->籍贯,学号->专业,学号->班级}
e、学生选课表的数据依赖:{(学号,课程ID)->课程类别} 建立初始表如表3-2所示: 学号 姓名 性别 出生日期 籍贯 班级 专业 课程ID 课程类别 课程名称 学时 学分 A1 B21 B31 A2 B22 B32 A3 B23 B33 A4 B24 B34 A5 B25 B35 A6 B26 B36 A7 B27 B37 B18 A8 B38 B19 A9 A9 B110 A10 B310 B111 B112 A11 A12 B311 B312 表3-2 无损连接初始表
由以上三个模式的函数依赖关系变换表后结果如下表3-3所示: 学号 姓名 性别 出生日期 籍贯 班级 专业 课程ID 课程类别 课程名称 学时 学分 A1 B21 B31 A2 B22 B32 A3 B23 B33 A4 B24 B34 A5 B25 B35 A6 B26 B36 A7 B27 B37 A8 A8 B38 A9 A9 A9 A10 A10 B310 A11 A11 A12 A12 B311 B312 表3-3 经函数依赖变换后的结果
4、物理设计阶段
根据数据库系统文件的存储结构,系统文件可以包含一个数据文件及一个事务日志,也可以包含多个数据文件及多个事务日志或文件组,创建指定数据文件和事务日志文件的“教学管理”数据库,即指定一个数据主文件和一个事务日志文件,并把它们安排在不同的硬盘上,要求主文件大小为5MB,最大值为50MB,文件增量为2MB,日志文件大小为5MB,最大值为100MB,文件增量为2MB。 5、数据库的实施和执行阶段
5·1 创建“教学管理”数据库
在“查询分析器”窗口中,编写如下Transact-SQL语句: create database 教学管理 on
primary
(name=教学管理_dat,
filename=’ F:\\数据库\\教学管理.mdf’, size=5MB, maxsize=50MB, filegrowth=2MB )
log on
(name=教学管理_log,
filename=’ H:\\数据库\\教学管理.ldf’, size=5MB,
maxsize=100MB, filegrowth=2MB )
单击工具栏中的“运行”按钮(绿色小三角形)后,系统自动为主数据文件和事务日志文件分配要求的磁盘空间,运行结果如下图5-1所示:
图5-1 建立教学管理数据库
5·2 在“教学管理”数据库中建立课程信息表、教学任务表、学生档案表、教师档案表、学生选课表和学生成绩表:
使用Transact-SQL语句创建“课程信息表”、“教学任务表”、“教师档案表”、“学生档案表”、“学生选课表”、“学生成绩表”,“学号”是学生档案表的关键字,“课程ID”是课程信息表的关键字,而“学号”和“课程ID”共同组成了学生选课表的关键字,“教师ID”是教师档案表的关键字,同时也是教师档案表的外键,而教学任务表的关键字则是由“课程ID””年度”和“学期”共同组成的。同时,“学生成绩表”中的“学号”和“课程ID”与“学生选课表”中的“学号”和“课程ID”是一一对应关系。现在中以“课程信息表”的创建为例(其他五张表的建立方法类似):
使用Transact-SQL语句创建“课程信息表”,该表包含的字段“课程
ID”、“课程名称”、“课程类别”、“学分”、“学时”代码如下: use 教学管理
create table 课程信息表 (课程ID char(6), 课程名称 varchar(40), 课程类别 char(8), 学分 real, 学时 int)
结果预测:命令已成功完成
可能出现的错误:real和int类型后面加上了长度限制 错误分析:系统在real和int类型会自动默认其长度限制 解决方法:去掉建表代码中real和int后面的长度限制 实验步骤:
⑴在“SQL查询分析器”窗口的上部,选择“教学管理”数据库,并在查询框中输入代码建立“课程信息表”,如图5-21所示:
图5-21 编写代码
⑵单击“SQL查询分析器”菜单栏中的绿色三角形按钮“执行”,结果如下图2-22所示:
图5-22 执行结果 ⑶在企业管理其中打开表,结果如下图5-23所示:
图5-23 表结果 ⑷创建索引
(1)使用Transact—SQL命令创建索引,在学生档案表的“姓名”字段上建立普通升序索引,在学生档案表的“学号”上建立唯一
所引,在学生档案表的“学号”(升序)、“姓名”(升序)和“籍贯”(降序)三个子段上建立一个普通索引,还在学生成绩表的“学号”字段上建立聚集索引,具体步骤如下: create index 姓名索引 on 学生档案表(姓名)
create unique index 学号索引 on 学生档案表(学号) create index 多列索引
on 学生档案表(学号,姓名,籍贯 desc)
create clustered index 学号索引 on 学生成绩表(学号) 结果预测:命令已成功完成
可能出现的错误:重复创建索引系统就会报错 错误分析:在建表时就已经创建了索引
解决方法:可以删掉先前建立的索引或者不再自行创建索引,就不会重复了 实验步骤:
①在SQL查询分析器在查询对话框中输入创建索引的命令代码如下:
① 单击查询分析器界面上的绿色三角状“执行”,结果如下所示:
⑸、创建数据库表之间的关系图,具体步骤如下:
①建立完各表间的关系后,在企业管理器中层层展开“控制台根目录”,最后点开“教学管理”数据库,看到如下所示窗口:
②在“关系图”子项上单击右键,此时将弹出一个快捷菜单,选择“新建数据库关系图”,弹出如下所示界面:
③ 点击“下一步”,此时屏幕出现“选择要添加的表”窗口,从左边“可用的表”中选择之前新建的六张表,添加到右边的文本框中,得到如下图所示的窗口:
④ 单击“下一步”按钮,得到如下所示的窗口:
⑤ 单击“完成”按钮,得到新的关系图如下所示:
5·3 表中数据的录入
使用Transact——SQL语句向表中插入记录,编写Transact——SQL语句,向课程信息表中插入10条记录(其他五张表的数据录入同下),具体操作如下:
⑴打开“SQL查询分析器”,在其窗口中编写如下代码:
insert into 课程信息表 (课程ID,课程名称,课程类别,学分,学时) values('JB0001','马克思主义哲学原理','基础必修',2,32)
insert into 课程信息表values('JB0002','毛泽东思想理论','基础必修',2,32) insert into 课程信息表values('JB0003','大学英语A','基础必修',4,64) insert into 课程信息表values('JB0004','高等数学A','基础必修',4,64)
insert into 课程信息表values('ZB0001','管理运筹学','专业必修',3.5,56)
insert into 课程信息表values('ZB0002','管理学','专业必修',3,48)
insert into 课程信息表values('XX0001','审计学','限选',2,32) insert into 课程信息表values('XX0002','货币银行学','限选',2,32)
insert into 课程信息表values('RX0001','公共关系学','任选',2,32)
insert into 课程信息表values('RX0002','广告学','任选',2,32) ⑵单击系统中的菜单栏上的绿色按钮“运行”,结果如下如5-31所示:
图5-31 插入记录
⑶在企业管理器中展开课程信息表的记录,结果如下图5-32所示:
图5-32 课程信息表记录
5·4 数据的更新
⑴ 更新“课程信息表”中的课程ID为“RX0002”的记录,编写Transact-SQL语句,将该课程ID置为空,如下图5-41所示: update 课程信息表 set 课程ID=null
where 课程ID=’RX0002’
图5-41 更新课程ID
以上的更新出现错误信息的原因是“课程信息表”中的课程ID是主键,它与其他表如“学生选课表”等的外键有连接,而主键不能为空,不能破坏数据的完整性定义。
⑵ 编写Transact-SQL语句,更新“学生成绩表”中的总成绩,总成绩的计算公式为:平时成绩*0.3+期末成绩*(1-0.3),具体代码如下:
update 学生成绩表
set 总成绩=(平时成绩*0.3+期末成绩*(1-0.3)) 点击“运行”按钮后,产生结果如下如5-42所示:
图5-42 更新总成绩
5·5 数据删除
⑴删除选择了“高等数学A”的所有学生该课程成绩,具体代码如下:
delete from 学生成绩表 where 学号 in (select 学号 from 学生选课表 where 课程ID in (select 课程ID from 课程信息表
where 课程名称=’高等数学A’))
点击“运行”按钮后,产生结果如下图5-51所示:
图5-51 删除选修高等数学A的学生学号 利用企业管理器打开学生成绩表结果发现已删除选择了“高等数学A”的所有学生,结果如下图5-52所示:
图5-52 删除后的结果
5·6 数据查询
⑴利用存在量词EXISTS查询没有重修课程的学生姓名,在查询分析器中输入如下代码: select 姓名
from 学生档案表 where not EXISTS (select *
from 学生选课表
where 课程类别='重修' and 学生档案表.学号=学生选课表.学号) 点击“运行”按钮后,产生结果如下图5-61所示:
图5-61 查询后结果 5·7 视图的建立、更新、删除、查询
⑴建立一个基于“学生档案表”和“学生成绩表”按照嵌套查询操作定义的视图“学生成绩优秀表”,使之包括学生的学号、姓名、性别、专业、班级、课程ID和总成绩字段。具体步骤如下: 在查询分析器中编写如下代码: create view 学生成绩优秀表 as
select 学生档案表.学号,姓名,性别,专业,班级,学生成绩表.课程ID,总成绩
from 学生档案表,学生成绩表
where 学生档案表.学号=学生成绩表.学号 and 学生档案表.学号 in(
select 学号 from 学生成绩表 where 总成绩>=85)
然后,单击系统中的运行按钮,结果如图5-71所示:
图5-71 建立视图
⑵视图的更新,将原来建立的“课程信息简表”视图中的“课程ID”为“RX0002”的“广告学”改为“逻辑学”。具体步骤如下: 在查询分析器中编写如下代码: update 课程信息简表 set 课程名称=’逻辑学’ where 课程ID=’RX0002’
然后,单击系统中的运行按钮,结果如图5-72所示:
图5-72 更新视图
⑶视图的删除,删除视图“课程信息简表”,具体步骤如下: 在查询分析器中编写如下代码: drop view 课程信息简表
然后,单击系统中的运行按钮,结果如图5-73所示:
图5-73 删除视图
⑷视图的查询,查询视图“学生成绩优秀表”中的所有记录,具体步骤如下:
在查询分析器中编写如下代码:
select * from 学生成绩优秀表
然后,单击系统中的运行按钮,结果如图5-74所示:
图5-74 视图查询 5·8 存储过程的创建和执行
⑴在企业管理器中找到“教学管理”数据库,打开其存储过程新建存储过程,在新建窗口中编写代码如下图5-81所示:
图5-81
然后单击确定,再在查询分析器中执行该存储过程,在查询分析器中编写如下代码:
execute pro_select_score1
单击系统中的运行按钮,结果如图5-82所示:
图5-82 执行存储过程结果 5·9 触发器的创建
创建触发器trigger_ins_score,使得当“平时成绩”和“期末成绩”更新后就能自动更新总成绩,具体步骤如下:
⑴在企业管理器中找到“教学管理”数据库中的“学生成绩表”,选中表单击右键,打开“所有任务”的子菜单,选中“管理触发器”,打开后,建立插入触发器“trigger_ins_score”,编写相应代码后单击确定保存,如图5-91所示:
图5-91 触发器建立
5·10 创建用户和权限管理
⑴在查询分析器中编写程序,创建一个新的登录用户,登录名为“MyUser3”,密码为空,登录后连接的数据库为“教学管理”数据库。编写代码运行后结果如下图5-101所示: sp_addlogin ‘MyUser3’,null,’教学管理’
图5-101 创建新登录用户
⑵在查询分析器中编写程序,给以上用户授予创建表和查询表的权限。运行后结果如图5-102所示: grant create table to MyUser3 grant select on 教师档案表 to MyUser3
图5-102 授权给新建用户
七、实验分析
1、在需求分析阶段通过对教学管理系统的功能分析、总框架图、业务流程图、数据流图和数据字典的设计,其中在功能分析阶段不能凭空想象一下系统的功能就可以的了,要通过统计调查客户的需要,这样所得到的功能概况才更加详细,才能做到满足更多的用户需求。在总框架图设计时,结合功能分析和顾客需求来设计总的框架图,这样才能为接下来的数据库设计途径提供总体的依据。接着根据总框架图逐步细分系统的功能模块,设计系统的业务流程图,在此时必须仔细分析每个流程的步骤和衔接关系,不然对接下来的数据流图的设计会产生影响,所以每一步都至关重要。然后根据业务流程图分析和得出数据字典,接着根据数据字典和业务流程图设计数据流图,更进一步抽象出外部实体的关系流图。在整个设计阶段,每一步的联系都是非常紧密的,一步除错了都随时可能对下面的设计造成很大的影响,所以要特别仔细和详细地做好需求分析。
2、在数据流图设计好后,接着进行概念模型的设计(E-R图),在数据流图中抽象出实体和联系,分析各实体间的关系,是一对一、多对多还是一对多关系,并通过细分数据流图来设计分E_R图,然后再将分E-R图组合成完整的E-R图,消除其中的冲突和不必要的冗余。 3、在逻辑结构设计阶段,根据E-R图将概念结构转换为一般的关系模型,然后将关系模型想特定的数据模型转换,在对数据模型进行优化。在E-R图的基础上将实体型和实体间的联系转换为关系模式,再确定他们的属性和码,这是比较难的一个问题。对于一对一模式有两
种对应模式:一是独立模式,即与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码;二是与某一端的实体对应的关系模式合并,就需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。对于一对多的联系,也同样有两个方案,一是独立模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为N端实体的码(如课程和成绩的联系)。而对于多对多联系,只有一种方案,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分,例如教学管理数据库中的学生和课程间的选修关系,其关系模式为:选课(学号,课程ID,课程类别)。然后根据关系模式和数据字典设计逻辑关系表结构,并验证函数的依赖,可以根据函数依赖的定义来证明。接着在函数依赖的基础上根据判定关系模式符合第几范式的定理来证明各个关系模式是第几范式。最后根据证明模式分解的无损连接性的图表算法来证明模式的分解是无损连接的,如实验中的关系模式的分解例子:
a、课程信息表的数据依赖:{课程ID->课程名称,课程ID->课程类别,课程ID->学分,课程ID->学时}
d、学生档案表的数据依赖:{学号->姓名,学号->性别,学号->出生日期,学号->籍贯,学号->专业,学号->班级}
e、学生选课表的数据依赖:{(学号,课程ID)->课程类别} 4、在物理设计阶段,要通过计算需求用户和数据类型中总的存储数
据的大小来设计数据库物理设计的存储结构和存取方法,在本数据库设计中对于关于模式采取的是索引的存取方法。 5、在本实验中,在数据库实施和维护阶段中:
⑴、使用Transact-SQL语句创建数据库时,要注意数据主文件、日志事务文件和文件组间的关系,且在创建的过程中不仅可以按照实验中那样采用规定数值增长数据文件的存储空间,还可以采用另一种方式以百分比的形式来增长数据文件的存储空间,具体Transact-SQL语句如下红色部分所示: create database 教学管理 on primary
(name=教学管理_dat,
filename=’ F:\\数据库\\教学管理.mdf’, size=5MB, maxsize=50MB, filegrowth=10% ) log on
(name=教学管理_log,
filename=’ H:\\数据库\\教学管理.ldf’, size=5MB, maxsize=100MB,
filegrowth=15% )
⑵、还有在创建数据库前要根据实际需要做到准确估算数据库的存储空间的大小,以防太大造成浪费或太小而导致存储空间不足。 ⑶、实验中我是建立单纯的表结构而没有在建立表的时候同时也建立起索引的,后来再通过企业管理器和查询分析器来单纯建立索引的。针对这个问题,另外的方法可以在建立表的时候同时利用SQL语句建立起索引,例如利用查询分析器建立学生档案表和表的“学号”索引,命令代码如下: use 教学管理
create table 学生档案表 (学号 char(8) primary key
check(学号 like(‘[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]’)), 姓名 varchar(8) not null,
出生日期 datetime check(出生日期>=’1970’), 籍贯 char(8), 专业 char(8), 班级 char(8))
除了上面试验中的三种建立索引的方法外,还可以利用企业管理器中的:X表—右键—所有任务—管理索引 这个步骤来建立索引。
⑷、在建立表间的关系时,实验中遇到弹出这样的对话框:
经过调换两表的主键表和外键表的顺序后,发现该提示对话框没有了,并可以成功创建两表间的关系。此处说明,建立表间关系时,要注意两表间主键和外键的对应关系,要通过一张表的主键和另一张表的主键相连接来完成。
⑸数据的更新、插入、查询和删除等操作,以及掌握录入表中的信息的两种方法,一种是采用查询分析器使用SQL语句插入记录,另一种是采用企业管理器直接打开表所有行输入记录,比较起来使用企业管理器更加方便。实验中存在一些错误,例如在第一张表使用Transact-SQL语句插入记录时的第六行代码处应该将“B0004”改为“JB0004”,这样语句运行才不会出现错误。如果在没修改前就运行了语句的话,就要删掉没有错误的那些语句,再改正错误,这样才能正常运行,否则对于之前没有错误的语句的信息会再做一次录入表中,这样就会发生冲突,系统就会报错。在进行多表嵌套查询和删除的过程中务必要理清楚各表间的关系,熟练掌握主键、外键等表中的详细信息和数据完整性的定义,这样才能正确利用SQL语句进行复杂的多表查询和删除。要想能够正确地使用SQL语句的话,必须熟练掌握其中的语法,例如本次实验中我用到的
between语句和order by 语句等,都要熟练它的语法后才能正确使用它们。
八、实验结果
本次实验完成了教学管理数据库的设计,其中包括需求分析、概念结构设计、逻辑结构设计、物理设计以及进行规范化、无损连接和优化改进等处理,具体过程的结果如以上实验中的图和表所示。 九、实验结论
本次实验中要完成整个数据库的设计,需要熟练数据库设计的步骤和方法,其中分析过程要有从整体到细分再回到整体这种概念思维模式才行。实验中我认为最重要的是概念结构设计和逻辑结构设计,既是重点也是难点,是整个数据库设计过程中最重要的两个环节。其中在逻辑结构设计阶段,关于实体型和实体间的联系转换为关系模式的过程也非常重要,需要熟练掌握其中的方法和技巧。
因篇幅问题不能全部显示,请点此查看更多更全内容