Venkite tranzitinių priklausomybių, siekiant padėti normalizuoti
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_ID | Autorius | Knyga | Autoriaus vardas |
---|---|---|---|
Auth_001 | Orson Scott Card | Enderio žaidimas | Jungtinės Valstijos |
Auth_001 | Orson Scott Card | Enderio žaidimas | Jungtinės Valstijos |
Auth_002 | Margaret Atwood | Handmaid pasaka | Kanada |
Toliau pateiktame AUTHORS pavyzdyje:
- Knyga → Autorius : čia atributas " knyga" nustato atributą " Autorius" . Jei žinote knygos pavadinimą, galite sužinoti autoriaus vardą. Tačiau Autorius nenustato knygos , 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 → Author_Nationality : taip pat autoriaus atributas nustato autoriaus_nacionalinę reikšmę , bet ne priešingai; tik todėl, kad mes žinome tautybę, nereiškia, kad mes galime nustatyti autorių.
Tačiau šioje lentelėje pateikiama pereinamoji priklausomybė:
- Book → Author_Nationality: jei mes žinome knygos pavadinimą, mes galime nustatyti tautybę per stulpelį Author (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_ID | Knyga | Author_ID |
---|---|---|
Book_001 | Enderio žaidimas | Auth_001 |
Book_001 | Proto vaikai | Auth_001 |
Book_002 | Handmaid pasaka | Auth_002 |
AUTORIAI
Author_ID | Autorius | Autoriaus vardas |
---|---|---|
Auth_001 | Orson Scott Card | Jungtinės Valstijos |
Auth_002 | Margaret Atwood | Kanada |
Ar tai išsprendė? Dabar patikrinkime priklausomybes:
KNYGŲ lentelė :
- Book_ID → Knyga: knyga priklauso nuo " Book_ID" .
- Jokios kitos šios lentelės priklausomybės nėra, todėl mes viskas gerai. Atkreipkite dėmesį, kad išorinis raktas Author_ID susieja šią lentelę su AUTHORS lentelės pagrindiniu raktu Author_ID . Mes sukūrėme santykius, kad išvengtume pereinamojo priklausomumo, kuris yra pagrindinis reliacinių duomenų bazių dizainas.
AUTORIŲ lentelė :
- Author_ID → Autorius: Autorius priklauso nuo Author_ID .
- Autorius → Author_Nationality: Pilietybę gali nustatyti autorius.
- Author_ID → Author_Nationality: Pilietybę galima nustatyti iš Author_ID per autoriaus atributus. Mes vis dar turime pereinamąją priklausomybę.
Norint normalizuoti šiuos duomenis, turime pridėti trečią lentelę:
ŠALYS
Country_ID | Šalis |
---|---|
Coun_001 | Jungtinės Valstijos |
Coun_002 | Kanada |
AUTORIAI
Author_ID | Autorius | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Dabar mes turime tris lenteles, naudodami užsienio klavišus, norėdami susieti stalus:
- AUTORIŲ lentelėje AUTORIŲ lentelėje esantis knygos " Užsienis " knygos autorius_ID nurodo knygą autoriui.
- AUTHORS lentelės užsienio raktas Country_ID susieja autorių su šalimi 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_ID | Autorius | Knyga | Autoriaus vardas |
---|---|---|---|
Auth_001 | Orson Scott Card | Enderio žaidimas | Jungtinės Valstijos |
Auth_001 | Orson Scott Card | Proto vaikai | Jungtinės Valstijos |
Auth_002 | Margaret Atwood | Handmaid pasaka | Kanada |
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.