Mysql
 sql >> Database >  >> RDS >> Mysql

Normalizzazione in MySQL

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.