From 8c2c61330e1a0e26c9c1aa05e1b396d3563ab78b Mon Sep 17 00:00:00 2001 From: rhanarmt Date: Tue, 14 Apr 2026 00:01:20 +0700 Subject: [PATCH] database RESEP --- database/recipes_schema.sql | 176 ++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 database/recipes_schema.sql diff --git a/database/recipes_schema.sql b/database/recipes_schema.sql new file mode 100644 index 0000000..24010cd --- /dev/null +++ b/database/recipes_schema.sql @@ -0,0 +1,176 @@ +-- ===================================================== +-- Database: prediksi_stok_db +-- Table: recipes (Resep Produk) +-- ===================================================== + +-- 1. TABLE: recipes +-- Menyimpan daftar resep/produk yang bisa dibuat +CREATE TABLE IF NOT EXISTS recipes ( + id INT PRIMARY KEY AUTO_INCREMENT, + recipe_name VARCHAR(100) NOT NULL UNIQUE, + description TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + KEY idx_recipe_name (recipe_name) +); + +-- 2. TABLE: recipe_ingredients +-- Menyimpan detail ingredients untuk setiap resep +CREATE TABLE IF NOT EXISTS recipe_ingredients ( + id INT PRIMARY KEY AUTO_INCREMENT, + recipe_id INT NOT NULL, + product_name VARCHAR(100) NOT NULL, + quantity_needed INT NOT NULL, + unit VARCHAR(20) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE, + KEY idx_recipe_id (recipe_id), + KEY idx_product_name (product_name) +); + +-- 3. TABLE: products (Bahan/Produk) +-- Menyimpan data produk/bahan yang tersedia +CREATE TABLE IF NOT EXISTS products ( + id INT PRIMARY KEY AUTO_INCREMENT, + product_name VARCHAR(100) NOT NULL UNIQUE, + category VARCHAR(50) NOT NULL, + price INT NOT NULL, + current_stock INT NOT NULL DEFAULT 0, + unit VARCHAR(20) NOT NULL, + min_stock INT DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + KEY idx_product_name (product_name), + KEY idx_category (category) +); + +-- ===================================================== +-- INSERT DATA: RESEP +-- ===================================================== + +-- 1. Donat +INSERT INTO recipes (recipe_name, description) VALUES +('Donat', 'Donat klasik dengan topping gula'); + +-- 2. Roti Putih +INSERT INTO recipes (recipe_name, description) VALUES +('Roti Putih', 'Roti putih lembut untuk sarapan'); + +-- 3. Kue Brownies +INSERT INTO recipes (recipe_name, description) VALUES +('Kue Brownies', 'Brownies cokelat yang lembut dan nikmat'); + +-- 4. Kue Tart +INSERT INTO recipes (recipe_name, description) VALUES +('Kue Tart', 'Kue tart creamy dengan topping keju'); + +-- ===================================================== +-- INSERT DATA: RECIPE INGREDIENTS +-- ===================================================== + +-- 1. DONAT (per unit = 1 pcs) +-- Donat membutuhkan per pcs: Tepung 500gr, Telur 2, Gula 100gr, Mentega 50gr, Baking Powder 5gr +INSERT INTO recipe_ingredients (recipe_id, product_name, quantity_needed, unit) VALUES +((SELECT id FROM recipes WHERE recipe_name = 'Donat'), 'Tepung Terigu 1kg', 500, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Donat'), 'Telur 1kg', 2, 'butir'), +((SELECT id FROM recipes WHERE recipe_name = 'Donat'), 'Gula Pasir 1kg', 100, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Donat'), 'Mentega 500gr', 50, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Donat'), 'Baking Powder', 5, 'gr'); + +-- 2. ROTI PUTIH (per unit = 1 pcs) +-- Roti membutuhkan per pcs: Tepung 800gr, Telur 3, Gula 80gr, Mentega 80gr, Susu 50gr, Baking Powder 8gr +INSERT INTO recipe_ingredients (recipe_id, product_name, quantity_needed, unit) VALUES +((SELECT id FROM recipes WHERE recipe_name = 'Roti Putih'), 'Tepung Terigu 1kg', 800, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Roti Putih'), 'Telur 1kg', 3, 'butir'), +((SELECT id FROM recipes WHERE recipe_name = 'Roti Putih'), 'Gula Pasir 1kg', 80, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Roti Putih'), 'Mentega 500gr', 80, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Roti Putih'), 'Susu Bubuk', 50, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Roti Putih'), 'Baking Powder', 8, 'gr'); + +-- 3. KUE BROWNIES (per unit = 1 pcs) +-- Brownies membutuhkan per pcs: Tepung 300gr, Cokelat 100gr, Telur 4, Gula 200gr, Mentega 150gr, Baking Powder 5gr +INSERT INTO recipe_ingredients (recipe_id, product_name, quantity_needed, unit) VALUES +((SELECT id FROM recipes WHERE recipe_name = 'Kue Brownies'), 'Tepung Terigu 1kg', 300, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Brownies'), 'Cokelat Bubuk 250gr', 100, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Brownies'), 'Telur 1kg', 4, 'butir'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Brownies'), 'Gula Pasir 1kg', 200, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Brownies'), 'Mentega 500gr', 150, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Brownies'), 'Baking Powder', 5, 'gr'); + +-- 4. KUE TART (per unit = 1 pcs) +-- Tart membutuhkan per pcs: Tepung 400gr, Telur 5, Gula 150gr, Mentega 200gr, Keju 100gr, Susu 80gr +INSERT INTO recipe_ingredients (recipe_id, product_name, quantity_needed, unit) VALUES +((SELECT id FROM recipes WHERE recipe_name = 'Kue Tart'), 'Tepung Terigu 1kg', 400, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Tart'), 'Telur 1kg', 5, 'butir'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Tart'), 'Gula Pasir 1kg', 150, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Tart'), 'Mentega 500gr', 200, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Tart'), 'Keju Parut 250gr', 100, 'gr'), +((SELECT id FROM recipes WHERE recipe_name = 'Kue Tart'), 'Susu Bubuk', 80, 'gr'); + +-- ===================================================== +-- INSERT DATA: PRODUCTS (BAHAN) +-- ===================================================== + +INSERT INTO products (product_name, category, price, current_stock, unit, min_stock) VALUES +('Tepung Terigu 1kg', 'Tepung', 15000, 45000, 'gr', 5000), +('Telur 1kg', 'Telur', 35000, 12, 'butir', 2), +('Gula Pasir 1kg', 'Gula', 20000, 28000, 'gr', 5000), +('Susu Bubuk', 'Susu', 45000, 8000, 'gr', 1000), +('Cokelat Bubuk 250gr', 'Cokelat', 35000, 22000, 'gr', 2000), +('Mentega 500gr', 'Mentega', 50000, 15000, 'gr', 3000), +('Keju Parut 250gr', 'Keju', 40000, 3000, 'gr', 500), +('Baking Powder', 'Bahan Tambahan', 12000, 60000, 'gr', 5000); + +-- ===================================================== +-- VIEW: Recipe Summary +-- ===================================================== + +CREATE OR REPLACE VIEW v_recipe_summary AS +SELECT + r.id, + r.recipe_name, + r.description, + COUNT(ri.id) as total_ingredients, + GROUP_CONCAT(CONCAT(ri.product_name, ' (', ri.quantity_needed, ri.unit, ')') SEPARATOR ', ') as ingredients_list, + r.created_at +FROM recipes r +LEFT JOIN recipe_ingredients ri ON r.id = ri.recipe_id +GROUP BY r.id, r.recipe_name, r.description, r.created_at; + +-- ===================================================== +-- VIEW: Stock Readiness (Kesiapan Stok untuk setiap resep) +-- ===================================================== + +CREATE OR REPLACE VIEW v_recipe_stock_readiness AS +SELECT + r.recipe_name, + ri.product_name, + ri.quantity_needed, + ri.unit, + COALESCE(p.current_stock, 0) as current_stock, + CASE + WHEN COALESCE(p.current_stock, 0) >= ri.quantity_needed THEN 'Cukup (1x produksi)' + WHEN COALESCE(p.current_stock, 0) > 0 THEN CONCAT('Kurang (dapat ', FLOOR(COALESCE(p.current_stock, 0) / ri.quantity_needed), 'x)') + ELSE 'Kosong' + END as status +FROM recipes r +JOIN recipe_ingredients ri ON r.id = ri.recipe_id +LEFT JOIN products p ON ri.product_name = p.product_name; + +-- ===================================================== +-- VERIFY DATA +-- ===================================================== + +-- Lihat semua resep +SELECT * FROM recipes; + +-- Lihat ingredients per resep +SELECT + r.recipe_name, + ri.product_name, + ri.quantity_needed, + ri.unit +FROM recipes r +JOIN recipe_ingredients ri ON r.id = ri.recipe_id +ORDER BY r.recipe_name; + +-- Lihat stok produk +SELECT * FROM products;