CPSC 343 Database Theory and Practice Fall 2024

Project

A significant component of this course is a project in which you will design and implement a database-driven application, bringing together concepts and material from many parts of the course. You will be responsible for designing and implementing both the database and the application.


Due Dates and Grading

All deadlines are in class unless otherwise noted. Dates in bold are firm, others might shift slightly. More details on what the different components entail and what to hand in are given in the "Project Components" section below.

datedue
Fri Sep 13 topic proposal
Mon Sep 23 specifications
Fri Oct 4 conceptual model
Fri Oct 25 database design
Fri Nov 8 application design — frontend
Fri Nov 15 application design — backend
Fri Dec 6 implementation (database and application)
Wed Dec 11 10pm final handin

This is a significant project, and is important to work on it steadily and not leave it until the last minute. The deadlines given above are to help you stay on track, and also provide an opportunity for feedback and revision. See the late policy for the late policy as it pertains to the project — in short, yes, you can turn in stages late but significant lateness or a pattern of lateness will make it substantially harder to complete the project successfully.

Grading:

Only the final handin is graded, however, handing in each phase provides an important opportunity for feedback and revision. Approximate weights of each component in the final handin:

Specifics on grading the individual components can be found in the "Project Components" section below.


Project Components

Topic Proposal

The topic is up to you; some ideas are given below but you are welcome to come up with your own. The criteria for an appropriate topic:

"Moderately complex" and "non-trivial modeling decisions" are a bit difficult to define without having covered data modeling in class yet, but as a rough guideline, "moderately complex" means there should be at least 4-5 interconnected "things" about which information is being stored. For example, the sailors database has only three things (sailors, boats, reservations) while the library and company databases each have four (books, publishers, library branches, borrowers for the library; employees, departments, projects, and dependents for the company) plus additional connections between them (library branches have books, borrowers check out books, employees work on projects, etc). (In the sailors database, reservations capture the connection between sailors and boats so there isn't anything else to include.) "Non-trivial modeling decisions" can stem from connections between three or more things (such as a borrower checking out a book from a library branch, connecting "borrower" and "book" and "library branch") or "category" and "kind of" relationships between things (such as disparate things which can function in the same role — e.g. a person, a bank, and a company all be able to own a vehicle — or different types of a thing — e.g. an actor can appear in movies and TV shows, both types of media production), though this is not an exhaustive list. A good strategy is to identify a topic with room for expansion, for example, the basic library database could be extended to include waiting lists for popular books, additional media (such as DVDs or access to streaming), ...

About the last point: The emphasis in this course is on the "database" part of "database-driven application", covering everything associated with the database itself (modeling, design, implementation) and up to and including the interaction of the frontend application with the database — not a fancy user interface, tons of functionality, or extensive handling of data that has been retrieved from the database. In other words, you'll need to plan big enough with your application to achieve sufficient complexity in the data requirements, but you only need to implement a piece of that functionality in your application — enough so that your application does something useful, but not necessarily as flexible, convenient, and powerful as you'd find in a full-featured software product.

Some possible ideas:

Note that these ideas are given as a starting point — you still need to make sure your topic satisfies the criteria given above (without also being too big).

What to hand in: a description of your proposed topic with enough detail to be able to assess whether it meets the criteria for an appropriate topic (a few sentences to a paragraph or so)

How to hand in: email your topic description

Graded on: n/a


Specifications

The first step in developing a software system is to figure out what it needs to do. For a database application, this means determining the functional requirements (what the users need to be able to do) and as well as the data requirements (what needs to be stored and its constraints) for your project. (We will not deal with operational requirements with this project.)

Create a requirements document containing the following:

Think carefully about the essential and important functionality — you will generally be expected to implement the entire database but only the essential functionality for a passing grade and at least some of the important features for a good grade, though this depends on the scale of the project. (If there's a lot of essential functionality, implementing just that may be sufficient for a good grade.)

What to hand in: the requirements document

How to hand in: Hardcopy.

Graded on: (final handin)


Conceptual Model

Based on your specifications:

Using PlantUML or another diagramming tool for your ER diagram is recommended so that it is easily editable.

What to hand in:

How to hand in: Hardcopy.

Graded on: (final handin)


Database Design

Based on your specifications and ER model:

What to hand in:

The requirements and ER diagram will likely be the same as what you handed in for the previous phase, but should be updated if you have made any changes.

How to hand in: Hardcopies of all documents.

Graded on: (final handin)