CPSC 343 Database Theory and Practice Fall 2026

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

The project is divided into five milestones, each covering a distinct part of the overall design and implementation process. Milestones which have been assigned are listed below; see the schedule page for tentative due dates for upcoming milestones.

datedue
Fri 9/18 milestone 1: topic and requirements
Fri 10/9 milestone 2: modeling and design
milestone 3: implementation
milestone 4: data integrity and security hardening
milestone 5: performance audit and final handin

This is a significant project, and is important to work on it steadily and not leave it until the last minute. Furthermore, the cumulative nature of the project, with little in the way of extra time between phases of the project, means that a late milestone isn't just a late handin — it's also a late start on everything that follows. This means that late milestones are largely not accepted — budget your time so you can complete each milestone on time, and hand in what you have when a milestone is due even if it isn't complete. A few grace days are available for the occasional "just need a day or two more!" crunch; see the late policy for details.


Topic and Requirements (Milestone 1)

Topic Selection

The domain and functionality of the application is up to you; some ideas are given below but you are welcome to come up with your own. The only two real requirements are that the topic is sufficiently distinct from the examples discussed in class and it is able to support everything the course will ask you to build. The criteria below are a minimum bar, not a full checklist — if you can't say "yes" (even tentatively) to one of them, your topic likely won't be able to encompass everything it will need to. You also don't need every detail worked out now, just a plausible reason your topic could satisfy each criterion. Don't worry if you aren't sure about some of them — the purpose of the check-in meeting for this milestone is to help with exactly that.

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).

Deliverables

Project Proposal

Your project proposal needs to contain two things:

Topic Checklist

In addition to the project proposal, briefly outline how your topic meets each of the 10 criteria listed above. You don't need full details or big explanations, just enough to see that your topic is suitable. If you aren't sure how or if your project might meet some of the criteria, come to office hours to discuss it — that's the purpose of the check-in meeting for this milestone.

Check-in and Handin

Check-in Meeting — must be completed by 9/23

A 15-minute check-in meeting is required to discuss your project topic and the checklist. Stop by office hours or make an appointment. Check-in meetings must be completed by 9/23 (several days after the milestone is due). Sooner is better so you can move on to milestone 2!

Deliverables Handin — due in class 9/18

Hand in a hardcopy of your project proposal and the topic checklist.

Handin Meeting

There is no separate handin meeting for this milestone.


Modeling and Design (Milestone 2)

This is where the project really begins, with modeling the data requirements and designing the database itself.

Application Requirements

You outlined a set of use cases (user tasks) in your project proposal, now formalize the requirements for your application: create a requirements document with the brief description of the topic and the list of use cases from your project proposal. The rest of the design and implementation of your project will be based on this document.

ER Model

Create an ER/EER model that captures the data requirements implied by your use cases — what data is needed to support the functionality identified? Use the ER and EER features appropriate for your domain, but also make sure you include the elements listed below. If any of these are not naturally supported by your original set of use cases, add a few new use cases to demonstrate those structures — don't just add things to the ER model that aren't supported by your requirements document. Clearly mark any additions or revisions from what was in your original project proposal.

Your ER diagram must contain:

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

Also create two lists of things present in the data requirements but which are not captured by the ER diagram:

Relational Schema

Convert your ER/EER model to a relational schema following the mapping process discussed in class.

For each relation, identify a primary key along with any foreign key(s) and appropriate NOT NULL, UNIQUE, and CHECK constraints. (If a key wasn't already identified in the ER model, derive candidate key(s) from the functional dependencies and choose one as the primary key.) In a separate list, include any structural constraints not represented in the relational schema. (You don't need to repeat the policy constraints — those are still outside the scope of the database itself.)

Functional Dependencies and Normalization

Identify the functional dependencies that hold in your domain — go back to the entity sets and elements from the ER model to avoid being misled by how a table happens to be organized.

Then go relation by relation: for each relation, identify the functional dependencies that hold for that relation and determine its candidate key(s). (Use this to identify an appropriate primary key for any relation that didn't already have one from the ER model and to verify that the primary key is appropriate otherwise.) Then normalize any relation that isn't already in BCNF, or explain why it isn't possible or desirable to do so. For any relation you do decompose, briefly name the anomaly that the original structure was vulnerable to.

Your schema may not need any further decomposition — in fact, that's likely if you followed good ER design practices in the first place. You do still need to go through the process of identifying the functional dependencies and demonstrating why each schema is in BCNF — there's nothing to fix, but you need to show that instead of simply claiming that everything is fine.

Design Analysis and Process

Discuss the choices you made in all three steps above — ER modeling, relational mapping, and normalization — wherever there was a decision to be made. (You do not need to address cases where there was really only one way to go.) In particular, be sure to address:

This document is the main place where your reasoning is visible and it is an important piece of your handin — a correct-looking schema with a thin or missing design analysis doesn't give much evidence that you understand why it's correct. Focus on places where there was a legitimate choice of alternatives — you don't need to document where there really was only one reasobnable way to go.

Aim for approximately 2-4 pages.

Deliverables

Check-in and Handin

Check-in Meeting — must be completed by 10/2

A 15-minute check-in meeting is required to discuss your ER model before you proceed with the ER-to-relational mapping and normalization steps. Sooner is better so that you have time to act on any feedback and still complete the last two steps on time.

Deliverables Handin — due in class 10/9

Hand in hardcopies of the deliverables listed above.

Handin Meeting

Handin meetings will be scheduled for Monday 10/12 and Tuesday 10/13. A signup list will be made available a few days in advance.