Update README.md
This commit is contained in:
@@ -1,3 +1,598 @@
|
||||
# WS-11-Database
|
||||
|
||||
Build a complete database-driven restaurant management system using PostgreSQL and JDBC.
|
||||
# Restaurant Database Management System 🍕🗄️
|
||||
|
||||
## Overview 👋
|
||||
|
||||
In this assignment, 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:
|
||||
|
||||
```xml
|
||||
<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:
|
||||
|
||||
```sql
|
||||
INSERT INTO users(username, password)
|
||||
VALUES ('ali', 'hashed_password');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Read
|
||||
|
||||
Retrieving information from the database.
|
||||
|
||||
Example:
|
||||
|
||||
```sql
|
||||
SELECT * FROM menu_items;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Update
|
||||
|
||||
Changing existing information.
|
||||
|
||||
Example:
|
||||
|
||||
```sql
|
||||
UPDATE users
|
||||
SET email='new@email.com'
|
||||
WHERE id=1;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Delete
|
||||
|
||||
Removing records.
|
||||
|
||||
Example:
|
||||
|
||||
```sql
|
||||
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:
|
||||
|
||||
```sql
|
||||
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:
|
||||
|
||||
1. Select user
|
||||
|
||||
2. Select food items
|
||||
|
||||
3. Set quantity
|
||||
|
||||
4. 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:
|
||||
|
||||
1. Insert Order
|
||||
|
||||
2. 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
|
||||
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user