MiniSQL总体设计报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

MiniSQL总体设计报告第1页共7页2020-6-27MiniSQL总体设计报告作者:2002级计算机科学与技术专业XXXZZZTTTTTTTCCC1.引言1.1编写目的为了很好的实现我们的MiniSQL,这里先对系统进行一个总体的分析与层次的设计,以便提高代码的效率与质量。1.2项目背景本项目由ZZZ,TTT,XXX,CCC受数据库老师陈根才任命,以课堂大程的形式来独立完成一个MiniSQL的小型系统。本组开发人员具有数据库应用与实现的知识,并且有较好的C++基础,而且有良好的团队精神。1.3定义1.3.1专门术语C++:一种面向对象编程语言SQL:一种访问数据库管理数据库的语言。1.3.2缩写SQL:StructuredQueryLanguage(结构化查询语言)。1.4参考资料《数据库系统概念》AbrahamSilberschatzHenryF.KorthS.Sudarshan2.任务概述2.1目标设计并实现一个精简型单用户SQL引擎(DBMS)MiniSQL,允许用户通过字符界面输入SQL语句实现表的建立/删除;索引的建立/删除以及表记录的插入/删除/查找。MiniSQL总体设计报告第2页共7页2020-6-272.2运行环境PentiumII或更高,WindowsNT环境2.3需求概述数据类型只要求支持三种基本数据类型:int,char(n),float,其中char(n)满足1=n=255。表定义一个表最多可以定义32个属性,各属性可以指定是否为unique;支持单属性的主键定义。索引的建立和删除对于表的主属性自动建立B+树索引,对于声明为unique的属性可以通过SQL语句由用户指定建立/删除B+树索引(因此,所有的B+树索引都是单属性单值的)。查找记录可以通过指定用and连接的多个条件进行查询,支持等值查询和区间查询。插入和删除记录支持每次一条记录的插入操作;支持每次一条或多条记录的删除操作。SQL语句需求说明MiniSQL支持标准的SQL语句格式,每一条SQL语句以分号结尾,一条SQL语句可写在一行或多行。为简化编程,要求所有的关键字都为小写。在以下语句的语法说明中,用黑体显示的部分表示语句中的原始字符串,如create就严格的表示字符串“create”,否则含有特殊的含义,如表名并不是表示字符串“表名”,而是表示表的名称。创建表语句该语句的语法如下:createtable表名(列名类型,列名类型,列名类型,primarykey(列名));其中类型的说明见第二节“功能需求”。若该语句执行成功,则输出执行成功信息;若失败,必须告诉用户失败的原因。示例语句:createtablestudent(snochar(8),snamechar(16)unique,sageint,sgenderchar(1),primarykey(sno));删除表语句MiniSQL总体设计报告第3页共7页2020-6-27该语句的语法如下:droptable表名;若该语句执行成功,则输出执行成功信息;若失败,必须告诉用户失败的原因。示例语句:droptablestudent;创建索引语句该语句的语法如下:createindex索引名on表名(列名);若该语句执行成功,则输出执行成功信息;若失败,必须告诉用户失败的原因。示例语句:createindexstunameidxonstudent(sname);删除索引语句该语句的语法如下:dropindex索引名;若该语句执行成功,则输出执行成功信息;若失败,必须告诉用户失败的原因。示例语句:dropindexstunameidx;选择语句该语句的语法如下:select*from表名;或:select*from表名where条件;其中“条件”具有以下格式:列op值and列op值…and列op值。op是算术比较符:===若该语句执行成功且查询结果不为空,则按行输出查询结果,第一行为属性名,其余每一行表示一条记录;若查询结果为空,则输出信息告诉用户查询结果为空;若失败,必须告诉用户失败的原因。示例语句:select*fromstudent;select*fromstudentwheresno=‘88888888’;select*fromstudentwheresage20andsgender=‘F’;插入记录语句该语句的语法如下:insertinto表名values(值1,值2,…,值n);若该语句执行成功,则输出执行成功信息;若失败,必须告诉用户失败的原因。示例语句:insertintostudentvalues(‘12345678’,’wy’,22,’M’);删除记录语句该语句的语法如下:deletefrom表名;或:deletefrom表名where条件;若该语句执行成功,则输出执行成功信息,其中包括删除的记录数;若失败,必须告诉用户失败的原因。MiniSQL总体设计报告第4页共7页2020-6-27退出MiniSQL系统语句该语句的语法如下:quit;执行SQL脚本文件语句该语句的语法如下:execfile文件名;SQL脚本文件中可以包含任意多条上述8种SQL语句,MiniSQL系统读入该文件,然后按序依次逐条执行脚本中的SQL语句。在设计中,除了基本的需求之外,我们新增了四条语句:创建数据库语句CREATEDATABASE数据库名;删除数据库语句DROPDATABASE数据库名;使用数据库语句USE数据库名;显示帮助信息语句HELP;其中前三条用于实现数据库的创建,已有数据库的使用,以及删除不需要的数据库;这些将构成对此MiniSQL操作的引导,以及数据库使用结束后,删除不必要的数据库内容的基本命令。HELP命令是为用户提供程序的说明和对MiniSQL操作的指导。同时对一些语句的功能进行了增强:1.对于WHERE条件适当地做了扩充。在实验要求中规定WHERE条件具有以下格式:列op值and列op值…and列op值。其中op是算术比较符:===。但在具体实现时,WHERE条件具有以下格式:列op值/列and/or列op值/列….And/or列op值/列。2.对于SELECT语句,除了能够选择所有属性以外,还可选择部分属性。如SELECTATTR1,ATTR2,……,ATTRnFROM表名。3.系统体系结构设计:在系统的结构设计中,我们主要是按照实验设计指导书中给定的进行设计,各个模块之间的接口会在下面的模块接口设计中进一步阐述,设计结构图完全参照实验指导上的设计结构,如下:MiniSQL总体设计报告第5页共7页2020-6-27Interpreter模块的主要功能是接受用户输入的SQL语句及其他命令语句,并检验用户输入的SQL语句及其他命令语句的格式,语法和语义的正确性。同时将符合要求的语句转化为内部形式,供API及Catalog模块使用;而对不符合要求的语句,显示其出错信息,供用户参考。SQL语句的命令解析如下图所示:API模块是整个系统的核心,其主要功能是根据Interpreter层解释生成的命令内部形式,调用CatalogManager提供的信息进行进一步的验证及确定执行规则,并调用RecordManager、IndexManager和CatalogManager提供的相应接口执行各SQL语句及命令语句。API模块实现功能根据Interpreter层解释生成的命令内部形式的语句编号分别调用CatalogManager提供的接口进行语句的语义验证,并根据结果调用RecordManager,IndexManager提供的接口执行各语句,同时也为RecordManager模块调用IndexManager模块的功能提供接口。概而言之,API是Interpreter模块,RecordManager模块及CatalogManager模块进行沟通的枢纽,三者之间的交互一般都需由API模块来进行转接才能进行相互之间的功能调用。因此,虽然API模块所实现的功能十分有限,但是该模块却是整个系统的核心。CatalogManager负责管理数据库的所有模式信息,包括:1.数据库中所有表的定义信息,包括表的名称、表中字段(列)数、主键、定义在该表上的索引。MiniSQL总体设计报告第6页共7页2020-6-272.表中每个字段的定义信息,包括字段类型、是否唯一等。3.数据库中所有索引的定义,包括所属表、索引建立在那个字段上等。4.数据表中的记录条数及空记录串的头记录号。5.数据库内已建的表的数目。CatalogManager还必需提供访问及操作上述信息的接口,供Interpreter和API模块使用。为减小模块之间的耦合,Catalog模块采用直接访问磁盘文件的形式,不通过BufferManager,Catalog中的数据也不要求分块存储。数据字典文件格式:RecordManager负责管理记录表中数据的数据文件。主要功能为实现记录的插入、删除与查找操作,并对外提供相应的接口。其中记录的查找操作要求能够支持不带条件的查找和带条件的查找(包括等值查找、不等值查找和区间查找)。数据文件由一个或多个数据块组成,块大小应与缓冲区块大小相同。一个块中包含一条至多条记录,为简单起见,只要求支持定长记录的存储(一个文件中只存储一个表或索引的内容),且不要求支持记录的跨块存储。Indexmanager是程序的索引部分,直接对buffermanager提供的内存索引块操作,主要是构建B+树,负责实现recordmanager这一模块(提供函数接口)所需要的函数。功能有:存储\删除记录的索引,查找记录在table表中的相对位置等(由buffer负责写回磁盘)。BufferManager负责缓冲区的管理,主要功能有:1.根据需要,读取指定的数据到系统缓冲区或将缓冲区中的数据写出到文件;2.实现缓冲区的替换算法,当缓冲区满时选择合适的页进行替换;3.记录缓冲区中各页的状态,如是否被修改过等;4.提供缓冲区页的pin功能,及锁定缓冲区的页,不允许替换出去。为提高磁盘I/O操作的效率,缓冲区与文件系统交互的单位是块,块的大小应为文件系统与磁盘交互单位的整数倍,一般可定为4KB或8KB。记录管理模块(RecordManager)和索引管理模块(IndexManager)向缓冲区管理申请所要的数据,缓冲区管理器首先在缓冲区中查看数据是否存在,若存在,直接返回,否则,从磁盘中将数据读入缓冲区,然后返回。最近最少使用(LRU)算法:用一个链表记录所有的缓冲块,每次访问到一个缓冲块就将它插入到链表的头部,这样链表尾的缓冲块就是最近最少使用的块,在需要的时候就可以替换出去。改进:换出脏块时需要写出块,考虑优质换出非脏块。4.接口设计4.1外部接口本系统的外部接口为控制台。使用者通过控制台的字符界面输入查询语句使用MiniSQL。输入方式为键盘输入。MiniSQL总体设计报告第7页共7页2020-6-274.2内部接口本系统内部模块间采用函数调用的方式。具体描述如下。CatalogManager为Interpreter提供各种与创建、删除、查询表有关的函数接口,Interpreter调用相应的接口来实现用户的要求。调用时,CatalogManager利用RecordManager与IndexManager提供的接口来进行实际的对表的读写。其中,IndexManager为CatalogManager提供与索引创建、删除、插入相关的接口,RecordManager为CatalogManager提供读写文件的接口。BufferManager为RecordManager提供查找文件的接口。5出错处理设计本系统出错主要在两方面,一个是Interpreter的语法分析,另一个是后台程序的异常(比如查询的表不存在)Interpreter方面,只检查语法错误,若出现错误则重新开始程序,并不关闭程序。后台方面,错误采用异常的形式由CatalogManager模块抛出,由Interpreter捕捉,然后反映到主函数里进行

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功