Databases are essential to applications in a wide variety of domains, including finance, health care, commerce, and telecomunications. In fact, most applications that people use on a day-to-day bases are backed by databases. This course provides a balanced introduction to relational database management systems from two perspectives: that of the database user, and that of the database implementor. On the user side, the course will cover: modeling enterprise data with ER diagrams, the relational model, SQL, logical design with normalization, transaction processing, recovery, and concurrency. On the implementation side, the course will cover physical design, data storage, buffer management, indexing, and query execution. Time permitting, the course will briefly discuss some advanced topics such as processing unstructured or semi-unstructured data, graph databases, and NoSQL systems.
The course work will consist of implementing components of a relational database management system, exercises using an industrial DBMS, as well as data modeling and design problems. The implementation projects will involve a significant amount of programming in C++. You do not need to know C++ to take this course, but you should have a background in programming either C or Java. If you don't have programming experience, you may want to consider another course.
We rely on one textbook:
Additionally, a reference on C++ may be useful, such as one of the following:
Please send class-related questions to the Discussions Forum on Moodle (unless, of course, they concern private rather than technical or organizational issues).
15% for homework and 25% for projects; 20% for the mid-term; 40% for the final exam.
I encourage you to collaborate on homework assignments. But you must write up and turn in your own answers. Also, you must clearly indicate who you collaborated with. If I detect any incidents of cheating, I will report them immediately to the department, and the assignment will be given a grade of 0.
Please be sure to regularly check this page for updates.
You may also find the following resources useful: