Queer European MD passionate about IT

schema_logico.tex 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. % !TEX root = ../main.tex
  2. \\
  3. \textbf{Schema logico relazionale in formato testuale}
  4. \begin{lstlisting}[style=SQLu,escapechar=@]
  5. Persone(@\underline{IdPersona}@, Nome, Cognome, Email, CodiceFiscale)
  6. Clienti(@\underline{IdPersona*}@, IndirizzoSpedizione)
  7. Birraie(@\underline{IdPersona*}@, Soprannome)
  8. Birrifici(@\underline{IdBirrificio}@, Nome, AnnoFondazione, Motto, Stemma,
  9. CapacitàProduttiva)
  10. BirrificiBirraie(@\underline{IdBirrificio*, IdBirraia*}@)
  11. Fornitori(@\underline{IdFornitore}@, RagioneSociale, PartitaIva, Indirizzo)
  12. Fatture(@\underline{IdFattura}@, IdBirrificio*, IdFornitore*, Data,
  13. NumeroFattura, Importo)
  14. TipiIngredienti(@\underline{IdTipo}@, Tipo, UnitàDiMisura)
  15. Ingredienti(@\underline{IdIngrediente}@, IdTipo*, Descrizione)
  16. Acquisti(@\underline{IdFattura*, IdIngrediente*}@, Quantità)
  17. Ricette(@\underline{IdRicetta}@, IdBirrificio*, IdCreatrice*, IdRicettaMadre*,
  18. Nome, DataCreazione, Stato)
  19. IngredientiRicette(@\underline{IdRicetta*, IdIngrediente*}@, Quantità)
  20. Produzioni(@\underline{IdProduzione}@, IdRicetta*, DataProduzione, NumeroLotto,
  21. Stato, NumeroBottiglie)
  22. Prenotazioni(@\underline{IdCliente*, IdProduzione*}@, Stato, Quantità)
  23. Note(@\underline{IdNota}@, IdProduzione*, Testo)
  24. NoteDegustazione(@\underline{IdNota*}@, Giudizio)
  25. \end{lstlisting}
  26. \paragraph{Dipendenze funzionali}
  27. \begin{itemize}
  28. \itemsep0em
  29. \item Per ogni tabella la chiave primaria (sottolineata) determina ciascuno
  30. degli attributi della tabella.
  31. \begin{lstlisting}[style=SQLu,escapechar=@]
  32. IdPersona @$\to$@ Nome, IdPersona @$\to$@ Cognome, IdPersona @$\to$@ Email,
  33. IdPersona @$\to$@ CodiceFiscale, @$\textellipsis$@
  34. \end{lstlisting}
  35. \item Nella tabella \texttt{Persone}, \texttt{CodiceFiscale} è chiave
  36. naturale e determina tutti gli altri attributi.
  37. Ho ritenuto prudente aggiungere una chiave artificiale perché, se è vero
  38. che due persone diverse non avranno mai lo stesso codice fiscale, è vero
  39. anche che ci possono essere errori umani nell'inserimento di un CF e voglio
  40. riservarmi la possibilità di correggere un CF senza minare l'affidabiltà
  41. della base di dati.
  42. \item Stesso discorso per la RagioneSociale e la PartitaIva nella tabella
  43. \texttt{Fornitori}.
  44. \end{itemize}
  45. Uno schema R, avente insieme di attributi T e insieme di dipendenze funzionali F, (\lstinline{R<T, F>}) è
  46. in forma normale di Boyce-Codd (BCNF) se ogni dipendenza funzionale della chiusura di F o è
  47. banale o ha come determinante una superchiave di T.
  48. Esiste un teorema che semplifica il calcolo, asserendo che se la condizione di cui sopra vale per
  49. una qualsiasi copertura di F allora vale per l’intera chiusura di F.
  50. Nella copertura di F che ho descritto sopra (che peraltro è canonica: ogni dipendenza ha un
  51. solo attributo come determinato, nessuna dipendenza è ridondante e non sono presenti
  52. attributi estranei, in quanto ogni determinante è chiave), ogni dipendenza funzionale ha
  53. come determinante o la chiave primaria o una chiave naturale che non è stata scelta come
  54. primaria, in ogni caso una superchiave. \underline{La BCNF è pertanto rispettata}.