Kas yra duomenų bazės ryšys?

Turinys:

Kas yra duomenų bazės ryšys?
Kas yra duomenų bazės ryšys?
Anonim

Ryšys užmezgamas tarp dviejų duomenų bazės lentelių, kai vienoje lentelėje naudojamas išorinis raktas, nurodantis kitos lentelės pirminį raktą. Tai yra pagrindinė sąvoka, pagrįsta sąvoka „reliacinė duomenų bazė“.

Kaip užsienio raktas veikia užmezgant ryšį

Pirminis raktas unikaliai identifikuoja kiekvieną lentelės įrašą. Tai yra kandidato rakto tipas, kuris paprastai yra pirmasis lentelės stulpelis ir gali būti automatiškai sugeneruotas duomenų bazės, kad būtų užtikrintas jo unikalumas. Užsienio raktas yra kitas kandidatas raktas (ne pirminis raktas), naudojamas įrašui susieti su kitos lentelės duomenimis.

Pavyzdžiui, apsvarstykite šias dvi lenteles, kuriose nurodoma, kuris mokytojas kurį kursą dėsto. Čia lentelės Kursai pirminis raktas yra Course_ID. Jo išorinis raktas yra Teacher_ID:

Kurso_ID Kurso_pavadinimas Mokytojo_ID
Kursas_001 Biologija Teacher_001
Kursas_002 Matematika Teacher_002
Kursas_003 Anglų k. Teacher_003

Matysite, kad kursų užsienio raktas atitinka pirminį raktą skiltyje Mokytojai:

Mokytojo_ID Mokytojo_vardas
Teacher_001 Karmen
Teacher_002 Veronika
Teacher_003 Jorge

Galime sakyti, kad mokytojo_ID užsienio raktas padėjo sukurti ryšį tarp kursų ir mokytojų lentelių.

Image
Image

Duomenų bazių ryšių tipai

Naudodami pašalinius raktus arba kitus galimus raktus, galite įdiegti trijų tipų ryšius tarp lentelių:

Vienas su vienu

Šio tipo santykiai leidžia tik po vieną įrašą kiekvienoje santykių pusėje. Pirminis raktas yra susijęs tik su vienu įrašu (arba nė vieno) kitoje lentelėje. Pavyzdžiui, santuokoje kiekvienas sutuoktinis turi tik vieną kitą sutuoktinį. Tokį ryšį galima įgyvendinti vienoje lentelėje, todėl nenaudojamas išorinis raktas.

Vienas su daugeliu

Ryšys „vienas su daugeliu“leidžia susieti vieną įrašą vienoje lentelėje su keliais įrašais kitoje lentelėje. Apsvarstykite įmonę su duomenų baze, kurioje yra klientų ir užsakymų lentelės.

Vienas klientas gali įsigyti kelis užsakymus, tačiau vieno užsakymo negalima susieti su keliais klientais. Todėl lentelėje Užsakymai būtų išorinis raktas, atitinkantis pirminį lentelės „Klientai“raktą, o lentelėje „Klientai“nebūtų pašalinio rakto, nukreipiančio į lentelę „Užsakymai“.

Daugelis prie daugelio

Tai sudėtingas ryšys, kai daugelis lentelės įrašų gali susieti su daugybe įrašų kitoje lentelėje. Pavyzdžiui, mūsų verslui tikriausiai reikia klientų ir užsakymų lentelių, taip pat greičiausiai reikia ir produktų lentelės.

Vėlgi, ryšys tarp klientų ir užsakymų lentelės yra vienas su daugeliu, tačiau apsvarstykite ryšį tarp lentelės Užsakymai ir produktai. Užsakyme gali būti keli produktai, o produktas gali būti susietas su keliais užsakymais, nes keli klientai gali pateikti užsakymą, kuriame yra tų pačių produktų. Tokiam ryšiui reikia mažiausiai trijų lentelių.

Kodėl duomenų bazių ryšiai svarbūs?

Nuosekliųjų ryšių tarp duomenų bazių lentelių nustatymas padeda užtikrinti duomenų vientisumą, prisidedant prie duomenų bazės normalizavimo. Pavyzdžiui, kas būtų, jei nesusietume jokių lentelių naudodami išorinį raktą, o sujungtume duomenis lentelėse Kursai ir Mokytojai, pvz.:

Mokytojo_ID Mokytojo_vardas Kursas
Teacher_001 Karmen Biologija, matematika
Teacher_002 Veronika Matematika
Teacher_003 Jorge Anglų k.

Ši konstrukcija yra nelanksti ir pažeidžia pirmąjį duomenų bazės normalizavimo principą, pirmąją normaliąją formą, kuri teigia, kad kiekvienoje lentelės langelyje turi būti vienas atskiras duomenų fragmentas.

O galbūt nusprendėme pridėti antrąjį Carmen įrašą, kad įgyvendintume 1NF:

Mokytojo_ID Mokytojo_vardas Kursas
Teacher_001 Karmen Biologija
Teacher_001 Karmen Matematika
Teacher_002 Veronika Matematika
Teacher_003 Jorge Anglų k.

Tai vis dar silpnas dizainas, dėl kurio atsiranda nereikalingas dubliavimas ir vadinamosios duomenų įterpimo anomalijos, o tai reiškia, kad tai gali prisidėti prie duomenų nenuoseklumo. Pavyzdžiui, jei mokytojas turi kelis įrašus, ką daryti, jei kai kuriuos duomenis reikia redaguoti, bet duomenis redaguojantis asmuo nesuvokia, kad yra keli įrašai? Tada lentelėje būtų skirtingi to paties asmens duomenys, be jokio aiškaus būdo jį identifikuoti ar to išvengti.

Šią lentelę suskaidžius į dvi lenteles: Mokytojų ir Kursų, sukuriamas tinkamas duomenų ryšys, todėl užtikrinamas duomenų nuoseklumas ir tikslumas.

Rekomenduojamas: