本文主要介绍了小型数据库管理系统主体功能的设计与实_第1页
本文主要介绍了小型数据库管理系统主体功能的设计与实_第2页
本文主要介绍了小型数据库管理系统主体功能的设计与实_第3页
本文主要介绍了小型数据库管理系统主体功能的设计与实_第4页
本文主要介绍了小型数据库管理系统主体功能的设计与实_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上海海事大学本科生毕业设计(论文)摘 要本文主要介绍了小型数据库管理系统主体功能的设计与实现。该系统的设计目的主要用于教学演示,使学生通过运行该系统、观看演示和阅读代码等多种方法深入了解数据库管理系统的运行原理。通过设计并实现该目标系统,也有助于制作者提高对数据库原理和基本编译原理知识的理解,并且进一步熟悉编程语言。该系统由两人合作完成,本人负责设计并实现全部DDL部分及除数据库查询之外的全部DML部分,还有其中所涉及到的完整性、安全性约束保障等功能。关键词: 数据库管理系统 数据库定义语言 数据库管理语言AbstractThis paper introduces how to design

2、and realize the DBMS of a mini database. This system is design for teaching. The students can learn the basic principle of the DBMS by using system, watching demonstration or reading codes. In the process of designing and programming for this system, the programmer will study the basic principle of

3、database and compiler much more deeply. And he will be more familiar with the programming language.This system will be realized by two students. Im in charge of the whole DDL part and most of DML part except for selecting. While some parts for integrity and safe are also in my business.Keywords: DBM

4、S DDL DML目 录引言31 系统的概要介绍51.1 系统模块分布51.2 底层文件组织61.3 开发环境62 SQL指令编译模块详述72.1 Parser Generator使用简介82.2 语法树数据结构82.3 编译模块的调用123 DDL处理模块详述123.1 数据库创建与删除123.2 数据表的创建与删除143.3 视图的创建与删除153.4 索引的创建与删除163.5 数据表模式的修改174 DML处理模块详述184.1 插入记录194.2 删除记录194.3 更新记录204.4 WHERE条件的判断算法214.5 当前数据库指定225权限处理模块235.1 用户管理235.2

5、 权限控制235.3权限审核256 完整性及安全性控制模块266.1实体完整性控制Entity Integrity266.2参照完整性控制Referential Integrity266.3 用户标识与鉴别266.4 存取控制277 实验验证277.1 基础测试场景277.2 测试方法287.3 测试数据288 系统设计总结38参考文献39附录一 系统底层文件的格式39(一) EDL文件39(二) EDT文件40(三) EDX文件40附录二 系统主要界面40引言数据库技术从诞生到现在,在不到半个世纪的时间里,形成了坚实的理论基础、成熟的商业产品和广泛的应用领域,吸引越来越多的研究者加入。数据库

6、的诞生和发展给计算机信息管理带来了一场巨大的革命。三十多年来,国内外已经开发建设了成千上万数据库,它已成为企业、部门乃至个人日常工作、生产和生活的基础设施。同时,随着应用的扩展与深入,数据库的数量和规模越来越大,数据库的研究领域也已经大大地拓广和深化了。30年间数据库领域获得了三次计算机图灵奖(C. W. Bachman, E. F. Codd,J. Gray),更加充分地说明了数据库是一个充满活力和创新精神的领域。随着计算机技术的发展,数据管理技术经历了人工管理阶段、文件系统阶段和数据库系统阶段。从用户直接管理无共享、不独立的数据到由数据库管理系统在提供数据安全性、完整性、一致性、并发控制和

7、恢复能力的情况下能够对数据进行批处理、联机实时处理以及分布处理,数据库管理技术正在以飞一般的速度向前发展。现在市面上呈现了许多非常实用的数据库管理系统,例如:小型数据库管理系统有FoxPro,Access,Paradox,大型数据库管理系统有SQL Server,DB2,Oracle,Informix,Sybase等等。对于计算机专业学生而言,学习数据库理论知识的重要性已不言而喻。为了适应教学的需要,帮助学生更好的掌握数据库系统的基本原理,了解它的工作过程和实现方法,并为之提供数据库管理系统二次开发的基础,本小组设计并实现了一个小型数据库管理系统的模型系统。本系统实现后可以帮助今后的学生更好地

