“Questa è la quarta parte della serie, le cinque forme normali. La forma normale di Boyce-Codd è abbreviata BCNF. È anche noto come 3.5nf. 3.5 è 3½. Viene dopo la terza forma normale. La quarta forma normale è abbreviata 4NF e viene dopo la forma normale di Boyce-Codd. La quinta forma normale è abbreviata 5nf e arriva dopo la quarta forma normale.
Questo tutorial (articolo) è la quarta parte della serie di tutorial, le cinque forme normali. Questo tutorial spiega BCNF, 4NF e 5NF.
Questo tutorial segue una trama come segue: un padre è morto. Ha lasciato dei soldi per suo figlio. Suo figlio ha deciso di usare i soldi per aprire (iniziare) un negozio di alimentari. Il negozio di alimentari è già rifornito e opera da un po 'di tempo. Il figlio ha alcuni dipendenti, chiamati Clerks, in questa serie di tutorial. Il figlio è il proprietario. Prima che il negozio diventasse operativo, sia il proprietario che gli impiegati non conoscevano le forme normali.
Tu, il lettore, hai completato questa serie di tutorial di forma normale e sei anche uno sviluppatore di database. Il figlio del defunto padre è tuo amico. Hai visitato il suo negozio negli ultimi tre giorni. Il primo giorno li hai visitati; Hai formato il proprietario e i suoi dipendenti su come mettere una tabella di database in 1NF. Il secondo giorno li hai allenati su come spostare un tavolo da 1nf al 2NF. Il terzo giorno, li hai allenati su come spostare un tavolo dal 2NF a 3nf.
Oggi, il quarto giorno, hai visitato il negozio per addestrare solo il proprietario su BCNF, 4NF e 5NF nel suo ufficio."
Boyce-codd forma normale
Il problema di BCNF si verifica quando esiste una chiave primaria composita e un attributo chiave non primario (colonna) e la chiave non primaria dipende funzionalmente dalla parte (E.G., uno) degli attributi chiave primari, mentre la tabella è già nella terza forma normale.
Ciò implica che la colonna non prime (chiave non prime) e la colonna Prime dipendono dalla forma di un'entità e devono essere rimosse come una tabella separata, in cui la colonna non prime sarà la chiave primaria. L'altra parte della chiave primaria composita costituirà una nuova tabella con la colonna non prima e la colonna non prima non faceva necessariamente parte della chiave primaria. L'altra parte della chiave primaria composita rimane una chiave primaria. I relativi possibili dipendenti dalla tabella dei genitori accompagnano in modo appropriato i tavoli dei due bambini.
La separazione delle tabelle per la forma normale di Boyce-Codd non è davvero la stessa della separazione delle tabelle in 2NF e 3NF.
Una tabella è in forma normale di Boyce-Codd Se le seguenti regole sono obbedite:
Questo secondo punto, come citato, è semplificato.
Esempio
Nella parte precedente di questa serie, la tabella di Saledetails (con alcune modifiche) è stata data come segue:
SaleEtails (SaleId, Product, Numberold, UnitsellingPrice, Sconto)
Una tabella corrispondente con i dati è:
Il prezzo di vendita unitario è di tipo, galleggiante o numero. La chiave primaria in questa tabella è una chiave composita costituita da SaleId e Product.
Questa tabella è in 3nf. Il numero di prodotti venduti può essere considerato dipendente dal prodotto e non dalla vendita. In altre parole, una chiave non prime può dipendere solo dalla parte della chiave primaria composita. Questo non dovrebbe accadere; E così da queste tre colonne, potrebbero derivare le seguenti due tabelle:
Quantità (numerald, prodotto)
E
SaleEtails (SaleId, Numberold)
Per la tabella, la quantità, la chiave primaria è Numberold. Per la nuova tabella di SaleEtails, la chiave primaria è ancora Saleid.
Dalla tabella dei genitori di Saledetails, l'unico dipendente per Numberold è il prodotto. Dalla tabella dei genitori di Saledetails, i dipendenti per SaleId sono numeri, unprice, sconto e senza prodotto. E così i tavoli dovrebbero effettivamente essere:
Quantità (numerald, prodotto)
E
SaleEtails (SaleId, Numberold, Numberold, UnitsellingPrice, Sconto)
A questo punto, il proprietario fa il seguente commento:
“Non credo che vorrò mai conoscere la quantità di un particolare prodotto venduto senza voler conoscere la vendita, che dipende dal trio (acquisto di clienti, vendita dei dipendenti e data di transazione)."Tu, lo sviluppatore di database, risponde come segue:
“In tal caso, consentiamo la tabella SaleEtails e OrderDetails al 3NF. Dopotutto, molti database commerciali là fuori non vanno oltre il 3NF e le aziende sono comode. Tuttavia, ogni volta che vuoi sapere che per una tabella simile, rompe la tabella dei genitori in tabelle BCNF."
Quarta forma normale
1NF, 2NF, 3NF e BCNF si basano sulla dipendenza funzionale. 4nf si basa su un tipo speciale di dipendenza funzionale, che è piuttosto "inquietante", specialmente se non ben compreso. Questa dipendenza piuttosto inquietante è chiamata dipendenza multivalata.
La dipendenza funzionale è semplicemente chiamata dipendenza. Tuttavia, la dipendenza multivalata non è semplicemente chiamata dipendenza, poiché ciò porterebbe confusione. Si chiama dipendenza multivalata.
Tu, lo sviluppatore del database dici al proprietario quanto segue: “Dovrebbe interessare che per una tabella sia in 1NF, ogni cella deve avere un unico valore. Un problema in qualche modo simile si verifica qui, ma con una tabella che è già in BCNF dopo 3NF. La dipendenza multivalata è con la chiave primaria composita e ogni cella in tutta la tabella ha già un singolo valore. Nel problema 1NF, i valori multipli in una cella non devono riguardare una chiave. Con il problema 4NF, ci sono almeno tre colonne. Se ci sono solo tre colonne, le tre colonne formano la chiave composita primaria. In questo caso, la prima colonna di celle può determinare la seconda colonna di celle, ma la seconda colonna è indipendente dalla terza colonna. 4nf non lo consente."
In altre parole, il problema può essere che la seconda colonna dipende dalla prima colonna e la terza colonna dipende ancora dalla prima colonna e non ha nulla da fare in termini di dipendenza dalla seconda colonna. 4nf non lo consente.
Prima di continuare con la spiegazione della dipendenza multivalata, è necessario spiegare come si può spiegare il problema della quarta forma normale.
Come può sorgere il problema di 4nf con il minimarket
Immagina che dopo un po ', hai avuto rivali (altri negozi di alimentari) nel tuo quartiere e non stai vendendo tanto quanto tu vendevi prima. Questo non potrebbe essere previsto quando hai iniziato il negozio di alimentari.
Ti viene in mente che se riesci a ridurre i prezzi, non al di sotto del prezzo di costo, ovviamente, per i tuoi clienti che acquistano di più, allora compreranno di più e le vendite e i profitti aumenterebbero dal livello di abbandono. Ciò significa che devi sapere dove si lasciano tali clienti e i loro indirizzi (strade) in modo da poter persino consegnare prodotti alle loro case. Ancora una volta, questo problema non era previsto all'inizio.
E così ti viene in mente la tabella seguente, che lavorerai, fino a BCNF, prima che il problema di 4NF possa mostrarsi:
Consegna
Per te, il proprietario, il tuo interesse è la categoria del prodotto, il prodotto stesso da consegnare e l'indirizzo a cui consegnare. Guardando l'intero tavolo, il resto delle sezioni di riga a partire dal CustomerName all'estremità destra determina le prime tre colonne. In altre parole, le prime tre colonne formano la chiave primaria per il resto delle colonne. Cioè, le prime tre colonne dipendono dal resto delle colonne per righe. E così, le prime tre colonne devono essere sottolineate con singole linee. Con ciò, questo tavolo è ora nella sua prima forma normale. Ogni combinazione di cellule orizzontali nelle prime tre colonne è unica.
Questa tabella è anche nella seconda forma normale perché ogni combinazione di cellule orizzontali nelle prime tre colonne è unica e non c'è dipendenza parziale (con gruppi ripetuti). Tuttavia, non è nella terza forma normale perché le sezioni di riga (parti) a partire dal CustomerName all'estremità destra determinano il cliente (CustomerID dipende da loro). Quindi tutto ciò che deve essere rimosso, lasciandoti con una copia del cliente. CustomerId è ora sia una chiave esterna che una parte della chiave primaria. La tabella è ora in 3nf.
Prima di te, lo sviluppatore e il trainer del database, potrebbe continuare, il proprietario afferma: “Invece di lavorare con la colonna di categoria, colonna del prodotto e colonna Indirizzo, lavorerò con la colonna di categoria, la colonna del prodotto e la colonna del cliente, poiché una volta che il CustomerID è noto, l'indirizzo può essere noto e sarebbe più conveniente, specialmente per il computer."
La tua risposta, "Va bene, proprietario. Sei sulla buona strada. Questo è ciò che sarà fatto."
Ricorda, la tabella dei clienti esiste già. Questo è stato prodotto nella parte precedente di questa serie di tutorial. Quindi, l'unica tabella da produrre ora è una tabella che ha solo le tre chiavi principali.
Permutazioni di consegna della categoria, per prodotto
Sfortunatamente, le colonne di questa chiave primaria composita non sono nel 2NF tra loro. Ci sono ripetizioni dei valori delle celle che scendono verso il basso, con dipendenza parziale all'interno della chiave composita. Queste ripetizioni non sono così costruttive come sembrano.
Si noti che la pasticceria è associata al cliente 1 ed è anche associato al cliente 2. La bibita è associata al cliente 1 ed è anche associato al cliente 2.
Se il cliente 1 ha chiesto i dolci oggi, chiederà il cioccolato domani (non mostrato nel tavolo). La pasticceria è associata al cliente 1 attraverso i dolci sul tavolo, ma può anche essere associato al cliente 1 attraverso i cioccolatini nelle consegne domani. Se il cliente 1 ha chiesto Sprite oggi, domani chiederà Coca-Cola. La bibita è associata al cliente 1 a sprite, sul tavolo, ma può anche essere associato al cliente 1 tramite Coca-Cola. Lo stesso problema di consegna si verifica con il cliente 2. Questo tipo di ripetizione si chiama dipendenza multivalata.
Si noti che nella tabella sopra, la colonna del prodotto non ha una ripetizione (almeno per ora).
Per risolvere questo problema, è meglio inserire prima queste ripetizioni dei valori della colonna, della chiave primaria, nella prima forma normale che si traduce in quanto segue:
Permutazioni di consegna della categoria completa per prodotto
Permutazione significa cambiare l'ordine di un accordo. In questa situazione, significa dare tutti i diversi possibili ordini di prodotti nella colonna del prodotto. Ora, ci sono più ripetizioni (più ridondanza) in questa tabella che in quanto sopra. La buona notizia è che queste tre colonne ora vanno bene, nella prima forma normale. 2nf e 3nf devono essere previsti per queste tre colonne.
Ricordiamo che la consegna non era prevista all'inizio quando il negozio è iniziato (è andato operativo). Se fosse stato previsto, la prima tabella delle transazioni nella prima parte di questa serie di tutorial sarebbe stata così:
Si noti che i multi-valori in ciascuna cella in questa colonna del prodotto hanno più fattori presi in considerazione rispetto a quello che è accaduto nella prima tabella delle transazioni nella prima parte della serie. Portare questa tabella nella prima forma normale comporterebbe la tabella precedente, che viene ristampata qui, per un facile riferimento al lettore, con alcune modifiche nella colonna del prodotto:
Le due tabelle a forma di prima normali sono uguali perché la permutazione nella colonna del prodotto è relativa alla colonna CustomerID. Non dimenticare che ogni customerid qui identifica una riga nella tabella dei clienti.
La definizione di dipendenza multivalata significa che se ci sono tre colonne, x, y e z e per una particolare riga di valori x, y e z, rispettiva si verifica effettivamente nella tabella (chiama questa scelta xC) e compila un elenco di tutte le xCcombinazioni yz che possono verificarsi nella tabella, come fatto sopra, scopriremo che xC è associato alle stesse voci Y, indipendentemente da Z. Quindi essenzialmente, la presenza di Z non fornisce informazioni utili per limitare i possibili valori di y.
Nella tabella sopra, xC, Ad esempio, è la pasticceria e un valore y corrispondente è dolce. La combinazione di pasticceria e dolci non ha nulla a che fare con la colonna CustomerID, in cui il valore forse 1 o 2 nelle righe. Se x viene preso come bevanda analcolica, un valore y corrispondente sarebbe sprite. La combinazione di bibite e sprite non ha nulla a che fare con le colonne del cliente, in cui il valore forse 1 o 2 nelle righe.
Visto da una seconda forma normale e punti di vista della dipendenza funzionale, la colonna di categoria dipende dalla colonna del prodotto e dipende anche dalla colonna del cliente ma non dipende da entrambe le colonne quando combinate. I valori nella colonna del prodotto si ripetono, determinando i valori nella colonna della categoria; e i valori nella colonna CustomerID si ripetono, determinando i valori nella colonna della categoria; Ma entrambe queste colonne insieme non determinano i valori nella colonna della categoria.
Quindi la tabella deve essere divisa in due, con la categoria e le colonne del prodotto che vanno in un modo e la categoria e le colonne del cliente che vanno dall'altra parte, come segue:
Tabella della categoria-prodotto
Categoria - Tabella dei clienti
Queste due tabelle per bambini sono ora in 1NF, 2NF, 3NF, BCNF e, soprattutto, 4NF. La tabella del prodotto di categoria ha chiavi primarie composite. La tabella della categoria-combustibile ha anche chiavi primarie composite. Ciascuna delle chiavi della colonna è già una chiave primaria in qualche altra tabella nel database o è una chiave esterna in qualche altra tabella nello stesso database.
Queste due tabelle che sostituiscono la tabella principale, non sono le uniche tabelle dell'intero database. In effetti, sono correlati ad altre tabelle nel database. Quindi ci sono ancora alcuni lavori di pulizia nel progetto di progettazione del database da svolgere per l'intero database e queste due nuove tabelle.
Facendo riferimento alla tabella della categoria-produzione, ricorda che esiste già una tabella di prodotti in 4NF e una tabella di categorie in 4NF nel database. Perché una tabella sia in qualsiasi forma normale, non dovrebbe violare nessuna delle regole di quella forma normale. La tabella dei prodotti o dei prodotti ha ProductID come chiave primaria e categoria o categoria come chiave esterna.
Quindi la tabella della categoria prodotta qui, in 4NF, dovrebbe essere abbandonata poiché le seguenti due tabelle, che sono in 4NF, hanno tutte le sue informazioni (e altro)
Categorie (categoriaId, categoria nome, descrizione)
Prodotti (ProductID, CategoryId, SupplierId, ProductName, UnitPrice, QuantityInstock, ReorderLevel)
D'altra parte, la tabella della categoria del cliente in 4NF non può essere abbandonata, in quanto viene fornito con alcune nuove relazioni alla consegna. In effetti, la tabella dovrebbe essere meglio chiamata, categoria di consegna. Chiamarlo productE di consegna sarebbe fuorviante per i programmatori di database ma non sarebbe fuorviante per i clienti, che sono analfabeti nel database. Quindi chiamalo categoria Delivery. Nella forma di notazione della tabella, è:
CategoryDelivery (Categoria, CustomerID)
Ricorda che ogni customerid si riferisce a una riga nella tabella dei clienti. La chiave primaria composita è: categoria, customerid. Poiché esiste già una tabella di categorie con categoriaId, questa tabella dovrebbe effettivamente essere:
CategoryDelivery (CategoryId, CustomerId, Categoria)
dove categoriaid dipende dalla categoria (nome) e viceversa.
Quindi il problema della consegna porta in un tavolo extra in 4nf. Il resto delle tabelle nel database è già in 4NF, in quanto non violano le regole 4NF indicate di seguito.
Il problema delle consegne non era previsto prima che iniziasse la normalizzazione nelle loro diverse classi, all'inizio. Se fosse stato previsto come indicato sopra, la consegna della categoria sarebbe arrivata; alla terza fase di forma normale senza menzione di 4nf.
Quarta regole di forma normale
Una tabella è in 4NF se non viola le seguenti regole:
Ciò significa che un tavolo può essere progettato per la prima volta ed è già in 4nf.
Quinta forma normale
Le situazioni 5nf si verificano raramente, ma quando si verificano, la quinta forma normale deve essere presa in considerazione per evitare qualsiasi problema di contabilità noto. La quinta forma normale è anche conosciuta come la proiezione unire la forma normale. Con la quinta forma normale, ci sono almeno tre colonne. Se ci sono solo tre colonne di interesse, allora esiste una chiave primaria composita, che è composta dalle tre colonne.
Immagina che tu, il proprietario, avete avuto fino a due negozi nella stessa città e che siete forniti dalla stessa serie di fornitori. Chiama questi negozi, shop1 e shop2. I fornitori vedono questi due diversi negozi come due diversi clienti. Quindi qui, il cliente ha un significato diverso. Significa fare acquisti e non la persona. Il significato del prodotto rimane lo stesso.
Quindi c'è una tabella con le chiavi primarie: fornitore, prodotto e cliente. Questo è:
Tabella (fornitore, prodotto, cliente)
Il problema 5NF si presenta quando un determinato fornitore può fornire un determinato prodotto a più di un cliente (i due negozi). Inoltre, un determinato cliente può ricevere un determinato prodotto da più di un fornitore. E un determinato cliente può ricevere da diversi fornitori diversi prodotti. Cioè, uno dei tre partner può fare le stesse cose agli altri due partner.
Cioè, un fornitore può corrispondere a più di un cliente. Un cliente può corrispondere a più di un prodotto. E un prodotto può corrispondere a più di un fornitore. Ciò significa che possono derivare le seguenti tre tabelle binarie:
Tabella dei fornitori-tavolo
Tabella del prodotto cliente
Tabella del prodotto-fornitore
Se una tabella principale può essere suddivisa in tre tabelle più piccole senza alcuna perdita o aggiunta di informazioni e se quando le tabelle sono unite, non vi è ancora alcuna perdita o aggiunta di informazioni, la tabella principale deve essere suddivisa. Le tabelle più piccole sono in 5nf. In tal caso, la dipendenza di join è stata eliminata. Perdita di informazioni significa perdere relazioni di riga e l'aggiunta di informazioni significa aggiungere nuove relazioni di riga.
Se questo abbattere e mettere insieme porterebbe a perdite o aggiunta di informazioni, il tavolo non dovrebbe essere suddiviso. In tal caso, la tabella principale è già nella quinta forma normale.
A questo punto, tu, lo sviluppatore e l'allenatore del database, diciamo: “Proprietario, lascio il punto di dati nelle tabelle (tabella principale e tre piccole tabelle) come esercizio per te. Lo controllerò domani."
Quinta forma di forma normale
Una tabella è in 5NF se non viola le seguenti regole:
Ciò significa che un tavolo può essere progettato per la prima volta ed è già in 5NF.
Conclusione
Una tabella è in forma normale di Boyce-Codd Se le seguenti regole sono obbedite:
Una tabella è in 4NF se non viola le seguenti regole:
Una tabella è in 5NF se non viola le seguenti regole:
Il proprietario ora dice: "Questo richiede una grande celebrazione per entrambi."
Tu, lo sviluppatore di database, rispondi: "Perché non aspettiamo fino a domani quando metterò insieme tutte le tabelle e migliorerò sulla tabella dei prodotti?"
Il proprietario reagisce sorridendo: “Cosa farei senza di te?"
Tu, lo sviluppatore di database, aggiungi, sorridendo, “ci vediamo domani, nel tuo ufficio."E vattene.