Guide: Databasenormalisering
PHP- & MySQL-innføring: Kapittel 9
Tredje normalform
Den tredje normalformen krever at alle data i en tabell ikke er avhengig av data som ikke er en del av en nøkkel.
Kravene for å nå tredje normalform er altså at tabellen må være i andre normalform, og at alle kolonner som ikke er nøkler ikke er avhengig av andre kolonner som heller ikke er nøkler.
Om vi ser på vår kontaktliste igjen, kunne en representasjon av postadressen til en person vært følgende;
| PN | Navn | Gate | Nr | Postnummer | Poststed |
|---|---|---|---|---|---|
| 1 | Ola Nordmann | Blåklokkeveien | 73 | 6150 | Ørsta |
I denne tabellen er det to avhengigheter som kan omfattes av tredje normalform; poststed er ikke avhengig av primærnøkkelen i tabellen, men av postnummeret (men postnummeret er avhengig av primærnøkkelen). Gatenummeret er avhengig av primærnøkkelen, men også av gatenavnet og postnummeret. Den er litt verre å se, men det er på grunn av at noen gater ikke har gitte gatenummer. Denne er derimot så obskur og vanskelig å implementere at den ignoreres, og det er ikke uvanlig å foreta slike forenklinger. I dette tilfellet vil det være praktisk umulig å gjøre noe med, og derfor ignorerer vi den.
Men vi er likevel nødt til å gjøre noe med koblingen mellom postnummer og poststed. Siden poststed er det eneste som er avhengig av postnummer, blir tabellen vi splitter disse to ut i svært liten;
| Postnummer | Poststed |
|---|---|
| 6150 | Ørsta |
Vi kan bruke postnummeret som primærnøkkel for denne tabellen, siden postnummeret garantert er unikt. Den andre tabellen blir da seende slik ut;
| PN | Navn | Gate | Nr | Postnummer |
|---|---|---|---|---|
| 1 | Ola Nordmann | Blåklokkeveien | 73 | 6150 |
Det eneste som har skjedd her, er at vi har fjernet poststed fra tabellen. Om vi hadde måttet introdusert en ny primærnøkkel i postnummer-tabellen vår, ville vi hatt den nye primærnøkkelen oppgitt i postnummer-feltet i denne tabellen i stedet. Og vi får også redusert datamengden det er snakk om, i alle fall om vi har mange innbyggere fra samme område i databasen. Posten Norge leverer en nedlastbar liste med postnummer og poststed som du kan bruke til å fylle den første tabellen med.
Som du kan se, har vi ikke tapt noen informasjon på å gå over fra andre til tredje normalform. Vi har faktisk spart lagringsplass i det lange løp, selv om tabellen som inneholder alle postnumrene kan bli ganske stor.
Før du går videre til neste side, anbefaler vi at du forsøker å utarbeide din egen løsning på dagens eksempel. Sett opp et databaseskjema, og legg inn litt eksempeldata for å se om databaseskjemaet gjør det du vil.
- 1 – Introduksjon
- 2 – Dagens eksempel
- 3 – Første normalform
- 4 – Andre normalform
- 5 – Tredje normalform
- 6 – Løsning
- 7 – Oppsummering
Les også
-
Les hele saken »
Guide:
PHP- & MySQL-innføring: Kapittel 8
-
Les hele saken »
Guide:
PHP- & MySQL-innføring: Kapittel 7
-
Les hele saken »
Guide:
PHP- & MySQL-innføring: Kapittel 6
-
Les hele saken »
Guide:
PHP- & MySQL-innføring: Kapittel 5
-
Les hele saken »
Guide:
PHP- & MySQL-innføring: Kapittel 4
-
Guide: PHP- & MySQL-innføring: Kapittel 3
Les hele saken »