CrustyCookiesAPI/app/Migrations/create-schema.sql

114 lines
3.6 KiB
MySQL
Raw Normal View History

PRAGMA foreign_keys = OFF;
-- Drop everything...
DROP TABLE IF EXISTS pallets;
DROP TABLE IF EXISTS raw_materials_deliveries;
DROP TABLE IF EXISTS raw_materials;
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS customers;
DROP TABLE IF EXISTS cookies;
2024-05-03 05:30:52 +02:00
--------------------------------------------
-- Recipe/Cookie related tables
--------------------------------------------
2024-05-04 13:36:27 +02:00
-- Holds the different types of cookies we can make.
2024-05-04 13:57:55 +02:00
CREATE TABLE IF NOT EXISTS cookies (
cookie_id INTEGER PRIMARY KEY,
2024-05-04 13:38:10 +02:00
cookie_name VARCHAR(50) NOT NULL UNIQUE
2024-05-04 13:36:27 +02:00
);
2024-05-03 05:30:52 +02:00
-- Our known customers, may need more fields
2024-05-03 01:59:07 +02:00
CREATE TABLE IF NOT EXISTS customers (
customer_id INTEGER PRIMARY KEY,
2024-05-04 13:33:24 +02:00
customer_name VARCHAR(50) NOT NULL,
2024-05-04 13:34:22 +02:00
customer_address VARCHAR(50) NOT NULL
);
2024-05-03 05:30:52 +02:00
-- Orders from customers.
2024-05-03 08:16:21 +02:00
CREATE TABLE IF NOT EXISTS orders (
order_id INTEGER PRIMARY KEY,
2024-05-04 13:33:24 +02:00
customer_id INT NOT NULL,
cookie_id INT NOT NULL,
order_date DATE NOT NULL DEFAULT CURRENT_DATE CHECK (order_date >= CURRENT_DATE),
2024-05-04 13:57:55 +02:00
FOREIGN KEY (customer_id) REFERENCES customers(customer_id),
FOREIGN KEY (cookie_id) REFERENCES cookies(cookie_id)
);
2024-05-03 05:30:52 +02:00
--------------------------------------------
-- Recipe/Cookie related tables
--------------------------------------------
-- Notes: the unit type can be defined in terms
-- of volume or weight instead. Here we choose
-- to use static si-prefixes in relevant tables.
-- What types of ingredients do we handle
CREATE TABLE IF NOT EXISTS ingredients (
ingredient_id INTEGER PRIMARY KEY,
ingredient_name VARCHAR(50) NOT NULL UNIQUE,
preferred_unit VARCHAR(50) NOT NULL CHECK (preferred_unit IN ('g', 'ml'))
);
-- What ingredients are in what cookies
CREATE TABLE IF NOT EXISTS recipe_contents (
cookie_id INT NOT NULL,
ingredient_id INT NOT NULL,
quantity INT NOT NULL,
unit VARCHAR(50) NOT NULL CHECK (unit IN ('g', 'ml')),
PRIMARY KEY (cookie_id, ingredient_id),
FOREIGN KEY (cookie_id) REFERENCES cookies(cookie_id),
FOREIGN KEY (ingredient_id) REFERENCES ingredients(ingredient_id)
);
2024-05-03 05:30:52 +02:00
-- Describes ingredients and stock.
2024-05-04 13:33:24 +02:00
CREATE TABLE IF NOT EXISTS raw_materials (
ingredient_id INTEGER PRIMARY KEY,
2024-05-04 13:33:24 +02:00
ingredient_name VARCHAR(50) NOT NULL UNIQUE,
ingredient_quantity INT NOT NULL,
unit VARCHAR(50) NOT NULL CHECK (unit IN ('g', 'ml'))
);
2024-05-04 13:33:24 +02:00
-- When did we get the ingredients?
CREATE TABLE IF NOT EXISTS raw_materials_deliveries (
delivery_id INTEGER PRIMARY KEY,
2024-05-04 13:33:24 +02:00
ingredient_id INT NOT NULL,
delivery_date DATE NOT NULL,
delivery_quantity INT NOT NULL,
unit VARCHAR(50) NOT NULL CHECK (unit IN ('g', 'ml')),
FOREIGN KEY (ingredient_id) REFERENCES raw_materials(ingredient_id)
);
2024-05-03 05:30:52 +02:00
--------------------------------------------
-- Pallet related tables
--------------------------------------------
-- Pallets are used to store cookies for delivery
2024-05-05 07:25:10 +02:00
-- Order related columns are unused for now.
2024-05-03 05:30:52 +02:00
CREATE TABLE IF NOT EXISTS pallets (
pallet_id INTEGER PRIMARY KEY,
2024-05-04 13:33:24 +02:00
cookie_id INT NOT NULL,
order_id INT, -- This should be not null
2024-05-04 13:33:24 +02:00
status VARCHAR(50) NOT NULL CHECK (status IN ('freezer', 'delivered', 'blocked')),
production_date DATE NOT NULL,
2024-05-04 14:17:48 +02:00
delivery_date DATE DEFAULT NULL,
2024-05-04 13:57:55 +02:00
FOREIGN KEY (cookie_id) REFERENCES cookies(cookie_id)
FOREIGN KEY (order_id) REFERENCES orders(order_id)
);
--------------------------------------------
-- Views
--------------------------------------------
-- Pallet
CREATE VIEW IF NOT EXISTS pallets_view AS
SELECT
pallet_id,
cookie_name,
order_id,
status,
production_date,
delivery_date
FROM pallets
JOIN cookies ON pallets.cookie_id = cookies.cookie_id;
PRAGMA foreign_keys = ON;