first commit
This commit is contained in:
Executable
+6
@@ -0,0 +1,6 @@
|
||||
-- 00_database.sql
|
||||
|
||||
DROP DATABASE IF EXISTS delivery; -- Canellazione del DATABASE se esiste
|
||||
CREATE DATABASE delivery; -- Creazione del DATABASE
|
||||
|
||||
USE delivery; -- Selezione del DATABASE
|
||||
Executable
+194
@@ -0,0 +1,194 @@
|
||||
-- 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)
|
||||
);
|
||||
Executable
+1149
File diff suppressed because it is too large
Load Diff
Executable
+28
@@ -0,0 +1,28 @@
|
||||
|
||||
-- LOGIN
|
||||
|
||||
-- Ricerca di un utente tramite email
|
||||
SELECT idUtente, nome, cognome, email, passwordHash, attivo
|
||||
FROM utente
|
||||
WHERE email = ?;
|
||||
|
||||
-- Determinazione del ruolo dell'utente
|
||||
SELECT
|
||||
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM cliente
|
||||
WHERE idUtente = ?
|
||||
) AS cliente,
|
||||
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM personale
|
||||
WHERE idUtente = ?
|
||||
) AS personale,
|
||||
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM proprietario
|
||||
WHERE idUtente = ?
|
||||
) AS proprietario;
|
||||
Executable
Executable
+2
@@ -0,0 +1,2 @@
|
||||
[+] Preferiti: Il cliente può avere dei prodotti preferiti
|
||||
[+] Immagini
|
||||
Reference in New Issue
Block a user