Computer Science 186 — Introduction to Database Systems (4 Units)

Course Overview

Summary

Access methods and file systems to facilitate data access. Hierarchical, network, relational, and object-oriented data models. Query languages for models. Embedding query languages in programming languages. Database services including protection, integrity control, and alternative views of data. High-level interfaces including application generators, browsers, and report writers. Introduction to transaction processing. Database system implementation to be done as term project.

Prerequisites

  • CS61B, 61C

Some experience with Ruby and Unix is helpful.

Topics Covered

  • Wrangling Data: Design patterns and operators for manipulating large data sets.
  • Structured Data Models: Key/Value stores and the Relational data model.
  • Data-centric Programming: using languages like SQL, Pig and Bloom to implement scalable algorithms.
  • Database Design: Entity-Relationship and Object-Relational modeling, physical design, functional dependencies and normalization, and database tuning.
  • Database application development: web-based database application implementation and object-relational mapping.
  • Engine Components for Big Data: disk layout, indexing, search and query processing algorithms, parallelism, query optimization, transactional concurrency control, logging and recovery, replication
  • Text and Web Search: models and implementation, including Boolean search and ranking.

Workload

Course Work

  • 6 Homework Assignments
  • 3 Projects
  • 2 Midterms
  • 1 Final

Time Commitment

  • 3 hours of lecture per week
  • 1 hour of discussion per week
  • 2-5 hours per Homework
  • 10-20 hours per project

Choosing the Course

When to take

Most people take this class in their sophomore or junior year. It is recommended that you take this class right after CS 61C since there are some overlapping concepts.

What's next?

  • CS 161: teaches security aspect of databases
  • CS 162: teaches concurrency control and buffer management

Usefulness for Research or Internships

Jobs/Internships: Taking CS186 really helps when trying to sell yourself to industry. Proving that you can handle a significant amount of code intelligently is important to employers. Plus, SQL and databases are ubiquitous in industry, and understanding how to use and optimize for them makes you valuable.

Research: Knowing the internals of databases can help prepare you for systems research, but you should also take CS162. This class by itself is not the most useful for finding research, but there are some opportunities in research involving database design, recovery, concurrency, etc.

Additional Comments/Tips

Having some experience with Unix and Ruby will save you a lot of time.

Last edited: Fall 2016