8、理解数据库原理的主要基础理论,通过使用本系统、观看演示部分或阅读代码等多种手段,加深对这方面知识的理解,从而提高自身对数据库编程理念的掌握程度。本系统有别于前文提到的各种大型商业化数据库管理系统,而是一个非常精简的教学模型,制作本系统的主要目的是帮助其他学生更好地学习数据库的基础理论知识,了解其底层的结构组织和运行方式。着重强调的是数据的存储与查询,而没有将“事务”、“锁管理”、“触发器”等中高级功能,以及“客户端/服务端”等概念列入设计之中,这样的安排主要是因为项目的开发目的是协助教学,过于复杂的系统对于学习者反而是一种负担,而且一旦学习者对本系统所列功能非常了解,他也能理解其他高级功能的实

9、现原理。本次设计所开发的系统,旨在能够通过运行大多数常见的SQL语句来实现对一定规模数据的存储管理及查询。系统主要包括以下几项功能:² 用户管理Ø 用户创建:供管理员添加新用户Ø 用户删除:供管理员删除用户Ø 用户登陆管理:审核使用系统的用户身份信息,以保障安全性² 权限管理Ø 权限授予:使当前用户在合法条件下将自身部分权限授予他人Ø 权限回收:使当前用户在合法条件下回收他人的部分权限² 数据库管理Ø 数据库创建:用于创建新数据库Ø 数据库删除:用于删除过期或无效数据库Ø 当前数据库指

10、定:指定当前操作对象在哪个数据库中Ø 当前数据库关闭:清空当前的数据库指定信息² 数据表管理Ø 数据表创建:用于创建新数据表Ø 数据表删除:用于删除过期或无效数据表Ø 数据表模式修改:使用户可以修改某张现有数据表的字段模式Ø 数据记录管理l 数据记录插入:在某张现有数据表中插入一条新纪录l 数据记录删除:在某张现有数据表中删除符合指定条件的一组记录l 数据记录更新:在某张现有数据表中更新符合指定条件的一组记录² 视图管理Ø 视图创建:用于创建新视图Ø 视图删除:用户创建过期或无效的视图² 索引管

11、理Ø 索引创建:供数据表的创建者对记录创建索引Ø 索引删除:供数据表的创建者删除本表相关的索引Ø 索引维护:供DML模块更新记录后,刷新指定数据表相关的全部索引² 数据库查询 非本人制作:供用户按条件查看某些记录集合的内容² 运行过程演示 非本人制作:供学生观看系统运行过程的动态演示1 系统的概要介绍1.1 系统模块分布图1-1 系统整体框架系统主要包含以下模块Ø SQL解析模块Ø DDL处理模块Ø DML处理模块Ø 权限处理模块Ø 完整性和安全性控制模块系统中的SQL解析模块,其功能是解析SQ

12、L语句,使用Parse Generator编译器作为词法和语法分析器,Parse Generator是一款由英国公司编制的编译器。数据定义语言处理模块,处理对数据库的创建、删除、打开和关闭;对数据表的创建、删除和修改;对视图的定义和删除;还有对索引的创建及删除。数据操纵语言处理模块,处理对记录的添加、删除、更新及查询。权限处理模块,负责用户互相之间权限的授予和回收,以及执行其他各类操作时的审核过程。而完整性和安全性控制模块负责执行各项审核,以保证系统内数据的一致性、安全性和完整性。当用户输入某SQL语句后,系统最先启用SQL语言解析模块,分析其词法语法是否符合SQL指令的文法规定,如符合,则同

13、时记录其有效信息部分。之后必然进入安全性和完整性模块,从而进行各类审查。通过审查后,根据解析结果的不同,分别将进入DDL、DML或权限处理模块,进而执行不同的操作并显示结果。1.2 底层文件组织图1-2 系统底层文件组织1.3 开发环境本系统的开发环境为Visual Studio 6.0 ,开发语言为C+ ,编译部分使用了代码生成器工具Parser Generator 。Parser Generator这款工具可以根据用户定义的词法及语法规则,将源语言编译为C+或JAVA等目标语言,并可按要求执行附加操作。本系统中通过将Parser Generator生成的代码文件导入系统工程,来完成对用户输

