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

Normalisering i MYSQL

Jeg forsøger at forsøge at forklare normalisering i lægmandstermer her. For det første er det noget, der gælder for relationsdatabaser (Oracle, Access, MySQL), så det er ikke kun for MySQL.

Normalisering handler om at sikre, at hver tabel har de eneste minimale felter og at slippe af med afhængigheder. Forestil dig, at du har en medarbejderjournal, og hver medarbejder tilhører en afdeling. Hvis du gemmer afdelingen som et felt sammen med medarbejderens øvrige data, har du et problem - hvad sker der, hvis en afdeling fjernes? Du skal opdatere alle afdelingsfelter, og der er mulighed for fejl. Og hvad nu hvis nogle medarbejdere ikke har en afdeling (nytildelt måske?). Nu vil der være nulværdier.

Så normaliseringen er kort fortalt at undgå at have felter, der ville være nul, og at sikre, at alle felterne i tabellen kun tilhører ét domæne af data, der beskrives. For eksempel kan felterne i medarbejdertabellen være id, navn, personnummer, men de tre felter har intet med afdelingen at gøre. Kun medarbejder-id beskriver hvilken afdeling medarbejderen tilhører. Så dette indebærer, at hvilken afdeling en medarbejder er i, skal være i en anden tabel.

Her er en simpel normaliseringsproces.

EMPLOYEE ( < employee_id >, name, social_security, department_name)

Dette er ikke normaliseret, som forklaret. En normaliseret form kunne se ud

EMPLOYEE ( < employee_id >, name, social_security)

Her er tabellen Medarbejder kun ansvarlig for ét sæt data. Så hvor opbevarer vi hvilken afdeling medarbejderen tilhører? I en anden tabel

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

Dette er ikke optimalt. Hvad hvis afdelingsnavnet ændres? (det sker i den amerikanske regering hele tiden). Derfor er det bedre at gøre dette

EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )

Der er først normalform, anden normalform og tredje normalform. Men medmindre du læser et DB-kursus, går jeg normalt bare efter den mest normaliserede form, jeg kunne forstå.

Håber dette hjælper.



  1. Hvordan starter man spring-boot app uden at være afhængig af databasen?

  2. Ydelsesmyter:Overdimensionerede strengsøjler

  3. Henter linket liste i MySQL-database

  4. Konverter et månedsnummer til månedsnavnet i SQL Server (T-SQL)