194 lines
5.8 KiB
SQL
Executable File
194 lines
5.8 KiB
SQL
Executable File
-- 01_schema.sql
|
|
|
|
-- CREAZIONE RELAZIONE UTENTE
|
|
CREATE TABLE utente (
|
|
idUtente INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
|
nome VARCHAR(30) NOT NULL,
|
|
cognome VARCHAR(30) NOT NULL,
|
|
email VARCHAR(255) NOT NULL UNIQUE,
|
|
passwordHash VARCHAR(255) NOT NULL,
|
|
attivo TINYINT(1) NOT NULL
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE PROPRIETARIO
|
|
CREATE TABLE proprietario (
|
|
idUtente INT PRIMARY KEY NOT NULL,
|
|
|
|
FOREIGN KEY (idUtente) REFERENCES utente (idUtente)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE PERSONALE
|
|
CREATE TABLE personale (
|
|
idUtente INT PRIMARY KEY NOT NULL,
|
|
dataRegistrazione TIMESTAMP NOT NULL,
|
|
|
|
FOREIGN KEY (idUtente) REFERENCES utente (idUtente)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE CLIENTE
|
|
CREATE TABLE cliente (
|
|
idUtente INT PRIMARY KEY NOT NULL,
|
|
telefono VARCHAR(20) NOT NULL,
|
|
|
|
FOREIGN KEY (idUtente) REFERENCES utente (idUtente)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE PROVINCIA
|
|
CREATE TABLE provincia (
|
|
idProvincia INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
nome VARCHAR(45) NOT NULL,
|
|
sigla VARCHAR(45) NOT NULL
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE COMUNE
|
|
CREATE TABLE comune (
|
|
idComune INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
nome VARCHAR(45) NOT NULL,
|
|
idProvincia INT NOT NULL,
|
|
|
|
FOREIGN KEY (idProvincia) REFERENCES provincia(idProvincia)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE INDIRIZZO
|
|
CREATE TABLE indirizzo (
|
|
idIndirizzo INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
via VARCHAR(45) NOT NULL,
|
|
numeroCivico VARCHAR (10) NOT NULL,
|
|
predefinito TINYINT(1) NOT NULL DEFAULT 0,
|
|
idComune INT NOT NULL,
|
|
idCliente INT NOT NULL,
|
|
|
|
FOREIGN KEY (idComune) REFERENCES comune (idComune),
|
|
FOREIGN KEY (idCliente) REFERENCES cliente (idUtente)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE ORDINE
|
|
CREATE TABLE ordine (
|
|
idOrdine INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
dataOraCreazione TIMESTAMP NOT NULL,
|
|
dataOraConferma TIMESTAMP,
|
|
dataOraAnnullamento TIMESTAMP,
|
|
statoConferma ENUM('bozza','confermato','annullato') NOT NULL,
|
|
orarioConsegna TIMESTAMP,
|
|
totale DECIMAL(10,2) NOT NULL,
|
|
tempoStimatoConsegna INT,
|
|
idCliente INT NOT NULL,
|
|
idIndirizzo INT NOT NULL,
|
|
|
|
FOREIGN KEY (idCliente) REFERENCES cliente (idUtente),
|
|
FOREIGN KEY (idIndirizzo) REFERENCES indirizzo (idIndirizzo),
|
|
|
|
CHECK (dataOraCreazione <= dataOraConferma),
|
|
CHECK (dataOraConferma <= orarioConsegna),
|
|
CHECK (totale >= 0),
|
|
CHECK (tempoStimatoConsegna >= 0),
|
|
CHECK (statoConferma <> 'confermato' OR dataOraConferma IS NOT NULL) -- se è confermato → dataOraConferma non può essere NULL
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE STATO ORDINE
|
|
CREATE TABLE statoOrdine (
|
|
idStatoOrdine INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
nomeStato VARCHAR(30) NOT NULL,
|
|
posizione TINYINT NOT NULL
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE STORICO STATO
|
|
CREATE TABLE storicoStato (
|
|
idStoricoStato INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
timestamp TIMESTAMP NOT NULL,
|
|
idOrdine INT NOT NULL,
|
|
idStatoOrdine INT NOT NULL,
|
|
idPersonale INT,
|
|
|
|
FOREIGN KEY (idOrdine) REFERENCES ordine (idOrdine),
|
|
FOREIGN KEY (idStatoOrdine) REFERENCES statoOrdine (idStatoOrdine),
|
|
FOREIGN KEY (idPersonale) REFERENCES personale (idUtente)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE INGREDIENTE
|
|
CREATE TABLE ingrediente (
|
|
idIngrediente INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
nome VARCHAR(100) NOT NULL,
|
|
unitaMisura VARCHAR(20) NOT NULL
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE PRODOTTO
|
|
CREATE TABLE prodotto (
|
|
idProdotto INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
nome VARCHAR(100) NOT NULL,
|
|
descrizione TEXT NOT NULL,
|
|
prezzoBase DECIMAL(10,2) NOT NULL,
|
|
tempoPreparazione INT NOT NULL,
|
|
proceduraPreparazione TEXT NOT NULL,
|
|
disponibile TINYINT(1) NOT NULL DEFAULT 0,
|
|
|
|
CHECK (prezzoBase >= 0),
|
|
CHECK (tempoPreparazione >= 0)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE PRODOTTOUSAINGREDIENTE
|
|
CREATE TABLE prodottoUsaIngrediente (
|
|
quantita DECIMAL(10,3) NOT NULL,
|
|
idProdotto INT NOT NULL,
|
|
idIngrediente INT NOT NULL,
|
|
|
|
PRIMARY KEY (idProdotto, idIngrediente),
|
|
|
|
FOREIGN KEY (idProdotto) REFERENCES prodotto (idProdotto),
|
|
FOREIGN KEY (idIngrediente) REFERENCES ingrediente (idIngrediente),
|
|
|
|
CHECK (quantita > 0)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE GRUPPO ECLUSIONE
|
|
CREATE TABLE gruppoEsclusione (
|
|
idGruppoEsclusione INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
nome VARCHAR(45) NOT NULL,
|
|
idProdotto INT NOT NULL,
|
|
|
|
FOREIGN KEY (idProdotto) REFERENCES prodotto (idProdotto)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE CARATTERISTICA
|
|
CREATE TABLE caratteristica (
|
|
idCaratteristica INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
nome VARCHAR(100) NOT NULL,
|
|
descrizione TEXT NOT NULL,
|
|
differenzaPrezzo DECIMAL(10,2) NOT NULL,
|
|
predefinita TINYINT(1) DEFAULT 0 NOT NULL,
|
|
disponibile TINYINT(1) DEFAULT 0 NOT NULL,
|
|
idGruppoEsclusione INT, -- Una caratteristica può appartenere o no ad un gruppo di eclusione
|
|
idProdotto INT NOT NULL,
|
|
|
|
FOREIGN KEY (idGruppoEsclusione) REFERENCES gruppoEsclusione (idGruppoEsclusione),
|
|
FOREIGN KEY (idProdotto) REFERENCES prodotto (idProdotto),
|
|
|
|
CHECK (differenzaPrezzo >= 0)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE RIGAORDINE
|
|
CREATE TABLE rigaOrdine (
|
|
idRigaOrdine INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
|
|
quantita TINYINT NOT NULL,
|
|
prezzoBaseApplicato DECIMAL(10,2) NOT NULL,
|
|
idOrdine INT NOT NULL,
|
|
idProdotto INT NOT NULL,
|
|
|
|
FOREIGN KEY (idOrdine) REFERENCES ordine (idOrdine),
|
|
FOREIGN KEY (idProdotto) REFERENCES prodotto (idProdotto),
|
|
|
|
CHECK (quantita > 0),
|
|
CHECK (prezzoBaseApplicato >= 0)
|
|
);
|
|
|
|
-- CREAZIONE RELAZIONE RIGAORDINESELEZIONACARATTERISTICA
|
|
CREATE TABLE rigaOrdineSelezionaCaratteristica (
|
|
idCaratteristica INT NOT NULL,
|
|
idRigaOrdine INT NOT NULL,
|
|
differenzaPrezzoApplicata DECIMAL(10,2) NOT NULL,
|
|
|
|
PRIMARY KEY (idCaratteristica, idRigaOrdine),
|
|
|
|
FOREIGN KEY (idCaratteristica) REFERENCES caratteristica (idCaratteristica),
|
|
FOREIGN KEY (idRigaOrdine) REFERENCES rigaOrdine (idRigaOrdine)
|
|
); |