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 — front end
Fri Nov 15 application design — back end
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)


Application Design — Front End

In this phase, you will start to focus on the application itself, specifically the front end.

Note that you are only designing the application, not implementing it! (Yet.)

What to hand in:

The requirements document will likely be the same as what you've handed in previously, but should be updated if you have made any changes.

How to hand in: Hardcopies of all documents.

Graded on: (final handin)


Application Design — Back End

In this phase, you will start to focus on the application itself, specifically the back end.

Note that you are only designing the application, not implementing it! (Yet.)

What to hand in:

The requirements document will likely be the same as what you've handed in previously, but should be updated if you have made any changes.

How to hand in: Hardcopies of all documents.

Graded on: (final handin)


Implementation

This is it, implementation of the database and application. See below for details about naming, directories, and database accounts.

Use the username_project database for the implementation of the database. If you have begun implementation of the database with a different name, ask for assistance in renaming it.

Accounts and permissions:

What to hand in: There is no separate handin for this phase — your code (and another documents) will be handed in with your final handin.

Graded on: (final handin)

Having particularly nifty features or functionality that goes beyond the required levels can result in extra credit.


Final Handin

What to hand in:

Your handin should include sufficient documentation for users and admins. A separate user manual is not needed if all of the information necessary for using the application is available within the application itself (e.g. through a self-explanatory user interface, a help menu, or other means). For the DB admin, there should be enough information for someone to understand the database should they want to add or modify it or the data it contains — identify what the tables, attributes, views, stored routines, triggers are for. Your database and back end design documents, potentially with some additional explanatory notes, can suffice here.

Your handin should also include sufficient documentation for testing your application. Include usernames and passwords for your application users.

Finally, a writeup should addresses your design decisions. For both the ER model and the relational model, consider when there were alternatives about how to represent or implement something — why did you make the choices you did? Did you run into difficulties, and were there things that you couldn't (or couldn't elegantly) represent? Explain.

How to hand in:

Graded on: The project should meet the "criteria for an appropriate topic" outlined in the "Topic Proposal" section above. The individual components of the project will be graded as outlined in the "graded on (final handin)" sections for each component. There should be sufficient documentation, both for the user and for the DB administrator. The writeup should display awareness of the tradeoffs in modeling and implementation, and should provide an appropriate rationale for the design decisions made.