Skip to main content

Transitinė priklausomybė duomenų bazėje

Anonim

Perdavimo priklausomybė duomenų bazėje yra netiesioginis ryšys tarp verčių toje pačioje lentelėje, dėl kurios atsiranda funkcinė priklausomybė. Norint pasiekti trečiosios įprastos formos normalizavimo standartą (3NF), turite pašalinti bet kokią pereinamąją priklausomybę.

Dėl savo pobūdžio pereinamojo priklausomumo reikalauja trys ar daugiau atributų (arba duomenų bazių stulpelių), kurie tarp jų yra funkcinė priklausomybė, o tai reiškia, kad lentelės A stulpelis remiasi B stulpeliu per tarpinę C stulpelį.

Pažiūrėkime, kaip tai gali paveikti.

Tranzitinis priklausomybės pavyzdys

AUTORIAI

Author_IDAutoriusKnygaAutoriaus vardas
Auth_001Orson Scott CardEnderio žaidimasJungtinės Valstijos
Auth_001Orson Scott CardEnderio žaidimasJungtinės Valstijos
Auth_002Margaret AtwoodHandmaid pasakaKanada

Toliau pateiktame AUTHORS pavyzdyje:

  • Knyga → Autorius : Čia, Knyga atributas nustato Autorius atributas. Jei žinote knygos pavadinimą, galite sužinoti autoriaus vardą. Tačiau Autorius nenustato Knyga , nes autorius gali rašyti keletą knygų. Pavyzdžiui, tik todėl, kad žinome autoriaus vardą Orsoną Scott Cardą, mes vis dar nežinome knygos pavadinimo.
  • Autorius → Autoriaus vardas : Taip pat, Autorius atributas nustato Autoriaus vardas , bet ne priešinga kryptimi; tik todėl, kad mes žinome tautybę, nereiškia, kad mes galime nustatyti autorių.

Tačiau šioje lentelėje pateikiama pereinamoji priklausomybė:

  • Knyga → Autoriaus vardas: Jei žinome knygos pavadinimą, mes galime nustatyti tautybę per stulpelį Autorius.

Pereinamojo priklausomybės vengimas

Norint užtikrinti trečią įprastinę formą, leiskite pašalinti pereinamąjį priklausomybę.

Mes galime pradėti, pašalindami stulpelį "Knyga" iš lentelės "Autoriai" ir sukūrę atskirą Knygų lentelę:

Knygos

Book_IDKnygaAuthor_ID
Book_001Enderio žaidimasAuth_001
Book_001Proto vaikaiAuth_001
Book_002Handmaid pasakaAuth_002

AUTORIAI

Author_IDAutoriusAutoriaus vardas
Auth_001Orson Scott CardJungtinės Valstijos
Auth_002Margaret AtwoodKanada

Ar tai išsprendė? Dabar patikrinkime priklausomybes:

Knygų lentelė:

  • Book_ID → Knyga: The Knyga priklauso nuo Book_ID .
  • Jokios kitos šios lentelės priklausomybės nėra, todėl mes viskas gerai. Atkreipkite dėmesį, kad užsienio raktas Author_ID šią lentelę perjungia į AUTHORS lentelę per pirminį raktą Author_ID . Mes sukūrėme santykius, kad išvengtume pereinamojo priklausomumo, kuris yra pagrindinis reliacinių duomenų bazių dizainas.

AUTHORS stalas:

  • Author_ID → Autorius: The Autorius priklauso nuo Author_ID .
  • Autorius → Autoriaus vardas: Pilietybę gali nustatyti autorius.
  • Author_ID → Autoriaus vardas: Pilietybę galima nustatyti iš Author_ID pro Autorius atributas. Mes vis dar turime pereinamąją priklausomybę.

Norint normalizuoti šiuos duomenis, turime pridėti trečią lentelę:

ŠALYS

Country_IDŠalis
Coun_001Jungtinės Valstijos
Coun_002Kanada

AUTORIAI

Author_IDAutoriusCountry_ID
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtwoodCoun_002

Dabar mes turime tris lenteles, naudodami užsienio klavišus, norėdami susieti stalus:

  • KNYGOS lentelės išorinis raktas Author_ID AUTORIŲ lentelėje siejama knyga su autoriu.
  • AUTHORS lentelės išorinis raktas Country_ID nuorodas į šalį, esančią lentelėje "COUNTRIES".
  • Lentelėje "COUNTRIES" nėra išorinio rakto, nes nereikia susieti su kita šio dizaino lentelė.

Kodėl tranzitinės priklausomybės yra blogos duomenų bazės dizainas

Kokia vertė išvengti pereinamųjų priklausomybių, siekiant padėti užtikrinti 3NF? Dar kartą apsvarstykite mūsų pirmąją lentelę ir peržiūrėkite jos sukurtas problemas:

AUTORIAI

Author_IDAutoriusKnygaAutoriaus vardas
Auth_001Orson Scott CardEnderio žaidimasJungtinės Valstijos
Auth_001Orson Scott CardProto vaikaiJungtinės Valstijos
Auth_002Margaret AtwoodHandmaid pasakaKanada

Toks dizainas gali prisidėti prie duomenų anomalijų ir neatitikimų, pavyzdžiui:

  • Jei ištrynėte dvi knygas "Vaikai iš proto" ir "Ender's Game", jūs išbraukėte autorių "Orson Scott Card" ir jo pilietybę visiškai iš duomenų bazės.
  • Negalite pridėti naujo autoriaus į duomenų bazę, jei taip pat nepridėsite knygos; kas, jei autorius dar nepaskelbtas, ar nežinote jos autoriaus knygos pavadinimo?
  • Jei "Orson Scott Card" pakeitė savo pilietybę, jums reikės pakeisti jį visuose įrašuose, kuriuose jis pasirodys. Turėdami keletą įrašų su tuo pačiu autoriu gali būti netikslūs duomenys: kas, jei duomenų įvedimo asmuo nesupranta, jam yra keli įrašai ir duomenys keičia tik vieną įrašą?
  • Negalite ištrinti knygos, tokios kaip "The Handmaid's Tale", taip pat visiškai nepašalinus autoriaus.

Tai yra tik keletas priežasčių, kodėl normalizavimas ir išvengimas pereinamojo laikotarpio priklausomybių, duomenų apsaugos ir nuoseklumo užtikrinimo.