数据库设计心得

发布时间 2023-11-10 22:14:47作者: Xwan

数据库设计心得

前言

我们小组的项目较为特殊,我们小组是基于Miniob的SQL请求并发处理的子系统,意思是在原有Miniob这个DBMS上面完善其功能,并且实现能够对SQL请求的并发处理。由于本身项目就是一个数据库管理系统,想要根据这个数据库管理系统再设计新的表不太合适。但我们小组仍然竭尽全力设计出了几个表。
以下表的实现,并非外部数据库,而是通过我们自己实现的DBMS系统来进行表的创建与管理,因此有一种自己管理自己的感觉。


明确需求,开始设计

数据库设计首先是要明确需求。我们小组的项目的主要功能是实现完善一个DBMS,例如如何创表,如何创建索引,如何插入数据等等。这一方面无法设计使用表来管理。在权限管理部分,我们的思路是用户通过IP、端口、用户名、密码登录系统,并且只能对相应有权限的表进行对应权限的操作。这部分就可以使用表来进行管理。于是就诞生了用户表和权限表。
image
image
后来为了增强系统的安全性与正确性,需要对用户的操作进行记录,于是诞生了用户操作追踪表以及系统日志表,这两个表就用来供后台人员进行数据库的维护。
image
image
最后考虑到用户能够提交使用体验、反馈信息,于是新增反馈通道,就有了用户反馈表。
image


接受意见,整理思考

在数据库审查的小班讨论中,老师提到了我们在用户权限表中的设计不合理:即权限字段用char不好,应该改成int类型,给出了理由是方便看,减少理解难度。在下课之后,我们小组经过思考、讨论后,得出的结论是老师给的建议没有我们设计的更方便。

  • 使用int类型来区分权限种类的话,如果一个用户对一张表有多个权限的话,用一个record是无法表示的,需要使用多个record来记录一个表的多条权限。而采取原先的设计使用一个bit表示对应的权限的话,只需要将权限或“|”起来就可以在一条记录中记录多个权限。这种方式在用户数量多,表数量多,权限数量多的情况下能够极大的减少内存占用,并且能够提高权限的查找速率。因此这里不采用老师的意见。

检查遗漏,删去冗余

在初次设计表的时候,我们对用户操作追踪表设计了一个table字段,用来记录用户输入sql语句对应的表名,在检查过程中发现,用户如果使用了多表查询,则在一个record的字段中无法记录这个操作,同时考虑到字段opt中已经记录了整个sql语句,这里的sql语句中已经能够包含所有信息,因此删去了table字段。