|
@@ -0,0 +1,192 @@
|
|
|
+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;
|