CS 186: Databases
Welcome to my CS186 Guide! #
This is a non-comprehensive guide to databases written with an intention to supplement learning and reviewing of Berkeley’s CS186 material. Main topics include:
- SQL syntax
- How to improve popular sorting and hashing algorithms to work well with limited memory
- B+ trees and other advanced indexing structures
- Join algorithms
- Query optimization
- Parallel query processing
- Crash Recovery (AERIES)
- Database transactions and Concurrency
- Entity-Relationship Diagrams
I recognize that the course notes for 186 can be very dense sometimes, and don’t cover 100% of the information you need to do well on projects and exams. While this also doesn’t covery everything, I try to focus on content that the notes don’t.
This isn’t a replacement for lectures and other course content. You probably need to look at those first, and come here if something isn’t sticking!
Please read this first!
Although I am a 186 TA, these notes are not official course content. They have not been reviewed or approved by an instructor, and there may be inaccurate or missing information. Please don’t bother the other course staff with questions about the content here- contact me instead (email or office hours).
Concept Maps #
Database Implementation #
Database Design #
CS 186 projects are done in Java. Knowledge of CS61B concepts are assumed. Specifically, you should understand:
- OOP fundamentals such as classes, inheritance, and objects and implement them in Java
- Binary trees, their runtime proprties, and implementation of efficient search and insert algorithms
- Basic hashing and sorting algorithms
- Use an IDE (preferably IntelliJ or VSCode) and its debugger to step through code and create breakpoints
In addition, knowledge from the last part of CS61C is assumed and will be very useful for the first part of 186. This includes:
- Knowing how computers store memory, the different types of memory (disk, RAM, cache), and why we have them
- How data is stored on disk (files, pages, records)
Unsure about prerequisite content? You can review my CS61B notes if needed. I’ll cover the main points from 61C at the start of Disks, Buffers, Files.
How to contribute #
See the contributing guide for more details!
Two particular additions that need to be made are entries for Functional Dependencies and NoSQL. I don’t have notes written for this since these topics were not covered when I took the course.