14、入的SQL语句文法规则的检查,并同时将SQL语句中的有效信息部分存储至自定义数据结构的相应结点变量中。开发过程对硬件并无过高要求,普通家用配置计算机即可完成开发过程。而在软件配置方面,除需要安装Parser Generator和Visual Studio以外,还需对VC的开发环境做如下配置:设置Tools->Options->Directories的Include files:.cppincludeLibrary files:.cpplibmsvc32Source files:.cppsource其中“.”为pargen安装目录设置Project->Settings->

15、C/C+ Category下拉菜单中General:对应Win32 Debug在Preprocessor definitions 中加入YYDEBUG,YYDLL对应Win32 Release在Preprocessor definitions 中加入YYDLL下拉菜单Precompiled Headers选中第二个Automatic use of precompiled headers设置Project->Settings->Link对应Win32 Debug在Object/library modules中加入ylmtrid.lib;对应Win32 Release在Object/l

16、ibrary modules中加入ylmtri.lib。2 SQL指令编译模块详述SQL指令解析模块主要负责核查用户输入的SQL指令是否符合相应的文法规则,如果符合,则同时将SQL指令中的有效信息部分记录到全局变量TheOutput所指引的语法树结构中。TheOutput的类型为自定义数据类型StatementST,其成员变量包括整数型变量TheID以及一系列指向其他自定义数据类型的指针。TheID内记录的数值即标示其他指针型的成员变量何者有效。同一时间内,最多有一个指针成员非空,指向相应SQL指令语法树的自定义数据结构。当用户输入的SQL语句错误时,TheID内的数值为99,其余全部指针变量

17、全部为空。举例来说,设有如下SQL语句:select distinct Student.SNamefrom studentwhere Student.SName="Jack"order by Student.SName DESC;则SQL语言解析模块首先对该语句进行词法和语法分析,并且把结果赋给全局变量TheOutput,例中的语句分析完成后,全局变量TheOutput的各个成员的值如下所示:TheOutput->TheID=0; 说明该语句是SELECT语句;TheOutput->RL->ReturnType=2;说明语句要求返回distinct型的记录

18、;TheOutput->RL->RFL->TableName=Student 说明要返回的字段在Student表中;TheOutput->RL->RFL->FieldName=SName 说明要返回字段SName;TheOutput->TableName=Student; 表示查询的表名是Student;TheOutput->OL->AoD=0; 表示返回的记录按字段降序排列;2.1 Parser Generator使用简介安装好Parser Generator以后启动它的主程序,填入工程名,确定工程所在路径,选择目标语言为C+,然后让程序

19、自动创建两个文件mylexer.l和myparser.y。其中,mylexer.l文件用于词法分析的部分,而myparser.y文件用于语法分析的部分,在这两个文件中用注释的方式明确标明了各个代码段的书写位置,只要按照它的规定书写即可。在.l文件中,有一句默认的#include "myparser.h",在这句话下包含其他所需文件并申明全局变量或外部变量。在/ place any declarations here这句注释的下面,填写一些无返回值的申明。例如“IDENTIFIER a-zA-Z_a-zA-Z0-9_#*”,这句表示当扫描到以大小写字母开头,其后以大小写字母或

20、数字或_#这三个符号出现0次获多次的字段时,识别为IDENTIFIER。在/ place your Lex rules here这句注释的下面,填写带有返回值的申明,例如“add|ADD return ADD ;”这句,表示当扫描到小写的add或大写的ADD时,识别为大写的ADD返回。在.y文件中,有一句默认的#include "mylexer.h",在这句话下边包含其他所需文件并申明一些全局变量或外部变量。在/ place any declarations here这句注释的下面,填写所有的token申明。token申明就是一句语句或命令中的标志性成分,例如:Open D

21、atabase001,Open就是一个Token,而Database001是一个IDENTIFIER型的Token。在/ place your YACC rules here (there must be at least one)这句注释下面填写正式的语法申明部分,例如“dbname: IDENTIFIER”,表明dbname就是单个的IDENTIFIER,又比如“open: OPEN dbname”表明open这一句式是由OPEN这个Token和句式dbname的组合,而在文件下方需要再定义dbname这个句式。在/ programs section这句注释的下面有一个默认的Int型的函数

