CS 33 (Spring 2010): Course Project

Deadline for Stage 1 (High-Level Design): 10:00pm sharp on May 3, 2010

Deadline for Stage 2 (Schema Design): 10:00pm sharp on May 10, 2010

Deadline for Stage 3 (SQL-Mania): 10:00pm sharp on May 17, 2010

Deadline for Final Report: 10:00pm sharp on Jun 2, 2010

[This page will be updated from time to time]

If you have made other arrangements for your course project with the instructor by April 26, amend the text below as appropriate.

Your course project will consist of conceiving, designing and implementing a moderate-sized database application for an enterprise of your choice If you choose a bank or a university, you will have to go significantly beyond (or depart significantly from) the design outlined in the textbook's examples. You will not need to implement an actual DBMS: you should use MySQL instead. You will need to implement an elegant and intuitive user-interface, which will almost surely be Web-based. At this point, you have already used a connector to work with a MySQL database while coding in a general-purpose language. The textbook has some basic coverage of the other relevant technologies that you might need: CGI, PHP and XML. We shall also discuss these briefly in class, at the appropriate time.

The stages of this project will be as follows:

  1. High-Level Design: Identify the entities, attributes and relationships that your database will represent. Prepare a detailed E-R diagram showing this information. Also, at this stage, identify the potential users of the system, and what kinds of authorizations they should have to access or modify the data in your database.

  2. Schema Design: Translate your E-R diagram into a schema for your relational database. Pay heed to normalization and be prepared to reason cogently about (1) the level of normalization of your database, and (2) any purposeful deviations from normal forms and your justification for such deviations. Also, at this stage, make a list of views that you might wish to create, based on the varying needs or different types of users.

  3. SQL-Mania: Prepare a large collection of SQL statements for a number of natural queries and database updates that each of your user types might want to perform. Populate your database with a large amount of data and test your SQL statements. At this stage, you should spend some time designing intelligent ways to generate test data. Random is usually good, but purely random data may hide problematic performance-busting corner cases, so you will have to be cleverer than that.

  4. The Application Layer: Provide a suitable intuitive interface (ideally, web-based) for each category of user that will be using your database. When appropriate, you may combine interfaces for multiple user types (as in, e.g., Dartmouth's Banner system). You should also provide an interface for appropriately authorized users to modify data (depending on your application, a web interface might not be the best for this). At this stage, you need not bother about users lying to your system about their identity.

  5. Authentication: Finally, implement a web-based authentication system in preparation for a mock deployment of your entire database application. In other words, ensure that your users are not lying about their identities.

The choice of what enterprise to build an application for is up to you. Here are some suggestions to get you started. There is no obligation to pick from one of these, and in fact, you should not pick the hospital system, because one group had worked on this topic in Spring 2009.


What to turn in (Stage 1)


What to turn in (Stage 2)


What to turn in (Stage 3)

What to turn in (Final Report)