课程大纲

是的,这是 Carnegie Mellon University 关于数据库管理系统设计与实现的首要课程。本课程涵盖数据模型(关系型、文档型、键值型)、存储模型(n 元、分解)、查询语言(SQL、存储过程)、存储架构(堆、日志结构)、索引与过滤器(保序树、哈希表、向量索引)、事务处理(ACID、并发控制)、恢复(日志、检查点)、查询处理(连接、排序、聚合、优化)以及并行架构(多核、分布式)。我们还将使用开源和商业数据库系统的案例研究来说明这些技术和权衡。你应该清楚,本课程适合准备好全身心投入数据库领域并展现系统编程技能的学生。

本课程满足 CMU 计算机科学本科课程软件系统选修课要求。

教育目标

这是一门关于数据库管理系统内部原理的高级课程。本课程非常注重编程项目。每次课还有指定的阅读材料、作业和两次考试。成功完成本课程后,学生应该能够:

  • 使用关系代数表达数据库查询。
  • 使用 SQL 与数据库管理系统交互。
  • 使用函数依赖和范式设计适当的数据库表。
  • 实现面向磁盘的数据库存储管理器,包括表堆和索引。
  • 理解、比较并实现基本的并发控制算法。
  • 实现数据库恢复算法并验证其正确性。
  • 识别数据库系统技术之间的权衡,并对比在线事务处理和在线分析工作负载的分布式/并行替代方案。
  • 解释并比较性地评价数据库系统架构。

所有编程项目将在 BusTub 数据库管理系统中完成。

候补名单

课程容量取决于助教人数和教室大小。我们将根据空位的出现依次从候补名单中录取学生。SCS 学生享有优先录取权。请不要联系讲师或助教询问是否有机会选课。如果你被录取,我们会与你联系。

如果你已被录取但想退课,你不能将你的位置与候补名单上的其他学生交换。管理员将按照其流程在滚动基础上录取学生,直到课程达到容量上限。

如果你在学期开始后、作业截止日期已过之后才被录取,你有责任联系讲师并告知他们你能多快提交那些作业。

答疑时间

讲师和助教将在工作日(周一至周五)的不同时段举行答疑。如果你因不可预见的情况无法参加常规答疑时间,请联系讲师。鼓励学生查看 Piazza 并在那里提问,而不是等待答疑时间。周日不会安排答疑,以鼓励学生在截止日期之前提前开始做项目。

我们还将在每个项目截止前的周六举行校内助教强化课程。

我们将在每个项目发布后举行在线答疑课。该答疑课将在线进行,录播将在之后发布到 Piazza 上。

不要单独给助教发邮件询问项目或作业的问题。学生应将所有技术问题发布到 Piazza。

评分方案

课程最终成绩大约基于以下权重:

作业

学生将在课程期间完成多次作业。这些作业旨在巩固课堂讲授和阅读材料。作业截止日期以本网站公布的为准。

每次作业满分为 100 分,在计算最终成绩的作业部分时权重相等。

编程项目

学生将在课程期间完成编程项目。每个作业都是累积性的。也就是说,你需要成功完成每个作业才能继续下一个。我们不会发布编程项目的解答或评分测试。

每个项目满分为 100 分,在计算最终成绩的项目部分时权重相等。

课程讲师和助教不会在学期中教授学生如何编写/调试 C++17 程序。这是本课程的先修要求。

所有学生必须在 2025 年 9 月 7 日之前以满分完成 Project #0。 任何无法在截止日期前完成该项目的学生将被要求退课,如果继续留在课程中,将自动不及格所有后续作业。第一个项目接受延期。在项目截止日期之后才被录取的学生,从收到录取通知之日起仅有一天(24 小时)的时间完成该作业。

考试

课程期间将有两次考试。考试将涵盖指定的必读材料和课堂讨论的主题。第一次是"课内"期中考试。第二次是学期末大学期末考试期间的期末考试。

迟交政策

每人自动享有个日历日的延期,仅适用于编程项目。例如,你可以迟交一个项目四天,或者四个项目各迟交一天。

  • 迟交天数向上取整到最近的整数。例如,迟交 4 小时将算作迟交一天。
  • 每迟交 24 小时,你将失去项目 10% 的分数。

迟交的作业不会被接受。

极端情况下(如医疗紧急情况),我们将批准不扣分的延期。请提供书面证明(如医生证明)。

协作政策

我们期望你在作业、项目和考试中的工作是你自己完成的。你不得复制其他学生编写的解答的任何部分,不得与其他学生一起开发你的项目或作业解答,也不得从任何未经授权的来源(如互联网)复制解答。未经课程工作人员许可,你不得查看其他学生的解答,即使你已经完成了自己的解答,也不得故意将你的解答提供给其他学生或将你的解答留在其他学生可以看到的地方。

以下是一些不当行为的例子:

  • 从他人或来源复制(或重新输入)作业、项目或考试的解答,无论是草稿还是最终形式,即使权限设置错误允许了这样做。即使你对原始来源进行了修改,这种行为仍然明显不当。
  • 搜索或查看当前或以往学生的作业、项目或考试解答。
  • 允许他人查看或复制你的代码、书面作业、测验或考试,无论是草稿还是最终形式。
  • 从你不完全理解的人那里获得帮助,或从你在解答中未致谢的人那里获得帮助。
  • 一步一步地指导他人,而他们没有理解你的帮助。
  • 编写、使用或提交试图修改或删除评分信息或以其他方式危害课程资源安全的程序。
  • 向课程工作人员撒谎。
  • 以其他学生(当前或未来)可以访问你的解答的方式公开你的工作,即使他人的访问是偶然的或附带于你的目标。

如果你的工作包含任何非你编写的声明或代码,你必须清楚地标识衍生作品并注明来源。如果你在转述从其他地方读到的想法,你必须承认来源。不使用适当引用而使用现有材料就是抄袭,这是一种作弊行为。如果对材料是否被允许有任何疑问,你必须事先获得许可。

澄清作业、课堂讲授、讲义中的模糊之处,或者在使用计算机系统、编译器或其他设施时给予或接受帮助,不被视为作弊。你可以与其他学生讨论高层概念(包括算法的高层讨论),但你不得从这些对话中做笔记,也不得在他人的图表或笔记可见的情况下开发自己的解答。 违反本政策的任何行为都是作弊。作弊的最低处罚(包括抄袭)将是整个作业零分;典型处罚将是作业 -100%。在讨论学术诚信问题时不诚实(即向课程工作人员撒谎)通常会导致课程成绩为 ‘R’。所有违反本协作政策的行为都将被提交给大学相应的纪律委员会,可能会受到额外的纪律处分。更多信息,请参阅大学学术诚信政策

如果你认为自己违反了本协作政策,你可以追溯撤回你的作业、项目或考试解答。如果你在我们以其他方式知晓你的行为之前撤回解答,你将在撤回的作业上获得零分,但我们不会将你的行为视为学术诚信违规。

违反协作政策没有追诉时效限制;处罚可以在你完成课程后进行评估(并提交给大学纪律委员会),协作政策的某些要求(如对你发布解答的限制)在你完成课程后仍然有效。

如果你对本政策在特定情况下如何适用有任何疑问,请向讲师或助教寻求说明。