Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Anagrafica (nome (pk), cognome(pk), indirizzo(pk), CAP, citta, provincia, regione, telefono, nazione)
Ipotizzando che allo stesso indirizzo non possano abitare omonimi (nonno-nipote, ecc.). Miglior
compromesso possibile (telefono non può essere pk perché il suo valore può cambiare nel tempo, altra
possibilità sarebbe PK formata da nome, cognome, telefono ma renderebbe molto complessa la risoluzione
dell’esercizio)
1FN
DIPENDENZE FUNZIONALI
Regola importante: fate sempre in modo di avere a destra delle frecce tutti gli attributi NON chiave (tutti gli
attributi NON chiave devono dipendere da uno o più attributi).
Anagrafica (nome (pk), cognome(pk), indirizzo(pk), CAP, citta (pk), provincia, regione, telefono, nazione)
In questo modo l’ultima dipendenza funzionale non la scriviamo e le cose ci risultano più semplici.
2FN
Il DB non è in 2FN perché CAP dipende solo da una parte della chiave primaria composta. Le altre
dipendenze funzionali non influiscono sulla 2FN perché i determinanti NON sono parte della chiave
primaria (L’ultima dipendenza funzionale l’abbiamo cancellata perché abbiamo ridefinito la chiave
primaria). Dopo aver risolto il problema derivato dall’ultima dipendenza funzionale ne sorge uno nuovo
dovuto alla prima dipendenza funzionale: nel frattempo Città è diventato parte di una chiave primaria e
quindi quella dipendenza funzionale viola i requisiti della 2FN.
ANAGRAFICA (Nome (pk), Cognome (pk), Indirizzo (pk), città (pk), Telefono)
3FN
Il DB non è in 3FN a causa della seconda e terza dipendenza funzionale (nella colonna di sinistra).
PROVINCIA(Provincia(pk), Regione(fk))
In questa fase è necessario fare una scelta di semplificazione: in teoria, tutto tranne il voto, potrebbe costituire
chiave primaria ma questo, chiaramente, renderebbe la risoluzione del nostro esercizio un vero inferno. Io (ma
ciascuno di voi può fare altre scelte, basta che siano ben spiegate) scelgo la chiave primaria come nello schema
seguente. In questo modo, ipotizzo che NON ci siano in classi diverse due alunni con lo stesso nome e cognome.
[Considerate che, in quanto a scelte di normalizzazione, il DB della nostra scuola è fatto anche peggio di così: la
vostra ex prof.ssa di Matematica, sul Registro Elettronico, si chiama “Giovanna IngravalloL” perché c’è una
collega con il suo stesso nome e cognome ed evidentemente, i tecnici della Spaggiari hanno ritenuto che
nome+cognome fosse una buona scelta per una chiave primaria per la tabella DOCENTI: non è possibile creare
due docenti con lo stesso nome+cognome nella stessa scuola!]
INTERROGAZIONI (materia (pk), voto, data (pk), nome (pk), cognome (pk), classe, sezione)
1FN
Il database non è in 1FN perché c’è data e quindi lo riportiamo a questa forma
INTERROGAZIONI (materia (pk), voto, giorno (pk), mese (pk), anno(pk), nome (pk), cognome (pk), classe, sezione)
DIPENDENZE FUNZIONALI
2FN
INTERROGAZIONI (materia (pk), voto, giorno (pk), mese (pk), anno(pk), nome (pk), cognome (pk))
3FN
Il DB è già in 3FN
Questa è la mia soluzione che dipende dalla mia scelta di chiave primaria: diverse scelte di chiave
primaria derivanti da diverse ipotesi o semplificazioni (ben spiegate) portano a differenti soluzioni
CD Musicali (gruppo, titolo, canzone1, canzone2, … canzoneN, genere, lingua)
Quando ci sono degli attributi x1, x2,…,xn bisogna SEPARARLI dal resto della tabella (lo leggo a pagina 580 del
PDF sulle forme normali: “Separiamo ora dalla tabella principale i gruppi di campi che si ripetono, altrimenti
avremo delle celle della tabella con più valori, e quindi non in 1NF.”
Canzoni (Canzone)
Chiaramente sto ipotizzando che un gruppo non possa incidere due CD con lo stesso titolo.
1FN
DIPENDENZE FUNZIONALI
Attenzione: secondo me, un gruppo può cantare canzoni di generi e lingue diverse. È solo la canzone a
determinare il valore di queste caratteristiche (anche se, andando per il sottile, può essere incisa in altre lingue o
seguendo generi diversi ma NON andiamo per il sottile)
2FN
Sembra strano ma il DB è in 2FN perché genere e lingua NON dipendono proprio dalla chiave primaria
3FN
Il DB NON è in 3FN a causa della dipendenza funzionale che ho scritto quindi ristrutturando otteniamo:
1FN
DIPENDENZE FUNZIONALI
2FN
La seconda dipendenza funzionale viola i principi della 2FN quindi ristrutturiamo così:
1FN
Abbiamo chiaramente nominativo e sede che non sono atomici quindi riscriviamo così
Dipendenti (matricola (pk), nome, cognome, stipendio, progetto, cod_Bilancio, funzione, indirizzo, città)
CAP non lo metto altrimenti fare le dipendenze funzionali diventa estremamente noioso (come abbiamo visto
stamattina)
DIPENDENZE FUNZIONALI
Matricola, cod_Bilancio --> funzione (un dipendente può stare in diversi progetti con funzioni diverse)
2FN
3FN
Non siamo in 3FN perché ci sono attributi che non dipendono da Matricola. Riscriviamo così:
Come la precedente, questa è la MIA soluzione: voi potete trovare differenti dipendenze (basta che siano
corrette): per esempio, avreste potuto scrivere che indirizzo e città dipendono da Matricola e Cod_Bilancio
perché un dipendente si sposta in diverse sedi in base al progetto a cui deve lavorare e per me andava bene lo
stesso (chiaramente lo schema finale sarebbe stato differente).
1FN
DIPENDENZE FUNZIONALI
Descrizione --> prezzo_Unitario (Qui sto facendo un’ipotesi abbastanza forte ma è l’unica cosa che posso fare
data la carenza di attributi che la traccia mi propone: sto ipotizzando che la descrizione di un articolo sia la sua
chiave primaria cioè che un singolo articolo sia identificato dalla sua descrizione; è come se gli articoli venduti su
Amazon fossero identificati dal loro nome e non dal codice ASIN o altri modi che loro usano per identificarli.
Purtroppo, me lo devo tenere in questo modo perché NON posso aggiungere attributi a quelli proposti dalla
traccia)
2FN
3FN
Qui sono andato anche un po’ “a senso” per inserire le chiavi esterne oltre che seguendo le regole. Va bene farlo
per ottenere un risultato finale soddisfacente.
In questo esercizio era ammissibile, all’inizio, anche considerare numero_Fat come attributo multiplo (come
Canzone1,…CanzoneN) dei CD Musicali dell’esempio precedente. Il risultato sarebbe stato presumibilmente lo
stesso alla fine.