You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
quartermaster/internal/postgres/migrations/000001_initial_setup.up.sql

125 lines
3.0 KiB

BEGIN;
CREATE TABLE IF NOT EXISTS locations (
id SERIAL PRIMARY KEY ,
name VARCHAR(30) NOT NULL,
description TEXT NOT NULL,
parent_id INTEGER,
CONSTRAINT fk_parent
FOREIGN KEY (parent_id)
REFERENCES locations (id)
ON DELETE SET NULL
);
CREATE TABLE IF NOT EXISTS groups (
id SERIAL PRIMARY KEY ,
name VARCHAR(30) NOT NULL,
description TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS categories (
id SERIAL PRIMARY KEY ,
name VARCHAR(30) NOT NULL,
description TEXT NOT NULL
);
CREATE TYPE unit AS ENUM (
'Teaspoon',
'Tablespoon',
'Cup',
'Ounce',
'Gram',
'Pound'
);
CREATE TABLE IF NOT EXISTS nutrition (
id SERIAL PRIMARY KEY ,
unit unit NOT NULL,
calories FLOAT NOT NULL,
fat FLOAT NOT NULL,
sodium FLOAT NOT NULL,
protein FLOAT NOT NULL
);
CREATE TYPE vitamin AS ENUM (
'A',
'B',
'C',
'Iron'
);
CREATE TABLE IF NOT EXISTS vitamins (
nutrition_id INTEGER NOT NULL,
vitamin vitamin NOT NULL,
amount FLOAT NOT NULL,
CONSTRAINT fk_nutrition
FOREIGN KEY (nutrition_id)
REFERENCES nutrition(id)
ON DELETE CASCADE,
CONSTRAINT uniq_nutrition_vitamin
UNIQUE (nutrition_id, vitamin)
);
CREATE TABLE IF NOT EXISTS items (
id SERIAL PRIMARY KEY ,
name VARCHAR(30) NOT NULL,
description TEXT NOT NULL,
size FLOAT NOT NULL,
unit unit NOT NULL,
barcode VARCHAR(100),
nutrition_id INTEGER,
CONSTRAINT fk_item_nutrition
FOREIGN KEY (nutrition_id)
REFERENCES nutrition (id)
ON DELETE SET NULL,
CONSTRAINT uniq_barcode
UNIQUE (barcode)
);
CREATE TABLE IF NOT EXISTS x_items_locations (
item_id INTEGER NOT NULL,
location_id INTEGER NOT NULL,
count INTEGER NOT NULL,
CONSTRAINT fk_item
FOREIGN KEY (item_id)
REFERENCES items (id)
ON DELETE CASCADE,
CONSTRAINT fk_location
FOREIGN KEY (location_id)
REFERENCES locations (id)
ON DELETE CASCADE,
CONSTRAINT uniq_item_location
UNIQUE (item_id, location_id)
);
CREATE TABLE IF NOT EXISTS x_items_categories (
item_id INTEGER NOT NULL,
category_id INTEGER NOT NULL,
CONSTRAINT fk_item
FOREIGN KEY (item_id)
REFERENCES items (id)
ON DELETE CASCADE,
CONSTRAINT fk_category
FOREIGN KEY (category_id)
REFERENCES categories (id)
ON DELETE CASCADE,
CONSTRAINT uniq_item_category
UNIQUE (item_id, category_id)
);
CREATE TABLE IF NOT EXISTS x_items_groups (
item_id INTEGER NOT NULL,
group_id INTEGER NOT NULL,
CONSTRAINT fk_item
FOREIGN KEY (item_id)
REFERENCES items (id)
ON DELETE CASCADE,
CONSTRAINT fk_group
FOREIGN KEY (group_id)
REFERENCES groups (id)
ON DELETE CASCADE,
CONSTRAINT uniq_item_group
UNIQUE (item_id, group_id)
);
COMMIT;