Page last updated: October 12, 1999

Course Project

The project will allow you to delve deeper into some of the important implementation aspects of database management systems. As a result, you will have a much better understanding of how a DBMS functions, which is very useful for DBAs, implementors, applications programmers, sophisticated users, and truck drivers.

The project consists of a bottom-up, layered implementation of a DBMS, of which you will implement the heapfile manager and a join method. The DBMS, called Minirel, is a single-user, working DBMS that can execute certain simple SQL queries. The objective is to learn how a DBMS is organized and what goes on inside it when queries are processed. We provide the top and bottom (and several other) layers of the system for you to work with. The top layer is a parser that parses SQL and calls appropriate functions in the lower layers to perform relational operations. The lowest layer is the disk I/O layer, which reads and writes pages from and to the disk. In your case, the disk will just be the operating system's file system. For Part 2 of your implementation, you will need a working Part 1 (heapfile) implementation. You can use yours or, if you prefer, one that we will provide.

It will involve programming in C/C++ on a Unix-based system, on which you all have (or soon will) accounts, and which is accessible via telnet from anywhere. Try to make the best possible use of object-oriented programming and C++. We encourage you to reuse code when possible and to stick to the object-oriented paradigm when possible. Don't be afraid to use pre-existing code from the standard template library (STL). The code we provide makes some use of STL, and when writing your code it will be important to understand ours.

For those of you not familiar with C/C++, I highly encourage you to work through an online tutorial (use your favorite search engine) or get a book on C++. The purpose of the project is to strengthen your understanding of database management systems, not to train you as C++ programmers. Please see me if you have any concerns about the programming project, and we'll do what we need to do to make sure you get out of it what you need to without drowning in the details of C++. For some basic UNIX help, we have provided a brief help sheet. For text editing, the available editors are emacs, vi, and pico. We have provided a brief guide to emacs if you want to use it.

As mentioned in class, you are free to develop code anywhere you like, but your final version must be in the proper directory in your instructional Unix account by the due time. We will compile and test your code automatically.

You may work individually on the project or in groups of two or three (I highly encourage you to work with someone else), so feel free to start forming groups right away. You must let the TA know by sometime on Friday October 15 with whom you'll be working. Even if you're working alone, we need to know this. All members of a team receive the same grade unless something is brought to our attention that would indicate otherwise, and you will work with the same people on both phases of the project.


Heapfile implementation due: Wed. November 10, 1999, at beginning of class
Join implementation due: Mon. December 6, 1999, at beginning of class

NOTE: There will be no extensions beyond these dates for anyone for any reason. A working heapfile implementation will be provided for your use (if you want it) immediately after the due date for Part 1. You can use this in your implementation of Part 2.

Grading Criteria:

Correctness: 80%
Style and Documentation: 20%

Also note that questions about the project are fair game on the final exam.

Here we go -- have fun!!

Minirel IO layer
Minirel buffer manager layer
Heapfile implementation assignment
Join implementation assignment