|
@@ -41,7 +41,7 @@ NoteDegustazione(@\underline{IdNota*}@, Giudizio)
|
|
|
anche che ci possono essere errori umani nell'inserimento di un CF e voglio
|
|
|
riservarmi la possibilità di correggere un CF senza minare l'affidabiltà
|
|
|
della base di dati.
|
|
|
- \item Stesso discorso per la RagioneSociale e la PartitaIva nella tabella
|
|
|
+ \item Stesso discorso per la \texttt{RagioneSociale} e la \texttt{PartitaIva} nella tabella
|
|
|
\texttt{Fornitori}: ciascuno è chiave separatamente.
|
|
|
\item Nella tabella \texttt{Fatture}, la coppia di attributi \texttt{\{IdFornitore, NumeroFattura\}}
|
|
|
è chiave.
|
|
@@ -50,7 +50,7 @@ NoteDegustazione(@\underline{IdNota*}@, Giudizio)
|
|
|
birrificio che il lotto identifica univocamente la produzione.
|
|
|
\end{itemize}
|
|
|
|
|
|
-Uno schema R, avente insieme di attributi T e insieme di dipendenze funzionali F, (\lstinline{R<T, F>}) è
|
|
|
+Uno schema R, avente insieme di attributi T e insieme di dipendenze funzionali F, \lstinline{R<T, F>}, è
|
|
|
in forma normale di Boyce-Codd (BCNF) se ogni dipendenza funzionale della chiusura di F o è
|
|
|
banale o ha come determinante una superchiave di T.
|
|
|
Esiste un teorema che semplifica il calcolo, asserendo che se la condizione di cui sopra vale per
|
|
@@ -61,3 +61,18 @@ solo attributo come determinato, nessuna dipendenza è ridondante e non sono pre
|
|
|
attributi estranei, in quanto ogni determinante è chiave), ogni dipendenza funzionale ha
|
|
|
come determinante o la chiave primaria o una chiave naturale che non è stata scelta come
|
|
|
primaria, in ogni caso una superchiave. \underline{La BCNF è pertanto rispettata}.
|
|
|
+
|
|
|
+Alcuni vincoli intra-relazionali possono essere tradotti in trigger in modo da
|
|
|
+mantenere la coerenza del database con l'inserimento di record.
|
|
|
+Per esempio:
|
|
|
+\begin{lstlisting}[style=SQLu,escapechar=@]
|
|
|
+CREATE TRIGGER IntegritàReferenzialeNote
|
|
|
+ BEFORE INSERT ON Note
|
|
|
+BEGIN
|
|
|
+ SELECT
|
|
|
+ CASE WHEN NEW.IdProduzione NOT IN (
|
|
|
+ SELECT IdProduzione FROM Produzioni)
|
|
|
+ THEN RAISE (ABORT,'Produzione non valida!')
|
|
|
+ END;
|
|
|
+END;
|
|
|
+\end{lstlisting}
|