Terza forma normale

MySql Ottobre 4th, 2007

Definizione: una database è in 3NF (terza forma normale) se è in 2NF e per ogni dipendenza funzionale X->Y è vera una delle seguenti condizioni:
X è una superchiave della relazione
Y è membro di una chiave della relazione.

Detta in maniera molto più semplice (forse troppo), questa regola impone che tutte le colonne non chiave devono essere reciprocamente indipendenti. Cioè, tutte le colonne che non sono chiavi primarie non devono eseguire nessun calcolo e nessuna operazione. Ogni tabella non uniforme dovrà essere scomposta in piccole tabelle.

Impiegato Nome Reparto Caporeparto
1 Rossi Vendite Marchi
2 Verdi Acquisti Giorgi
3 Bianchi Magazzino Stefanini
4 Neri Vendite Marchi

Nella tabella indicata si possono identificare le seguenti dipendenze:
Impiegato -> Nome, Reparto, Caporeparto
Reparto -> Caporeparto

Se applichiamo la definizione ci accorgiamo che la prima dipendenza rispetta la 3NF (in quanto impiegato è campo chiave) mentre la seconda dipendenza genera problemi visto che Reparto non è campo chiave e Caporeparto non è membro di una chiave.
Questo ci porta ad avere una ripetizione di dati e obbliga a generare una seconda tabella che abbia per chiave Reparto e come attributo non chiave Caporeparto.

Tags: , , , , , ,

Seconda forma normale

MySql Settembre 27th, 2007

Definizione: “una relazione è in seconda forma normale se e solo se soddisfa la 1NF e inoltre ciascun attributo che non fa parte della chiave è indipendente funzionalmente da una qualunque chiave candidata“.

Entrando nel dettaglio significa che tutti i campi non chiave devono dipendere da tutta la chiave primaria e non da parte di essa. Esempio pratico:

Tipo tavolo Legno Finitura
Exclusive Mogano Ottone
Exclusive Ciliegio Acciaio
Montecarlo Noce Sughero
Montecarlo Mogano Ottone
Top Noce Sughero

Impostando come chiave primaria la coppia (Tipo tavolo, legno) si capisce che l’attributo finitura non dipende da tutta la chiave ma soltanto da legno e per questo motivo la relazione deve essere suddivisa in due sottorelazioni:

Tipo tavolo Legno
Exclusive Mogano
Manager Ciliegio
Montecarlo Noce
Montecarlo Mogano
Top Noce
Legno Finitura
Mogano Ottone
Ciliegio Acciaio inox
Noce Sughero

Le due relazioni risultanti ora rispettano la 2NF.

Tags: , , , , , ,

Prima forma normale

MySql Settembre 27th, 2007

Con questo post inauguro una nuova sezione ovvero quella dedicata al Mysql. In particolare in questo articolo mi occuperò di definire e spiegare la prima forma normale (1NF) che è alla base di una buona progettazione di database.

Partiamo innanzitutto dalla definizione: ”Si dice che una base dati è in prima forma normale (1NF) se vale la seguente relazione per ogni relazione contenuta nella base dati: una relazione è in 1NF se e solo se
a)non presenta gruppi di attributi che si ripetono (ossia ciascun attributo è definito su un dominio con valori atomici)
b)esiste una chiave primaria (ossia esiste un insieme di attributi, che identifica in modo univoco ogni tupla della relazione)

Detto in parole più semplici, la definizione indica che non ci devono essere attributi (colonne) i cui valori non siano atomici cioè non suddivisibili.
Supponiamo per esempio che esista una colonna che riassuma gli ipotetici ordini di materiale: non sarebbe ammissibile avere una relazione (tabella) di questo tipo:

Magazzino 1 gennaio 50; febbraio 30
Magazzino 3 gennaio 20; marzo 50

In questo caso il secondo attributo vìola chiaramente la 1NF e deve essere scomposto in modo da ottenere la seguente tabella:

Magazzino 1 gennaio 50
Magazzino 1 febbraio 30
Magazzino 3 gennaio 20
Magazzino 3 marzo 50

La seconda parte della definizione indica che deve esistere una chiave primaria ovvero un attributo (o un insieme di attributi) tale che possa identificare univocamente ogni tupla (riga) della relazione. Nell’esempio sottostante viene riportata una tabella che vìola la seconda parte della 1NF:

Mario 10/02/2006
Mario 14/12/2002
Antonio 23/08/2005
Antonio 24/05/2004

In questo caso diventa impossibile distinguere le persone in quanto non è possibile definire una chiave primaria. E’ necessario aggiungere un nuovo attributo, ad es. il codice fiscale, che ci consente di identificare univocamente ogni persona nella tabella:

RSSMRA50A01G000X Mario 10/02/2006
RSSMRA52L05G000F Mario 14/12/2002
VRDNTN74C25G000V Antonio 23/08/2005
PTRNTN75D12G000Q Antonio 24/05/2004

Così facendo è possibile assegnare al campo codice fiscale il valore di chiave primaria.

Tags: , , , , , ,

Chiudi
Invia e-mail