|
| ||||||||||
Relace vs. tabulka
Vφme ji₧, ₧e zßkladnφm pojmem a souΦasn∞ i konstrukΦnφm nßstrojem (konstruktem) relaΦnφho modelu dat je relace. Relace je matematick² pojem, i kdy₧ se pou₧φvß v b∞₧nΘm jazyku i v jin²ch souvislostech, jako nap°. relace v rozhlase, n∞co je s n∞Φφm v relaci apod. Ten druh² v²znam napovφdß, ₧e jde o n∞jakΘ vztahy. Nap°. (Novßk, 480423/016, 23.04.1948) reprezentuje vztah mezi ·daji Novßk, 480423/016 a 23.04.1948. Danß trojice (mo₧nß) reprezentuje vztah vyjßd°iteln² v∞tou ôNovßk mß rodnΘ Φφslo 480423/016 a narodil se 23.04.1948. Ano, relace obsahuje prvky, kterΘ reprezentujφ vztahy mezi n∞jak²mi objekty. Te∩ trochu matematicky. Relace je v matematice v²znamnou, dokonce fundamentßlnφ strukturou. Formßlnφ definice °φkß: jsou-li D1,...,Dn, kde n³ 2, mno₧iny, pak relace nad mno₧inami D1,...,Dn je libovolnß podmno₧ina kartΘzskΘho souΦinu D1´ ...´ Dn. Neformßln∞ji °eΦeno, relace je mno₧ina prvk∙ (d1,...,dn), kde di je z Di, pro ka₧dΘ i od 1 do n. D∙le₧itΘ jsou dva d∙sledky tΘto definice:
Genißlnφ myÜlenkou otce relaΦnφho databßzovΘho modelu E.F. Codda bylo pou₧φt formßlnφ pojem relace na soubory dat. Je-li D1 mno₧ina jmen, D2 mno₧ina rodn²ch Φφsel a D3 mno₧ina dat, pak v kartΘzskΘm souΦinu D1 ´ D2 ´ D3 jsou vÜechny mo₧nΘ trojice reprezentujφcφ vztahy mezi daty z uveden²ch mno₧in. V danΘm Φase pouze n∞kterΘ z nich odpovφdajφ skuteΦnosti (nap°. v podniku). A p°esn∞ ty tvo°φ onu podmno₧inu kartΘzskΘho souΦinu. Aby se s relacemi dalo jednoduÜe zachßzet zavedl Codd pojem atributu. Atribut relace nenφ nic jinΘho ne₧ pojmenovanß mno₧ina (v databßzovΘ terminologii domΘna) pou₧itß v kartΘzskΘm souΦinu. Jde-li nap°. o DATUM, pak v kontextu naÜeho p°φkladu je atributem DATUM_NAROZEN═:DATUM. JmΘno atributu umo₧≥uje rozliÜit dv∞ stejnΘ mno₧iny v kartΘzskΘm souΦinu. D∙le₧itΘ ovÜem je, aby v rßmci jednoho typu relace byla jmΘna atribut∙ r∙znß. Najednou jsme se z matematiky p°enesli do informatiky. Pou₧ili jsme slovo typ relace. V databßzovΘm ₧argonu se vÜak zarazφme o pojem schΘma relace. Jak to spolu vÜechno souvisφ? P°ipome≥me si schΘma relace PRACOVN═K(JM╔NO, RODN╔_╚═SLO, DATUM_N) z minulΘ databßzovΘ abecedy. Jak je vid∞t domΘny byly zamlΦeny. Domysleme si je ke jmΘn∙m atribut∙. Uvedenß trojice atribut∙ dßvß typ relace pracovnφk. Technicky je ovÜem PRACOVN═K spφÜe relaΦnφ prom∞nnß, jejφ₧ hodnota se m∞nφ, tak jak to po₧aduje u₧ivatelskΘ aplikace. VÜimn∞te si, ₧e tΘho₧ typu m∙₧eme pou₧φt pro schΘma relace D┘CHODCE, Z┴KAZN═K apod. P°ibereme nynφ jeÜt∞ trochu terminologie. Prvk∙m mno₧in - relacφ se °φkß n-tice. Je to nßhrada z anglick² termφn tuple, kter² marn∞ hledßme v anglick²ch slovnφcφch, a kter² z°ejm∞ lΘpe vystihuje situaci. Neobsahuje toti₧ ₧ßdnΘ n. NejlepÜφ je dφvat se na pojem n-tice jako na jedno slovo a nechßpat n jako n∞jak² parametr. Trojice, dvojice, dvacetice - vÜechno jsou n-tice. N∞kte°φ puristΘ navrhovali vÜelijakß nßhradnφ °eÜenφ, jako vektory, jinφ pφÜφ entice (to by asi nebylo tak nejhorÜφ), n∞kdo dokonce navrhoval tice. Bohu₧el, slyÜet je obΦas i tuple. Äe jsem zapomn∞l na °ßdek? Hned na n∞j dojde. Dodejme jeÜt∞ dv∞ poznßmky. Jedna je se t²kß maliΦkosti. U₧iteΦnΘ jsou i relace, kde n = 1. To trochu narß₧φ na naivnφ p°edstavu o vztazφch, nicmΘn∞ proΦ ne. Zajφmav∞jÜφ a podstatn∞jÜφ je ovÜem n∞co jinΘho. Komponenty jednotliv²ch n-tic jsou ned∞litelnΘ. Jde o v²znamnΘ omezenφ, kterΘ je na druhΘ stran∞ vyvß₧eno jednoduchostφ nazφrßnφ na relace. Jde vlastn∞ o ty nejjednoduÜÜφ soubory dat. V relaΦnφm modelu dat vÜak tento fakt hraje jeÜt∞ v²znamn∞jÜφ roli. Umo₧nil Coddovi tak°ka zadarmo vyu₧φt aparßt matematickΘ logiky, kter² s pojmem relace ·zce souvisφ. Prßv∞ v tomto moment∞ je t°eba zd∙raznit, proΦ se vlastn∞ ôrelaΦnφö pojmy zavßdφ (v₧dy¥ bychom jinak mohli vystaΦit s pojmem soubor!). Logiku lze toti₧ pou₧φt pro vybudovßnφ relaΦnφch dotazovacφch jazyk∙. Co vÜak plyne negativnφho z omezenφ na atomiΦnost komponent relace? Nap°. to, ₧e, do komponenty n-tice, nap°. rodnΘ Φφslo 480423/016 je z hlediska relaΦnφho nazφrßnφ chßpßno jako jeden °et∞zec znak∙. Nelze z n∞j ôvytßhnoutö rok, m∞sφc apod. N∞kdy by se t°eba hodilo mφt jako komponentu n-tice mno₧inu. P°edstavme si schΘma relace PRACOVN═K_S_D╠TMI(JM╔NO, D═T╠). DomΘnou D═T╠ jsou k°estnφ jmΘna. K vyjßd°enφ faktu, ₧e Novßk mß d∞ti Jarmilu, Frantu, Honzu pot°ebujeme t°i n-tice. JmΘno Novßk se tam bude opakovat, ale s tφm u₧ se musφme smφ°it. M∙₧ete namφtnout, ₧e bychom mohli zavΘst atributy D═T╠2, D═T╠2, D═T╠3. Toto °eÜenφ je °eÜenφm jen zdßnliv∞. ProblΘm by nastal v p°φpad∞, ₧e n∞kdo mß vφce d∞tφ ne₧ 3, ale i mΘn∞ d∞tφ ne₧ 3. Co by se toti₧ dosadilo do n-tice za hodnoty? Mo₧nß prßzdnß hodnota (specißlnφ symbol), ale v tom smyslu nßm zatφm relaΦnφ databßzov² model ₧ßdnΘ ôoficißlnφö °eÜenφ nenabφzφ. AtomiΦnost (ned∞litelnost) hodnot tvo°φcφch komponenty n-tic se tradiΦn∞ naz²vß 1. normßlnφ forma relace. Jde vlastn∞ o d∙le₧it² p°edpoklad celΘho relaΦnφho p°φstupu. U₧ jsme koneΦn∞ u tabulek. Tabulka a relace nenφ totΘ₧. Intuitivnφ pojem tabulky p°eklßdß jistou podobu - reprezentaci relace nap°. na obrazovce na papφ°e apod. P°edklßdß u₧ivateli jistΘ po°adφ °ßdk∙, narozdφl od relace, kde se o uspo°ßdßnφ n-tic nic ne°φkß. V b∞₧nΘm ₧ivot∞ m∙₧e takΘ tabulka obsahovat stejnΘ °ßdky, co₧ je v rozporu s relacφ, kde dv∞ stejnΘ n-tice nejsou dovoleny. ProΦ tedy tabulka? Jde o pojem, kter² do relaΦnφho databßzovΘho modelu vnesli v poΦßtcφch 70. let tv∙rci jazyka SEQUEL (pozd∞ji SQL). Tabulka je bli₧Üφ u₧ivateli, zakr²vß mu matematickou podstatu v∞ci. V SQL m∙₧e mφt tabulka dokonce duplicitnφ °ßdky, tyto °ßdky mohou obsahovat i tzv. prßzdnou hodnotu (NULL). Nejde o Üpatn² nßpad, proto₧e v praxi je ne·plnß informace b∞₧nß, i duplicity °ßdk∙ jsou obΦas pot°ebnΘ. OvÜem pozor! SQL tak pou₧φvß pon∞kud odliÜn² aparßt ne₧ je relaΦnφ. Asi by bylo lepÜφ °φkat tabulkov² databßzov² model. Slovem tabulka se p°eklßdß anglickΘ tabel. Kdy₧ se zamyslφme nad tφm, ₧e mßme tabulky o 100000 °ßdk∙, je to trochu sm∞ÜnΘ. SlyÜel jsem i °φkat mφsto tabulka tabule. P°ipravφme °editeli na rannφ poradu pot°ebnΘ tabule. Co k tomu dodat. Shrneme nynφ pojmy tabulkovΘho a relaΦnφho databßzovΘho modelu.
Atribut relace nenφ p°esn∞ totΘ₧ co sloupec tabulky. Atribut zahrnuje celou domΘnu, kde₧to sloupec jen hodnoty danΘ v tabulce. Popis tabulky Φi relace dosud obsahoval to nejnutn∞jÜφ, co bylo pro modelovßnφ reßln²ch objekt∙ pot°eba. Jeden problΘm vÜak z∙stßvß. Jak za°φdit, aby se do databßze dostaly jen takovΘ n-tice, kterΘ odpovφdajφ vztah∙m v reßlnΘm sv∞t∞. ╚lov∞k je toti₧ omyln² a spolehnout na n∞ho se zcela nedß. DatabßzistΘ proto vymysleli pojem integritnφ omezenφ (IO). Ke schΘmatu relace se p°idajφ jistß tvrzenφ, kterß omezujφ ÜirokΘ mo₧nosti vstupu n-tic do relacφ. Nap°. ôhodnoty atributu PLAT je z intervalu hodnot < 5600, 10800> ö, nebo ôka₧d² vedoucφ je pracovnφkö jsou takovß omezenφ. Mohou poskytovat podmφnky na hodnoty n-tic, na vztahy mezi n-ticemi v jednΘ relaci, ale i slo₧itß tvrzenφ popisujφcφ vztahy mezi n-ticemi vφce relacφ. Nenφ t∞₧kΘ si p°edstavit, ₧e lze za°φdit, aby za IO stßly programy kontrolujφcφ vstupujφcφ data. Jazyky jako SQL dnes v tomto sm∞ru nabφzejφ dost silnΘ mo₧nosti. ╚φm vφce IO, tφm lepÜφ databßze. VÜechno ale n∞co stojφ. Zavedenφm slo₧it²ch kontrol dat se m∙₧eme dostat do situace, ₧e kontroly budou trvat ne·nosn∞ dlouho. Tak₧e schΘma relace neobsahuje pouze popis atribut∙, ale takΘ IO. Relace, kterΘ vyhovujφ IO budou p°φpustnΘ relace. Je ovÜem t°eba si uv∞domit, ₧e dokonalΘ p°esnosti nelze nikdy dosßhnout. Jestli₧e se mi ·°ednφk na magistrßt∞ splete p°i vstupu ·daje rok absolvovßnφ zßkladnφ Ükoly o jedniΦku, ₧ßdnß systΘmovß podpora mi takovou chybu neodhalφ. Co z toho vypl²vß? Nev∞°te vÜemu, co se z databßzφ dozvφte. Nejde vÜak jen o ne·myslnΘ chyby. Databßze obsahujφ data a my je modifikujeme v informace. A nejde jen o informace k °φzenφ podniku. Hezkou relaci uvßdφ pan Date v jednΘ svΘ prßci: PT┴K(JM╔NO,POPIS,OBR┴ZEK,POHYB,ZP╠V,MAPA ST╠HOV┴N═) Jde o vskutku multimedißlnφ relaci, kterou bychom si mohly p°edstavit Üiroce p°φstupnou v sφti. A co kdy₧ se n∞kdo (·mysln∞) splete a vlo₧φ do relace obrßzek, kde kos je Φerven²? <seznam dφl∙ serißlu> <COMPUTERWORLD> |