6.5830/6.5831: Database Systems
Fall 2023


This course is designed to introduce graduate/undergraduate students to the foundations of database systems, focusing on basics such as the relational algebra and data model, query optimization, query processing, and transactions. This is not a course on database design or SQL programming (though we will discuss these issues briefly). No prior database experience is assumed though students who have taken an undergraduate course in databases are encouraged to attend.

Classes will consist of lectures and discussions based on readings from the database literature. For 6.5830, there will be a semester long project, as well as two exams and 7 assignments -- 4 Go based programming "Labs" and 3 problem sets. For 6.5831, exams and assignments are the same as 6.5830, except that students may opt to do one additional (more exploratory) lab in place of the final project.

Enrollment may be limited.

The course web site is http://dsg.csail.mit.edu/6.5830/.


Lectures are held twice a week, from 2:30 – 4:00 pm on Mondays and Wednesdays in 32-155. Attendance at lectures is mandatory and you are expected to show up prepared to answer questions and participate in discussion.

Topics Covered

Topics related to the engineering and design of database systems, including: data models; database and schema design; schema normalization and integrity constraints; query processing; query optimization and cost estimation; transactions; recovery; concurrency control; isolation and consistency; distributed, parallel, and heterogeneous databases; adaptive databases; trigger systems; key-value stores; object-relational mappings; streaming databases; DB as a Service. Lecture and readings from original research papers. 6.5830 includes semester-long project and paper.


Students should 6.1210 (6.006, Introduction to Algorithms) or equivalent. If you do not have experience in this subjects and would like to take the course, please email the instructor. Prior database experience is not required. Basic programming experience is assumed. We will be using the Go programming language (https://go.dev); most students in the class will not have used it before. We have restructured the labs versus previous years to include an intial go tutorial. Please refer to the FAQ for more details.


3-0-9. 6.5830 is a Grad-H class. It counts as an engineering concentration (EC) subject in Systems. For Area II Ph.D. students in EECS, it satisfies the Systems TQE requirement.

6.5831 is a undergraduate class designed to satisfy the AUS requirement in the EECS curriculum. For Fall 2023 (and possibly in future semesters) you may petition to have it satisfy the systems header requirement in lieu of 6.1800 (6.033) -- see here.


Grades are assigned based on labs, homeworks, 2 quizzes, final project (for 6.5830), and class participation. The grading breakdown is as follows:

Grading is handled differently for the two versions of the class:


  • Assignment (Problem Sets and Labs): 35% total
  • Exams: 15% each
  • Final Project: 30%
  • Class Participation: 5%


  • Assignments (Problem Sets and Labs): 65% total
  • Exams: 15% each
  • Class Participation: 5%

Each student is allowed 5 "late days", each of which may be used to turn in one problem set or lab one day (24 hour period) later than it is due without penalty. After all five late days are used, assignments will be docked one letter grade for each day they are late.

Late days may not be used for the final project/lab 6 or exams. Regardless of late days, problem sets must be handed in before problem set solutions are posted, which is one week after the problem set is due.

Please don't hesistate to reach out to the course staff if you are struggling for any reason; we are generally happy to offer extensions with a note from S3 or GradSupport.

Collaboration Policy

In line with MIT’s policy on Academic Integrity, here are our expectations regarding collaboration and sharing of work. For most problems sets and labs, you are allowed one collaborator with whom you solve problems and write code and submit one solution. Such collaborative submissions should explictly list the collaborators. Besides this collaborator, for problem sets and labs, you are allowed to discuss your general ideas and approach with other students, but you are expected to write your own code and solutions. Here are some examples of things you should not do with anyone except your collaborator:

  • Let another student compare their solution with your solution to find a bug or problem
  • Email or share your code with another student
  • Share your github repo with another student
It's OK to help another student solve a problem in their code, but if you do this, don't use your own implementation as you do so. Note that we will use software to detect copying of lab and homework assignments.

[Public Code]
Please do not make solutions of any of your 6.5830/1 labs or problems sets public. Copyright for the starter problem set and project code is held by the 6.5830 course staff, and does not allow redistribution of derived works without prior permission. Your solutions are a derived work, so you may not distribute your problem set or project solutions publicly. This means you cannot post them in a public Dropbox folder, on a public server accessible to others, or on GitHub. (Be aware that GitHub repositories are public by default.) Keep in mind that when work on a problem set or project is copied, both the provider and the consumer of copied materials are violating academic honesty standards, as described above.

[Generative AI]
You are welcome to use Generative AI tools like GPT3/ChatGPT to help with general coding questions, but please do not ask to specifically solve the problems in any of the problem sets or labs. Examples of questions that are allowed:
  • How do I reverse a list in golang?
  • How do I eliminate duplicates in a SQL query?
A simple rule of thumb for figuring out what is not allowed is any case in which you are copying text from our problem sets or labs. For example, asking it to fill in a missing piece of code in one of the lab skeletons, or providing it with the schemas from a SQL problem set and asking it to write a query.


The course readings will primarily be drawn from the 5th Edition of ''Readings in Database Systems'', edited by Stonebraker and Hellerstein. It is available online at this website. Note that PDFs of all the papers in the book are not necessarily linked from the website; we will include PDFs in reading assignments.

Supplemental Readings

There will be several other readings that will be posted on the course web site.

Last change: September 27 2023.

Questions or comments regarding 6.5830/6.5831? Send e-mail to the 6.5830/6.5831 staff at . Accessibility