数据库实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据库实验报告全”。
数据库系统原理课程设计
总结报告
学院: 软件学院 专业: 软件工程 年级: 2009 学号: 20092647 姓名: 李野
1、开发环境
Windows7系统
2、DBMS系统架构
采用向量的存储结构存储数据字典信息;属性信息,表结构,索引结构,用户授权机制都用相应的类表示;将表实体(表中内容)存储在文件中,方便查阅;每当执行相应的SQL语句时只需查阅数据字典及修改数据文件。
3、DBMS主要功能模块
(1)DDL功能模拟(2)DML功能模拟
(3)关系数据库系统的查询优化(4)DCL功能模拟
3.1 SQL语言的词法和语法分析(1)功能介绍
判断输入的SQL语句是否符合词法以及语法规则
(2)相关理论
将输入的文本当成一个字符串来处理,通过匹配该字符串中的关键字来确定要做什么功能,若都不能匹配,则说明出现词法或语法错误。
(3)算法描述
将输入的文本保存在字符串s1中,将s1用换行符“n”分割,保存在array[]中,扫描字符串数组中的每个成员。
a.若以“create table”开头,查找information文件是否含有“create table”后的表的信息,如果有,则返回true,表示数据字典中已有该表,若返回false,表示数据字典中没有该表信息,则把相应的属性名及其类型写进数据字典,并标明是否有主外键。b.若以“drop table”开头,则调用“drop”函数
表示删除表。
c.若以“alter table”开头,判断其后是否有“add”或“drop”,“add”表示添加属性,“drop”表示删除属性。
d.若以“insert”开头,调用“insert()”函数,表示插入元组。e.若以“delete”开头,调用“delete()”函数,表示删除元组。f.若以“update”开头,判断其后是否有“where”条件,若有,则调用“update()”函数,否则调用“update0()”函数,表示修改相应的元组。g.若以“select”开头,判断其后是否有“*”,若有,则调用“selectall()”函数,否则调用“select()”函数,表示查询。
h.若以“create unique index”开头,则调用“index()”函数,表示创建索引。
i.若以“drop index”开头,则调用“dropindex()”函数,表示删除索引。
(4)程序流程图
开始将文本框中内容保存在字符串中Create table开头Drop table开头alter table开头insert开头delete开头Create unique index开头Drop index开头删除该表信息,并修改数据字典数据字典中是否有该表信息否是写回数据字典Drop添加属性判断其后为“add”或“drop”add插入元组删除元组创建索引删除索引标记该表已存在删除属性
表3.1-1
3.2创建数据库及数据操作功能(1)功能介绍
1、实现建立数据库表结构的功能。
a.支持整型、符点型、字符型数据。b.以文件形式保存基本表。c.建立相应的数据字典。
2、实现输入数据库记录的功能。
3、实现删除数据库记录的功能。
4、实现修改数据库记录的功能。
5、实现显示数据库结构和内容(以表格形式显示)。
6、实现在已有的关系中添加属性的功能;
7、实现从已有的关系中删除属性的功能;
8、实现删除表的功能。
(2)相关理论
通过编写一系列的SQL语句,实现创建表,删除表,插入属性,删除属性,插入元组,删除元组,修改元组,查找元组等一系列操作。
(3)算法描述
a.创建表
首先判断该表是否存在,若不存在则将create table 后的语句保存,即将属性名及类型存储到数据字典中,否则输出“该表已存在”。b.删除表
首先在数据字典中将该表信息找到,并将其删除,再找到该数据文件,也将其删除,若该表有索引文件,也将该索引文件删除。c.添加属性
在数据字典中找到该表位置,将要添加的属性名及类型追加到末尾。d.删除属性
在数据字典中找到该表并找到该属性,将该属性删除,找到该表的数据文件,删除此文件中该属性域。e.插入元组
读数据字典,找到该文件,并记录该表属性的名字及类型与要插入的数据进行匹配,此时注意类型为“Int”“float”型的输入是否正确,还要注意“char()”类型是否超界。若判断完毕,将这些数据写到数据文件末尾,若该表有索引文件,还要基于插入新元组后的表建立新索引。f.删除元组
查找数据文件,找到与“where”后的条件相符的元组,并删除。g.修改元组
首先查看是否有“where”条件,若没有,则将数据文件全部读出,并将数据文件改成“set”后的条件;否则查找数据文件并全部读出,找到与“where”后的条件相符的元组,根据“set”后的条件进行修改,并写回文件中。
(4)程序流程图
a.创建表程序流程图
开始文本中以create table开头查找数据字典是否有该表信息?否是将属性名及类型写进数据字典
表3.2-1
提示该表已寻在b.删除表程序流程图
开始文本以“drop table”开始查找数据字典是否存在该表?是在数据字典中将该表信息删除否提示不存在该表找到相应数据文件并将其删除结束
表3.3-2
c.添加/删除属性程序流程图
开始文本以“alter table”开始其后为“add”或“drop”add drop在数据字典中加入该属性信息(名字及类型)在数据字典中删除该属性信息找到数据文件,删除该属性信息结束 表3.2-3
d.插入元组程序流程图
开始文本以“insert”开始查数据字典,记录属性名及类型扫描待插入的每个属性与数据字典中的属性比较char()int或float是否匹配或越界是否匹配不匹配或越界都匹配提示属性类型输入错误写入数据文件尾是否有索引文件有无重写索引文件结束 表3.2-4
e.删除元组程序流程图
开始文本以“delete”开始查找数据字典是否存在该表?是否读数据文件提示不存在该表找到与“where”后相匹配的数据文件并将其删除结束
表3.3-5
f.修改元组程序流程图
开始文本以“update”开始其后为是否有“where”条件无有将数据文件中相应的内容全部改为“set”后的条件找到数据文件中符合“where”后条件的元组将该元组相应条件改为“set”后信息是否有相应的索引文件有无重写索引文件结束 表3.2-6
(5)测试用例与实验结果
a.创建表 测试用例: create table s(s# char(9)sname char(8)age int sex char(2)primary key s#)
create table c(c# char(5)cname char(20)teacher char(8)primary key c#)
create table sc(s# char(9)c# char(5)grade float primary out key s# from s primary out key c# from c)实验结果: b.删除表 测试用例: drop table sc 实验结果:
C:插入元组 测试用例:
insert into s values('s1','lou',21,'F')insert into s values('s2','lu',20,'F')insert into s values('s3','ha',22,'M')insert into s values('s4','zhang',21,'F')insert into s values('s5','qian',20,'M')
insert into s values('s6','sun',18,'F')insert into s values('s7','lisan',21,'F')insert into s values('s8','qian',20,'M')insert into s values('s9','wugozi',18,'F')insert into c values('c1','math','zhao')insert into c values('c2','chinese','qian')insert into c values('c3','english','sun')insert into c values('c4','cs','li')insert into c values('c5','java','zhou')insert into c values('c6','c++','wu')insert into c values('c7','jsp','zheng')insert into c values('c8','j2ee','wang')insert into c values('c9','asp','sima')insert into sc values('s1','c1',67)insert into sc values('s2','c2',80)insert into sc values('s3','c3',100)insert into sc values('s4','c4',99)insert into sc values('s5','c5',87)insert into sc values('s6','c6',78)insert into sc values('s7','c7',90)insert into sc values('s8','c8',87)insert into sc values('s9','c9',78)实验结果:
d:删除元组 测试用例:
delete from sc where(sc.s#='s6')实验结果:
e:修改元组 测试用例:
update sc set score=120 where s#='s5' 实验结果:
f:添加属性 测试用例:
Alter table s add school char(20)实验结果:
g:删除属性 测试用例:
Alter table drop school
3.3索引的创建及删除(1)功能介绍
a.为某关系的主属性建立索引
b.利用索引属性完成选择操作,记录完成操作花费的时间,在建立索引前的关系上执行同样的选择操作并进行时间代价的比较。
c.利用索引属性完成连接操作,记录完成操作花费的时间,在建立索引前的关系上执行同样的选择操作并进行时间代价的比较。
d.删除索引
(2)相关理论
默认每个块有50个字节,数据文件中的每个元组有自己的首指针(指向元组首部的文件指针),索引文件中存储的是属性域值及其块号(块号通过其首指针/50得到)。
(3)算法描述
a.创建索引
针对表的主键建立索引文件,找到数据文件中要建立索引的属性域值,并记录该元组的首指针,将其保存在索引文件中。
b.利用索引属性完成选择操作
在索引文件中找到“select”语句中“where”后的条件涉及的属性(因为是基于主键建立的索引,所以只能通过主键的索引文件来查找相应的信息),记录索引域后的块号,将块号*50就能得到相应的文件指针,通过文件指针读数据文件,就能找到相应的元组。
c.利用索引属性完成连接操作 d.删除索引
找到相应的索引文件将其永久删除
(4)程序流程图
a.创建索引文件
开始数据字典有该属性?是找到数据文件中要建立索引的属性域记录该元组的文件否指针并/50得到块号一并写入索引文件结束 表3.3-1
b.利用索引属性完成选择操作
开始查找索引文件中与“where”后条件相符的属性域值找到?记录该属性域值得块号否块号*50得到文件指针查找数据文件找到该元组,输出结束 表3.3-2
是c.删除索引文件
开始找到该索引文件?是否将该索引文件彻底删除结束 表3.3-4
(5)测试用例与实验结果
a:创建索引文件 测试用例:
create index index on s 实验结果:
b:利用索引选择
3.4查询功能(1)功能介绍
a.实现全关系选择操作 b.实现单关系投影操作
c.实现单关系选择操作(允许多条件)d.实现单关系的选择投影操作(允许多条件)e.实现两个关系和多个关系的连接操作 f.实现两个关系和多个关系的选择和连接操作 g.实现两个关系和多个关系的选择、投影和连接操作
(2)相关理论(3)算法描述
a.全关系的选择操作
扫描数据字典,判断是否有该表,如果有,则扫描数据文件,将数据文件中内容全部输出。
b.实现单关系的投影操作
扫描数据字典,判断是否有该表,若有该表,记录要投影的属性是第几个,扫描数据文件,将每个元组中要查询的属性输出。
c.实现单关系的选择操作(允许多条件)
扫描数据字典,判断是否有该表,若有该表,扫描数据文件,利用循环将满足“where”后条件的元组选出。
d.实现单关系的选择投影操作(允许多条件)
扫描数据字典,判断是否有该表,若有该表,则记录需要投影的属性是第几个,查找数据文件,利用循环将满足“where”条件的元组找出并属性相应的属性值。
e.实现两个关系和多个关系的连接操作
扫描数据字典,判断是否有这两个表,若有,则查找相关属性,将两个表中的相关属性依据条件进行匹配,若匹配成功,则表示连接成功,输出连接结果。
f.实现两个关系和多个关系的选择和连接操作 在以上的连接结果中挑选符合条件的元组输出。g.实现两个关系和多个关系的选择、投影和连接操作 在以上的结果中选择要投影的属性,输出。
(4)程序流程图
a.全关系的选择操作
开始扫描数据字典是否有该表?扫描数据文件并全部输出结束 表3.4-1 b.实现单关系的投影操作
开始扫描数据字典是否有该表?是否有要投影的属性否记录要投影的属性是第几个扫描数据文件将该属性值域输出结束
表3.4-2 c.实现单关系的选择操作(允许多条件)
是是否
开始扫描数据字典是否有该表?是记录“where”条件并扫描是否扫描数据文件有与之匹配的元组?否输出提示没有符合条件的元组结束 表3,4-3 d.实现单关系的选择投影操作(允许多条件)
开始扫描数据字典是否有该表?是记录要投影的属性是第几个否记录“where”条件并扫描扫描数据文件有与之匹配的元组?否是选择要投影的属性值域提示没有符合条件的元组提示没有符合条件的元组输出结束 表3.4-4(5)测试用例与实验结果
测试用例:
select s#,sname,age,sex from s where s.sname='qian'ands.age>19 实验结果:
测试用例:
select sname,age,sex from s where s.s#='s6'ands.age=18ors.sname='li' 实验结果:
测试用例: link s,sc base sc 实验结果:
测试用例: link s,c,sc base sc 实验结果:
3.5查询优化
(1)功能介绍
在做两个表连接时,先将需要用到的元组找到,并不做笛卡尔积,这在一定程度上减少了全部选择的时间。
(2)相关理论
在做两个表连接时,需要名字及类型相同的属性用一定的条件进行匹配,如果在做笛卡尔积之前就用这些条件把要用到的元组选出来,既省空间又省时间。
(3)算法描述
首先查看表是否存在,若存在查找涉及到的属性,记录“where”后的条件,将两个表中符合条件的元组都取出,将这些元组做连接。
(4)程序流程图
开始是否存在该表?是是否有涉及到的属性?是否记录“where”后的条件否将符合条件的元组先选出连接结束
表3.5-1 3.6数据库保护功能(1)功能介绍
此DBMS系统有两种用户:管理员,普通用户。
(2)相关理论
a.插入元组、修改元组时,匹配每个属性的类型,如果类型及长度输入有误,则提示输入错误不写入数据源文件,若符合条件,则查看基于每个属性是否有索引文件,如果有,则重写索引文件。
b.修改元组时也要判断类型及长度是否匹配,也要重写相应的索引文件。c.每次做相应操作前先考虑数据字典中是否有该表,是否有要查询的属性。
(3)算法描述
例如在做插入元组时,首先查找数据字典有没有待插入的表,如果有,则记录每个属性类型及长度,将待插入数据与属性进行一一比对,一旦有一个记录不符合要求,也无法插入表中。
(4)程序流程图
开始文本以“insert”开始查数据字典,记录属性名及类型扫描待插入的每个属性与数据字典中的属性比较char()int或float是否匹配或越界是否匹配不匹配或越界都匹配提示属性类型输入错误写入数据文件尾是否有索引文件有无重写索引文件结束 表3.6-1
4、总结
通过对于DBMS系统的模拟,使我对于数据库系统有了更深刻的理解,了解了每个表信息的存储结构,以及数据字典的相关说明,也了解了主外键的意义与作用,也知道了插入元组的时候属性匹配问题,以及对表的属性域的修改等。通过编写程序,让我对表连接有了更加系统的认识,也知道了在连接时先选出要查询的元组更省时间,省空间。了解了怎样存储表信息才能既省空间又能保存表信息,没有冗余情况。通过做实验,我将理论与实践有了更好的结合,不但提高了对理论的理解,更让我对编程能力有了很好的锻炼。
5、参考文献
《数据库系统原理》 李建中 王珊编著 电子工业出版社 《Java技术及其应用》 王克宏 编著 高等教育出版社
实验一 PowerDesigner 的 CDM 应用1:实验目的使用PowerDesinger进行数据库概念模型设计,掌握CDM中的实体、实体属性、实体与实体之间联系的操作方法。 2:实验内容建立一个“实......
实验7 索引和数据完整性的使用1、目的与要求 (1) 掌握索引的使用方法;(2) 掌握数据完整性的实现方法;2、实验准备(1) 了解索引的作用与分类; (2) 掌握索引的创建方法;(3) 理解数据的完整性......
10包三 李雅 100910306实验报告一、实验题目:数据库基本操作实验二、实验目的:掌握数据库的建立、表的设计基本方法,通过实际操作熟练掌握数据库的基本操作——数据的输入与导......
实 验 报 告一、实验室名称: 软件工程实验室二、实验项目名称:创建HIS数据库三、实验原理: 数据定义语言DDL四、实验目的:在SQL Server 2008 中创建HIS 数据库和表。五、实验内......
《数据库原理》实验报告一学号:E01114193 姓名:刘雪平年级:计科三班 成绩:实验名称:管理数据库 实验日期:2013年4月11日 实验目的:(1)熟练掌握在企业管理器中创建数据库的方法。 (2)熟......