ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:884.96KB ,
资源ID:6672987      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6672987.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据库系统原理课程设计总结报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据库系统原理课程设计总结报告.docx

1、数据库系统原理课程设计总结报告黑龙江大学“数据库系统原理课程设计”总结报告学院软件学院年级2011级专业软件工程学号20113311姓名杜常数报告日期2013/12/21成绩黑龙江大学计算机科学技术学院黑龙江大学软件学院1、 开发环境硬件环境:Windows XP/Win7操作系统软件环境:Microsoft Visual Studio 20052、 DBMS系统架构如图2-1所示,通过该类图可以大致看到所有的类的属性、行为以及各个类相互之间的关系。图2-1 DBMS静态类图在运行本系统时,会先通过Ganalysis的构造方法对系统进行初始化,包括载入文法和文法的分析表。载入成功后用户输入SQ

2、L语句时main函数会调用int Ganalysis:analysis_sql(char sql)对输入的 语句进行处理,如果文法分析不通过时返回一个正数(错误出现的位置),main函数则会调用void Ganalysis:showError();来显示语法错误。如果语法分析成功,analysis返回OK(-2), Ganalysis会调用相应的模块来具体执行SQL语句。此时不管具体执行结果如何,都会返回OK,在主函数中再调用void Ganalysis:showExecuteResult ();来显示执行的结果。如下图2-2为该系统语法分析失败时的序列图,图2-3为系统语法分析成功时的序列图

3、:图2-2语法分析失败序列图图2-3 语法分析成功时的系统序列图3、DBMS主要功能模块本DBMS主要包含6个模块,分别是SQL语言的词法和语法分析功能模块、创建数据库及数据操作功能模块、索引的创建及删除模块、查询功能模块、查询优化模块、数据库保护功能模块。在以下的各小节中将会详细介绍。3.1 SQL语言的词法和语法分析(1)功能介绍该部分利用已有的编译知识,完成SQL语句的词法和语法分析工作,对用户输入的SQL语句进行检验是否正确。如果输入正确则进一步做处理,否则指出错误的位置。进一步了解DBMS中数据字典的作用,并为后续的查询处理和优化实验打好基础。主要包括的词法语法分析语句包括:(1)c

