Duomenų bazių santykiai

Duomenų bazės santykiai yra visų reliacinių duomenų bazių stuburas

Susiejama tarp dviejų duomenų bazių lentelių, kai vienoje lentelėje yra užsienio raktas, kuris nurodo pirminės raktą kitoje lentelėje. Tai yra pagrindinė termino reliacinės duomenų bazės koncepcija.

Kaip užsienio raktas užmezga santykius

Peržiūrėkime pagrindinių ir išorinių raktų pagrindus. Pirminis raktas unikaliai identifikuoja kiekvieną lentelės įrašą. Tai kandidato raktas , kuris paprastai yra pirmasis stulpelis lentelėje ir kurį gali automatiškai sugeneruoti duomenų bazė, kad būtų užtikrinta, jog ji yra unikali.

Užsienio raktas yra dar vienas kandidato raktas (ne pirminis raktas), naudojamas įrašui susieti su kitoje lentelėje esančiais duomenimis.

Pavyzdžiui, apsvarstykite šias dvi lenteles, nurodančias, kuris mokytojas moko, kuria kryptimi.

Čia kursų pirminio rakto kursas yra Course_ID. Jo užsienio raktas yra "Teacher_ID":

Kursai
Kursas_ID Kurso pavadinimas Teacher_ID
Kursas_001 Biologija Teacher_001
Kursas_002 Matematika Teacher_001
Kursas_003 Anglų Teacher_003

Jūs galite pamatyti, kad užsienio kursas kursuose atitinka pirminį raktą Mokytojams:

Mokytojai
Teacher_ID Mokytojo vardas
Teacher_001 Karmenas
Teacher_002 Veronika
Teacher_003 Jorge'as

Mes galime pasakyti, kad užsienio kalbos mokytojo_ID padėjo nustatyti santykius tarp Kursų ir Mokytojų stalų.

Duomenų ryšių tipai

Naudojant užsienio raktus ar kitus klavišus kandidatams, galite įvesti tris santykių tipus:

"Vienas su vienu" : šio tipo santykiai leidžia tik vieną įrašą abiejose santykių pusėse.

Pirminis raktas susijęs tik su vienu įrašu - arba nė vienu - kitoje lentelėje. Pavyzdžiui, santuokoje kiekviename sutuoktinyje yra tik vienas kitas sutuoktinis. Tokio tipo santykiai gali būti įgyvendinami vienoje lentelėje, taigi nenaudoja užsienio rakto.

One-to-many : vienas-į-daugelis santykiai leidžia vienoje įrašo vienoje lentelėje būti susiję su keliais įrašais kitoje lentelėje.

Apsvarstykite verslą su duomenų baze, kurioje yra klientų ir užsakymų lentelės.

Vienas klientas gali nusipirkti kelis užsakymus, tačiau vieno užsakymo negalima susieti su keliais klientais. Todėl Užsakymų lentelėje būtų užsienio klavišas, kuris atitiko pirminį Klaviatūros lentelės klavišą, o Klientų lentelė neturėtų turėti užsienio raktų, nurodančių Užsakymų lentelę.

Many-to-many : tai sudėtingas santykis, kai daugelis lentelėje įrašų gali susieti daugybę kitų lentelių įrašų. Pvz., Mūsų versle tikriausiai reikia ne tik Klientų ir Užsakymų lentelių, bet greičiausiai taip pat reikia produktų lentelės.

Vėlgi, klientų ir Užsakymų stalo santykis yra vienas nuo daugelio, tačiau apsvarstykite santykį tarp užsakymų ir produktų lentelės. Užsakyme gali būti keli produktai, o produktas gali būti susietas su keliais užsakymais: keli klientai gali pateikti užsakymą, kuriame yra tie patys produktai. Šio tipo santykiai reikalauja ne mažiau kaip trijų lentelių.

Kokie svarbūs duomenų bazių ryšiai?

Nuolatinių ryšių tarp duomenų bazių lentelių sukūrimas padeda užtikrinti duomenų vientisumą, prisidedant prie duomenų bazių normalizavimo. Pavyzdžiui, jei nenorėtume susieti jokių lentelių su užsienio raktu, vietoj to tiesiog sujungdami duomenis kursų ir mokytojų lentelėse, taip:

Mokytojai ir kursai
Teacher_ID Mokytojo vardas Kursas
Teacher_001 Karmenas Biologija, matematika
Teacher_002 Veronika Matematika
Teacher_003 Jorge'as Anglų

Ši konstrukcija yra nelanksti ir pažeidžia pirmąjį duomenų bazės normalizavimo principą - First Normal Form (1 Normal Form) (1NF), kuriame teigiama, kad kiekvienoje lentelės ląstelėje turi būti viena atskira duomenų dalis.

Arba galbūt nusprendėme paprasčiausiai pridėti antrą įrašą "Carmen", siekiant užtikrinti 1NF:

Mokytojai ir kursai
Teacher_ID Mokytojo vardas Kursas
Teacher_001 Karmenas Biologija
Teacher_001 Karmenas Matematika
Teacher_002 Veronika Matematika
Teacher_003 Jorge'as Anglų

Tai vis dar yra silpna konstrukcija, įvedant nereikalingą dubliavimą ir vadinamus duomenų įterpimo anomalijomis , o tai reiškia, kad tai gali prisidėti prie nenuoseklių duomenų.

Pavyzdžiui, jei mokytojas turi keletą įrašų, ką daryti, jei kai kuriuos duomenis reikia redaguoti, bet asmuo, atliekantis duomenų redagavimą, nesuvokia, kad egzistuoja keli įrašai? Tada lentelėje bus skirtingi to paties asmens duomenys, be aiškių būdų jį identifikuoti arba išvengti.

Šios lentelės pertraukimas į dvi lenteles, Mokytojai ir kursai (kaip parodyta aukščiau) sukuria tinkamą duomenų ryšį ir todėl padeda užtikrinti duomenų nuoseklumą ir tikslumą.