22、Main,为了方便之后的处理将其改为被调用的一个函数parse。2.2 语法树数据结构本节将以图表形式介绍整个系统中用以存储编译后的各SQL指令的自定义数据结构。图2-1 Select语句语法树自定义数据结构图2-2 Where条件运算树自定义数据结构图2-3 Create Table语句语法树自定义数据结构图2-4 Create View 语句语法树自定义数据结构图2-5 Create Index语句语法树自定义数据结构图2-6 Insert语句语法树自定义数据结构图2-7 Update语句语法树自定义数据结构图2-8 Delete 语句语法树自定义数据结构图2-9 Alter Table

23、Add语句语法树自定义数据结构图2-10 Alter Table Modify语句语法树自定义数据结构图2-11 Alter Table Drop 语句语法树自定义数据结构图2-12 Grant语句语法树自定义数据结构图2-13 Revoke 语句语法树自定义数据结构2.3 编译模块的调用将Parser Generator工程目录下的全部文件复制到VC系统的工程目录中,将2组代码文件和头文件导入VC系统的工程,并对编译器环境及工程环境做相应设置。之后,当需要在VC的工程中使用编译模块的主函数时,只需要在相应的.cpp文件首部Include编译部分的两个头文件,并声明编译部分的主函数,即可在之后

24、的任何函数或类中调用解析部分的主函数,以实现对SQL指令进行解析的目的。需要注意的是,解析的输入接口为某个指定文件,故需要通过系统将用户在系统界面控件中输入的SQL语句缓存至本系统的临时文件中,方能进行之后的解析步骤。3 DDL处理模块详述DDL,即数据定义语言。包括有数据库的创建与删除,数据表的创建与删除,视图的创建与删除,索引的创建与删除,数据表模式的修改。本模块全部由笔者设计完成,以下将逐一详细叙述。3.1 数据库创建与删除 对应的SQL语句创建数据库:CREATEDATABASE <数据库名> ;删除数据库:DROPDATABASE <数据库名> ;3.1.2

25、相应底层文件介绍系统根目录下有两个文件夹,分别名为“DDL”和“DATA”,DDL文件夹内放置各类数据字典信息文件,DATA文件夹内放置数据信息文件。在DDL目录下,存在一个名为DB_List.edl的二进制流文件,该文件为数据库清单文件。记录了每个数据库的名称和创建者。当创建一个数据库时,分别在DDL和DATA文件夹内生成同名子文件夹,文件夹名同数据库名。在/DDL/<数据库名>/目录下,新建Table、View和Index三个文件夹和Privilege.edl文件,三个文件夹分别放置该数据库下的数据表、视图和索引的数据字典信息文件,而Privilege.edl文件放置该数据库内

26、各种数据对象的权限信息。Table文件夹内含有Table_List.edl和ForeignKey_List.edl两个清单文件,Table_List.edl文件为该数据库内的数据表清单文件,记录了每张数据表的名称和创建者。ForeignKey_List.edl文件为表级关联的信息文件,记录了各张表之间的表级约束信息。View文件夹内含有View_List.edl清单文件,记录了每个视图的名称和创建者。Index文件夹内含有Index_List.edl清单文件,记录了每个索引的名称、创建者和该索引所基于的数据表名称。而在/DATA/<数据库名>/目录下,同样含有Table、View和

27、Index三个文件夹,但是当数据库内没有被创建任何具体的数据对象时,这三个文件夹内不存在任何文件。3.1.3 处理流程图3-1 创建或删除数据库的流程3.2 数据表的创建与删除对应的SQL语句创建数据表:CREATETABLE<数据表名>PRIMARY( <主键1> , <主键2> , )FOREIGN( <外键1> REFERENCES <被参照表1> . <被参照字段1> )FOREIGN( <外键2> REFERENCES <被参照表2> . <被参照字段2> )(<字段名1

28、> <字段1类型> <字段1宽度> ,<字段名2> <字段2类型> <字段2宽度> , ) ;或:CREATETABLE<数据表名>PRIMARY( <主键1> , <主键2> , )(<字段名1> <字段1类型> <字段1宽度> ,<字段名2> <字段2类型> <字段2宽度> , ) ;创建数据表:DROPTABLE<数据表名> ;相应底层文件介绍每创建一张数据表,则在/DDL/<数据库名>/Ta

