2020-05-30 18:37:58 +02:00

193 lines
6.6 KiB
SQL

BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "Acquisti" (
"IdFattura" INTEGER NOT NULL,
"IdIngrediente" INTEGER NOT NULL,
"Quantità" INTEGER NOT NULL,
PRIMARY KEY("IdFattura","IdIngrediente")
);
CREATE TABLE IF NOT EXISTS "Birraie" (
"IdPersona" INTEGER NOT NULL,
"Soprannome" TEXT NOT NULL UNIQUE,
PRIMARY KEY("IdPersona")
);
CREATE TABLE IF NOT EXISTS "Birrifici" (
"IdBirrificio" INTEGER PRIMARY KEY AUTOINCREMENT,
"Nome" TEXT,
"AnnoFondazione" INTEGER,
"Motto" TEXT,
"Stemma" BLOB,
"CapacitàProduttiva" INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS "BirrificiBirraie" (
"IdBirrificio" INTEGER NOT NULL,
"IdBirraia" INTEGER NOT NULL,
PRIMARY KEY("IdBirrificio","IdBirraia")
);
CREATE TABLE IF NOT EXISTS "Clienti" (
"IdPersona" INTEGER NOT NULL,
"IndirizzoSpedizione" TEXT NOT NULL,
PRIMARY KEY("IdPersona")
);
CREATE TABLE IF NOT EXISTS "Fatture" (
"IdFattura" INTEGER PRIMARY KEY AUTOINCREMENT,
"IdBirrificio" INTEGER NOT NULL,
"IdFornitore" INTEGER NOT NULL,
"Data" TEXT NOT NULL,
"NumeroFattura" INTEGER NOT NULL UNIQUE,
"Importo" INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS "Fornitori" (
"IdFornitore" INTEGER PRIMARY KEY AUTOINCREMENT,
"RagioneSociale" TEXT NOT NULL UNIQUE,
"PartitaIva" INTEGER NOT NULL UNIQUE,
"Indirizzo" TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS "Ingredienti" (
"IdIngrediente" INTEGER PRIMARY KEY AUTOINCREMENT,
"IdTipo" INTEGER NOT NULL,
"Descrizione" TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS "IngredientiRicette" (
"IdRicetta" INTEGER NOT NULL,
"IdIngrediente" INTEGER NOT NULL,
"Quantità" INTEGER NOT NULL,
PRIMARY KEY("IdRicetta","IdIngrediente")
);
CREATE TABLE IF NOT EXISTS "Note" (
"IdNota" INTEGER PRIMARY KEY AUTOINCREMENT,
"IdProduzione" INTEGER NOT NULL,
"Testo" TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS "NoteDegustazione" (
"IdNota" INTEGER NOT NULL,
"Giudizio" INTEGER NOT NULL,
PRIMARY KEY("IdNota")
);
CREATE TABLE IF NOT EXISTS "Persone" (
"IdPersona" INTEGER PRIMARY KEY AUTOINCREMENT,
"Nome" TEXT NOT NULL,
"Cognome" TEXT NOT NULL,
"Email" TEXT NOT NULL,
"CodiceFiscale" TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS "Prenotazioni" (
"IdCliente" INTEGER NOT NULL,
"IdProduzione" INTEGER NOT NULL,
"Stato" INTEGER,
"Quantità" INTEGER NOT NULL,
PRIMARY KEY("IdProduzione","IdCliente")
);
CREATE TABLE IF NOT EXISTS "Produzioni" (
"IdProduzione" INTEGER PRIMARY KEY AUTOINCREMENT,
"IdRicetta" INTEGER NOT NULL,
"DataProduzione" TEXT NOT NULL,
"NumeroLotto" INTEGER NOT NULL,
"Stato" INTEGER,
"NumeroBottiglie" INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS "Ricette" (
"IdRicetta" INTEGER PRIMARY KEY AUTOINCREMENT,
"IdBirrificio" INTEGER NOT NULL,
"IdCreatrice" INTEGER NOT NULL,
"IdRicettaMadre" INTEGER,
"Nome" TEXT NOT NULL,
"DataCreazione" TEXT NOT NULL,
"Stato" INTEGER
);
CREATE TABLE IF NOT EXISTS "TipiIngredienti" (
"IdTipo" INTEGER PRIMARY KEY AUTOINCREMENT,
"Tipo" TEXT NOT NULL,
"UnitàDiMisura" TEXT NOT NULL
);
CREATE VIEW Query_a
AS SELECT r.IdRicetta, r.Nome
FROM Ricette r
JOIN Persone p ON p.IdPersona = r.IdCreatrice
WHERE p.Nome = 'Giovanni';
CREATE VIEW Query_b
AS SELECT fa.IdBirrificio,
COUNT(DISTINCT fa.IdFornitore) DiversiFornitori
FROM Fatture fa
WHERE fa.Data >= '2020-01-01'
GROUP BY fa.IdBirrificio
HAVING COUNT(DISTINCT fa.IdFornitore) >= 3
ORDER BY COUNT(DISTINCT fa.IdFornitore) DESC;
CREATE VIEW Query_c
AS SELECT fo.RagioneSociale, SUM(fa.Importo) ImportoTotale,
AVG(fa.Importo) ImportoMedio
FROM Fornitori fo
JOIN Fatture fa ON fa.IdFornitore = fo.IdFornitore
JOIN Birrifici b ON b.IdBirrificio = fa.IdBirrificio
WHERE b.Nome = 'Pirati Rossi'
GROUP BY fo.IdFornitore, fo.RagioneSociale
HAVING SUM(fa.Importo) > 10;
CREATE VIEW Query_d
AS SELECT b.Soprannome
FROM Birraie b
WHERE EXISTS (SELECT *
FROM Ricette r
WHERE r.IdCreatrice = b.IdPersona);
CREATE VIEW Query_e
AS SELECT DISTINCT p1.IdPersona, p1.Nome, p1.Cognome
FROM Persone p1
JOIN Prenotazioni pre1
ON pre1.IdCliente = p1.IdPersona
JOIN Produzioni pro1
ON pro1.IdProduzione = pre1.IdProduzione
JOIN Ricette r1
ON r1.IdRicetta = pro1.IdRicetta
WHERE NOT EXISTS (SELECT *
FROM Prenotazioni pre2
JOIN Produzioni pro2
ON pro2.IdProduzione = pre2.IdProduzione
JOIN Ricette r2 ON r2.IdRicetta = pro2.IdRicetta
WHERE pre2.IdCliente = pre1.IdCliente
AND r2.IdBirrificio <> r1.IdBirrificio);
CREATE VIEW Query_f
AS SELECT r1.IdBirrificio, pro1.NumeroLotto
FROM Produzioni pro1
JOIN Ricette r1 ON r1.IdRicetta = pro1.IdRicetta
WHERE pro1.NumeroLotto = (SELECT MAX(pro2.NumeroLotto)
FROM Produzioni pro2
JOIN Ricette r2
ON r2.IdRicetta = pro2.IdRicetta
WHERE r2.IdBirrificio = r1.IdBirrificio);
CREATE VIEW IngredientiUsati (IdIngrediente, Ingrediente,
Usati)
AS SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
SUM(ir.Quantità) Usati
FROM IngredientiRicette ir
JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
WHERE p.Stato = 0
GROUP BY i.IdIngrediente, i.Descrizione;
CREATE VIEW IngredientiInUso (IdIngrediente, Ingrediente, InUso)
AS SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
SUM(ir.Quantità) InUso
FROM IngredientiRicette ir
JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
WHERE p.Stato IS NULL
GROUP BY i.IdIngrediente, i.Descrizione;
CREATE VIEW IngredientiAcquistatiTotali (IdIngrediente, Ingrediente,
Totale)
AS SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
SUM(a.Quantità) Totale
FROM Acquisti a
JOIN Ingredienti i ON i.IdIngrediente = a.IdIngrediente
GROUP BY i.IdIngrediente, i.Descrizione;
CREATE VIEW Inventario (IdIngrediente, Ingrediente, QuantitàTotale,
QuantitàDisponibile)
AS SELECT iat.IdIngrediente IdIngrediente,
iat.Ingrediente Ingrediente,
(iat.Totale - COALESCE(iu.Usati, 0)) QuantitàTotale,
(iat.Totale - COALESCE(iu.Usati, 0)
- COALESCE(iiu.InUso, 0)) QuantitàDisponibile
FROM IngredientiAcquistatiTotali iat
LEFT JOIN IngredientiUsati iu
ON iu.IdIngrediente = iat.IdIngrediente
LEFT JOIN IngredientiInUso iiu
ON iiu.IdIngrediente = iat.IdIngrediente
WHERE iat.Totale - COALESCE(iu.Usati, 0) > 0;
COMMIT;