Prerequisito: Prima forma normale , Seconda forma normale , Terza forma normale
L'applicazione delle definizioni generali di 2NF e 3NF può identificare un'ulteriore ridondanza causata da dipendenze che violano una o più chiavi candidate. Tuttavia, nonostante questi vincoli aggiuntivi, possono ancora esistere dipendenze che causeranno la presenza di ridondanza nelle relazioni 3NF. Questa debolezza in 3NF ha portato alla presentazione di una forma normale più forte chiamata IL Forma normale di Boyce-Codd (Codd, 1974) .
Sebbene 3NF sia una forma normale adeguata per i database relazionali, tuttavia, questa forma normale (3NF) potrebbe non rimuovere la ridondanza al 100% a causa della dipendenza funzionale X−>Y se X non è una chiave candidata della relazione data. Questo può essere risolto con la forma normale di Boyce-Codd (BCNF).
Forma normale di Boyce-Codd (BCNF)
La forma normale Boyce-Codd (BCNF) si basa su dipendenze funzionali che tengono conto di tutte le chiavi candidate in una relazione; tuttavia, BCNF presenta anche vincoli aggiuntivi rispetto alla definizione generale di 3NF.
Regole per BCNF
Regola 1: La tabella dovrebbe essere nella terza forma normale.
Regola 2: X dovrebbe essere una superchiave per ogni dipendenza funzionale (FD) X−>Y in una data relazione.
Nota: Per verificare se una relazione è in BCNF, identifichiamo tutti i determinanti e ci assicuriamo che siano chiavi candidate.
BCNF nel DBMS
Ti sei imbattuto in una gerarchia simile conosciuta come Forma normale di Chomsky nella teoria del calcolo. Ora, studia attentamente la gerarchia sopra. Lo si può dedurre ogni relazione in BCNF è anche in 3NF . Per dirla in altro modo, non è necessario che una relazione in 3NF sia in BCNF. Rifletti un po’ su questa affermazione.
Per determinare la forma normale più alta di una data relazione R con dipendenze funzionali, il primo passo è verificare se vale la condizione BCNF. Se si trova che R è in BCNF, si può tranquillamente dedurre che anche la relazione è in 3NF , 2NF, E 1NF come mostra la gerarchia. L'1NF ha il vincolo meno restrittivo: richiede solo che una relazione R abbia valori atomici in ciascuna tupla. La 2NF ha un vincolo leggermente più restrittivo.
La 3NF ha un vincolo più restrittivo rispetto alle prime due forme normali ma è meno restrittiva della BCNF. In questo modo, la restrizione aumenta man mano che si scende nella gerarchia.
Esempi
Qui discuteremo alcuni esempi di base che ti consentiranno di comprendere le proprietà di BCNF. Discuteremo più esempi qui.
Esempio 1
Consideriamo il database degli studenti, in cui sono menzionati i dati dello studente.
| Questo_ID | Questo_ramo | Stu_Corso | Numero_ramo | Stu_Corso_N |
|---|---|---|---|---|
| 101 | Informatica e ingegneria | DBMS | B_001 | 201 |
| 101 | Informatica e ingegneria | Reti di computer | B_001 | 202 |
| 102 | Ingegneria elettronica e delle comunicazioni | Tecnologia VLSI | B_003 | 401 |
| 102 | Ingegneria elettronica e delle comunicazioni | Comunicazione mobile | B_003 | 402 |
La dipendenza funzionale di quanto sopra è come menzionato:
Stu_ID −>Stu_Branch Stu_Course −> {Branch_Number, Stu_Course_No}> Le chiavi candidate della tabella sopra sono: {Questo_ID, Questo_corso}
Perché questa tabella non è in BCNF?
La tabella presente sopra non è in BCNF, perché come possiamo vedere né Stu_ID né Stu_Course sono una Super Key. Poiché le regole sopra menzionate dicono chiaramente che affinché una tabella sia in BCNF, deve seguire la proprietà che per la dipendenza funzionale X−>Y, X deve essere in Super Key e qui questa proprietà fallisce, ecco perché questa tabella non è in BCNF .
Come soddisfare BCNF?
Per soddisfare questa tabella in BCNF, dobbiamo scomporla in ulteriori tabelle. Ecco la procedura completa attraverso la quale trasformiamo questa tabella in BCNF. Dividiamo innanzitutto questa tabella principale in due tabelle Questo_ramo E Stu_Corso Tavolo.
Tabella Stu_Branch
| Questo_ID | Questo_ramo |
|---|---|
| 101 | Informatica e ingegneria |
| 102 | Ingegneria elettronica e delle comunicazioni |
Chiave candidata per questa tabella: Questo_ID .
Java ottiene l'ora corrente
Tabella Stu_Corso
| Stu_Corso | Numero_ramo | Stu_Corso_N |
|---|---|---|
| DBMS | B_001 | 201 |
| Reti di computer | B_001 | 202 |
| Tecnologia VLSI | B_003 | 401 |
| Comunicazione mobile | B_003 | 402 |
Chiave candidata per questa tabella: Stu_Corso .
Stu_ID nella tabella Stu_Course_No
| Questo_ID | Stu_Corso_N |
|---|---|
| 101 | 201 |
| 101 | 202 |
| 102 | 401 |
| 102 | 402 |
Chiave candidata per questa tabella: {Stu_ID, Stu_Course_No}.
Dopo la scomposizione in ulteriori tabelle, ora è in BCNF, poiché sta superando la condizione di Super Key, che nella dipendenza funzionale X−>Y, X è un Super chiave.
Esempio 2
Trova la forma normale più alta di una relazione R(A, B, C, D, E) con FD impostato come:
{ BC->D, AC->BE, B->E }> Spiegazione:
- Passo 1: Come possiamo vedere, (AC)+ ={A, C, B, E, D} ma nessuno dei suoi sottoinsiemi può determinare tutti gli attributi della relazione, quindi AC sarà la chiave candidata. A o C non possono essere derivati da nessun altro attributo della relazione, quindi ci sarà solo 1 chiave candidata {AC}.
- Passo 2: Gli attributi primi sono quegli attributi che fanno parte della chiave candidata {A, C} in questo esempio e altri saranno non primitivi {B, D, E} in questo esempio.
- Passaggio 3: La relazione R è nella prima forma normale poiché un DBMS relazionale non consente attributi multivalore o compositi.
La relazione è nella 2a forma normale perché BC->D è nella 2a forma normale (BC non è un sottoinsieme appropriato della chiave candidata AC) e AC->BE è nella 2a forma normale (AC è la chiave candidata) e B->E è nella 2a forma normale (B non è un sottoinsieme proprio della chiave candidata AC).
La relazione è non nella 3a forma normale perché in BC->D (né BC è una super chiave né D è un attributo primo) e in B->E (né B è una super chiave né E è un attributo primo) ma per soddisfare la 3a forma normale per , o il lato sinistro di un FD dovrebbe essere una chiave super o il lato destro dovrebbe essere un attributo principale. Quindi la forma normale più alta di relazione sarà la 2a forma normale.
Nota: Un attributo primo non può dipendere transitivamente da una chiave nella relazione BCNF.
Considera queste dipendenze funzionali di qualche relazione R
AB ->C C ->B AB ->B>
Supponiamo che sia noto che l'unica chiave candidata di R è AB. È necessaria un'attenta osservazione per concludere che la dipendenza di cui sopra è una dipendenza transitiva poiché l'attributo primo B dipende transitivamente dalla chiave da AB a C. Ora, il primo e il terzo FD sono in BCNF poiché entrambi contengono la chiave candidata (o semplicemente CHIAVE) sul lato sinistro. La seconda dipendenza, tuttavia, non è in BCNF ma è sicuramente in 3NF a causa della presenza dell'attributo prime sul lato destro. Quindi, la forma normale più alta di R è 3NF poiché tutte e tre le FD soddisfano le condizioni necessarie per essere in 3NF.
Esempio 3
Ad esempio, considera la relazione R(A, B, C)
A ->BC, B -> A>
A e B sono entrambe super chiavi, quindi la relazione di cui sopra è in BCNF.
Nota: La scomposizione BCNF potrebbe non essere sempre possibile con una condizione di unione senza perdite. Ad esempio, la relazione R (V, W, X, Y, Z), con dipendenze funzionali:
V, W ->X Y, Z -> X W -> Y>
Non soddisferebbe la dipendenza preservando la decomposizione BCNF.
Nota: Talvolta in una relazione BCNF sono ancora presenti delle ridondanze poiché non sempre è possibile eliminarle completamente.
Esistono anche alcune forme normali di ordine superiore, come la 4a forma normale e la 5a forma normale.
Per ulteriori informazioni, fare riferimento alla 4a e 5a forma normale.