29、ble/目录下,创建一个与新数据表名相同的.edl文件,用以记录该数据表模式中每个字段的名称、类型、宽度、是否为主键等信息。同时在/DATA/<数据库名>/Table/目录下,创建一个与新数据表名相同的.edt文件,用以日后存放该数据表内的记录信息。 处理流程图3-2 创建或删除数据表的流程3.3 视图的创建与删除对应的SQL语句创建视图: CREATEVIEW <视图名> AS SELECT ;删除视图: DROPVIEW <视图名> ; 相应底层文件介绍每创建一份视图,则在/DATA/<数据库名>/View/目录下,创建一个与新视图名相同的.

30、edx文件,用以记录创建该视图的原始SQL语句中的关键部分的文字信息。创建视图时,仅保存了相应的原始SQL语句信息,并未生成相应的数据表文件,故仅当该视图被合法用户查询时,才对目标数据表信息做各类筛选操作。处理流程图3-3创建或删除视图的流程3.4 索引的创建与删除对应的SQL语句创建索引: CREATEINDEX <索引名> ON <数据表名> ( <字段1> <排序信息> ,<字段2> <排序信息> , ) ;删除索引: DROPINDEX <索引名> ;3.4.2 相应底层文件介绍处理流程图3-3创建或删

31、除索引的流程3.5 数据表模式的修改对应的SQL语句添加字段: ALTER TABLE <数据表名> ADD (<字段名1> <字段1类型> <字段1宽度> ,<字段名2> <字段2类型> <字段2宽度> , ) ;删除字段: ALTER TABLE <数据表名> DROP ( <字段1> ,<字段2> , ) ;修改字段: ALTER TABLE <数据表名> MODIFY ( <原字段名1> <新字段名1> <新字段1类型>

32、 <新字段1宽度> ,<原字段名2> <新字段名2> <新字段2类型> <新字段2宽度> , ) ;处理流程图3-4 修改数据表模式的流程4 DML处理模块详述DML,即数据操纵语言。包括有记录的插入、删除、更新及查询。本模块除数据查询以外,均由笔者设计并完成。以下将逐一详细叙述。4.1 插入记录对应的SQL语句 INSERT INTO <数据表名> ( <字段1> ,<字段2> ,) VALUES ( <字段值1> ,<字段值2> , ) ; 处理流程图4-1 插入记录的流

33、程4.2 删除记录 对应的SQL语句DELETE FORM <数据表名>WHERE <条件表达式1> AND|OR <条件表达式2> ; 处理流程图4-2 删除记录的流程4.3 更新记录对应的SQL语句 UPDATE <数据表名> SET <字段1> = <字段1新值> ,<字段2> = <字段2新值> , WHERE <条件表达式1> AND|OR <条件表达式2> ; 处理流程图4-3 更新记录的流程4.4 WHERE条件的判断算法自定义一个堆栈数据结构,堆栈的结点可以用

34、来存储如下各类数据(1)单个整数型变量值(2)单个浮点型变量值(3)单组字符串变量值(4)整数型变量区间(5)浮点型变量区间(6)字符串变量区间(7)单个布尔型变量值该堆栈数据类型可提供入栈操作PUSH,根据入栈对象的不同,执行不同的操作,具体如下:(1)当单个变量值入栈,则将其直接压入栈内(2)当字段名入栈,则将查找该字段的类型及数值,转换后压入栈内(3)当数据表明+字段名格式入栈,则查找并记录该数据表内该字段的数值区间,转换后压入栈内(4)当运算符入栈时,自动弹出栈顶的两个元素进行相应运算,将结果压入栈内;如果发现运算式非法,如:左右操作数类型不符且无法转换,则不进行运算,直接压入一个布尔

