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.
125 lines
3.0 KiB
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; |