Queer European MD passionate about IT

schema_concettuale.tex 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. % !TEX root = ../main.tex
  2. \paragraph{Elenco degli ingredienti disponibili}
  3. *l* committente ha chiesto espressamente l'elenco degli ingredienti disponibili.
  4. Tuttavia, questo è calcolabile a partire dagli acquisti e dalle produzioni.
  5. Ho convinto *l* committente a non memorizzare separatamente l'inventario degli
  6. ingredienti, rassicurandol* che avrei fornito una vista logica ``Inventario".
  7. \begin{lstlisting}[style=SQLu][float,floatplacement=H]
  8. CREATE VIEW IngredientiAcquistatiTotali (IdIngrediente, Ingrediente,
  9. Totale)
  10. AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
  11. SUM(a.Quantità) Totale
  12. FROM Acquisti a
  13. JOIN Ingredienti i ON i.IdIngrediente = a.IdIngrediente
  14. GROUP BY i.IdIngrediente, i.Descrizione)
  15. CREATE VIEW IngredientiInUso (IdIngrediente, Ingrediente, InUso)
  16. AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
  17. SUM(ir.Quantità) InUso
  18. FROM IngredientiRicette ir
  19. JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
  20. JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
  21. WHERE p.Stato IS NULL
  22. GROUP BY i.IdIngrediente, i.Descrizione)
  23. CREATE VIEW IngredientiUsati (IdIngrediente, Ingrediente,
  24. QuantitàUsata)
  25. AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
  26. SUM(ir.Quantità) Usati
  27. FROM IngredientiRicette ir
  28. JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
  29. JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
  30. WHERE p.Stato = 0
  31. GROUP BY i.IdIngrediente, i.Descrizione)
  32. CREATE VIEW Inventario (IdIngrediente, Ingrediente, QuantitàTotale,
  33. QuantitàDisponibile)
  34. AS (SELECT iat.IdIngrediente IdIngrediente, iat.Ingrediente Ingrediente,
  35. (iat.Totale - COALESCE(iu.Usati, 0)) QuantitàTotale,
  36. (iat.Totale - COALESCE(iu.Usati, 0)
  37. - COALESCE(iiu.InUso, 0)) QuantitàDisponibile
  38. FROM IngredientiAcquistatiTotali iat
  39. LEFT JOIN IngredientiUsati iu
  40. ON iu.idIngrediente = iat.IdIngrediente
  41. LEFT JOIN IngredientiInUso iiu
  42. ON iiu.idIngrediente = iat.IdIngrediente
  43. WHERE iat.Totale - COALESCE(iu.Usati, 0) > 0)
  44. \end{lstlisting}
  45. Ogni volta che si inizia una produzione, l'applicazione controlla che la
  46. quantità di ingredienti disponibili superi la quantità degli ingredienti
  47. necessari alla preparazione.
  48. L'applicazione può anche mostrare una ``lista della spesa" basandosi su ricette
  49. che si vogliono preparare e sulla vista inventario.
  50. L'applicazione mostrerà ad ogni birrai* solo le ricette di cui è aut*r* o di un
  51. birrificio per cui lavora.
  52. \begin{minipage}{\linewidth}
  53. \paragraph{Vincoli non catturati graficamente}
  54. \begin{itemize}
  55. \item Il tipo di ingrediente determina l'unità di misura.
  56. Esiste un breve elenco di tipi ingredienti disponibili con la relativa unità di
  57. misura.
  58. Non ho creato una classe ``TipiIngredienti" per contenere il numero di classi,
  59. ma in effetti il tipo determina funzionalmente l'unità di misura ed esistono
  60. pochi tipi, mentre ci sono molti ingredienti per ogni tipo.
  61. \item In ogni produzione, il NumeroBottiglie diviso per 0.5 non deve superare la
  62. CapacitàProduttiva del birrificio.
  63. \end{itemize}
  64. \end{minipage}