35、型结点,其值为False(5)当位运算符入栈时,自动弹出栈顶的两个元素进行位运算,并将结果压入栈内;如果发现运算式非法,如:左右操作数任意一个或全部不是布尔型,则不进行位运算,直接压入一个布尔型结点,其值为False有了如上自定义的堆栈类型后,即可处理WHERE语句所表示的条件筛选。编译SQL语句时,WHERE部分已置于相应的语法运算树中,只需以中序遍历该语法树,将便利过程中的每个结点都进行入栈操作,遍历之后,即可在堆栈的栈顶获得条件判断结果。此时,正确情况下,栈内应该有且只有一个元素,且必为布尔型,其值即为判断结果。其他情况皆属非法,可判定为条件不符。4.5 当前数据库指定4.5.1 对应的

36、SQL语句打开数据库:OPEN<数据库名> ;关闭数据库:CLOSE<数据库名> ;4.5.2 处理流程打开数据库时,检查数据库是否存在,不存在则操作失败,存在,则将数据库名及生成的相应底层文件路径名记录到全局变量中。关闭数据库时,清空上述全局变量。5权限处理模块5.1 用户管理用户管理功能并存在相应的SQL语句,故此项功能由对话框操作来完成。用户管理功能仅对管理员身份的用户开放,管理员有权添加、删除或修改用户。添加用户时,仅需设置其用户名、密码及身份信息,故此时的用户若为一般用户,则不具备任何操作权限。5.1.1 用户级别分类管理员:拥有对系统内任何数据对象的任意操作

37、权限普通用户:将根据管理员或其他用户授予的权限来操作数据库内的指定对象5.1.2 底层文件组织在DDL目录下有一个名为User.edl的文件,记录了全部用户的用户名、密码及身份信息。5.1.3 用户登陆系统考虑到数据库的安全性,所有的用户在进入系统进行操作前,必须先登陆系统,在登陆对话框中输入用户名及密码,系统审核通过后方可正常使用系统。如果登陆信息有误或用户取消登陆,则系统将自动退出而无法进行其他任何操作。登陆后,系统将把用户的个人信息记录到全局变量中,包括用户名及身份信息。5.2 权限控制由于数据库管理系统通常用户众多,为避免各用户间发生非法改动他人数据等情况的发生,管理系统通常对普通用户

38、的各项操作都需要进行权限审核。只有当系统认定该用户有权进行该操作时,其他步骤才会被执行。故权限控制成了系统不可或缺的一部分。 相应底层文件介绍在DDL目录下,有一个名为Privilege.edl的文件,该文件记录了数据库级别的权限信息。在/DDL/<数据库名>目录下,也有一个名为Privilege.edl的文件,该文件记录了数据表和视图级别的权限信息。 对应的SQL语句权限授予:GRANT <操作权限1> ,<操作权限2> , ON <数据对象类型> <数据对象1> ,<数据对象2> , TO <用户1> ,&

39、lt;用户2> , WITH GRANT OPTION;或者:GRANT <操作权限1> ,<操作权限2> , ON <数据对象类型> <数据对象1> ,<数据对象2> ,TO <用户1> ,<用户2> , ;权限回收:REVOKE <操作权限1> ,<操作权限2> ,ON <数据对象类型> <数据对象1> ,<数据对象2> ,FROM <用户1> ,<用户2> , 处理流程图5-1 权限授予或回收的流程5.3权限审核权限

40、审核功能主要供其他模块或函数调用,已判断当前用户是否有权限进行相应操作,其判断过程如下:(1)判断当前用户是否管理员身份,如果是,则不论审核的数据对象和操作种类为何,皆认为该用户有权进行操作;(2)如果用户非管理员,则判定其是否为操作对象的创建者,如果是创建者,则不论操作种类为何,皆认为该用户有权进行操作;(3)如果用户非管理员亦非指定对象的创建者,则查询权限记录文件,判断是否存在相应的权限信息记录,如有,则判为有权操作,如无,则判为无权操作。6 完整性及安全性控制模块完整性及安全性控制模块主要供其他模块调用,故在前文中已略加叙述。接下来将逐一加以补充说明。6.1实体完整性控制Entity I

