Duomenų bazėje „Vienas su daugeliu“ryšiai

Turinys:

Duomenų bazėje „Vienas su daugeliu“ryšiai
Duomenų bazėje „Vienas su daugeliu“ryšiai
Anonim

Ryšys „vienas su daugeliu“duomenų bazėje atsiranda, kai kiekvienas A lentelės įrašas gali turėti daug susietų įrašų B lentelėje, bet kiekvienas įrašas B lentelėje gali turėti tik vieną atitinkamą įrašą A lentelėje.

Ryšys „vienas su daugeliu“duomenų bazėje yra labiausiai paplitęs reliacinės duomenų bazės dizainas ir yra gero dizaino pagrindas.

Duomenų bazės taip pat gali įdiegti „vienas su vienu“ir „daugelis su daugeliu“ryšį.

Image
Image

Vienas su daugeliu santykių pavyzdys

Apsvarstykite mokytojo ir jo dėstomų kursų santykį. Mokytojas gali dėstyti kelias klases, bet kurso santykis su mokytoju nebus toks pat.

Todėl kiekviename Mokytojų lentelės įraše gali būti daug įrašų lentelėje Kursai. Šis pavyzdys iliustruoja „vienas su daugeliu“ryšį: vienas mokytojas į kelis kursus.

Kodėl svarbu užmegzti ryšį vienas su daugeliu

Norėdami parodyti ryšį vienas su daugeliu, jums reikia bent dviejų lentelių. Pažiūrėkime kodėl.

Pirmosios normalios formos dizaino laikymasis

Galbūt sukūrėme lentelę, kurioje norime įrašyti pavadinimą ir dėstomus kursus. Mokytojų ir kursų lentelę galime sukurti taip:

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

O jei Karmen dėsto du ar daugiau kursų? Su šiuo dizainu turime dvi galimybes. Galėtume pridėti jį prie esamo Carmen įrašo, pavyzdžiui:

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

Tačiau aukščiau pateiktas dizainas yra nelankstus ir vėliau gali kilti problemų įterpiant, redaguojant arba ištrinant duomenis. Dėl to sunku ieškoti duomenų.

Šis dizainas taip pat pažeidžia pirmąjį duomenų bazės normalizavimo principą – Pirmąją normaliąją formą (1NF), kuris teigia, kad kiekvienoje lentelės langelyje turi būti vienas atskiras duomenų fragmentas.

Antroji normalios formos taisyklė

Kita dizaino alternatyva galėtų būti pridėti antrąjį Carmen įrašą:

Mokytojas_ID Mokytojas_Vardas Kursas
Teacher_001 Karmen Biologija
Teacher_001 Karmen Matematika
Teacher_002 Veronika Matematika
Teacher_003 Jorge Anglų k.

Šis metodas atitinka 1NF, bet vis tiek yra prastas duomenų bazės dizainas, nes atsiranda perteklius ir gali be reikalo išpūsti didelę duomenų bazę. Dar svarbiau, kad duomenys gali tapti nenuoseklūs.

Pavyzdžiui, kas būtų, jei pasikeistų Karmen vardas? Kažkas, dirbantis su duomenimis, gali atnaujinti savo vardą viename įraše, o neatnaujinti antrame įraše.

Ši konstrukcija pažeidžia antrosios normalios formos (2NF) standartą, kuris atitinka 1NF, ir taip pat turi vengti kelių įrašų pertekliaus. 2NF taisykle tai pasiekiama atskiriant duomenų poaibius į kelias lenteles ir sukuriant ryšį tarp jų.

Kaip sukurti duomenų bazę naudojant „vienas su daugeliu“ryšius

Norėdami įdiegti „vienas su daugeliu“ryšį lentelėje „Mokytojai ir kursai“, suskaidykite lenteles į dvi dalis ir susiekite jas naudodami išorinį raktą.

Čia pašalinome stulpelį Kursas iš lentelės Mokytojai:

Mokytojas_ID Mokytojas_Vardas
Teacher_001 Karmen
Teacher_002 Veronika
Teacher_003 Jorge

Ir čia yra kursų lentelė. Atminkite, kad jo išorinis raktas Teacher_ID susieja kursą su mokytoju lentelėje Mokytojai:

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

Sukūrėme ryšį tarp Mokytojų ir Kursų lentelės naudodami užsienio raktą. Šis susitarimas mums sako, kad Karmen moko ir biologiją, ir matematiką, o Jorge moko anglų kalbos.

Matome, kaip naudojant šį dizainą išvengiama bet kokių galimų pertekliaus, atskiriems mokytojams leidžiama dėstyti kelis kursus ir įgyvendinamas ryšys „vienas su daugeliu“.

Rekomenduojamas: