Vzťahy databázy

Databázové vzťahy sú chrbticou všetkých relačných databáz

Vzťah medzi dvoma databázovými tabuľkami je vytvorený, keď má jedna tabuľka cudzí kľúč, ktorý odkazuje na primárny kľúč inej tabuľky. Toto je základná koncepcia za termínom relačná databáza.

Ako funguje zahraničný kľúč na vytvorenie vzťahu

Pozrime sa na základy primárnych a zahraničných kľúčov. Primárny kľúč jednoznačne identifikuje každý záznam v tabuľke. Je to typ kandidátskeho kľúča, ktorý je zvyčajne prvý stĺpec v tabuľke a môže byť automaticky generovaný databázou, aby sa zabezpečilo, že je jedinečný.

Cudzí kľúč je ďalší kandidátsky kľúč (nie primárny kľúč), ktorý sa používa na prepojenie záznamu s údajmi v inej tabuľke.

Napríklad, zoberte do úvahy tieto dve tabuľky, ktoré určujú, ktorý učiteľ učí, ktorý kurz.

Tu je primárny kľúč tabuľky Kurzy identifikátorom Course_ID. Jeho cudzí kľúč je Teacher_ID:

predmety
Course_ID Názov kurzu Teacher_ID
Course_001 biológie Teacher_001
Course_002 matematika Teacher_001
Course_003 Angličtina Teacher_003

Môžete vidieť, že cudzí kľúč v kurzoch zodpovedá primárnemu kľúču u učiteľov:

učitelia
Teacher_ID TEACHER_NAME
Teacher_001 carmen
Teacher_002 rozrazil
Teacher_003 jorge

Môžeme povedať, že cudzí kľúč Teacher_ID pomohol vytvoriť vzťah medzi kurzami a tabuľkami učiteľov.

Typy databázových vzťahov

Pomocou cudzích kľúčov alebo iných kandidátskych kľúčov môžete implementovať tri typy vzťahov medzi tabuľkami:

One-to-One : Tento typ vzťahu umožňuje len jeden záznam na každej strane vzťahu.

Primárny kľúč sa týka iba jedného záznamu - alebo žiadneho - v inej tabuľke. Napríklad v manželstve má každý z manželov len jedného ďalšieho manžela. Tento druh vzťahu môže byť implementovaný v jednej tabuľke a preto nepoužíva cudzí kľúč.

Jeden-k-veľa : Jeden-k-veľa vzťah umožňuje jediný záznam v jednej tabuľke sa týkajú viacerých záznamov v inej tabuľke.

Zvážte podnikanie s databázou, ktorá má tabuľky Zákazníci a Objednávky.

Jeden zákazník môže zakúpiť viac objednávok, ale jedna objednávka sa nemôže prepojiť s viacerými zákazníkmi. Preto tabuľka Objednávky bude obsahovať cudzí kľúč, ktorý zodpovedá primárnemu kľúču tabuľky Zákazníci, zatiaľ čo tabuľka Zákazníci nemá cudzí kľúč smerujúci do tabuľky objednávok.

Mnohí-k-mnohí : Toto je komplexný vzťah, v ktorom mnohé záznamy v tabuľke môžu odkazovať na mnohé záznamy v inej tabuľke. Napríklad naša firma pravdepodobne potrebuje nielen tabuľky zákazníkov a objednávok, ale pravdepodobne potrebuje aj tabuľku Produkty.

Opäť platí, že vzťah medzi tabuľkou Zákazníci a Objednávky je jeden-k-veľa, ale zvážte vzťah medzi tabuľkou Objednávky a Produkty. Objednávka môže obsahovať viacero produktov a produkt by mohol byť prepojený s viacerými objednávkami: niekoľko zákazníkov môže odoslať objednávku, ktorá obsahuje niektoré z tých istých produktov. Tento druh vzťahu vyžaduje minimálne tri tabuľky.

Čo sú to databázové vzťahy dôležité?

Vytvorenie konzistentných vzťahov medzi tabuľkami databázy pomáha zabezpečiť integritu údajov a prispieva k normalizácii databázy. Napríklad, ak by sme neposúvali žiadne tabuľky cez cudzí kľúč a namiesto toho sme skombinovali údaje v tabuľkách kurzov a učiteľov, napríklad:

Učitelia a kurzy
Teacher_ID TEACHER_NAME kurz
Teacher_001 carmen Biológia, Math
Teacher_002 rozrazil matematika
Teacher_003 jorge Angličtina

Tento návrh je nepružný a porušuje prvý princíp normalizácie databázy, First Normal Form (1NF), ktorý uvádza, že každá bunka tabuľky by mala obsahovať jediný, diskrétny údaj.

Alebo sme sa rozhodli jednoducho pridať druhý záznam pre Carmen, aby sme presadili 1NF:

Učitelia a kurzy
Teacher_ID TEACHER_NAME kurz
Teacher_001 carmen biológie
Teacher_001 carmen matematika
Teacher_002 rozrazil matematika
Teacher_003 jorge Angličtina

Stále je to slabý dizajn, ktorý prináša zbytočnú duplikáciu a čo sa nazýva anomálie vkladania dát , čo len znamená, že by to mohlo prispieť k nekonzistentným údajom.

Napríklad, ak učiteľ má viac záznamov, čo ak je potrebné upraviť niektoré údaje, ale osoba vykonávajúca editáciu údajov si neuvedomuje existenciu viacerých záznamov? Tabuľka by potom obsahovala rôzne údaje pre toho istého jednotlivca bez jasného spôsobu identifikácie alebo vylúčenia.

Zrušenie tejto tabuľky do dvoch tabuliek, učiteľov a kurzov (ako je zobrazené vyššie), vytvára správny vzťah medzi údajmi a preto pomáha zaistiť konzistenciu a presnosť údajov.