WS-11-Database
Restaurant Database Management System 🍕🗄️
Overview 👋
In this workshop, you will build a restaurant management system focused on database design, PostgreSQL, and JDBC integration.
The main goal of this project is to practice working with relational databases, designing a proper database schema, managing relationships between tables, and connecting a Java application to PostgreSQL.
You will implement a backend system where users can create accounts, view menu items, create orders, and store all information permanently inside a database.
The project should be implemented using:
-
Java 23
-
Maven
-
PostgreSQL
-
JDBC
Prerequisites ✅
Make sure you have installed:
-
Git
-
Java 23
-
Maven
-
PostgreSQL
-
PostgreSQL Client (pgAdmin is recommended)
Maven Configuration
This project must use Maven as the build tool.
Your project should contain:
pom.xml
The pom.xml file is responsible for managing project dependencies and configuring the Java version.
You need to add the required PostgreSQL JDBC driver dependency.
Example:
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version>
</dependency>
</dependencies>
This dependency allows your Java application to connect to PostgreSQL using JDBC.
Objectives ✏️
By completing this assignment, you will:
-
Learn how to design a relational database
-
Understand database relationships
-
Work with Primary Keys and Foreign Keys
-
Use SQL to create and manage tables
-
Connect Java applications to PostgreSQL using JDBC
-
Implement CRUD operations
-
Handle database transactions
-
Build a structured backend application
Important Concepts
CRUD Operations
CRUD represents the four basic operations used to manage data in a database.
CRUD stands for:
Create
Adding new records to the database.
Example:
INSERT INTO users(username, password)
VALUES ('ali', 'hashed_password');
Read
Retrieving information from the database.
Example:
SELECT * FROM menu_items;
Update
Changing existing information.
Example:
UPDATE users
SET email='new@email.com'
WHERE id=1;
Delete
Removing records.
Example:
DELETE FROM menu_items
WHERE id=3;
Your application should support CRUD operations where appropriate.
Database Entities
Your database must contain these entities:
1. User
Represents a customer.
Attributes:
-
id
- Primary Key
-
username
-
Required
-
Unique
-
-
password
- Stored as hashed value
-
email
- Optional
Relationship:
One user can have many orders.
User 1 -------- N Order
2. MenuItem
Represents restaurant menu items.
Attributes:
-
id
- Primary Key
-
name
-
description
- Optional
-
price
-
category
- Optional
Requirement:
Database must contain at least 3 initial menu items.
Example:
| Name | Price | Category |
|---|---|---|
| Pizza | 10 | Fast Food |
| Burger | 8 | Fast Food |
| Pasta | 12 | Italian |
3. Order
Represents a customer's order.
Attributes:
-
id
- Primary Key
-
userId
- Foreign Key
-
createdAt
-
totalPrice
Relationships:
User 1 -------- N Order
Order 1 -------- N OrderDetail
4. OrderDetail
Stores each ordered item.
Attributes:
-
id
- Primary Key
-
orderId
- Foreign Key
-
menuItemId
- Foreign Key
-
quantity
-
price
Example:
Order:
Pizza x2
Burger x1
Stored as:
| Order ID | Item | Quantity |
|---|---|---|
| 1 | Pizza | 2 |
| 1 | Burger | 1 |
Database Requirements
Create:
database.sql
This file must include:
-
CREATE TABLE statements
-
Primary Keys
-
Foreign Keys
-
Constraints
-
Initial data
Example:
CREATE TABLE users(
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password TEXT NOT NULL
);
Java + JDBC Requirements
Create a Java application that communicates with PostgreSQL using JDBC.
All data must be stored inside PostgreSQL.
Do not store application data in files.
Required Features
User Management
The system must support:
Register User
Insert a new user.
Required:
-
Username
-
Password
-
Email (optional)
Rules:
-
Username must be unique
-
Password must be hashed
Login Validation
Check credentials from database.
Possible results:
-
Login successful
-
Username not found
-
Wrong password
Menu Management
Load menu items from database.
Example:
ID | Name | Price
1 | Pizza | 10
2 | Burger | 8
3 | Pasta | 12
Order Management
Users should be able to create orders.
Process:
-
Select user
-
Select food items
-
Set quantity
-
Save order
Database example:
Order:
| ID | User ID | Total |
|---|---|---|
| 1 | 5 | 28 |
OrderDetail:
| Order ID | Item | Quantity |
|---|---|---|
| 1 | Pizza | 2 |
| 1 | Burger | 1 |
Receipt Generation
After creating an order, retrieve the order information from database.
Receipt must include:
-
Food name
-
Quantity
-
Unit price
-
Item total price
-
Final order price
Example:
Pizza
Quantity: 2
Unit Price: 10
Total: 20
Burger
Quantity: 1
Unit Price: 8
Total: 8
Final Price: 28
Order History (Bonus)
Users can view previous orders.
Database Rules
Required:
-
Every table must have Primary Key
-
Relationships must use Foreign Keys
-
Username must be UNIQUE
-
Required fields must be NOT NULL
-
Price must be positive
Transaction Requirement
Creating an order must use a database transaction.
Steps:
-
Insert Order
-
Insert OrderDetails
If any step fails:
Rollback the entire operation.
Example:
BEGIN TRANSACTION
Insert Order
Insert OrderDetails
COMMIT
Evaluation Criteria 📃
Database Design
-
Correct schema design
-
Proper relationships
-
Correct constraints
-
SQL initialization file
JDBC Integration
-
PostgreSQL connection
-
Correct SQL queries
-
PreparedStatement usage
-
Exception handling
Functionality
The application must support:
-
Creating users
-
Login verification
-
Reading menu items
-
Creating orders
-
Saving order details
-
Generating receipts
-
Viewing order history
Code Quality
The code should:
-
Follow Object-Oriented principles
-
Have clean structure
-
Avoid duplicated code
-
Separate database logic from application logic