图书借阅管理系统——SQL Server数据库开发复盘

longmarch_5 发布于 2025-03-26 184 次阅读


前言:

本篇文章记录的是作者本人在两个月前做的数据库开发的心得体会及经验总结,虽然只是一个很简易的数据库,虽然技艺不精,但是独立跑完数据库开发全流程还是收获颇丰

1.需求分析

1.1需求及数据项

该系统主要实现了图书馆图书借阅的一般流程,其中包括学生模块、借阅证模块、图书模块、借阅记录模块、模块。图书馆员工。学生模块可以实现对学生信息的管理,图书模块可以实现对图书信息的管理,借阅证模块可以实现借书还书功能,图书馆员工模块可以实现帮助学生借书等其他功能。

以下是各模块的详细信息:

学生模块:包括学生编号,姓名,性别,专业,借书上限数等。

借阅证模块:包括借阅证号,发证日期,到期日期,借书证状态,学生编号等。

图书模块:包括书籍编号,书籍名称,图书类别,出版社,图书库存量,图书价格等。

借阅记录模块:包括借阅记录编号,学生编号,图书编号,借书日期,归还日期,借阅状态,罚款金额等。

图书馆员工模块:包括员工编号,姓名,性别,职务,联系电话等

1.2功能分析

学校图书借阅系统主要由:图书信息管理,学生信息管理,借阅证信息管理,借还信息管理,规则信息等模块组成。进入改系统后,用户可以对系统中的信息进行添加、修改、删除、查询等操作,包括以下功能:

图书信息管理模块:对图书信息增,删,改,查等操作;

学生信息管理模块:对学生信息增,删,改,查等操作;

借阅证信息管理模块:增加办理借书证,注销借书证等操作;

借还信息管理模块:进行借书、续借、还书等操作,查找出逾期的学生及其逾期的天数;

操作记录管理模块:对学生的借,还,续借进行实时记录,便于管理员查找出指定读者的所有借阅记录;

规则信息管理模块:记录借书逾期的学生及其逾期的天数,罚金及其缴纳情况。

1.3工作流图

1.4数据流图

0层数据流程图(见图 2-3)主要描述了图书借阅系统的整体功能和用户交互。系统包含两大主体:学生和管理员。学生通过系统提出各种操作请求,如注册借阅证、更新个人信息、查询借书记录、借书和还书等。管理员则负责接收并处理这些操作请求,包括更新修改信息、管理借阅证、处理数据和操作等,以确保系统的正常运行。

1层数据流程图(见图 2-4)中管理员职责包含管理书籍信息和管理借阅信息。管理书籍信息:包括插入新书信息、修改现有书籍信息以及删除不再需要的书籍信息,确保书籍信息的准确性和完整性。 管理借阅信息:负责借阅记录的查询、更新等操作,确保借阅流程的顺畅进行。学生功能包含查询书籍信息,查询书籍信息,缴纳罚款。查询书籍信息:学生可以通过系统查询书籍的详细信息,包括书名、作者、馆藏位置等。 借阅与归还:学生借阅书籍时,系统会记录借阅信息;归还书籍时,学生需通过系统完成归还操作,并更新借阅记录。缴纳罚款:若学生逾期未还书籍,需通过系统缴纳罚款,并更新借阅记录以反映罚款的缴纳情况。

2.复盘总结

2.1debug记录(部分)

2.1.1执行存储过程时后无变化

bug描述:执行某些存储过程和函数时出现执行后数据没有发生变化或者有时能触发有时无法触发

原因:触发器设计和存储过程运行逻辑冲突或者存在重叠的操作逻辑,当数据发生变化,出现牵一发而动全身的情况,如果数据运行逻辑不完善,会导致数据不一致的情况。

优化:此次bug的根本原因是数据库的运行逻辑在一开始没有设计好,未能形成一个自洽运行的系统。此后开发时应该注重运行逻辑的设计,做好运行逻辑的拆解。运行逻辑拆解即工作流图具体化拆分化,详细介绍每个存储过程或者操作背后的运行流程和逻辑,是程序设计的健壮性的核心体现。

2.1.2数据长度不足

原因:数据字典在设计时没有考虑到该数据项的数据如何获取,从而对数据长度没有做出正确的预估,后期设计存储过程时利用生成随机ID的函数,导致生成的数据长度超出该数据项设计的数据长度

优化:在数据库设计之初应该用可靠的方式明确数据项的数据长度,例如参考实际的已完善的数据库系统。

2.2优化可选项

改进点

模式和子模式

根据登录用户及其对应的使用场景划分好不同用户组的权限,划分好子模式

概念模型

1.可以改进罚款金额,为罚款金额加上触发器

2.借书证状态考虑要不要加上挂失功能

3.根据程序设计的健全性优化函数和存储过程

触发器

1.可以针对敏感操作增加记录日志的功能

存储过程

1.利用视图改进存储过程、触发器、函数

2.优化插入检查:在插入、更新内容时检测有无重复内容,如果有,则提示报错并回滚(可选)。其实该检查功能可以由触发器负责,也可以由存储过程负责

3.多功能自定义查询\删除,让查询\删除更自由,可以按日期、类别、人等多种方式查询\删除

4.级联删除,当删除某个对象时,需要把该对象涉及到的数据行都删掉

5.注意存储过程和触发器,如果触发器的逻辑和存储过程中的某些逻辑是重复的,那么可以二选一,选择一个保留即可

6.模糊查询和精确查询