Data helps solve problems.
Most software engineers use database systems, but few understand them. It is not surprising, then, that database related issues are a common cause of application failure, and that misuse of databases frequently impedes engineering team productivity.
Our course aims to provide practicing software engineers with a firm understanding of the architectures of database systems and the trade-offs that they make. We hope this will help our students make better choices when deciding between database systems and their features, to better utilize their chosen technologies and to more effectively debug any issues.
- Introduction to Database Systems
- Sorting, Hashing and Single Table Queries
- Lab: Implementing a Query Executor
- Lab: Implementing Joins
- Lab: Implementing a Database Index
- The Relational Model and Query Optimization
- Lab: Parsing SQL Queries
- Logging for Atomicity and Durability
- Distributed Databases
Projects and exercises
This course involves a significant practical component: implementing a simplified relational database management system from scratch. Most classes will cover some amount of theory, which you will then directly apply to your own DBMS implementation. In addition, the optimization portion of the curriculum involves anticipating, reasoning about and optimizing query plans for a handful of given queries, in what is one of our most popular and illuminating exercise.
This course assumes confident programming abilities, and some familiarity with computer architecture. Working familiarity with at least one relational database management system is also highly advised.
Schedule and price
Databases will next run 5:00pm-6:30pm Tuesdays and Fridays, 7 May - 14 Jun 2019. The total price is $1800.
This course reminded me how much I like technology and computer science. Oz did a great job surveying such a vast field—including both historical and future context—but also dived deep into interesting theory and implementation details such as query optimization and storage formats. I would strongly recommend this class if you’ve been in industry for a while and are looking for skills and inspiration to take your career to the next level. My only advice is to be careful not to get so engaged in the class that you neglect your day job!
Taking databases at Bradfield is about as illuminating as it gets. You’ll have a stab at implementing most features of a relational database yourself, and by the end you should be able to reason about just about anything to do with databases from first principles, from any given query right down to the physical bytes on disk. Take this course if you want to understand the spectacular innovations behind RDBMSs, Dynamo and Spanner, and never have to wave your hands when talking about databases again.
Prior to taking Databases, I’d never worked with a DBMS of any kind. Two-thirds of my way through the course, I was able to identify and fix a database transaction race condition in our backend’s API serializer code that even our senior backend engineers couldn’t figure out! I’m honestly blown away by the amount of expertise I acquired in such a short amount of time through this course.
Where once I felt limited to databases I had experience with, I am now confident investigating and understanding the trade-offs presented in the relevant papers. Being able to critically assess arguments around when to use different databases rather than only relying on other people’s interpretations has made me more confident in my ability to make the right database choices going forward.
Bradfield’s databases course is the perfect mixture of theory and practical application. Understanding why the query planner is choosing certain algorithms and the implication of those choices is an invaluable skill. This course is mandatory for anyone who regularly works with databases.