Databázové a informačné systémy - relačný databázový systém
(informatika pre študentov štvrtého-piateho ročníka Leteckej fakulty, TU KE - 2005 - RNDr. Peter Szabó)

Relačný databázový systém  - relácie 1:N, 1:1, M:N

Relácie v relačnom dátovom modeli sú tabuľky, atribúty sú stĺpce, riadky sú usporiadané n-tice, hodnoty atribútov sú konkrétne hodnoty položiek v tabuľkách. Tabuľka zvyčajne zhromažďuje údaje o jednom druhu objektov. Majme napríklad tabuľku s osobnými údajmi zamestnancov. Každý riadok predstavuje jedného zamestnanca. Stĺpce obsahujú informácie o pracovníkoch. V našom prípade schéma tejto relácie, obsahuje tieto atribúty :

   Situáciu ilustruje obrázok 1.

Obr.1: Tabuľka v relačnom modeli dát
Obr. 1: Tabuľka v relačnom modeli dát

Aby sa dalo tabuľkami a v nich uloženými údajmi pracovať, musia byť jednoznačne identifikované. Každý stĺpec má preto názov. Tento názov potom používame, keď se odvolávame na obsah určitého atribútu a nie na celý záznam. Mená atribútov sú v našej tabuľke napr. Meno a Plat.
   Často vykonávanou operáciou v tabuľkách je zmena obsahu jedného atribútu v určitom zázname. Pre vykonanie tejto operáce však musíme mať k dispozícii spôsob, ako jednoznačne určiť požadovaný záznam. Pre tieto účely by každá tabuľka mala obsahovať tzv. primárny kľúč. Primárny kľúč je atribút a jeho hodnota je pre každý záznam jedinečná. V našom prípade nám ako primárny kľúč môže poslúžiť atribút Osobné číslo, pretože každý zamestnanec má svoje vlastné osobné číslo. Našim požadavkám na primárny kľúč vyhovie aj atribút Rodné číslo (to má každý občan Slovenskej republiky jedinečné - až na výnimky ). Chybou by však bolo zvoliť za primárny kľúč napr. atribút Meno. Na prvý pohľad sa mená zamestnancov líšia. Nie je však problém, aby sa vo väčšej firme vyskytli dvaja Janovia Čierni. Potom by sme ich podľa mena rozlíšili veľmi ťažko.
   Pre každý atribút tabuľky musíme určiť aký typ dát môže obsahovať. Medzi nejbežnejšie používané typy patria celé čísla (numeric), znakové reťazce (charakter),  logické hodnoty (logical) (áno/nie). Ďalšie veľmi často používané typy sú reálné čísla, menové údaje, dátum a čas (date). Mnoho SRBD podporuje i zložitějšie typy akými sú: obrázok, video či audio klip.
   Báza dát môže samozrejme obsahovať väčšie množstvo tabuliek (záleží na tom, čo všetko chceme do bázy dát zaznamenať). Každá tabuľka má preto svoje meno, ktoré ju v rámci databázy jednoznačne identifikuje. V našom prípade by tabuľka mohla mať názov Zamestnanci. Niekedy sa používa iba jednotné číslo, potom by sa naša tabuľka volala Zamestnanec. Meno tabuľky by malo vždy korenšpondovať s jej obsahom, uľahčíme si tak orientáciu vo väčšom množstve tabuliek. Vidíme, že tabuľka obvykle obsahuje ucelené informácie. To však neznamená, že nijako nesúvisí s ostatnými tabuľkami. Predstavme si, že v našej fiktívnej firme chceme evidovať informácie o odberateľoch. U každého odberateľa budeme chcieť evidovať jeho IČO, názov, sídlo a nášho zamestnanca, ktorý má styk s odberateľom na starosti. Je jasné, že tabuľka Odberatelia musí obsahovať atribúty IČO, názov a sídlo. Má však u každého odberateľa obsahovať kompletné informácie o zamestnancovi (tj. jeho meno, rodné číslo, adresu a výšku platu. To by iste nebolo najefektívnějšie (pokiaľ by niekto mal na starosti viac odbrateľov, informácie by se v tabuľke zbytočne opakovali.
   Vyššie uvedené prípady sa riešia pomocou vzťahov (to sú relácie relačnej algebry) medzi tabuľkami. V našom prípade môže mať jeden zamestnanec na starosti niekoľko odberateľov, hovoríme teda o vzťahu 1:N. V praxi sa tento vzťah rieši tak, že tabuľka Odberatelia má atribút, ktorý obsahuje primárny kľúč, ktorý určuje zamestnanca povereného stykom s firmou. Primárny kľúč v tabuľke zamestnanci je osobné číslo, u každého odberateľa teda uvedieme osobné číslo zamestnanca, ktorý je poverený jednať v mene firmy (viď obr. 2). Vidíme, že použité usporiadanie údajov do tabuliek nám dáva k dispozíci všetky informácie. Pokiaľ chceme zistiť, kto má na starosti firmu Omicron, pozrieme sa do tabuľky Odbratelia. V nej zistíme, že sa jedná o zamestnanca s osobným číslom 1205. Pozrieme sa do tabuľky zamestnanci a zistíme, že osobné číslo 1205 má Jano Čierny. Môžeme postupovať i opačne. Pokiaľ nás zaujíma, ktorých odberateľov má na starosti Lucia Veľká, zistíme jej osobné číslo (to je 1458). Príslušní odberatelia v tabuľke Odberatelia majú toto číslo uložené v atribúte Zástupca. Atribút, ktorý slúži ako odkaz na inú tabuľku a obsahuje teda primárne kľúče inej tabuľky, nazývame cudzí kľúč. Ak tabuľka obsahuje viacej odkazov (vzťahov) na iné tabuľky môže obsahovať viac cudzích kľúčov. Primárny kľúč je však v každej tabuľke vždy len jeden.

Obr.2: Relácia 1:N
Obr. 2: Ukážka vzťahu 1:N

   Medzi tabuľkami môžu existovať aj iné vzťahy ako 1:N, i keď nie sú také časté. Vzťah 1:1 vyjadruje prípady, keď záznam jednej tabuľky zodpovedá jednému záznamu inej tabuľky. Tieto vzťahy sa obvykle riešia ako špeciálny prípad vzťahu 1:N s využitím cudzieho kľúča. Isté komplikácie prinášajú vzťahy typu M:N. Ako taký vzťah vyzerá? Predstavme si, že naša fiktívna firma spracováva naraz niekoľko projektov. Na každom projekte môže pracovať niekoľko zamestnancov, ale zároveň jeden zamestnanec môže pracovať na viacerých projektoch. Vzťah medzi tabuľkami Projekty a Zamestnanci je typu M:N. Na prvý pohľad sa vzťah M:N nedá do relačného modelu dát napísať. Našťastie je možné každý vzťah typu M:N rozložiť na dva vzťahy 1:N s využitím pomocnej tabuľky. Ukážme si všetko na našom príklade. Informácie o projektoch budeme ukladať do tabuľky Projekty. Predpokladajme, že každý projekt je identifikovaný svojím ID-číslom, ktoré zvolíme ako primárny kľúč tabuľky. Vzťahy medzi projektami a zamestnancami zachytíme v tabuľke Proj-Zam. Každý záznam tejto tabuľky obsahuje ID projektu a číslo zamestnanca, ktorý na ňom pracuje. V prípade, že na nejakom projekte pracuje viac zamestnancov, bude v tabuľke niekoľko záznamov s rovnakým ID projektu a rozdielnym číslom zamestnanca. Obdobne to bude platiť pre zamestnancov. Ak jeden zamestnanec pracuje na viacerých projektoch, bude v tabuľke niekoľko riadkov s rovnakým osobným číslom zamestnanca a rôzným ID projektu . Pomocou tabuľky Proj-Zam ľahko zistíme zistíme, že Eva Malá pracuje na projektoch X1254 a X89740. Podobne, na projekte X98007 pracujú Malý a Veľká. Medzi tabuľkami Projekty a Proj-Zam je vzťah 1:N. Rovnaký vzťah je i medzi tabuľkami Zamestnanci a Proj-Zam. Ako vidno, pôvodného vzťahu M:N sme sa celkom jednoducho zbavili. Novo vzniknutá tabuľka Proj-Zam obsahuje iba cudzie kľúče z tabuliek Projekty a Zamestnanci. Primárny kľúč tabuľky je tvorený oboma cudzími kľúčmi.
   Z tejto ukážky vidno, že primárny kľúč nemusí byť tvorený iba jediným atribútom, ale aj niekoľkými dohromady. Pre každý záznam však stále platí, že jeho primárny kľúč je jedinečný. Každý záznam teda musí obsahovať jedinečnú kombináciu hodnôt atribútov, ktoré sú súčásťou primárneho kľúča.


naspäť
17.11.2004