4、reate table (8)create index(2)drop table (9)drop index(3)alter table (10)create view(4)insert (11)drop view(5)delete (12)create user(6)update (13)grant(7)select (14)revoke(2)相关理论首先使用词法分析将语句中各个单词分离出来,包括关键字、标识符、整数、运算符、界符等;第二步使用语法分析器判别语句中的语法错误,即不同中来的单词搭配错误;第三步使用语义分析,校对语义错误。SLR语法分析器由输入、输出、栈、驱动程序及包含动作(ac

5、tion)和转移(goto)两部分的语法分析表构成的。驱动程序对所有的SLR语法分析器都是一样的,不同的语法分析器只是语法分析表有所不同。分析程序每次从输入缓冲区读入一个符号,并使用栈来存储形如s0X1s1X2s2Xmsm的串。其中sm在栈顶,Xi是文法符号,Si是称为状态的符号,每个状态符号概括了栈中位于它的下面的信息。栈顶的状态符号和当前的输入符号用来检索语法分析表,以决定移动规约分析的动作。在实际实现中,文法符号不必出现在栈里。SLR1语法分析的模型如图3.1-1所示:图3.1-1(3)算法描述首先需要对输入的字符串进行词法分析,先通过函数void strChange(string st

6、r,vector &vecStr); 函数对字符串进行分割,将str中的单词、操作符等分成一个一个的string类型的字符串,并保持在vecStr中。具体的实现算法如下所示:void strChange(string str,vector &vecStr) for (i=0;i=,=则将temp+=stri+; vecStr.push_back(temp); temp清空 else temp+=stri+; 如果第i+1个字符串是分割符或操作符,则将temp保存到vecStr中。 /for if(temp非空) 向vecStr中保存temp 对字符串进行分割后就可以进行文法分析了。利用函数in

7、t analysis:analysis_str(char sql,string &error)对SQL语句进行文法分析。其中函数bool analysis:action_at(int row, std:string vtch, int &num);将第row行符号为vtch的值保存到引用参数num中,如果action表对应的位置数据无效时将返回false. 函数bool analysis:goto_at(int row,char vnch,int &num)与action函数实现的功能类似。语法分析时首先把初始状态S0放在语法分析器的栈顶,把#压入符号栈中。然后执行如下部分的算法:for(i=

8、0;i0)/移进 状态栈中入栈num; 符号栈中入栈stri+; else if(numleft,num) 返回错误位置为i-1个单词 将num压入状态栈,将第num个产生式的左部压入符号栈。 else if(num=0) 分析成功,返回OK if(i=str.size() 返回出错位置为i-1个单词(4)程序流程图对字符串分割的函数流程图如下图3.1-2所示:对输入的SQL语句进行文法分析的函数int analysis:analysis_str(char sql,string &error)流程图如下所示:(5)测试用例与实验结果 测试用例:3.1-1:create table stu(id

9、 int,name char(20),score int);测试用例3.1-2:select name,age,address from user;测试用例3.1-3:alerttt table stu add id int;测试用例3.1-4:update stu set a=abcd where a;3.2创建数据库及数据操作功能(1)功能介绍1、实现建立数据库表结构的功能。该部分还包括以下几个功能:(1)支持整型int、字符型char、变长字符型varchar数据。(2)以文件形式保存基本表。(3)具有相应的数据字典存储表名、表的结构等相关信息。2、实现输入数据库记录的功能,可以通过SQ

10、L insert语句向已有的表中插入数据库记录。当表不存在时会提示输入错误。3、实现删除数据库记录的功能,通过delete语句删除某一条或者符合某一条件的记录。同时会显示删除的记录个数。4、实现修改数据库记录的功能,该部分通过update语句可以修改符合某一条件的记录。同时会显示所修改的记录个数。5、实现显示数据库结构和内容的功能。6、实现在已有的关系中添加属性的功能,利用alert命令可以添加一个表的属性。表不存在时会有错误提示。7、实现从已有的关系中删除属性的功能利用alert命令可以添加一个表的属性。表不存在时会有错误提示,当表只剩余一列时不允许再删除该属性可以通过drop语句删除表。8

11、、实现删除表的功能,使用drop命令删除表,当表不存在时会提示表不存在的错误信息。(2)相关理论1、文件和文件记录数据通常都是以记录的形式存储在磁盘上。记录由一组相关的数据值或数据项排列而成。每个数据项对应于记录的一个域,由一个或几个字节组成。记录的每个域具有一个名字和一个数据类型,如整数、字符串等。一组域名字及其对应的数据类型构成了记录型或记录格式。文件是一个记录序列。一个文件的所有记录都具有相同的记录型。如果一个文件的所有记录都具有相同的长度,这个文件被称为定长记录文件。如果一个文件中的不同记录可能具有不同的长度,则称这个文件为变长记录文件。以下是磁盘上存储文件的方法和特点。连续存储方法:

12、按照文件中文件块的顺序把文件存储到连续磁盘块上。存取整个文件的效率高。文件扩充困难。链接存储方法:在每个文件块中增加一个指向下一个文件块所在的磁盘块的地址指针。便于文件扩充。读整个文件的速度很慢。索引存储方法:在磁盘上存储一个或多个索引块。每个索引块包含指向文件块的指针。每个数据库管理系统都包含一个称为数据字典的小型数据库。2、数据字典数据字典用来存储数据库中数据对象的描述信息和数据库管理系统需要的控制信息。数据对象的描述信息包括概念模式、内模式、外模式以及它们之间的映象的描述。数据库管理系统需要的控制信息包括查询优化、安全性检查、用户权限验证、事务处理、报告生成、约束验证、数据定义和操纵语言

13、编译等系统程序模块所需要的信息。3、堆文件的查找操作查找一个满足给定条件的记录:必须从文件的第一个记录开始搜索,直到发现满足条件的记录为止。如果满足条件的记录不止一个,需要搜索整个文件。4、堆文件的插入操作堆文件的头存储它的最末一个磁盘块的地址。插入一个记录时,首先,读文件头,找到最末磁盘块地址,把最末磁盘块读入主存储器缓冲区;然后,在缓冲区内把新记录存储到最末磁盘块的末尾;最后,把缓冲区中修改过的最末磁盘块写回原文件。5、堆文件的删除操作第一种方法:首先找到被删除记录所在的磁盘块;然后读到主存缓冲区,在缓冲区中删除记录;最后把缓冲区内容写回磁盘文件。这种方法将使文件中出现空闲的存储空间,需要

14、周期地整理存储空间,避免存储空间的浪费。第二种方法:在每个记录的存储空间增加一个删除标志位。当删除一个记录时,把删除标志位置1。查找记录时跳过删除位置为1的记录。这种方法也需要周期地整理存储空间。第三种方法:当删除一个记录时,把文件末尾记录移动到被删除记录的位置。避免了存储空间的整理。只适用于定长记录文件。6、堆文件的修改操作定长记录文件:找到记录所在磁盘块,读入主存缓冲区,在缓冲区中修改记录,并写回磁盘。变长记录文件:先删除后插入。(3)算法描述1、创建表的功能 创建表的功能由Create类的函数int Create:create_table(char sql);来实现。其中传入的参数sql

15、为形如“create table table_name (id1 类型1,id2 类型2 idn 类型n)” 其具体的算法描述如下所示:int Create:create_table(char sql) char tname100; 从sql语句中提取表名table_name,存储在table_name中. if(isExistTable(table_name) 提示表已经存在。 return ERROR; 向数据字典中追加table_name的表名table_name以及表的结构。 创建文件database/+table_name+.txt. return OK;2、插入记录的功能 插入记录

16、的功能由Insert类里的int Insert:insertRecord(char sql);函数来实现。传入的sql语句参数形如“insert into table_name (id1,id2 idn) values(value1, value2valuen);”或者形如“insert into table_name values(value1, value2valuen);”具体的算法如下所描述:int Insert:insertRecord(char sql) if(获取表结构失败) return ERROR; if(sql3!=()/insert into table_name val

17、ues(.); 对表的结构做检验,如果插入结构不正确,则返回并提示结构不匹配。 向表中追加一条记录。 else/insert into table_name(id1.)values(value1.); if(sql语句中插入位置与插入的值不匹配) return ERROR; if(插入位置中列名与数据字典信息不符) return ERROR; 向表中追加一条记录。 提示记录插入成功。 return OK;3、修改数据库记录的功能修改数据库记录的函数实现由Update类中的int Update:updateRecord(char sql)函数来实现,具体算法如下所示:int Update:upd

18、ateRecord(char sql) 从sql中提取表名table_name. if(获取表结构失败) /表不存在 return ERROR; if(set语句中存在与数据字典不符的列名) return ERROR; if(where语句中存在与数据字典不符的列名) return ERROR; 从文件database+table_name+.txt中读取表内容table。 for(int row=0;rowrowNum;row+) if(tablerow符合条件) 对tablerow修改。 /fortable写回到文件database+table_name+.txt中. return OK;

19、4、删除数据库记录的功能修改数据库记录的函数实现由Update类中的int Delete:deleteRecord(char sql);函数来实现,具体算法如下所示:int Delete:deleteRecord(char sql) 从sql语句中提取表名table_name; if(从数据字典中获取table_name表结构失败) /该表不存在 return ERROR; if(where语句中存在与数据字典不符的列名) return ERROR; 从文件database+table_name+.txt中读取表内容table。 for(int row=0;rowrowNum;row+) if

20、(tablerow符合条件) 删除tablerow。 /for将table写回到文件database+table_name+.txt中. return OK;5、添加属性的功能Alter类中的函数int Alter:addColumn(char sql)负责实现添加属性的功能。除了需要对数据字典中表的结构进行修改外,还要对存储表的文件进行修改,使文件的表结构与数据字典里存储的结构一致。具体的实现算法如下所示:int Alter:addColumn(char sql) 从sql语句中提取表名table_name; if(从数据字典中获取table_name表结构失败) /该表不存在 return

21、 ERROR;if(要添加的列名中存在与表结构中一致的列名) /sql语句中存在错误 return ERROR; 修改数据字典中的表的结构。 从文件database+table_name+.txt中读取表的内容存储到table中。 for(int i=0;irowNum;i+) 向tablei中添加相应的列,值为空。 将table写回到文件database+table_name+.txt中。 return OK;6、删除属性的功能Alter类中的函数int Alter: delColumn(char sql)负责实现删除属性的功能。该函数的实现与添加属性中addColumn实现类似,除了有sq

22、l语句的校验还有对数据字典和存储文件的修改。具体的实现算法如下所示:int Alter:delColumn(vector vstr)/alter table name drop id1,id2,id3. 从sql语句中提取表名table_name; if(从数据字典中获取table_name表结构失败) /该表不存在 return ERROR;if(要删除的列名中有未知的列名) /sql语句错误 return ERROR; 修改数据字典中的表的结构。 从文件database+table_name+.txt中读取表的内容存储到table中。 for(int i=0;i=55;执行结果如下图所示:

23、执行select * from student ;语句结果如下图所示:5、测试用例3.2-5:alter table student add sorce1 int;执行结果如下图所示:查看数据字典中如下图所示:通过select语句查看表的内容如下所示:6、测试用例3.2-6alter table student drop (sorce1);alter table student drop (a);执行结果如下图所示:数据字典中对于student的表结构的存储如下图所示:通过select语句查看score1已经不存在了,表的内容如下截图所示:7、测试用例3.2-7:drop table stud

24、ent;如下为执行的结果,通过select查看表时发现系统提示表已经不存在:3.3索引的创建及删除(1)功能介绍此部分意在通过建立索引文件以提高查询的效率。通过create index命令建立相应的索引文件,当使用select语句查询表时如果存在相应列的索引,则系统会自动提示使用的索引文件。同时用户还可以使用drop index命令来删除已有的索引文件。本系统中创建的是辅助索引。由于时间仓促,使用的索引是普通索引,即基于二分查找的方式来提高查找的效率。(2)相关理论1、索引文件类似于科技图书中的名词术语索引。当查找一个记录时,先查阅索引,找到记录在文件中的地址,然后从文件读出这个记录。 一个文件的索引通常定义在该文件的一个或一组域上。这组域称为索引域。索引也是一个文件,称为索引文件。被建立索引的文件称为数据文件。索引文件的记录称为索引记录或索引项。每个索引记录包括两个域第一个域用来存储数据文件索引域的值K;第二个域用来存储一个或一组指针,每个指针指向一个索引域值为K的记录所在磁盘块的地址。索引文件通常都按照索引域值的大小排序,以提高存取效率。索引文件一般都远小于数据文件。2、索引的分类按照索引文件的结构

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1