Home

Welcome to CSCI 6441!

This is a graduate course in the Computer Science Department of George Washington University.

Relational database management systems today host small to huge size databases, offering simultaneous access to multiple users, maintaining the correctness of the stored information even in the event of hardware or software failure.  This course is intended to prepare programmers to construct applications that use such systems, and to be technical leaders on their projects.

SQL is standardized and is very similar across many database systems; we spend significant time on SQL.  In addition, in order to make effective use of a DBMS, a robust data model must be designed.  We won’t just talk about data modeling; instead, you’ll develop your own data model and share it with the class in a colloquium.

There is theory, called normalization, that lets us design data models to avoid problems with the applications we develop. Many professionals in our business don’t understand normalization, possibly because of the theoretical way it is usually taught. Instead, we’ll take a plain-English approach to normalization so that you’ll understand it and be able to use it, as well as help your colleagues understand and apply normalization to their work.

When a relational DBMS processes a SQL statement, it must decide on its own how to process that statement, using a process called access path selection. When you develop an application, the access path selection that the DBMS does with your SQL will determine how fast your application operates. We’ll study how access path selection works, and we will also do significant experiments using a database with millions of rows to explore how the system processes SQL statements. On the job, you’ll be able to solve database performance problems that you encounter, and you’ll be able to help your colleagues.

Finally, to be a knowledgeable programmer of database applications, it’s necessary to understand how a DBMS operates.  The software architecture of a DBMS is presented, followed by details of the features that are most important for programmers to understand.