41、ntegrity实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。参照以上规则,则设计一个函数,当需要对某数据表插入一条记录时,必须核查新纪录中的全部主键是否都非空,如果存在空值,则判为非法,此条记录不可插入该数据表。6.2参照完整性控制Referential Integrity参照完整性规则:若属性(或属性组)F是基本关系R的外码,他与基本关系S的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:l 或者取空值(F的每个属性值均为空值)l 或者等于S中某个元组的主码值参照以上规则,当用户插入一条新记录,则必须检查该模式下是否

42、存在外键,外键字段的新值是否符合上述两条规则之一,如符合,则通过此项审核,如不符,则判为非法,此条记录不可插入该数据表。又当需要对某数据表内数据进行删除操作时,需要核查该数据表模式是否被其他数据表所参照,如果符合WHERE语句的一条或多条记录被删除后将破坏参照完整性,则该一条或多条记录不可被删除。6.3 用户标识与鉴别用户表示和鉴别( Identification & Authentication)是系统提供的最外层安全保护措施。其方法是系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供机器使用权。这部分的函数已由前文提到的用户登陆系

43、统所调用,正常登陆后用户的用户名和身份被系统标识,直至关闭系统。6.4 存取控制存取控制机制主要包括以下两部分:l 定义用户权限,并将用户权限登记到数据字典中;l 合法权限检查。在本系统中,这部分的功能等同于权限控制功能模块,故此处不再加以赘述。7 实验验证7.1 基础测试场景(1)系统内存在名为“Stu”的数据库,其创建者为管理员身份的用户“Admin”;(2)系统内存在两名用户:Admin,其密码为“Admin”,身份为管理员 ;Steven,其密码为“1234”,身份为普通用户(3)系统内存在两张数据表: 42 / 42Student表的模式字段名类型宽度主键SNoChar8是SName

44、Char8否SSexInt否SBirthDate否Score表的模式字段名类型宽度主键SNoChar8是LNoChar8是ScoreInt否Student表内的记录SNoSNameSSexSBirth002Jack11990-02-04004Mary01991-01-15003Rose01990-12-25001Tony11992-07-07Score表内的记录SNoLNoScore002004195002001590001007485003004175004007494其中,Score的SNo为外键,参照Student中的SNo字段。(4)数据字典的权限记录文件中为空,故用户Steven无任

45、何权限(5)以Admin用户身份登陆系统,并打开数据库Stu7.2 测试方法在“SQL指令控制”对话框中直接输入相应的SQL指令,查看系统结果提示。如非特殊说明,否则每个Case启动前,数据库状态为基础测试场景所示。7.3 测试数据测试目的场景编号前提场景测试输入预期结果测试结果检查OPEN指令编译状况1-1OPEN Stu;系统提示“目标数据库已打开!”同预期,测试通过。1-2OPEN;系统提示“对不起,你输入的SQL指令存在语法错误,请检查!”同预期,测试通过检查CLOSE指令编译状况1-3Close Stu;系统提示“已关闭全部数据库关联!”同预期,测试通过。1-4Close Stu系统

46、提示“对不起,你输入的SQL指令存在语法错误,请检查!”同预期,测试通过。检查Create Database指令编译状况1-5CREATE DATABASE NewDB;系统提示“创建数据库成功!”同预期,测试通过。1-6CREATE DATABASE 123;系统提示“对不起,你输入的SQL指令存在语法错误,请检查!”同预期,测试通过。检查Drop Database指令编译状况1-71-5DROP DATABASE NewDB;系统提示“操作成功,目标数据库已删除!”同预期,测试通过。1-81-5DROP DATABASE 123;系统提示“对不起,你输入的SQL指令存在语法错误,请检查!”

47、同预期,测试通过。检查Create Table指令编译状况1-9CREATE TABLE NewTable PRIMARY( Field1 )FOREIGN( Field2 REFERENCES Student.SNo )( Field1 int ,Field2 char(8) ) ;系统提示“创建新数据表成功!”同预期,测试通过。检查Drop Table指令编译状况1-101-9DROP TABLE NewTable ;系统提示“操作成功,目标数据表已删除!”同预期,测试通过。检查Create View指令编译状况1-11CREATE VIEW NewView AS SELECT SNo ,

