自己用c++写了一个小小的数据库,用于实现以下的简单功能:

* 设计特定的数据结构,用于存储数据表、视图、索引三种数据库对象的元数据信息,建立数据库系统的数据字典;
* 设计特定的数据结构,用于存储数据表中的数据、索引数据、用户和访问权限的信息;
* 输入“help database”命令,输出所有数据表、视图和索引的信息,同时显示其对象类型;输入“help table
表名”命令,输出数据表中所有属性的详细信息;输入“help view 视图名”命令,输出视图的定义语句;输入“help index
索引名”命令,输出索引的详细信息;
* 解析CREATE、SELECT、INSERT、DELETE、UPDATE等SQL语句的内容;检查SQL语句中的语法错误和语义错误;
* 执行CREATE语句,创建数据表、视图、索引三种数据库对象;创建数据表时需要包含主码、外码、唯一性约束、非空约束等完整性约束的定义;
* 执行SELECT语句,仅支持简单的单表查询功能;
* 执行INSERT、DELETE和UPDATE语句,更新数据表的内容;并说明插入、删除或修改了几个元组;
* 执行GRANT语句,为用户授予对某数据库对象的SELECT、INSERT、DELETE、UPDATE等权限;执行REVOKE语句,收回上述权限;
* 用户登录时,需要输入用户名;如果用户没有被授权,则拒绝执行用户查询或更新等操作,并给出提示信息;
 

设计过程中遇到的问题:

* 数据字典的实现

设计数据库系统遇到的第一个问题就是数据字典的实现,包括表、视图、索引等。我采用了类对表、视图、索引进行表示,在类中封装了对对象的相应操作,采用了面向对象的程序设计方式,保证了程序的可维护性和数据的安全性。


在对数据表进行存储时,为了防止数据溢出,我使用了STL中的vector,用二维的vector对数据进行存储。因为视图中存储的不是数据表,而是定义,因此需要用另一种结构进行表示。我定义了View类,在每次创建视图时创建文本文件用来存储视图的定义,这样在使用视图进行查询时,可以根据文本文件中视图的定义来获得视图。

* 用户的访问权限的存储

对于用户的访问权限,应该具体到表的对应属性。这样一来,存储结构和相应操作都会比较麻烦。因为当时没有和老师交流,纯粹按照自己的意愿把访问权限设置到了表级,使得权限功能实现不完全。并且使功能比较单一了,加上自己能力的不足。

* 没有建立索引的存储文件
创建索引时没有建立相关的存储文件来存储建立的索引,导致每次运行代码时必须先建立索引才能进行索引的查询操作,浪费了很多时间和精力。

* 没有语义错误的相关检查

当输入一个SQL相关语句时,只能检查它的语法是否出现了错误,而语法错误也只是检查的拼写错误和标点错误。没有语义错误的相关检查,如果输入了错误语义的SQL语句也不会检查出来,会继续运行下去,这也是这次代码的一个缺点和问题。

* 如何进行约束条件检查

在表的定义中,也包含对表的属性的约束条件的定义。是在进行插入、删除和更新操作时,都要进行约束条件的检查。这个问题比较麻烦。因此在本次代码实现中没有对语句的约束操作。

 

总结和心得:

     
在刚开始看到设计这个数据库系统的基本内容和要求时,简直无从下手,不知道对于各种数据库对象该采用何种存储结构,也不清楚每种数据库对象该有哪些属性以及对文件的存储、读取等操作并不熟练。在同学和老师的引导下,回顾数据结构和C++相关知识,重新学习I/O流以及文件操作的知识,并且搞懂了vector向量的创建和相关的函数使用。

     
接着分析该数据库设计的具体内容和要求,进行了需求分析,将内容分为四大模块,建立了一个整体的框架,思路才算清晰了一些。但在真正开始设计的时候又遇到很多问题,比如数据库对象的理解不够透彻,导致只能设计简单粗暴的存储结构,有时为了实现一个功能模块要花上一整天的时间设计,但仍是不够完善,程序的鲁棒性不强,有几次运行时出错还导致电脑卡顿时间很长。即使面临各种问题,还是尽己所能的解决,每次把一个又一个的问题解决时,成就感就油然而生,就激发更大的兴趣做下去。

       
通过本次课程设计,使我对自己所学知识进一步的了解,也通过实践发现了自己的不足,对知识的掌握和运用存在诸多的不完善,本系统也存在很多不足,如系统十分简单,实现功能也不够完善,但是相对于一开始的一筹莫展到现在一些简单功能的实现,已经是我很大的进步了。在日后的学习和生活中,一定要秉持“实践是检验真理的唯一标准”,不仅将课本知识多加学习巩固,还要将知识用于实践,才能真正提高自己对知识的掌握程度。

操作系统:Windows10;集成开发工具:codeblocks;开发语言:c++

链接自取吧,仅供参考哦,还是自己动手写一个有乐趣呀!!!

链接:https://pan.baidu.com/s/1UbqvsPGxsuaGM5xy9BeUoA 密码:dhfk

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信