Skip to content

Vad är övergångsberoende i en databas

17 de juni de 2021
Programmer 57235e293df78c5640e960a7

Ett övergående beroende i en databas är ett indirekt förhållande mellan värden i samma tabell som orsakar ett funktionellt beroende. För att uppnå normaliseringsstandarden för Third Normal Form (3NF) måste du eliminera alla transitiva beroenden. Enligt sin natur kräver ett övergående beroende tre eller flera attribut (eller databaskolumner) som har ett funktionellt beroende mellan sig, vilket innebär att kolumn A i en tabell förlitar sig på kolumn B genom en mellanliggande kolumn C. Låt oss se hur detta kan fungera.

Exempel på transitivt beroende

FÖRfattare

Författare_ID Författare bok Författare_nationalitet
Auth_001 Orson Scott-kort Enders spel Förenta staterna
Auth_001 Orson Scott-kort Mind of Children Förenta staterna
Auth_002 Margaret Atwood Handmaid’s Tale Kanada

I AUTHORS-exemplet ovan:

  • Bok → Författare: Här, den bok attribut bestämmer Författare attribut. Om du känner till boknamnet kan du lära dig författarens namn. I alla fall, Författare bestämmer inte bok, eftersom en författare kan skriva flera böcker. Till exempel bara för att vi vet att författarens namn är Orson Scott-kort, vi vet fortfarande inte boknamnet.
  • Författare → Författare_nationalitet: Likaså Författare attribut bestämmer Författare_nationalitet, men inte tvärtom – bara för att vi vet att författarens nationalitet betyder inte att vi kan bestämma författaren.

Men den här tabellen introducerar ett övergående beroende:

  • Bok → Författare_nationalitet: Om vi ​​känner till boknamnet kan vi bestämma författarens nationalitet via författarkolumnen.

Undvik transitiva beroenden

För att säkerställa tredje normala formen, låt oss ta bort det transitiva beroendet. Vi kan börja med att ta bort bokkolumnen från författartabellen och skapa en separat böktabell:

BÖCKER

Book_ID bok Författare_ID
Bok_001 Enders spel Auth_001
Bok_001 Mind of Children Auth_001
Bok_002 Handmaid’s Tale Auth_002

FÖRfattare

Författare_ID Författare Författare_nationalitet
Auth_001 Orson Scott-kort Förenta staterna
Auth_002 Margaret Atwood Kanada

Fixade det det? Låt oss undersöka våra beroenden nu:

BOKA-tabellen:

  • Book_ID → Book: De bok beror på Book_ID.
  • Inga andra beroenden i denna tabell finns, så vi är okej. Observera att den främmande nyckeln, Författare_ID, länkar denna tabell till tabellen FÖRFATTARE genom dess primära nyckel Författare_ID. Vi har skapat en relation för att undvika ett övergående beroende, en nyckeldesign för relationsdatabaser.

FÖRFATTARE bord:

  • Författare_ID → Författare: Den Författare beror på Författare_ID.
  • Författare → Författare_nationalitet: Nationaliteten kan bestämmas av författaren.
  • Författare_ID → Författare_nationalitet: Nationaliteten kan bestämmas från Författare_ID genom Författare attribut. Vi har fortfarande ett övergående beroende.

Vi måste lägga till en tredje tabell för att normalisera dessa data:

LÄNDER

Land_ID Land
Coun_001 Förenta staterna
Coun_002 Kanada

FÖRfattare

Författare_ID Författare Land_ID
Auth_001 Orson Scott-kort Coun_001
Auth_002 Margaret Atwood Coun_002

Nu har vi tre tabeller, som använder främmande nycklar för att länka mellan tabellerna:

  • BOOK-tabellens utländska nyckel, Författare_ID, länkar en bok till en författare i tabellen FÖRfattare.
  • AUTHORS-tabellens utländska nyckel, Land_ID, länkar en författare till ett land i COUNTRIES-tabellen.
  • LÄNDER-tabellen har ingen främmande nyckel eftersom den inte behöver länka till en annan tabell i denna design.

Varför transitiva beroenden är dålig databasdesign

Vad är värdet av att undvika transitiva beroenden för att säkerställa 3NF? Låt oss överväga vårt första bord igen och se de problem det skapar:

FÖRfattare

Författare_ID Författare bok Författare_nationalitet
Auth_001 Orson Scott-kort Enders spel Förenta staterna
Auth_001 Orson Scott-kort Mind of Children Förenta staterna
Auth_002 Margaret Atwood Handmaid’s Tale Kanada

Denna typ av design kan bidra till dataavvikelser och inkonsekvenser, till exempel:

  • Om du har tagit bort de två böckerna Mind of Children och Enders spel, du skulle ta bort författaren ”Orson Scott Card” och hans nationalitet helt från databasen.
  • Du kan inte lägga till en ny författare i databasen om du inte också lägger till en bok. Vad händer om författaren ännu inte har publicerats eller om du inte vet namnet på en bok de författat?
  • Om ”Orson Scott Card” ändrade sitt medborgarskap skulle du behöva ändra hans medborgarskap i alla register där han förekommer. Att ha flera poster med samma författare kan resultera i felaktiga uppgifter. Vad händer om datainmatningspersonen inte inser att det finns flera poster för någon och ändrar data i endast en post?
  • Du kan inte ta bort en bok som Handmaid’s Tale utan att också helt radera författaren.

Vanliga frågor

  • Vilka typer av beroenden i ett databashanteringssystem? Det finns fyra typer av databasberoende: triviella funktionella beroenden, fullständiga funktionella beroenden, transitiva beroenden och flervärdesberoenden.
  • Hur skiljer sig funktionellt beroende från transitivt beroende? I databashantering är beroende en relation mellan två eller flera attribut (kolumner). Medan funktionellt beroende är en koppling mellan två attribut av samma relation, uppstår transitivt beroende när ett indirekt förhållande orsakar funktionellt beroende.