跳转至

1708411050

数据库系统

CS 专业必修 AI 专业三选一必修 IS 专业选修

课程学习内容

分两部分,各部分授课 8 周,前 8 周为数据库应用,涉及 :

  • 数据库介绍和关系模型
  • SQL 的使用,包括基本概念、语法和高级的函数,比较复杂的嵌套
  • 数据库的表的设计,如 E-R 模型,norm form

8 周研究数据的实际实现,涉及 :

  • 计算机存储设备和层级结构
  • 索引,重点,例如直接索引、间接索引等概念,Hash,B+ 树等数据结构
  • 查询处理,重点,需要结合索引计算操作的复杂度
  • 查询优化,主要是概念
  • 事务与幷发控制,重点,包括并发模型、死锁等
  • 故障恢复,重点,主要是有关日志的话题和算法

据说以前这门课是两门课,后来合并了。实验设计也类似地呈现出两个阶段。 前 8 周的内容主要为数据库安装并练习 SQL,有 5~6 个小实验,需要实验报告,最后使用 JDBC 等框架设计一个图书管理系统,具体的查询要求和 E-R 图实验手册会给; 后 8 周完成大作业,实现一个 MiniSQL。从 20 级开始,大作业会给框架,并基于 CMU 15-445 的 BusTub 框架,有比较详细的实验指导和验收要求,由于春夏学期课程比较多,你在期末考试周能看见一楼熬夜写大作业的盛况 233。

平时作业为书面作业,在前 8 周主要是根据给定要求写写 SQL 或者设计数据库的表; 后 8 周因为涉及到数据库实现,需要学习数据结构和算法,并进行相关的步骤考察和计算。

先修要求

考虑到大作业,理论上应该先学 C++ (OOP),但是大部分同学这两门课应该是同个学期学的,而且觉得写大作业刚好能学习 C++,大作业的框架语法也不太复杂,所以似乎情况还过得去;此外由于这是个略有规模的 C++ 的工程,它使用 CMake 管理,GTest 写测试,写这个项目需要熟悉这些工具的使用。

任课教师

计院难得对本科生课程非常上心的老师。孙老师上课很有激情,会有丰富的肢体语言配合讲解,语速快但是条理清晰,会讲一些之前八股文考试不涉及的内容,例如 LSM Tree。人很好,体恤学生,思想开明。MiniSQL 能有如今的框架孙老师功不可没。

高老师是顶尖 PPTeacher,具备堪比 Narrator 的念 PPT 功底。整体而言感觉像是没怎么备课上去随便介绍一下 PPT,与孙老师相比可以说高老师对于本科生课程几乎完全不上心。Quiz 不是很难,基本上平常学了然后翻翻书都能做出来。但是上课不会讲实验相关的东西。助教如果还是某朱姓老博的话建议快跑,他根本不懂数据库,更不懂实验。以前高老师靠着给分好吸引很多同学选课,但从 20 级开始情况似乎有一点变化,可能是老师的旨意加上助教故意恶心人,导致给分也不如从前,所以谨慎选择。

讲课语气比较催眠,但是 PPT 内容讲解还不错,随机小测点到,实验课老师本人不建议来,考前复习课很到位,人好事少给分还行,助教 yjngg 人很好。

课程教材

应该雷打不动 Database System Concepts,平时 PPT 也主要是照着这本书出的,一些不清楚的概念和推导可以查这本书。由于大家一般是先修数据库后修操作系统,后 8 周的事务、并发控制会有很多细碎的概念可能会比较难理解,可以参考这本书,其他时候可以不看。

这本书非常厚,但是作用不大,不是很适合看书自学,笔者不建议订这本教材,可以网购一本影印的中文版,在听不懂的时候看书学习。

