|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2008
Messaggi: 210
|
[Database] Chiarimenti sulla Terza Forma Normale
Salve a tutti. Proprio non mi entra in testa la terza forma di normalizzazione
Ricapitoliamo le prime 2: 1- Ogni attributo deve contenere valori atomici 2- Bisogna rispettare la prima forma e creare una nuova tabella nel caso in cui si trovino attributi non legati alla chiave primaria completa, ad esempio: Libri:{ISBN, titolo, annoPubblicazione, nomeEditore, pivaEditore} con ISBN chiave primaria E' chiaro che editore e la sua partita iva non sono legate alla chiave primaria ISBN quindi si creano due tabelle: Libri:{ISBN, titolo, annoPubblicazione} Editori:{nomeEditore, pivaEditore} Ma la terza forma normale in cosa consiste? Ho letto svariate guide e mi è sembrata identica alla seconda... qualcuno può spiegarmi meglio come funziona? |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Per quanto ricordi (ho fatto ste cose tipo 1-2 annetti fa) la terza FN è quella transitiva, se hai in Tab(A,B,C) un A->B->C con A chiave e B NON chiave splitti le tabelle in Tab1(A,B) e Tab2(B,C)
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2008
Messaggi: 210
|
Quel "->" vuol dire che il precedente determina il successivo?
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Anzitutto, il DB così com'è non risponderebbe nemmeno alla FN1, in quanto "nomeEditore" è ambiguo ( nomeEditore = nome + cognome ), e non rispetterebbe l'atomicità. La Seconda Forma Normale richiede che il DB : 1. Sia in FN1. 2. Le colonne che non compongono la chiave dipendono funzionalmente da essa. Il che significa che può bastare che dipendano funzionalmente anche in modo indiretto. Perciò il tuo DB alla FN2 dovrebbe essere ancora : Libri : {ISBN, titolo, annoPubblicazione, cognomeEditore, nomeEditore, pivaEditore} con ISBN Pk. pivaEditore ad esempio dipende in modo indiretto da ISBN, in quanto in mezzo ci sono cognomeEditore e nomeEditore, che, a ben vedere, dipendono da titolo, non strettamente da ISBN... C'è infatti una "catena" di dipendenze transitive, e la FN3 serve a spezzare questa catena... La Terza Forma Normale richiede che il DB : 1. Sia in FN2. 2. Le colonne che non compongono la chiave dipendono funzionalmente da essa in modo diretto. Questo comporta che : 1. Non potrò più avere libri ed editori nella stessa tabella. 2. Dovrò inventarmi un campo PK per la tabella Editori, in quanto pivaEditore non può dipendere funzionalmente e in modo diretto da nomeEditore o cognomeEditore... Perciò alla FN3 : Libri: {ISBN (PK), titolo, annoPubblicazione, idEditore(FK)} Editori: {idEditore(PK), cognomeEditore, nomeEditore, pivaEditore} Il passo successivo sarà dare la possibilità di gestire Libri con più di un editore ( il che è sempre possibile... ) creando un tabella di raccordo "LibriEditori"... a quel punto la normalizzazione sarà finita. Se vuoi un bell'esempio di normalizzazione in tema di Libri / Autori / Prestiti, con un DB più complesso, dai un'occhiata qui : http://msdn.microsoft.com/it-it/library/cc185095.aspx |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
A->B vuol dire che A implica B, in termini di DB, A è una superchiave (se A è fissato allora fissa il valore di B)
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:42.




















