Second assignment.

This commit is contained in:
2020-05-30 15:28:21 +02:00
parent 796cbd7140
commit 4c4ffa048f
15 changed files with 1131 additions and 45 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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