Skip to main content

Transitiv beroende i en databas

#truckereala207 - VREAU SA VAD CAT DORM (April 2025)

#truckereala207 - VREAU SA VAD CAT DORM (April 2025)
Anonim

Ett transitivt 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 tredje normala formuläret (3NF) måste du eliminera alla transitiva beroende.

Av sin natur kräver ett transitivt beroende tre eller flera attribut (eller databaskkolumner) som har ett funktionellt beroende mellan dem, vilket betyder att kolumn A i ett bord beror på kolumn B genom en mellanliggande kolumn C.

Låt oss se hur det här kan fungera.

Transitivt beroende exempel

FÖRFATTARE

Author_IDFörfattarebokAuthor_Nationality
Auth_001Orson Scott CardEnders spelFörenta staterna
Auth_001Orson Scott CardEnders spelFörenta staterna
Auth_002Margaret AtwoodTjänstemanens Talekanada

I AUTHORS exempel ovan:

  • bok → Författare : Här, den bok attributet bestämmer Författare attribut. Om du känner till boknamnet kan du lära sig författarens namn. Dock, Författare bestämmer inte bok , eftersom en författare kan skriva flera böcker. Till exempel, bara för att vi känner till författarens namn Orson Scott Card, vet vi fortfarande inte boknamnet.
  • Författare → Author_Nationality : Likaså Författare attributet bestämmer Author_Nationality , men inte tvärtom; bara för att vi vet nationaliteten betyder inte att vi kan bestämma författaren.

Men denna tabell introducerar ett transitivt beroende:

  • bok → Author_Nationality: Om vi ​​känner till boknamnet kan vi bestämma nationaliteten via kolumnen författare.

Undvik Transitiv Beroende

För att säkerställa tredje normala formuläret, låt oss ta bort det transitiva beroendet.

Vi kan börja med att ta bort kolumnen Bok från författarbordet och skapa ett separat böckerstabell:

BÖCKER

Book_IDbokAuthor_ID
Book_001Enders spelAuth_001
Book_001Barn av sinnetAuth_001
Book_002Tjänstemanens TaleAuth_002

FÖRFATTARE

Author_IDFörfattareAuthor_Nationality
Auth_001Orson Scott CardFörenta staterna
Auth_002Margaret Atwoodkanada

Rättade det här? Låt oss undersöka våra beroenden nu:

BOOKS-bordet:

  • Book_ID → Bok: De bok beror på Book_ID .
  • Inga andra beroenden i denna tabell finns, så vi är okej. Observera att den främmande nyckeln Author_ID länkar denna tabell till AUTHORS-tabellen genom sin primära nyckel Author_ID . Vi har skapat ett förhållande för att undvika ett transitivt beroende, en nyckeldesign av relationsdatabaser.

Författare bordet:

  • Author_ID → Författare: De Författare beror på Author_ID .
  • Författare → Author_Nationality: Nationaliteten kan bestämmas av författaren.
  • Author_ID → Author_Nationality: Nationaliteten kan bestämmas från Author_ID genom Författare attribut. Vi har fortfarande ett transitivt beroende.

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

LÄNDER

Country_IDLand
Coun_001Förenta staterna
Coun_002kanada

FÖRFATTARE

Author_IDFörfattareCountry_ID
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtwoodCoun_002

Nu har vi tre bord, med hjälp av främmande nycklar för att länka mellan borden:

  • BOOK bordets främmande nyckel Author_ID länkar en bok till en författare i tabellen AUTHORS.
  • AUTHORS tabellen är främmande nyckel Country_ID länkar en författare till ett land i tabellen LÄNDER.
  • LÄNDER-tabellen har ingen utländsk nyckel eftersom det inte finns något behov av att länka till en annan tabell i den här designen.

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

Author_IDFörfattarebokAuthor_Nationality
Auth_001Orson Scott CardEnders spelFörenta staterna
Auth_001Orson Scott CardBarn av sinnetFörenta staterna
Auth_002Margaret AtwoodTjänstemanens Talekanada

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

  • Om du raderade de två böckerna "Barn av sinnet" och "Ender's Game" skulle du radera författaren "Orson Scott Card" och hans nationalitet helt från databasen.
  • Du kan inte lägga till en ny författare i databasen såvida du inte lägger till en bok. vad händer om författaren ännu inte är offentliggjord eller du inte vet namnet på en bok som hon har författat?
  • Om "Orson Scott Card" ändrade sitt medborgarskap, skulle du behöva ändra det i alla poster där han visas. Att ha flera poster med samma författare kan resultera i felaktiga data: Vad händer om datainmatningspersonen inte inser att det finns flera poster för honom och ändrar data i en enda post?
  • Du kan inte ta bort en bok som "The Handmaid's Tale" utan att helt och hållet radera författaren.

Det här är bara några orsaker till att normalisering och undvikande av transitiva beroenden skyddar data och säkerställer konsekvens.