From fc297103fa81e4f599dc57eae8d88acc76f9ee20 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Mon, 29 Jun 2026 21:13:09 +0330 Subject: [PATCH] feat: database.sql --- .gitignore | 2 + database.sql | 152 +++++++++++---------------------------------------- 2 files changed, 34 insertions(+), 120 deletions(-) diff --git a/.gitignore b/.gitignore index c5285a4..c660157 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ # Compiled class file *.class +.idea/ + # Log file *.log diff --git a/database.sql b/database.sql index 2169346..045c820 100644 --- a/database.sql +++ b/database.sql @@ -1,141 +1,53 @@ -- Restaurant Database Management System --- --- Instructions: --- 1. Create all required tables. --- 2. Design appropriate PRIMARY KEY and FOREIGN KEY relationships. --- 3. Add suitable constraints based on the requirements. --- 4. Insert initial mock data. --- 5. Insert at least 3 menu items. --- 6. The script should be executable from start to finish without errors. - - -- ======================================================= -- USER TABLE -- ======================================================= --- --- Represents customers using the system. --- --- Required information: --- - Unique identifier --- - Username --- - Password --- - Email (optional) --- --- Requirements: --- - Each user must have a unique identifier. --- - Usernames must be unique. --- - Username and password are required. --- - Passwords should not be stored in plain text. --- --- CREATE TABLE ... - - +CREATE TABLE users ( + id SERIAL PRIMARY KEY, + username VARCHAR(50) NOT NULL UNIQUE, + password_hash VARCHAR(255) NOT NULL, + email VARCHAR(100) +); -- ======================================================= -- MENU ITEM TABLE -- ======================================================= --- --- Represents available food and drink items. --- --- Required information: --- - Unique identifier --- - Name --- - Description (optional) --- - Price --- - Category (optional) --- --- Requirements: --- - Each menu item must have a unique identifier. --- - Name is required. --- - Price must always be positive. --- --- CREATE TABLE ... - - +CREATE TABLE menu_items ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL, + description TEXT, + price NUMERIC(10, 2) NOT NULL CHECK (price > 0), + category VARCHAR(50) +); -- ======================================================= -- ORDER TABLE -- ======================================================= --- --- Represents orders placed by customers. --- --- Required information: --- - Unique identifier --- - Reference to customer --- - Creation date and time --- - Total price --- --- Requirements: --- - Each order must belong to exactly one user. --- - A user can have multiple orders. --- - The relationship between User and Order must be implemented. --- --- Note: --- Avoid using reserved SQL keywords as table names. --- Consider using a name such as "orders" or "customer_orders". --- --- CREATE TABLE ... - - +CREATE TABLE orders ( + id SERIAL PRIMARY KEY, + user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE, + created_at TIMESTAMP NOT NULL DEFAULT NOW(), + total_price NUMERIC(10, 2) NOT NULL CHECK (total_price >= 0) +); -- ======================================================= -- ORDER DETAIL TABLE -- ======================================================= --- --- Represents items inside an order. --- --- Required information: --- - Unique identifier --- - Reference to an order --- - Reference to a menu item --- - Quantity --- - Item price at purchase time --- --- Requirements: --- - Each detail record must belong to one order. --- - Each detail record must reference one menu item. --- - Quantity must always be greater than zero. --- - Store the item's price at the moment of purchase. --- --- CREATE TABLE ... - - +CREATE TABLE order_details ( + id SERIAL PRIMARY KEY, + order_id INT NOT NULL REFERENCES orders(id) ON DELETE CASCADE, + menu_item_id INT NOT NULL REFERENCES menu_items(id), + quantity INT NOT NULL CHECK (quantity > 0), + unit_price NUMERIC(10, 2) NOT NULL CHECK (unit_price > 0) +); -- ======================================================= -- INITIAL MENU DATA -- ======================================================= --- --- Insert at least 3 food or drink items. --- --- Example categories: --- - Pizza --- - Burger --- - Pasta --- - Drink --- --- INSERT INTO ... - - - --- ======================================================= --- OPTIONAL TEST DATA --- ======================================================= --- --- You may insert sample users and orders for testing. --- This section is optional. --- --- INSERT INTO ... - - - --- ======================================================= --- VERIFICATION QUERIES --- ======================================================= --- --- Uncomment these queries to verify your database. --- --- SELECT * FROM ...; --- SELECT * FROM ...; --- SELECT * FROM ...; --- SELECT * FROM ...; \ No newline at end of file +INSERT INTO menu_items (name, description, price, category) VALUES + ('Margherita Pizza', 'Classic tomato sauce and mozzarella', 10.00, 'Pizza'), + ('BBQ Burger', 'Juicy beef patty with BBQ sauce', 8.50, 'Burger'), + ('Spaghetti Carbonara', 'Creamy pasta with pancetta and egg', 12.00, 'Pasta'), + ('Tiramisu', 'Italian coffee dessert', 5.50, 'Dessert'), + ('Cola', 'Ice-cold soft drink', 2.50, 'Drink'); \ No newline at end of file