数据库管理系统DBMS课程设计.docx
《数据库管理系统DBMS课程设计.docx》由会员分享,可在线阅读,更多相关《数据库管理系统DBMS课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
数据库管理系统DBMS课程设计
数据库系统原理
课程设计文档
学号:
姓名:
一、DBMS的实现方式
(一)文件存储的设计思想如下:
本数据库管理系统(DBMS)主要有一下文件:
database.ini:
用于存储本数据库管理系统(DBMS)的关系数据库、数据
库表信息;
[tablename].ini:
以关系数据库表名(tablename)命名的.ini文件主要用于存储数据库表的配置信息,如完整性约束,关系表属性名、属性类型、主
键等信息;
[Tablename]_info.ini:
以关系数据库表名(tablename)命名的_info.ini文件
主要用于存储数据库表的数据信息(Datainformation),所有的数据库表
数据信息全部存储在此类文件中;
[Tablename]_index.ini:
以关系数据库表名(tablename)命名的_index.ini文
件主要用于存储数据库表的索引文件。
此数据库管理系统(DBMS)中,除数据文件_info.ini、索引文件_index.ini外其余的均采用节点名、键名、键值之间的对应关系存储本DBMS系统
的关系数据库、数据库表信息和数据库表的配置信息;
数据文件的存储,数据文件采用流式文件,字段之间采用Tab间隔开,
从左到右根据数据库表的配置信息依次存储关系表数据;在最前端设置
一删除标志,为0表示次元组已经被删除,为1表示次元组未被删除;
索引文件的建立采用稠密索引方式,每条记录对应于一条索引记录,在
索引文件中存放了每条数据元组在数据文件中具体的位置。
这样,由于
索引文件较数据文件小很多,故大大加快了数据元组查询速度;
图1:
文件存储的设计思想
(二)DBMS系统流程控制设计思想如下:
鉴于此数据库管理系统(DBMS)采用SQL执行,故设计如下程序控制流程:
(1)超级管理员、一般管理员、普通用户通过各自的用户名、密码口令登陆系统;
(2)对SQL进行编译,本DBMS中采用CCompiler类进行编译,编译过程当中可以对要执行的SQL操作进行信息收集并保存在相应的数据结构(或类)当中。
假如编译通过,则可以继续后续SQL语句的执行,否则提示错误,并不终止后续SQL语句的执行;
注:
用户每次的SQL操作均存储在初始目录下的Sql.log日志文件中。
(3)程序编译通过后,操作执行时,首先根据收集而来的SQL语句信息,执行相应的命令操作函数,如建库、建表,查询等;若执行成功这提示信息,否则数据库管理系统(DBMS)报错!
在权限控制方面,根据用户权限进行相应的SQL操作控制,如普通用户不可以修改用户权限等。
(三)系统总体结构图如下:
图2:
系统总体结构图
二、DBMS的功能介绍
本数据库管理系统(DBMS)主要有如下功能:
1、创建关系数据库、关系数据库表;
2、对关系数据库表的插入、删除、查询;
3、对某确定数据库中表的相容关系进行关系代数的集合运算(交并差);4、对某确定数据库中表的进行关系代数的专门运算(投影、选择、连接);
5、对某确定数据库中表进行关系演算(exists语句的实现);
6、对数据库表的查询优化;
7、DBMS系统用户密码、权限的管理。
三、DBMS算法实现
算法描述及其流程图如下:
插入(insert):
对于每次执行的一条元组插入操作,对其根据数据库表的配置选项,组织从编译过程中保存的信息。
进行数据保存;同时设置删除项用于标示元组是否已经被删除;
删除(delete):
对关系数据库表进行删除操作,采用元组累计法进行。
在每次删除操作结束的时,判断数据库表中共有多少条记录已经被删除(此删除数据信息保存在数据库表的配置信息文件中),当超过删除记录达到2000条时,更新相应数据库表的数据文件,同时在有索引文件的情况下得更新数据库的索引文件;
查询(select):
对关系数据库表进行查询操作,采用索引判断法。
比如,在索引文件已经建立的情况下,则优先考虑索引文件查询数据库表相应的元组,否则顺序查找数据文件搜索满足查询条件的元组;
建立索引(index):
本数据库管理系统(DBMS)主要是在主键上建立索引文件,索引文件的建立采用稠密索引方式,每条记录对应于一条索引记录,在索引文件中存放了每条数据元组在数据文件中具体的位置。
这样,由于索引文件较数据文件小很多,故大大加快了数据元组查询速度。
注:
关系代数语言的集合运算及专门运算均封装在CRelation类中
交并差集合运算:
此类运算在建立索引的情况下,采用相应的算法进行相容关系数据库表的“交并差”集合运算。
具体的实现算法见程序或相应的实验文档(算法,略)。
程序的自定义集合运算SQL如下:
交运算:
Table1andTable2;
并运算:
Table1orTable2;
交运算:
Table1minusTable2;
投影选择连接专门运算:
此类运算鉴于大多是对非主键的运算操作,故在本数据库管理系统(DBMS)当中不采用索引方式进行,而是直接对数据库表的数据文件进行运算操作。
采用相应的算法进行相应关系数据库表的“投影选择连接”专门运算。
具体的实现算法见程序或相应的实验文档(算法,略)。
程序的自定义专门运算SQL如下:
投影运算:
如:
selectSno,Sname,SagefromStu1;
选择运算:
如:
selectSno,Sname,Sage,SsexfromStu1whereSno!
=1006;
自然连接运算:
Table1&Table2;
等值连接运算:
Table1&Table2whereTable1.propertite=Table2.propertite;
关系演算功能模拟:
在含有exists的SQL语句中,采用如下算法:
在SQL(select*fromtopicwhereexists(select*fromuserwheretopicowner=username);)语句通过编译后执行时,若没有索引文件的情况,则采用逐条语句判断,假如取出的元组记录满足exists后的条件时,则将关系元组进行存储,若存在索引文件,则可以按照索引文件进行条件的匹配(从外向内的匹配)。
满足条件则进行元组信息保存,否则跳过继续查找;
若SQL语句为(select*fromtopicwherein(select*fromuserwheretopicowner=username);则匹配条件为从内向外,再选出的结果集中,判断从topic表选出的记录元组,若满足结果集,则进行保存。
否则继续查询数据文件…在匹配条件的结果集较大时,应当将结果集写出外存,以备后续数据元组的查询匹配。
查询优化(Optimize):
在SQL语句编译通过的情况下,从收集到的SQL信息中进行数据的组织,启发式代数优化算法设计思想如下:
(1)、数据结构的定义
查询优化树(三叉树)节点定义:
structnode
{
structnode*up;//指向上一节点
structnode*left;//指向下左节点
structnode*right;//指向下右节点
structnode*mid;//指向下中节点
CStringopt_sql;//优化过程中使用的优化SQL语句
CStringcreate_sql;//优化过程中使用的创建节点SQL语句
};
查询优化用到的属性:
structproperties
{
chartable[25];//优化属性所在的关系数据库表名
charproper[50];//优化属性名称
};
查询优化用到的投影操作:
structprojection
{
chartable[25];//需要执行投影操作的关系数据库表名
charproper[50][50];//投影操作的投影属性列表
};
查询优化用到的选择操作
structchoose
{
chartable[25];//选择操作的关系数据库表名
charproper[50];//选择操作的关系数据库属性名
charvalue[50];//选择操作的关系数据库属性值
};
查询优化用到的连接操作:
structconnection
{
chartable1[25];//连接操作的关系数据库表名
chartable2[25];//连接操作的关系数据库表名
chartable1_proper[50];//连接操作的关系数据库属性名
chartable2_proper[50];//连接操作的关系数据库属性名
};
(2)、优化过程:
根据初始的SQL通过相应的算法建立初始树结构:
以SQL(selectStudent.sname,C.cname,C.cteacherfromStudent,SC,CwhereStudent.sno=SC.snoandSC.cno=C.cnoandStudent.ssex=female;)为例做如下说明:
初始查询优化树为:
图3:
初始查询优化树
经优化后的查询优化树为:
图4:
经优化后的查询优化树
(3)、优化过程中中间结果的保存:
根据经优化后的查询优化树,自底向上的进行优化树节点搜索,并按照节点内保存的create_sql和opt_sql进行查询优化(create_sql和opt_sql在生成最终优化树是已经设置完毕)。
同时每经过一个节点均保存一次中间结果,以备后续节点(上层节点)进行优化时使用。
最后到达根节点时保存查询优化的结果信息。
(注:
具体的中间结果见程序执行后的节点文件)
保护功能模拟:
用户权限的控制,本数据库管理系统(DBMS)用户分为三个等级,分别是:
超级管理员,一般管理员,普通用户。
其中,各用户角色相应的使用数据库管理系统(DBMS)权限为如下:
超级管理员:
可以修改任何用户的密码、权限等;但是不可以修改自己的权限;可以对表做出任何操作;包括关系数据库、关系数据表的创建,对数据库表的增、删、查、关系代数的集合运算、专门运算等所有等操作,同时还可以使用优化查询技术及用户管理;
一般管理员:
只能对数据表进行增、删、查,可以使用索引技术(创建索引文件)但是不可以进行关系代数的集合运算、专门运算和使用优化查询技术;
普通用户:
具有最低权限,只能对数据表的查询,不可以创建关系数据库、关系数据库表,而且不能使用索引技术及优化查询技术。
四、实验测试用例与结果
实验用例与结果如下:
图5:
建库命令
图6:
插入命令
以下是对系统中存储有十万条记录的数据库表(Course)进行查询:
Course数据库表(部分数据信息)如下:
(测试用例)
151200437932006周泽学计算机科学技术学院计算机科学与技术262
152200524442006杨毅计算机科学技术学院计算机科学与技术512
153200607662006史海亮计算机科学技术学院计算机科学与技术335
154200607692006周贵宾计算机科学技术学院计算机科学与技术560
155200611832006董超计算机科学技术学院计算机科学与技术580
156200611882006魏立申计算机科学技术学院计算机科学与技术158
157200611892006朱晓东计算机科学技术学院计算机科学与技术