This course will cover the theoretical and practical background behind systems for storing and retrieving data. Most of the course is concerned with the mathematical formalisms and the implementation problems of relational databases. Specific topics include schema design and data modeling (how to structure data), query optimization (how to efficiently retrieve data), concurrency control (how to ensure data integrity with multiple users), and database system architectures (how to organize the data on disk, memory, and distributed across multiple file systems and hosts). Students will also enjoy in-depth exposure to a modern three-tiered application framework through a class project.

Note that CS445 is not a course on how to use and administer a database system. The course is about the principles that underlie databases. A portion of the class will cover standard query languages and some administrative commands, and your assignments will require you to use database systems, but this course is not a software tutorial. That said, the class project, in particular, will require substantial programming and you will be required to learn new programming languages and systems primarily on your own.

CS445 is a "semi-required" course for computer science undergraduates. Students are required to have successfully completed CS287 (Programming Languages) and CS187 (Programming).