Files
WS-10-Database/database.sql
T

80 lines
2.3 KiB
SQL

-- USER TABLE
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100)
);
-- MENU ITEM TABLE
CREATE TABLE menu_items (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL CHECK (price > 0),
category VARCHAR(50)
);
-- ORDER TABLE
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
total_price DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
CONSTRAINT fk_user_order FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- ORDER DETAIL TABLE
CREATE TABLE order_details (
id SERIAL PRIMARY KEY,
order_id INT NOT NULL,
menu_item_id INT NOT NULL,
quantity INT NOT NULL CHECK (quantity>0),
price_at_purchase DECIMAL(10,2) NOT NULL,
CONSTRAINT fk_detail_order FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
CONSTRAINT fk_detail_menu FOREIGN KEY (menu_item_id) REFERENCES menu_items(id)
)
-- INITIAL MENU DATA
INSERT INTO menu_items (name, description, price, category) VALUES
('Cheeseburger', 'Juicy beef patty with cheddar cheese', 8.99, 'Food'),
('Pepperoni Pizza', 'Classic pizza with pepperoni and mozzarella', 12.50, 'Food'),
('Iced Latte', 'Espresso with cold milk and ice', 4.25, 'Drink');
-- OPTIONAL TEST DATA
INSERT INTO users (username, password, email) VALUES
('mardin_dev', 'hashed_pass_123', 'mardin@example.com'),
('sara_kh', 'hashed_pass_456', 'sara@example.com');
INSERT INTO orders (user_id, total_price) VALUES
(1, 21.49),
(2, 4.25);
INSERT INTO order_details (order_id, menu_item_id, quantity, price_at_purchase) VALUES
(1, 1, 1, 8.99),
(1, 2, 1, 12.50);
INSERT INTO order_details (order_id, menu_item_id, quantity, price_at_purchase) VALUES
(2, 3, 1, 4.25);
-- VERIFICATION QUERIES
SELECT * FROM users;
SELECT * FROM menu_items;
SELECT * FROM orders;
SELECT * FROM order_details;
SELECT
o.id AS order_number,
u.username AS customer,
m.name AS food_item,
od.quantity,
od.price_at_purchase,
(od.quantity * od.price_at_purchase) AS subtotal,
o.created_at
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN order_details od ON od.order_id = o.id
JOIN menu_items m ON od.menu_item_id = m.id;