Final touches to sql

This commit is contained in:
Imbus 2024-05-05 13:25:49 +02:00
parent b4b12b31a2
commit d0f2bd944d

View file

@ -9,15 +9,9 @@ DROP TABLE IF EXISTS customers;
DROP TABLE IF EXISTS cookies; DROP TABLE IF EXISTS cookies;
-------------------------------------------- --------------------------------------------
-- Recipe/Cookie related tables -- Orders, deliveries and customers
-------------------------------------------- --------------------------------------------
-- Holds the different types of cookies we can make.
CREATE TABLE IF NOT EXISTS cookies (
cookie_id INTEGER PRIMARY KEY,
cookie_name VARCHAR(50) NOT NULL UNIQUE
);
-- Our known customers, may need more fields -- Our known customers, may need more fields
CREATE TABLE IF NOT EXISTS customers ( CREATE TABLE IF NOT EXISTS customers (
customer_id INTEGER PRIMARY KEY, customer_id INTEGER PRIMARY KEY,
@ -29,41 +23,35 @@ CREATE TABLE IF NOT EXISTS customers (
CREATE TABLE IF NOT EXISTS orders ( CREATE TABLE IF NOT EXISTS orders (
order_id INTEGER PRIMARY KEY, order_id INTEGER PRIMARY KEY,
customer_id INT NOT NULL, customer_id INT NOT NULL,
cookie_id INT NOT NULL,
order_date DATE NOT NULL DEFAULT CURRENT_DATE CHECK (order_date >= CURRENT_DATE), order_date DATE NOT NULL DEFAULT CURRENT_DATE CHECK (order_date >= CURRENT_DATE),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id), expected_delivery_date DATE NOT NULL,
FOREIGN KEY (cookie_id) REFERENCES cookies(cookie_id) FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
CREATE TABLE IF NOT EXISTS order_spec (
nbr_pallets INTEGER NOT NULL,
order_id INTEGER NOT NULL,
cookie_id INTEGER NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (cookie_id) REFERENCES cookies(cookie_id),
PRIMARY KEY (order_id, cookie_id)
); );
-------------------------------------------- --------------------------------------------
-- Raw materials, ingredients and recipes -- Cookies, raw_materials and recipes
-------------------------------------------- --------------------------------------------
-- Notes: the unit type can be defined in terms -- Notes: the unit type can be defined in terms
-- of volume or weight instead. Here we choose -- of volume or weight instead. Here we choose
-- to use static si-prefixes in relevant tables. -- to use static si-prefixes in relevant tables.
-- What types of ingredients do we handle. -- Holds the different types of cookies we can make.
-- Not currently used, but kept as an example. CREATE TABLE IF NOT EXISTS cookies (
CREATE TABLE IF NOT EXISTS ingredients ( cookie_id INTEGER PRIMARY KEY,
ingredient_id INTEGER PRIMARY KEY, cookie_name VARCHAR(50) NOT NULL UNIQUE
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? -- What types of raw_materials do we handle.
-- Glues together the cookies and ingredients, a 'recipe'. -- raw_materials quantity tells us amount in stock
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)
);
-- Describes ingredients and stock.
-- This should reference the ingredients table, but we'll keep it simple for now.
CREATE TABLE IF NOT EXISTS raw_materials ( CREATE TABLE IF NOT EXISTS raw_materials (
ingredient_id INTEGER PRIMARY KEY, ingredient_id INTEGER PRIMARY KEY,
ingredient_name VARCHAR(50) NOT NULL UNIQUE, ingredient_name VARCHAR(50) NOT NULL UNIQUE,
@ -71,7 +59,19 @@ CREATE TABLE IF NOT EXISTS raw_materials (
unit VARCHAR(50) NOT NULL CHECK (unit IN ('g', 'ml')) unit VARCHAR(50) NOT NULL CHECK (unit IN ('g', 'ml'))
); );
-- When did we get the ingredients? -- What raw_materials are in what cookies?
-- Glues together the cookies and raw_materials, a 'recipe'.
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 raw_materials(ingredient_id)
);
-- When did we get the raw_materials?
CREATE TABLE IF NOT EXISTS raw_materials_deliveries ( CREATE TABLE IF NOT EXISTS raw_materials_deliveries (
delivery_id INTEGER PRIMARY KEY, delivery_id INTEGER PRIMARY KEY,
ingredient_id INT NOT NULL, ingredient_id INT NOT NULL,
@ -90,11 +90,9 @@ CREATE TABLE IF NOT EXISTS raw_materials_deliveries (
CREATE TABLE IF NOT EXISTS pallets ( CREATE TABLE IF NOT EXISTS pallets (
pallet_id INTEGER PRIMARY KEY, pallet_id INTEGER PRIMARY KEY,
cookie_id INT NOT NULL, cookie_id INT NOT NULL,
order_id INT, -- This should be not null
status VARCHAR(50) NOT NULL CHECK (status IN ('freezer', 'delivered', 'blocked')), status VARCHAR(50) NOT NULL CHECK (status IN ('freezer', 'delivered', 'blocked')),
production_date DATE NOT NULL, production_date DATE NOT NULL DEFAULT NOW,
FOREIGN KEY (cookie_id) REFERENCES cookies(cookie_id) FOREIGN KEY (cookie_id) REFERENCES cookies(cookie_id)
FOREIGN KEY (order_id) REFERENCES orders(order_id)
); );
-- Connects pallets to orders -- Connects pallets to orders
@ -116,7 +114,6 @@ CREATE VIEW IF NOT EXISTS pallets_view AS
SELECT SELECT
pallets.pallet_id, pallets.pallet_id,
cookie_name, cookie_name,
pallets.order_id,
status, status,
production_date, production_date,
delivery_date delivery_date