1
0
db-labs/lab1/script.ddl

156 lines
4.0 KiB
SQL

#@(#) script.ddl
DROP TABLE IF EXISTS FACTORY_SUPPORTS_PROCESSES;
DROP TABLE IF EXISTS RECIPE_NEEDS_PROCESSES;
DROP TABLE IF EXISTS INGREDIENT_PROVIDER;
DROP TABLE IF EXISTS ICE_CREAM_RECIPE_INSTRUCTION;
DROP TABLE IF EXISTS ICE_CREAM_RECIPE_INGREDIENT;
DROP TABLE IF EXISTS ICE_CREAM_PRODUCT;
DROP TABLE IF EXISTS INGREDIENT;
DROP TABLE IF EXISTS ICE_CREAM_RECIPE;
DROP TABLE IF EXISTS FACTORY;
DROP TABLE IF EXISTS PROVIDER;
DROP TABLE IF EXISTS PROCESS;
DROP TABLE IF EXISTS NUTRIENT;
DROP TABLE IF EXISTS MANAGER;
CREATE TABLE MANAGER
(
ID int NOT NULL,
FIRST_NAME varchar (255) NOT NULL,
SURNAME varchar (255) NOT NULL,
PHONE_NUMBER varchar (255) NULL,
TITLE varchar (255) NOT NULL,
EMAIL varchar (255) NULL,
PRIMARY KEY(ID)
);
CREATE TABLE NUTRIENT
(
ID int NOT NULL,
FAT float NOT NULL,
CHOLESTEROL float NOT NULL,
SODIUM float NOT NULL,
CARBOHYDRATES float NOT NULL,
PROTEIN float NOT NULL,
CALORIES float NOT NULL,
SERVING_SIZE float NOT NULL,
PRIMARY KEY(ID)
);
CREATE TABLE PROCESS
(
ID int NOT NULL,
NAME varchar (255) NOT NULL,
SIZE float NOT NULL,
PRIMARY KEY(ID)
);
CREATE TABLE PROVIDER
(
ID int NOT NULL,
NAME varchar (255) NOT NULL,
EMAIL varchar (255) NULL,
PHONE_NUMBER varchar (255) NULL,
HOMEPAGE varchar (255) NULL,
PRIMARY KEY(ID)
);
CREATE TABLE FACTORY
(
ID int NOT NULL,
NAME varchar (255) NOT NULL,
LOCATION varchar (255) NOT NULL,
FLOOR_SIZE float NOT NULL,
FK_MANAGER_ID int NOT NULL,
PRIMARY KEY(ID),
UNIQUE(FK_MANAGER_ID),
FOREIGN KEY(FK_MANAGER_ID) REFERENCES MANAGER (ID)
);
CREATE TABLE ICE_CREAM_RECIPE
(
ID int NOT NULL,
PRICE decimal NOT NULL,
FLAVOUR_NAME varchar (255) NOT NULL,
DESCRIPTION varchar (255) NOT NULL,
FK_NUTRIENT_ID int NOT NULL,
PRIMARY KEY(ID),
UNIQUE(FK_NUTRIENT_ID),
FOREIGN KEY(FK_NUTRIENT_ID) REFERENCES NUTRIENT (ID),
TYPE char (11) CHECK(TYPE in ('DESSERT_ICE', 'ICE_CREAM', 'MILK_ICE', 'SHERBET', 'WATER_ICE', 'SORBET'))
);
CREATE TABLE INGREDIENT
(
ID int NOT NULL,
NAME varchar (255) NOT NULL,
MEASUREMENT_UNITS char (8) NOT NULL,
FK_NUTRIENT_ID int NOT NULL,
PRIMARY KEY(ID),
UNIQUE(FK_NUTRIENT_ID),
FOREIGN KEY(FK_NUTRIENT_ID) REFERENCES NUTRIENT (ID)
);
CREATE TABLE ICE_CREAM_PRODUCT
(
ID int NOT NULL,
PRICE decimal NOT NULL,
NAME varchar (255) NOT NULL,
DESCRIPTION varchar (255) NOT NULL,
ICECREAM_AMOUNT float NOT NULL,
FK_FACTORY_ID int NOT NULL,
FK_ICE_CREAM_RECIPE_ID int NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY(FK_FACTORY_ID) REFERENCES FACTORY (ID),
FOREIGN KEY(FK_ICE_CREAM_RECIPE_ID) REFERENCES ICE_CREAM_RECIPE (ID),
PACKAGING_TYPE char (8) CHECK(PACKAGING_TYPE in ('CONE', 'BOX', 'CUP', 'ON_STICK'))
);
CREATE TABLE ICE_CREAM_RECIPE_INGREDIENT
(
AMOUNT float NOT NULL,
FK_INGREDIENT_ID int NOT NULL,
FK_ICE_CREAM_RECIPE_ID int NOT NULL,
PRIMARY KEY(FK_INGREDIENT_ID, FK_ICE_CREAM_RECIPE_ID),
FOREIGN KEY(FK_INGREDIENT_ID) REFERENCES INGREDIENT (ID),
FOREIGN KEY(FK_ICE_CREAM_RECIPE_ID) REFERENCES ICE_CREAM_RECIPE (ID)
);
CREATE TABLE ICE_CREAM_RECIPE_INSTRUCTION
(
ORDERING int NOT NULL,
CONTENT varchar (255) NOT NULL,
FK_ICE_CREAM_RECIPE_ID int NOT NULL,
PRIMARY KEY(ORDERING, FK_ICE_CREAM_RECIPE_ID),
FOREIGN KEY(FK_ICE_CREAM_RECIPE_ID) REFERENCES ICE_CREAM_RECIPE (ID)
);
CREATE TABLE INGREDIENT_PROVIDER
(
MONTHLY_PRICE decimal NOT NULL,
MONTHLY_SUPPLY float NOT NULL,
FK_INGREDIENT_ID int NOT NULL,
FK_PROVIDER_ID int NOT NULL,
PRIMARY KEY(FK_INGREDIENT_ID, FK_PROVIDER_ID),
FOREIGN KEY(FK_INGREDIENT_ID) REFERENCES INGREDIENT (ID),
FOREIGN KEY(FK_PROVIDER_ID) REFERENCES PROVIDER (ID)
);
CREATE TABLE RECIPE_NEEDS_PROCESSES
(
FK_PROCESS_ID int NOT NULL,
FK_ICE_CREAM_RECIPE_ID int NOT NULL,
PRIMARY KEY(FK_PROCESS_ID, FK_ICE_CREAM_RECIPE_ID),
FOREIGN KEY(FK_PROCESS_ID) REFERENCES PROCESS (ID),
FOREIGN KEY(FK_ICE_CREAM_RECIPE_ID) REFERENCES ICE_CREAM_RECIPE (ID)
);
CREATE TABLE FACTORY_SUPPORTS_PROCESSES
(
FK_PROCESS_ID int NOT NULL,
FK_FACTORY_ID int NOT NULL,
PRIMARY KEY(FK_PROCESS_ID, FK_FACTORY_ID),
FOREIGN KEY(FK_PROCESS_ID) REFERENCES PROCESS (ID),
FOREIGN KEY(FK_FACTORY_ID) REFERENCES FACTORY (ID)
);