Skip to main content

Sätta en databas i första normala formuläret

Normalisering - DB1100 (April 2025)

Normalisering - DB1100 (April 2025)
Anonim

Första Normal Form (1NF) anger grundläggande regler för en organiserad databas:

  • Eliminera dupliceringskolumner från samma tabell.
  • Skapa separata tabeller för varje grupp av relaterade data och identifiera varje rad med en unik kolumn (den primära nyckeln).

Vad betyder dessa regler när man överväger den praktiska utformningen av en databas? Det är faktiskt ganska enkelt.

Eliminera dubbelarbete

Den första regeln dikterar att vi inte får duplicera data inom samma rad i ett bord. Inom databasgemenskapen kallas detta begrepp som en tabellens atomitet. Tabeller som följer denna regel sägs vara atomära. Låt oss utforska denna princip med ett klassiskt exempel: en tabell i en personaldatabas som lagrar det underordnade förhållandet mellan chef och chef. I vårt exempel ska vi införa affärsregeln att varje chef kan ha en eller flera underordnade, medan varje underordnad kan ha endast en chef.

Intuitivt kan vi skapa en tabell med följande fält när vi skapar en lista eller ett kalkylblad för att spåra den här informationen:

  • Chef
  • Subordinate1
  • Subordinate2
  • Subordinate3
  • Subordinate4

Kom dock ihåg den första regel som införs av 1NF: Eliminera dubbla kolumner från samma tabell. Det är uppenbart att kolumnerna Underordnade1-Underordnade4 är dubbletter. Ta en stund och fundera över problemen som uppstår i detta scenario. Om en chef endast har en underordnad, slås kolumnen Subordinate2-Subordinate4 helt enkelt bort lagringsutrymme (en värdefull databasvara). Föreställ dig även om en chef redan har 4 underordnade - vad händer om hon tar på sig en annan anställd? Hela bordstrukturen skulle kräva modifiering.

Vid den här tiden uppträder en andra ljus idé vanligtvis för databasen nybörjare: Vi vill inte ha mer än en kolumn och vi vill tillåta en flexibel mängd datalagring. Låt oss försöka något så här:

  • Chef
  • underlydande

Och fältet Underordnade skulle innehålla flera poster i formuläret "Mary, Bill, Joe."

Denna lösning är närmare, men den saknar också märket. Underordnad kolumnen är fortfarande duplicativ och icke-atomisk. Vad händer när vi behöver lägga till eller ta bort en underordnad? Vi måste läsa och skriva hela innehållet i tabellen. Det är inte en stor sak i den här situationen, men vad händer om en chef hade hundra anställda? Det komplicerar också processen att välja data från databasen i framtida frågor.

Här är ett bord som uppfyller 1NF: s första regel:

  • Chef
  • Underlydande

I det här fallet har varje underordnad en enda post, men chefer kan ha flera poster.

Identifiera den primära nyckeln

Vad sägs om den andra regeln: identifiera varje rad med en unik kolumn eller uppsättning kolumner (primärnyckeln). Du kan ta en titt på tabellen ovan och föreslå användningen av underordnad kolumn som en primär nyckel. Faktum är att den underordnade kolumnen är en bra kandidat för en primärnyckel på grund av det faktum att våra affärsregler anger att varje underordnad kan ha endast en chef. De uppgifter som vi har valt att lagra i vårt bord gör det här en mindre än idealisk lösning. Vad händer om vi anlitar en annan anställd som heter Jim? Hur lagrar vi hans manager-underordnade förhållande i databasen?

Det är bäst att använda en helt unik identifierare (som ett anställnings-ID) som en primär nyckel. Vårt finalbord skulle se ut så här:

  • Manager ID
  • Underordnat ID

Nu är vårt bord i första normala form! Utöver detta finns det alternativ för att sätta din databas i Second Normal Form och Third Normal Form om du är glad över ännu mer organisation.