分数构成

  • 平时作业 (10%)

    基本每次课后都会有作业,对于巩固知识很有帮助。注意不要无脑抄答案,你自己写错一些助教可能会给你作业满分,但是要是助教认真而且发现你抄袭答案会无情给你作业扣分。

  • Quiz (10%)

    sjl 布置了 5 次 正式 quiz2 final review ,其中 final review 应该是不计分的,但是做了对期末考很有好处。Quiz 事实上还是比较轻松的,在一段时间内选一个有空的时间做就行,不过有的时候可能会阴戳戳地布置,或者布置得比较阴间,不过如果太阴间会延期。除此之外,每节课基本都会有点名性质的随堂测试,也不知道这个分最后会怎么算,但是随堂测试写错对成绩影响应该不大。另外 sjl 班比较麻烦的是讨论区发帖,有的讨论要求还是比较高的,比如画一个复杂系统的 E-R 图、简单论文研读什么的,其分数应该也是计入这里。

  • 实验 (30%)

    包括 4 个关于 SQL 的小实验,1 个综合应用上半学期知识设计图书管理系统的中等实验,以及著名的大实验 minisql4 SQL 的小实验非常容易做,就是报告写起来比较繁琐。图书管理系统相对麻烦一些,功能比较多,有的强者可能会配置前端展示,但是很多班还是对纯命令行没有偏见的。最后的 minisql 就不说了,著名的难实验,但是对于初步认识大工程、提升能力、应用 C++ 还是很有帮助的。minisql 往往会布置一些 bonus,具体 bonus 的设置方法应当随年份而变。

  • 考试 (50%)

    允许带一张 A4 CheatingSheet。可以参考八股文历年卷,sjl 班的课程作业、quiz、讨论等的设计个人认为还是比较贴近考试内容的。考试应该不会考第一章数据库相关的历史故事,这一方面大概可以放心。

  • 平时作业 (10%)

    基本上每次课后都有作业,基本上不是胡乱写的都会给到满分。

  • Quiz (10%)

    5 次小测,20 级还是提前一周通知,21 级开始可能觉得到课率不佳所以上课前十分钟才通知,分别是关于导言、SQL、E-R 模型、B+ 树与查询优化、故障恢复。小测难度正常,基本上看过教材、写过作业都能有较高正确率,并且只要不是分数过低按照助教说法都会给到满分。

  • 实验 (30%)

    课程组统一,但高云君班图书管理系统必须验收(部分班级验收算 bonus),并且大程也没有听说 bonus20 级助教在验收时有一些诡异的毫无道理、重点偏离系统设计目标的要求,验收时体验极差,并且扣分标准不明不白,相比隔壁孙老师的助教差的不是一星半点,希望未来不会再出现这种情况。

  • 考试 (50%)

    允许带一张 A4 CheatingSheet。课程组统一,可以参考孙建伶老师的随堂测试题以及历年卷八股文复习,并且高云君老师 20 级考前会有很准确的重点,可以认真听最后的重点。

推荐课程

  • CMU 15-445,某种意义上数据库课程里雷打不动老大哥,98 和知乎相关讨论也是挺多的。

学习建议

理论方面,以前春学期和夏学期的内容是被拆成两门课的,合并之后就显得内容非常非常多。最后复习的时候会发现有上千页的 PPT。无论你是不是孙老师班上的同学,我都建议看听孙老师的课(无论是线下还是智云),孙老师不会让你失望(确信)。

实验方面,前四个小实验就是关于 MySQL 的操作,和理论课几乎完全正交,意义不大,可以快速过掉。lab5 是春学期的大程,图书管理系统,2023 春夏开始有了孙建伶班助教提供的 Java 框架实验文档,做起来没有那么麻烦。即使是不了解 Java 语法也能快速上手。最后就是整个学期乃至可能是大学生活中最具有挑战的 Project MiniSQL。经过 2021 级同学们的试错,框架是在逐渐往好的方向改的。22 级开始应该会添加事务模块,难度也会有所提升。不出意外的话实验框架应该是由孙老师班上的助教维护,因此他会非常了解框架的情况,遇到了问题可以找他。大程会分为多个模块,建议每个模块都多做测试,尽可能覆盖各种情况,在边界情况多写 ASSERT 等语句方便后续 debugMiniSQL 一定要尽早开始,如果要组队一定要找靠谱的队友,耐心 debug,相信各位能完成这个挑战。

期末方面,数据库卷子从 2022 年春夏开始改革,不再是以前的“八股文”,2022 年添加了选择题,2023 年添加了判断题,后续题型未知,但改革后的回忆卷仍然值得参考。需要注意的是不同老师的讲课内容有所出入,可以综合几个老师的讲课内容,确定考试范围。抄 CheatingSheet 的过程本身就是一个复习的过程,抄完之后内容其实就已经差不多清晰了。