database normalization tutorial
Questo tutorial spiegherà cos'è la normalizzazione del database e varie forme normali come 1NF 2NF 3NF e BCNF con esempi di codice SQL:
La normalizzazione del database è una tecnica ben nota utilizzata per la progettazione dello schema del database.
Lo scopo principale dell'applicazione della tecnica di normalizzazione è ridurre la ridondanza e la dipendenza dei dati. La normalizzazione ci aiuta a suddividere tabelle di grandi dimensioni in più tabelle piccole definendo una relazione logica tra queste tabelle.
Cosa imparerai:
- Che cos'è la normalizzazione del database?
- Conclusione
Che cos'è la normalizzazione del database?
La normalizzazione del database o la normalizzazione SQL ci aiuta a raggruppare i dati correlati in un'unica tabella. Tutti i dati attributivi o indirettamente correlati vengono inseriti in tabelle diverse e queste tabelle sono connesse con una relazione logica tra le tabelle padre e figlio.
Nel 1970, Edgar F. Codd presentò il concetto di normalizzazione. Ha condiviso un documento chiamato 'Un modello relazionale di dati per grandi banche condivise' in cui ha proposto 'First Normal Form (1NF)'.
Vantaggi della normalizzazione DBMS
La normalizzazione del database offre i seguenti vantaggi di base:
- La normalizzazione aumenta la coerenza dei dati poiché evita la duplicità dei dati archiviando i dati in un unico posto.
- La normalizzazione aiuta a raggruppare dati simili o correlati sotto lo stesso schema, risultando così in un migliore raggruppamento dei dati.
- La normalizzazione migliora la ricerca più velocemente poiché gli indici possono essere creati più velocemente. Pertanto, il database o la tabella normalizzati vengono utilizzati per OLTP (Online Transaction Processing).
Svantaggi della normalizzazione del database
La normalizzazione DBMS presenta i seguenti svantaggi:
- Non riusciamo a trovare i dati associati per, diciamo, un prodotto o un dipendente in un unico posto e dobbiamo partecipare a più di una tabella. Ciò causa un ritardo nel recupero dei dati.
- Pertanto, la normalizzazione non è una buona opzione nelle transazioni OLAP (elaborazione analitica in linea).
Prima di procedere oltre, comprendiamo i seguenti termini:
- Entità: L'entità è un oggetto della vita reale, in cui i dati associati a tale oggetto sono memorizzati nella tabella. L'esempio di tali oggetti sono dipendenti, dipartimenti, studenti, ecc.
- Attributi: Gli attributi sono le caratteristiche dell'entità, che forniscono alcune informazioni sull'entità. Per esempio, se le tabelle sono entità, le colonne sono i loro attributi.
Tipi di forme normali
# 1) 1NF (prima forma normale)
Per definizione, un'entità che non dispone di colonne o gruppi di dati ripetuti può essere definita prima forma normale. Nella prima forma normale, ogni colonna è unica.
Di seguito è riportato come sarebbe stata la nostra tabella Dipendenti e reparto se nella prima forma normale (1NF):
empNum | cognome | nome di battesimo | deptName | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Jack | Conti | New York | stati Uniti |
1002 | Schwatz | Mike | Tecnologia | New York | stati Uniti |
1009 | Tazza | Harry | HR | Berlino | Germania |
1007 | Harvey | Parker | Admin | Londra | Regno Unito |
1007 | Harvey | Parker | HR | Londra | Regno Unito |
Qui, tutte le colonne delle tabelle Employees e Department sono state riunite in una sola e non è necessario collegare colonne, come deptNum, poiché tutti i dati sono disponibili in un unico posto.
Ma una tabella come questa con tutte le colonne richieste, non solo sarebbe difficile da gestire ma anche difficile da eseguire e anche inefficiente dal punto di vista dell'archiviazione.
# 2) 2NF (Seconda forma normale)
Per definizione, un'entità che è 1NF e uno dei suoi attributi è definita come chiave primaria e gli attributi rimanenti dipendono dalla chiave primaria.
Di seguito è riportato un esempio di come apparirebbero i dipendenti e la tabella del reparto:
Tabella dipendenti:
empNum | cognome | nome di battesimo |
---|---|---|
1001 | Andrews | Jack |
1002 | Schwatz | Mike |
1009 | Tazza | Harry |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Tabella dei dipartimenti:
deptNum | deptName | deptCity | deptCountry |
---|---|---|---|
1 | Conti | New York | stati Uniti |
Due | Tecnologia | New York | stati Uniti |
3 | HR | Berlino | Germania |
4 | Admin | Londra | Regno Unito |
Tabella EmpDept:
empDeptID | empNum | deptNum |
---|---|---|
1 | 1001 | 1 |
Due | 1002 | Due |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Qui, possiamo osservare che abbiamo diviso la tabella nella forma 1NF in tre diverse tabelle. la tabella Employees è un'entità relativa a tutti i dipendenti di un'azienda e i suoi attributi descrivono le proprietà di ogni dipendente. La chiave primaria per questa tabella è empNum.
Allo stesso modo, la tabella Reparti è un'entità relativa a tutti i reparti di un'azienda e i suoi attributi descrivono le proprietà di ogni reparto. La chiave primaria per questa tabella è deptNum.
Nella terza tabella, abbiamo combinato le chiavi primarie di entrambe le tabelle. Le chiavi primarie delle tabelle Dipendenti e Dipartimenti sono denominate chiavi esterne in questa terza tabella.
Se l'utente vuole un output simile a quello che avevamo in 1NF, allora l'utente deve unire tutte e tre le tabelle, utilizzando le chiavi primarie.
Una query di esempio dovrebbe apparire come mostrato di seguito:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR;
# 3) 3NF (terza forma normale)
Per definizione, una tabella è considerata nella terza normale se la tabella / entità è già nella seconda forma normale e le colonne della tabella / entità sono dipendenti non transitivamente dalla chiave primaria.
Comprendiamo la dipendenza non transitiva, con l'aiuto del seguente esempio.
Supponiamo che una tabella denominata, Cliente abbia le seguenti colonne:
Identificativo del cliente - Chiave primaria che identifica un cliente unico
CustomerZIP - CAP della località in cui risiede il cliente
CustomerCity - Città in cui risiede il cliente
Nel caso precedente, la colonna CustomerCity dipende dalla colonna CustomerZIP e la colonna CustomerZIP dipende da CustomerID.
Lo scenario precedente è chiamato dipendenza transitiva della colonna CustomerCity dal CustomerID, ovvero la chiave primaria. Dopo aver compreso la dipendenza transitiva, ora discutiamo il problema con questa dipendenza.
Potrebbe esserci un possibile scenario in cui viene effettuato un aggiornamento indesiderato alla tabella per aggiornare CustomerZIP a un codice postale di una città diversa senza aggiornare CustomerCity, lasciando così il database in uno stato incoerente.
Per risolvere questo problema, è necessario rimuovere la dipendenza transitiva che potrebbe essere eseguita creando un'altra tabella, ad esempio, la tabella CustZIP che contiene due colonne, ovvero CustomerZIP (come chiave primaria) e CustomerCity.
La colonna CustomerZIP nella tabella Customer è una chiave esterna per CustomerZIP nella tabella CustZIP. Questa relazione garantisce che non vi siano anomalie negli aggiornamenti in cui un CustomerZIP viene aggiornato senza apportare modifiche a CustomerCity.
# 4) Boyce-Codd Normal Form (3.5 Normal Form)
Per definizione, la tabella è considerata Forma Normale Boyce-Codd, se è già nella Terza Forma Normale e per ogni dipendenza funzionale tra A e B, A dovrebbe essere una super chiave.
Questa definizione sembra un po 'complicata. Proviamo a romperlo per capirlo meglio.
- Dipendenza funzionale: Si dice che gli attributi o le colonne di una tabella dipendono dal punto di vista funzionale quando un attributo o una colonna di una tabella identifica in modo univoco un altro attributo o una colonna della stessa tabella.
Per esempio, la colonna empNum o Employee Number identifica in modo univoco le altre colonne come Employee Name, Employee Salary, ecc. nella tabella Employee. - Super chiave: Una singola chiave o un gruppo di più chiavi che potrebbero identificare in modo univoco una singola riga in una tabella può essere definito Super Key. In termini generali, conosciamo chiavi come Composite Keys.
Consideriamo il seguente scenario per capire quando c'è un problema con la terza forma normale e in che modo Boyce-Codd forma normale viene in soccorso.
empNum | nome di battesimo | empCity | deptName | deptHead |
---|---|---|---|---|
1001 | Jack | New York | Conti | Raymond |
1001 | Jack | New York | Tecnologia | Donald |
1002 | Harry | Berlino | Conti | Samara |
1007 | Parker | Londra | HR | Elisabetta |
1007 | Parker | Londra | Infrastruttura | Tom |
Nell'esempio precedente, i dipendenti con empNum 1001 e 1007 lavorano in due diversi reparti. Ogni dipartimento ha un capo dipartimento. Possono esserci più capi dipartimento per ogni dipartimento. Come per il reparto contabilità, Raymond e Samara sono i due capi dei dipartimenti.
In questo caso, empNum e deptName sono super chiavi, il che implica che deptName è un attributo principale. Sulla base di queste due colonne, possiamo identificare ogni singola riga in modo univoco.
Inoltre, deptName dipende da deptHead, il che implica che deptHead è un attributo non primo. Questo criterio squalifica il tavolo dall'essere parte di BCNF.
Per risolvere questo problema, suddivideremo la tabella in tre diverse tabelle come indicato di seguito:
Tabella dipendenti:
empNum | nome di battesimo | empCity | deptNum |
---|---|---|---|
1001 | Jack | New York | D1 |
1001 | Jack | New York | D2 |
1002 | Harry | Berlino | D1 |
1007 | Parker | Londra | D3 |
1007 | Parker | Londra | D4 |
Tabella reparto:
deptNum | deptName | deptHead |
---|---|---|
D1 | Conti | Raymond |
D2 | Tecnologia | Donald |
D1 | Conti | Samara |
D3 | HR | Elisabetta |
D4 | Infrastruttura | Tom |
# 5) Quarta forma normale (4 forma normale)
Per definizione, una tabella è in Quarta forma normale, se non ha due o più dati indipendenti che descrivono l'entità rilevante.
# 6) Quinta forma normale (5 forma normale)
Una tabella può essere considerata nella quinta forma normale solo se soddisfa le condizioni per la quarta forma normale e può essere suddivisa in più tabelle senza perdita di dati.
Domande e risposte frequenti
D # 1) Che cos'è la normalizzazione in un database?
Risposta: La normalizzazione del database è una tecnica di progettazione. Usando questo possiamo progettare o riprogettare schemi nel database per ridurre i dati ridondanti e la dipendenza dei dati suddividendo i dati in tabelle più piccole e più rilevanti.
Q # 2) Quali sono i diversi tipi di normalizzazione?
Risposta: Di seguito sono riportati i diversi tipi di tecniche di normalizzazione che possono essere impiegate per progettare schemi di database:
- Prima forma normale (1NF)
- Seconda forma normale (2NF)
- Terza forma normale (3NF)
- Forma normale di Boyce-Codd (3.5NF)
- Quarta forma normale (4NF)
- Quinta forma normale (5NF)
D # 3) Qual è lo scopo della normalizzazione?
Risposta: Lo scopo principale della normalizzazione è ridurre la ridondanza dei dati, ovvero i dati devono essere archiviati una sola volta. Questo per evitare eventuali anomalie dei dati che potrebbero verificarsi quando si tenta di memorizzare gli stessi dati in due tabelle diverse, ma le modifiche vengono applicate solo a una e non all'altra.
Q # 4) Cos'è la denormalizzazione?
Risposta: La denormalizzazione è una tecnica per aumentare le prestazioni del database. Questa tecnica aggiunge dati ridondanti al database, contrariamente al database normalizzato che rimuove la ridondanza dei dati.
Questo viene fatto in enormi database in cui l'esecuzione di un JOIN per ottenere dati da più tabelle è un affare costoso. Pertanto, i dati ridondanti vengono archiviati in più tabelle per evitare operazioni JOIN.
convertire youtube in mp4 gratuitamente online
Conclusione
Finora, siamo passati attraverso tre moduli di normalizzazione del database.
Teoricamente, esistono forme più elevate di normalizzazione del database come Boyce-Codd Normal Form, 4NF, 5NF. Tuttavia, 3NF è il modulo di normalizzazione ampiamente utilizzato nei database di produzione.
Buona lettura!!
Lettura consigliata
- Test di database con JMeter
- MongoDB Crea backup del database
- Tutorial sulla creazione di database di MongoDB
- I 10 migliori strumenti di progettazione di database per creare modelli di dati complessi
- Prestazioni MongoDB: blocco delle prestazioni, errori di pagina e profilazione del database
- Altibase Open Source Relational Database Review
- MongoDB Database Profiler per il monitoraggio di query e prestazioni
- Come testare il database Oracle