123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- 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;
|