Queer European MD passionate about IT

schema.sql 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. BEGIN TRANSACTION;
  2. CREATE TABLE IF NOT EXISTS "Acquisti" (
  3. "IdFattura" INTEGER NOT NULL,
  4. "IdIngrediente" INTEGER NOT NULL,
  5. "Quantità" INTEGER NOT NULL,
  6. PRIMARY KEY("IdFattura","IdIngrediente")
  7. );
  8. CREATE TABLE IF NOT EXISTS "Birraie" (
  9. "IdPersona" INTEGER NOT NULL,
  10. "Soprannome" TEXT NOT NULL UNIQUE,
  11. PRIMARY KEY("IdPersona")
  12. );
  13. CREATE TABLE IF NOT EXISTS "Birrifici" (
  14. "IdBirrificio" INTEGER PRIMARY KEY AUTOINCREMENT,
  15. "Nome" TEXT,
  16. "AnnoFondazione" INTEGER,
  17. "Motto" TEXT,
  18. "Stemma" BLOB,
  19. "CapacitàProduttiva" INTEGER NOT NULL
  20. );
  21. CREATE TABLE IF NOT EXISTS "BirrificiBirraie" (
  22. "IdBirrificio" INTEGER NOT NULL,
  23. "IdBirraia" INTEGER NOT NULL,
  24. PRIMARY KEY("IdBirrificio","IdBirraia")
  25. );
  26. CREATE TABLE IF NOT EXISTS "Clienti" (
  27. "IdPersona" INTEGER NOT NULL,
  28. "IndirizzoSpedizione" TEXT NOT NULL,
  29. PRIMARY KEY("IdPersona")
  30. );
  31. CREATE TABLE IF NOT EXISTS "Fatture" (
  32. "IdFattura" INTEGER PRIMARY KEY AUTOINCREMENT,
  33. "IdBirrificio" INTEGER NOT NULL,
  34. "IdFornitore" INTEGER NOT NULL,
  35. "Data" TEXT NOT NULL,
  36. "NumeroFattura" INTEGER NOT NULL UNIQUE,
  37. "Importo" INTEGER NOT NULL
  38. );
  39. CREATE TABLE IF NOT EXISTS "Fornitori" (
  40. "IdFornitore" INTEGER PRIMARY KEY AUTOINCREMENT,
  41. "RagioneSociale" TEXT NOT NULL UNIQUE,
  42. "PartitaIva" INTEGER NOT NULL UNIQUE,
  43. "Indirizzo" TEXT NOT NULL
  44. );
  45. CREATE TABLE IF NOT EXISTS "Ingredienti" (
  46. "IdIngrediente" INTEGER PRIMARY KEY AUTOINCREMENT,
  47. "IdTipo" INTEGER NOT NULL,
  48. "Descrizione" TEXT NOT NULL
  49. );
  50. CREATE TABLE IF NOT EXISTS "IngredientiRicette" (
  51. "IdRicetta" INTEGER NOT NULL,
  52. "IdIngrediente" INTEGER NOT NULL,
  53. "Quantità" INTEGER NOT NULL,
  54. PRIMARY KEY("IdRicetta","IdIngrediente")
  55. );
  56. CREATE TABLE IF NOT EXISTS "Note" (
  57. "IdNota" INTEGER PRIMARY KEY AUTOINCREMENT,
  58. "IdProduzione" INTEGER NOT NULL,
  59. "Testo" TEXT NOT NULL
  60. );
  61. CREATE TABLE IF NOT EXISTS "NoteDegustazione" (
  62. "IdNota" INTEGER NOT NULL,
  63. "Giudizio" INTEGER NOT NULL,
  64. PRIMARY KEY("IdNota")
  65. );
  66. CREATE TABLE IF NOT EXISTS "Persone" (
  67. "IdPersona" INTEGER PRIMARY KEY AUTOINCREMENT,
  68. "Nome" TEXT NOT NULL,
  69. "Cognome" TEXT NOT NULL,
  70. "Email" TEXT NOT NULL,
  71. "CodiceFiscale" TEXT NOT NULL UNIQUE
  72. );
  73. CREATE TABLE IF NOT EXISTS "Prenotazioni" (
  74. "IdCliente" INTEGER NOT NULL,
  75. "IdProduzione" INTEGER NOT NULL,
  76. "Stato" INTEGER,
  77. "Quantità" INTEGER NOT NULL,
  78. PRIMARY KEY("IdProduzione","IdCliente")
  79. );
  80. CREATE TABLE IF NOT EXISTS "Produzioni" (
  81. "IdProduzione" INTEGER PRIMARY KEY AUTOINCREMENT,
  82. "IdRicetta" INTEGER NOT NULL,
  83. "DataProduzione" TEXT NOT NULL,
  84. "NumeroLotto" INTEGER NOT NULL,
  85. "Stato" INTEGER,
  86. "NumeroBottiglie" INTEGER NOT NULL
  87. );
  88. CREATE TABLE IF NOT EXISTS "Ricette" (
  89. "IdRicetta" INTEGER PRIMARY KEY AUTOINCREMENT,
  90. "IdBirrificio" INTEGER NOT NULL,
  91. "IdCreatrice" INTEGER NOT NULL,
  92. "IdRicettaMadre" INTEGER,
  93. "Nome" TEXT NOT NULL,
  94. "DataCreazione" TEXT NOT NULL,
  95. "Stato" INTEGER
  96. );
  97. CREATE TABLE IF NOT EXISTS "TipiIngredienti" (
  98. "IdTipo" INTEGER PRIMARY KEY AUTOINCREMENT,
  99. "Tipo" TEXT NOT NULL,
  100. "UnitàDiMisura" TEXT NOT NULL
  101. );
  102. CREATE VIEW Query_a
  103. AS SELECT r.IdRicetta, r.Nome
  104. FROM Ricette r
  105. JOIN Persone p ON p.IdPersona = r.IdCreatrice
  106. WHERE p.Nome = 'Giovanni';
  107. CREATE VIEW Query_b
  108. AS SELECT fa.IdBirrificio,
  109. COUNT(DISTINCT fa.IdFornitore) DiversiFornitori
  110. FROM Fatture fa
  111. WHERE fa.Data >= '2020-01-01'
  112. GROUP BY fa.IdBirrificio
  113. HAVING COUNT(DISTINCT fa.IdFornitore) >= 3
  114. ORDER BY COUNT(DISTINCT fa.IdFornitore) DESC;
  115. CREATE VIEW Query_c
  116. AS SELECT fo.RagioneSociale, SUM(fa.Importo) ImportoTotale,
  117. AVG(fa.Importo) ImportoMedio
  118. FROM Fornitori fo
  119. JOIN Fatture fa ON fa.IdFornitore = fo.IdFornitore
  120. JOIN Birrifici b ON b.IdBirrificio = fa.IdBirrificio
  121. WHERE b.Nome = 'Pirati Rossi'
  122. GROUP BY fo.IdFornitore, fo.RagioneSociale
  123. HAVING SUM(fa.Importo) > 10;
  124. CREATE VIEW Query_d
  125. AS SELECT b.Soprannome
  126. FROM Birraie b
  127. WHERE EXISTS (SELECT *
  128. FROM Ricette r
  129. WHERE r.IdCreatrice = b.IdPersona);
  130. CREATE VIEW Query_e
  131. AS SELECT DISTINCT p1.IdPersona, p1.Nome, p1.Cognome
  132. FROM Persone p1
  133. JOIN Prenotazioni pre1
  134. ON pre1.IdCliente = p1.IdPersona
  135. JOIN Produzioni pro1
  136. ON pro1.IdProduzione = pre1.IdProduzione
  137. JOIN Ricette r1
  138. ON r1.IdRicetta = pro1.IdRicetta
  139. WHERE NOT EXISTS (SELECT *
  140. FROM Prenotazioni pre2
  141. JOIN Produzioni pro2
  142. ON pro2.IdProduzione = pre2.IdProduzione
  143. JOIN Ricette r2 ON r2.IdRicetta = pro2.IdRicetta
  144. WHERE pre2.IdCliente = pre1.IdCliente
  145. AND r2.IdBirrificio <> r1.IdBirrificio);
  146. CREATE VIEW Query_f
  147. AS SELECT r1.IdBirrificio, pro1.NumeroLotto
  148. FROM Produzioni pro1
  149. JOIN Ricette r1 ON r1.IdRicetta = pro1.IdRicetta
  150. WHERE pro1.NumeroLotto = (SELECT MAX(pro2.NumeroLotto)
  151. FROM Produzioni pro2
  152. JOIN Ricette r2
  153. ON r2.IdRicetta = pro2.IdRicetta
  154. WHERE r2.IdBirrificio = r1.IdBirrificio);
  155. CREATE VIEW IngredientiUsati (IdIngrediente, Ingrediente,
  156. Usati)
  157. AS SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
  158. SUM(ir.Quantità) Usati
  159. FROM IngredientiRicette ir
  160. JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
  161. JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
  162. WHERE p.Stato = 0
  163. GROUP BY i.IdIngrediente, i.Descrizione;
  164. CREATE VIEW IngredientiInUso (IdIngrediente, Ingrediente, InUso)
  165. AS SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
  166. SUM(ir.Quantità) InUso
  167. FROM IngredientiRicette ir
  168. JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
  169. JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
  170. WHERE p.Stato IS NULL
  171. GROUP BY i.IdIngrediente, i.Descrizione;
  172. CREATE VIEW IngredientiAcquistatiTotali (IdIngrediente, Ingrediente,
  173. Totale)
  174. AS SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
  175. SUM(a.Quantità) Totale
  176. FROM Acquisti a
  177. JOIN Ingredienti i ON i.IdIngrediente = a.IdIngrediente
  178. GROUP BY i.IdIngrediente, i.Descrizione;
  179. CREATE VIEW Inventario (IdIngrediente, Ingrediente, QuantitàTotale,
  180. QuantitàDisponibile)
  181. AS SELECT iat.IdIngrediente IdIngrediente,
  182. iat.Ingrediente Ingrediente,
  183. (iat.Totale - COALESCE(iu.Usati, 0)) QuantitàTotale,
  184. (iat.Totale - COALESCE(iu.Usati, 0)
  185. - COALESCE(iiu.InUso, 0)) QuantitàDisponibile
  186. FROM IngredientiAcquistatiTotali iat
  187. LEFT JOIN IngredientiUsati iu
  188. ON iu.IdIngrediente = iat.IdIngrediente
  189. LEFT JOIN IngredientiInUso iiu
  190. ON iiu.IdIngrediente = iat.IdIngrediente
  191. WHERE iat.Totale - COALESCE(iu.Usati, 0) > 0;
  192. COMMIT;