实验内容像是一拍脑袋想出来的,体验很糟糕。
挂在 Github 上留个纪念,供后人参考。只保留了源码,需要进行构建请参考下方的说明。如果有帮助的话,希望给个 Star)
- 实验一:数据库系统开发;
- 实验二:Buffer Manager。
既要设计实体极多的关系模型,还要编写用户友好的界面,还要像大杂烩一样展示各种 SQL 功能,整个实验的体验只能说是很糟糕。
实验目录下,E-R
文件夹放置了生成 E-R 图所用的 LaTeX 源码。编译需要使用支持 ctex 和 tikz 的 LaTeX 环境,如果不需要编译可以直接用 E-R.pdf
或者对应生成的 E-R-1.png
。Management
文件夹放置了实现用户界面的前后端代码(大部分代码由 ChatGPT 实现)。db_init.sql
文件可以在 SQL 里执行,创建数据库 university 并自动装填好测试数据;前后端主要用 flask 实现,使用 python 运行 app.py
连接上 mysql 数据库,同时在本地打开前端界面。
总之是技术栈大杂烩,LaTeX (TikZ), HTML (jQuery, Bootstrap), Python (Flask), SQL(MySQL), AI(ChatGPT) 全用上了,真是酣畅淋漓的吃史!
其实是存储管理与查询优化算法的设计和 Buffer Manager 二选一。
稍微吐槽一下为什么我选了后者:前者实验任务繁多,和实验一一样典型的有啥内容就往实验课里面堆,测试数据要自己造,实验细节十分模糊,估计验收还要和助教扯皮。总之,我实在是不信任学校老师可以设计出正常的实验课(更何况从下发代码里同时出现 11 年、15 年、23 年代码,看上去已经是十多年前的遗产了),而后者看上去要靠谱得多。
要查看 doxygen 生成的文档需要在网上下载 doxygen 并在文件夹目录下运行 make doc
编译生成网页;要生成可执行测试程序需要在文件夹目录下运行 make
。
代码实现的时候有一些注意点:
bufHashTbl.cpp
当中计算哈希值时,将地址强转为 long 类型,在 64 位机子可能无法通过编译,比较正确的写法可能是转换成intptr_t
类型。file_iterator
的实现和文档描述有较大出入,需要对file_iterator.h
进行较多修改才能使用迭代器遍历 page 的功能。- 需要填充的
buffer.cpp
里,有个pageNo
存在笔误写成PageNo
了。 - Page 类没有析构函数,写 delete bufPool 析构会爆炸,只是要通过验收的话,建议不析构 bufPool,让操作系统擦屁股。