Provo a tentare di spiegare la normalizzazione in termini semplici qui. Prima di tutto, è qualcosa che si applica ai database relazionali (Oracle, Access, MySQL), quindi non è solo per MySQL.
La normalizzazione consiste nell'assicurarsi che ogni tabella abbia gli unici campi minimi e nell'eliminare le dipendenze. Immagina di avere un record di dipendenti e ogni dipendente appartiene a un dipartimento. Se memorizzi il reparto come campo insieme agli altri dati del dipendente, hai un problema:cosa succede se un reparto viene rimosso? Devi aggiornare tutti i campi del dipartimento e c'è possibilità di errore. E se alcuni dipendenti non hanno un reparto (appena assegnato, forse?). Ora ci saranno valori nulli.
Quindi la normalizzazione, in breve, consiste nell'evitare di avere campi che sarebbero nulli, e fare in modo che tutti i campi della tabella appartengano a un solo dominio di dati descritto. Ad esempio, nella tabella dei dipendenti, i campi potrebbero essere id, nome, numero di previdenza sociale, ma questi tre campi non hanno nulla a che fare con il dipartimento. Solo l'ID dipendente descrive a quale reparto appartiene il dipendente. Quindi questo implica che il dipartimento in cui si trova un dipendente dovrebbe essere in un'altra tabella.
Ecco un semplice processo di normalizzazione.
EMPLOYEE ( < employee_id >, name, social_security, department_name)
Questo non è normalizzato, come spiegato. Potrebbe sembrare un modulo normalizzato
EMPLOYEE ( < employee_id >, name, social_security)
In questo caso, la tabella Dipendente è responsabile solo di un insieme di dati. Allora, dove immagazziniamo a quale reparto appartiene il dipendente? In un'altra tabella
EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )
Questo non è ottimale. E se il nome del dipartimento cambia? (succede sempre nel governo degli Stati Uniti). Quindi è meglio farlo
EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )
Ci sono prima forma normale, seconda forma normale e terza forma normale. Ma a meno che tu non stia studiando un corso di DB, di solito vado solo per la forma più normalizzata che potrei capire.
Spero che questo aiuti.