Jag försöker försöka förklara normalisering i lekmannatermer här. För det första är det något som gäller relationsdatabas (Oracle, Access, MySQL) så det är inte bara för MySQL.
Normalisering handlar om att se till att varje tabell har de enda minimala fälten och att bli av med beroenden. Föreställ dig att du har ett anställningsregister och varje anställd tillhör en avdelning. Om du lagrar avdelningen som ett fält tillsammans med den anställdes övriga data har du ett problem - vad händer om en avdelning tas bort? Du måste uppdatera alla avdelningsfält och det finns risk för fel. Och tänk om vissa anställda inte har en avdelning (nytilldelad kanske?). Nu kommer det att finnas nollvärden.
Så normaliseringen, i korthet, är att undvika att ha fält som skulle vara null, och att se till att alla fält i tabellen bara tillhör en domän av data som beskrivs. Till exempel i personaltabellen kan fälten vara id, namn, personnummer, men de tre fälten har inget med avdelningen att göra. Endast medarbetar-id beskriver vilken avdelning medarbetaren tillhör. Så detta innebär att vilken avdelning en anställd är på bör finnas i en annan tabell.
Här är en enkel normaliseringsprocess.
EMPLOYEE ( < employee_id >, name, social_security, department_name)
Detta är inte normaliserat, som förklarats. En normaliserad form kan se ut som
EMPLOYEE ( < employee_id >, name, social_security)
Här är tabellen Anställd endast ansvarig för en uppsättning data. Så var lagrar vi vilken avdelning medarbetaren tillhör? I en annan tabell
EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )
Detta är inte optimalt. Vad händer om avdelningens namn ändras? (det händer i den amerikanska regeringen hela tiden). Därför är det bättre att göra detta
EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )
Det finns första normalformen, andra normalformen och tredje normalformen. Men såvida du inte läser en DB-kurs, brukar jag bara välja den mest normaliserade form jag kan förstå.
Hoppas detta hjälper.