Skip to main content

Transitīvā atkarība datu bāzē

Anonim

Pārejoša atkarība datu bāzē ir netieša saistība starp vērtībām tajā pašā tabulā, kas izraisa funkcionālu atkarību. Lai sasniegtu trešās normālās formas normalizēšanas standartu (3NF), jums jānovērš jebkura pārejoša atkarība.

Pēc būtības pārnēsājamai atkarībai ir vajadzīgi trīs vai vairāki atribūti (vai datu bāzes kolonnas), kuru starpā ir funkcionāla atkarība, kas nozīmē, ka tabulas A sleja balstās uz B sleju caur starpposmu C.

Apskatīsim, kā tas varētu darboties.

Transitīvās atkarības piemērs

AUTORI

Author_IDAutorsGrāmatuAutora vārds
Auth_001Orson Scott CardEndera spēleSavienotās Valstis
Auth_001Orson Scott CardEndera spēleSavienotās Valstis
Auth_002Margaret AtvudsAmatniecības stāstsKanāda

Iepriekš minētajā AUTHORS piemērā:

  • Grāmatu → Autors : Šeit, Grāmatu atribūts nosaka Autors atribūts Ja jūs zināt grāmatas nosaukumu, varat uzzināt autora vārdu. Tomēr Autors nenosaka Grāmatu , jo autors var rakstīt vairākas grāmatas. Piemēram, tikai tāpēc, ka mēs zinām autora vārdu Orson Scott Card, mēs joprojām nezinām grāmatu nosaukumu.
  • Autors → Autora vārds : Tāpat arī Autors atribūts nosaka Autora vārds , bet ne otrādi; tikai tādēļ, ka mēs zinām valstspiederību, nenozīmē, ka mēs varam noteikt autoru.

Bet šajā tabulā ir iekļauta pārejoša atkarība:

  • Grāmatu → Autora nacionālisms: Ja mēs zinām grāmatu nosaukumu, mēs varam noteikt pilsonību, izmantojot kolonnu Autors.

Izvairīšanās no transitiālas atkarības

Lai nodrošinātu trešo parasto veidlapu, noņemiet transitive atkarību.

Mēs varam sākt, noņēmot kolonnu Grāmata no Autora tabulas un izveidot atsevišķu Grāmatu tabulu:

ZIŅAS

Book_IDGrāmatuAuthor_ID
Book_001Endera spēleAuth_001
Book_001Mīlestības bērniAuth_001
Book_002Amatniecības stāstsAuth_002

AUTORI

Author_IDAutorsAutora vārds
Auth_001Orson Scott CardSavienotās Valstis
Auth_002Margaret AtvudsKanāda

Vai tas salaboja? Apskatīsim mūsu atkarības tagad:

Grāmatu galds:

  • Book_ID → Grāmata: The Grāmatu ir atkarīgs no Book_ID .
  • Šajā tabulā nav citu atkarību, tādēļ mums ir labi. Ievērojiet, ka ārējā atslēga Author_ID šo tabulu savieno ar AUTHORS tabulu, izmantojot primāro atslēgu Author_ID . Mēs esam izveidojuši attiecības, lai izvairītos no pārejošas atkarības, kas ir galvenais relāciju datu bāzu dizains.

AUTHORS tabula:

  • Author_ID → Autors: The Autors ir atkarīgs no Author_ID .
  • Autors → Autora nacionālisms: Pilsonību var noteikt autors.
  • Author_ID → Autora nacionālisms: Pilsonību var noteikt no Author_ID caur Autors atribūts Mums joprojām ir pārejoša atkarība.

Lai šos datus normalizētu, mums jāpievieno trešā tabula:

VALSTIS

Valsts_IDValsts
Coun_001Savienotās Valstis
Coun_002Kanāda

AUTORI

Author_IDAutorsValsts_ID
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtvudsCoun_002

Tagad mums ir trīs tabulas, izmantojot ārējās atslēgas, lai saikne starp tabulām:

  • BOOK tabulas ārējā atslēga Author_ID AUTORS tabulā saista grāmatu autoram.
  • AUTHORS tabulas ārējā atslēga Valsts_ID saista autoru ar valsti VALSTS tabulā.
  • Tabulai COUNTRIES nav ārējās atslēgas, jo nav nepieciešams saistīt to ar citu tabulu šajā dizainā.

Kāpēc transitive atkarības ir slikta datu bāzes dizains

Kāda ir vērtība, kā izvairīties no pārejošām atkarībām, lai palīdzētu nodrošināt 3NF? Atkārtoti izskatiet mūsu pirmo tabulu un redzam jautājumus, ko tā rada:

AUTORI

Author_IDAutorsGrāmatuAutora vārds
Auth_001Orson Scott CardEndera spēleSavienotās Valstis
Auth_001Orson Scott CardMīlestības bērniSavienotās Valstis
Auth_002Margaret AtvudsAmatniecības stāstsKanāda

Šāda veida dizains var veicināt datu anomālijas un pretrunas, piemēram:

  • Ja jūs izdzēsāt divas grāmatas "Bērni no prāta" un "Ender's Game", jūs pilnībā izdzēsīsiet autora "Orsona Scott Card" un viņa pilsonību no datubāzes.
  • Jūs nevarat pievienot jaunu autoru datu bāzē, ja vien neesat pievienojis grāmatu; Ko darīt, ja autors vēl nav publicēts vai arī jūs nezināt tās grāmatas nosaukumu, kuru viņa ir autorējusi?
  • Ja "Orson Scott Card" nomainīs savu pilsonību, jums vajadzētu mainīt to visos ierakstos, kuros viņš parādās. Ja vienam un tam pašam autoram ir vairāki ieraksti, var rasties neprecīzi dati: ja datu ievades persona neapzinās, ka viņam ir vairāki ieraksti un dati tiek mainīti tikai vienā ierakstā?
  • Jūs nevarat izdzēst grāmatu, piemēram, "The Handmaid's Tale", taču arī pilnībā neizdzēšat autoru.

Šie ir tikai daži iemesli, kāpēc normalizācija un izvairoties no pārejošām atkarībām, datu aizsardzībai un konsekvences nodrošināšanai.