48、SNameFROM Student WHERE SSex = 0 ;系统提示“创建新视图成功!”同预期,测试通过。检查Drop View指令编译状况1-121-11DROP VIEW NewView ;系统提示“操作成功,目标视图已删除!”同预期,测试通过。检查Create Index指令编译状况1-13CREATE INDEX NewIndex ON Student ( SSex DESC , SNo ASC) ;系统提示“创建新索引成功!”同预期,测试通过。检查Drop Index指令编译状况1-141-13DROP INDEX NewIndex ;系统提示“操作成功,目标索引已删除!”同

49、预期,测试通过。检查Alter Table Add指令编译状况1-15ALTER TABLE Student ADD( SAddress char(40) );系统提示“修改数据表模式成功,字段已添加!”同预期,测试通过。检查Alter Table Drop指令编译状况1-161-15ALTER TABLE Student DROP( SAddress );系统提示“修改数据表模式成功,字段已删除!”同预期,测试通过。检查Alter Table Drop指令编译状况1-17ALTER TABLE Student Modify( SSex Sex char(1) );系统提示“修改数据表模式成功

50、,字段已修改!”同预期,测试通过。检查Insert指令编译状况1-18INSERT INTO Student( SNo ,SName )VALUES(“099”,Tom” ) ;系统提示“操作成功,数据已插入数据表内!”同预期,测试通过。检查Delete指令编译状况1-19DELETE FROM Student WHERE SNo= “002” ;系统提示“操作成功,相应记录已被删除!”同预期,测试通过。检查Update指令编译状况1-20UPDATE StudentSETSName= “Lina”WHERE SName=Mary” ;系统提示“操作成功,数据已被相应更新!”同预期,测试通过。

51、检查Grant指令编译状况1-21GRANT CREATE DROPON NewTable1TO Steven;系统提示“授权成功,授权信息已记录!”同预期,测试通过。检查Revoke指令编译状况1-221-21REVOKE CREATE DROPON NewTable1FROM Steven ;系统提示“回收成功,相应权限已消除!”同预期,测试通过。检查Create Database指令运行状况2-1CREATE DATABASE NewDB ;(1)系统提示“创建数据库成功!”(2)各底层文件已经被创建同预期,测试通过。2-2CREATE DATABASE Stu ;(1)系统提示“创建失

52、败,已存在同名数据库!”(2)各底层文件不会被创建同预期,测试通过。检查Drop Database指令运行状况2-3DROP DATABASE Stu ;(1)系统提示“操作成功,目标数据库已删除!”(2)各底层文件被删除同预期,测试通过。2-4DROP DATABASE ABC ;(1)系统提示“错误,目标数据库不存在!”(2)各底层文件保持不变同预期,测试通过。检查Create Table指令运行状况2-5CREATE TABLE LessionPRIMARY(LNo)(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系统提示“创建新数

53、据表成功!”(2)各底层文件已经被创建同预期,测试通过。2-6未打开任何数据库CREATE TABLE LessionPRIMARY(LNo)(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系统提示“错误,目前尚未打开任何数据库!”(2)各底层文件保持不变同预期,测试通过。检查Create Table指令运行状况2-7CREATE TABLE Student PRIMARY( Field1)FOREIGN( Field2 REFERENCES Lession.LNo )( Field1 int,Field2 char(8) ) ;(1)系

54、统提示“错误,已存在同名数据对象!”(2)各底层文件保持不变同预期,测试通过。2-8CREATE TABLE Lession(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系统提示“错误,您未设置任何主键!”(2)各底层文件保持不变同预期,测试通过。2-9CREATE TABLE LessionPRIMARY(ABC)(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系统提示“错误,主键设置有误!”(2)各底层文件保持不变同预期,测试通过。2-10CREATE TABLE LessionPRIMARY(LNo)FOREIGN ( ABC REFERENCES Score.LNo )(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系统提示“错误,外键设置有误!”(2)各底层文件保持不变同预期,测试通过。检查Create Table指令运行状况2-11CREATE ABLE LessionPRIMARY(LNo)FOREIGN ( LNo REFERENCES AAA.BBB )

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论