COMPUTERWORLD
pod kapotou
ReferenΦnφ integrita

V zßjmu ka₧dΘho u₧ivatele databßze je, aby odpovφdala zadan²m specifikacφm. Jist∞, vφme dob°e, ₧e ne vÜechny specifikace u₧ivatel zadal, °adu z nich toti₧ navrhl analytik Φi nßvrhß° databßze, nicmΘn∞ u₧ivatel s nimi p°i schvalovßnφ nßvrhu databßze souhlasil a oΦekßvß, ₧e v²sledn² IS bude specifikace podporovat.

Dnes nßm nep∙jde o u₧ivatelskΘ aplikace, ale spφÜe o to, zdali je zajiÜt∞no, ₧e databßze je v pr∙b∞hu svΘho ₧ivota konzistentnφ. Konzistence databßze znamenß v ÜirÜφm smyslu, ₧e databßze odpovφdß skuteΦnosti, v u₧Üφm pojetφ, ₧e odpovφdß alespo≥ zadan²m integritnφm omezenφm (IO). Mimochodem, je jasnΘ, ₧e z prvnφho v²znamu plyne druh², ale ne naopak.

Zam∞°φme se pouze na jeden typ IO - referenΦnφ integritu. Je to IO popisujφcφ vztah mezi daty obsa₧en²mi ve dvou relacφch. Motivacφ pro jeho pou₧itφ je sßm E-R model. PopφÜeme-li realitu jako na obr. 1. Ka₧d² film m∙₧e b²t hrßn ve vφce kinech, ka₧dΘ kino m∙₧e dßvat i vφce film∙. Kina i filmy existujφ nezßvisle na sob∞, tj. existujφ kina, kterß nehrajφ nic, jsou filmy, kterΘ se nikde nepromφtajφ.

hraje JM╔NO_F

KINO FILM

je hrßn v REÄIS╔R

JM╔NO_V

N┴ZEV ADRESA

Obr. 1 Typ vztahu M:N mezi kiny a filmy

P°evedeme-li danΘ konceptußlnφ schΘma do schΘmat relacφ, obdr₧φme z°ejm∞:

KINO(N┴ZEV, ADRESA, JM╔NO_V)

FILM(JM╔NO_F, REÄIS╔R)

P╪EDSTAVEN═(N┴ZEV, JM╔NO_F)

Kdo nahlφ₧φ do obrßzku, je mu jasnΘ, ₧e entity typu KINO vzta₧enΘ k entitßm typu FILM typem vztahu ôhrajeö (ôje hrßnö) jsou prvky z entitnφ mno₧iny KINO, resp. FILM. U relacφ odpovφdajφcφch konceptußlnφmu schΘmatu vÜak m∙₧e nastat i n∞co, co nechceme. Do relace P╪EDSTAVEN═ lze toti₧ bez problΘm∙ vlo₧it °ßdek nap°. (Vesna, Zahrada), p°esto₧e kino Vesna ji₧ dßvno neexistuje a nevyskytuje se v relaci KINO. DatabßzovΘ relace jsou toti₧ obecn∞ zcela nezßvislΘ. Po₧adavkem tedy je, aby hodnoty sloupce N┴ZEV v relaci P╪EDSTAVEN═ byly zßrove≥ hodnotami sloupce N┴ZEV v relaci KINO. Podobn∞ lze postupovat i pro vztah hodnot sloupce JM╔NO_F z P╪EDSTAVEN═ k hodnotßm sloupce JM╔NO_F v relaci FILM.

Schematicky lze po₧adavek na logickou vazbu mezi naÜimi relacemi zobrazit diagramem na obr. 2.

KINO N┴ZEV ADRESA JM╔NO_V FILM JM╔NO_F REÄIS╔R

P╪EDSTAVEN═ N┴ZEV JM╔NO_F

Obr. 2 Diagram referenΦnφ integrity

ZajφmavΘ je, ₧e °ada lidφ se myln∞ domnφvß, ₧e danΘ vazby jsou skuteΦn∞ fyzicky implementovßny. To skuteΦn∞ b²valo, ale u sφ¥ovΘho Φi hierarchickΘho databßzovΘho modelu. DatabßzovΘ relace fyzicky propojeny nejsou, nejv²Üe p°es indexy, ale to je jinß kapitola.

Pro snadn∞jÜφ vysv∞tlovßnφ se zavßdφ, ₧e jedna tabulka je u referenΦnφ integrity v₧dy hlavnφ a jedna vedlejÜφ. Dokonce m∙₧e jφt o jednu a tutΘ₧ tabulku. Zhruba °eΦeno, hlavnφ v∞tÜinou odpovφdß typu entity, vedlejÜφ typu vztahu. Potom, atribut, kterΘho se referenΦnφ integrita t²kß ve vedlejÜφ tabulce se naz²vß cizφ klφΦ (foreign key). Jde o atribut (Φasto i skupinu atribut∙), jeho₧ hodnota v n-tici relace je bu∩ prßzdnß nebo musφ b²t obsa₧ena jako hodnota primßrnφho klφΦe hlavnφ relace.

Poslednφ v∞tu bychom mohli chßpat jako definici referenΦnφ integrity. Vyskytuje v nφ ale n∞co, co nenφ obsa₧eno v p∙vodnφ definici relaΦnφho databßzovΘho modelu. Jde o tzv. prßzdnΘ hodnoty (v SQL se naz²vajφ NULL) oznaΦujφcφ nedefinovanΘ Φi neznßmΘ hodnoty. Existence prßzdn²ch hodnot vychßzφ z praktick²ch pot°eb. Ne v₧dy jsou data v n-ticφch relacφ znßmß, ne v₧dy jsou definovanß.

PrßzdnΘ hodnoty n∞kdy souvisφ s nepovinn²m Φlenstvφm v E-R modelu a kardinalitou 1:N. Uva₧ujme relaci FILM rozÜφ°enou o atribut HV╠ZDA, jejφ schΘma je FILM (JM╔NO_F, REÄIS╔R,HV╠ZDA). Hv∞zda ve filmu se p°edpoklßdß nejv²Üe jedna. Tabulka vlastn∞ reprezentuje vztah mezi filmy a herci, pro kterΘ je k dispozici samostatnß tabulka HEREC. Dan² typ vztahu v E-R modelu m∙₧eme definovat tak, ₧e v n∞m herci majφ nepovinnΘ Φlenstvφ, tj. existujφ ale nemusφ b²t hv∞zdou v ₧ßdnΘm filmu, tj. mohou existovat i filmy bez hv∞zd (nap°. dokumentßrnφ, nebo jenom s vedlejÜφmi rolemi). Odpovφdajφcφ tabulka FILM tedy m∙₧e obsahovat prßzdnΘ hodnoty atributu HV╠ZDA, nicmΘn∞, jestli₧e hodnota existuje, musφ b²t z obsa₧ena v tabulce HEREC. Tak₧e uvedenß koncepce referenΦnφ integrity je smysluplnß.

Nejnov∞jÜφ verze standardnφho p°φstupu k referenΦnφ integrit∞ je obsa₧ena ve standardu SQL92. ╪eÜφ nejen podstatu, ale i mo₧nosti reakce S╪BD, kterΘ majφ nßsledovat p°i naruÜenφ referenΦnφ integrity aktualizaΦnφ operacφ. V p°edchozφm standardu SQL S╪BD pouze poskytoval upozorn∞nφ. Ukß₧eme reakce podrobn∞ji pro varianty p°φkaz∙ INSERT a DELETE, kterΘ lze p°φmo specifikovat v definicφch tabulek. (Pro UPDATE je styl mo₧nostφ podobn².) budeme p°edpoklßt, ₧e primßrnφ klφΦ hlavnφ relace je mno₧ina atribut∙ K a tatß₧ mno₧ina atribut∙ tvo°φ cizφ klφΦ vedlejÜφ relace.

INSERT:

  • omezenΘ vlo₧enφ n-tice u do zßvislΘ relace

Operace nenφ dovolena, neexistuje-li pro hodnotu K n-tice u odpovφdajφcφ n-tice v hlavnφ relaci s toutΘ₧ hodnotou K.

DELETE:

  • omezenΘ odstran∞nφ n-tice u z hlavnφ relace

Operace nenφ dovolena, existuje-li pro hodnotu K n-tice u v zßvislΘ relaci n-tice s toutΘ₧ hodnotou K.

  • kaskßdovΘ odstran∞nφ n-tic

Operace odstran∞nφ n-tice u z hlavnφ relace je propagovßna do zßvislΘ relace, kde se odstranφ vÜechny ty n-tice, kterΘ majφ stejnou hodnotu K jako n-tice u.

  • nahrazenφ cizφho klφΦe prßzdnou hodnotou

Operace odstran∞nφ n-tice u z hlavnφ relace je propagovßna do zßvislΘ relace, kde se vÜechny hodnoty K stejnΘ jako hodnota K n-tice u, nahradφ prßzdnou hodnotou.

  • nahrazenφ cizφho klφΦe implicitnφ hodnotou

Operace odstran∞nφ n-tice u z hlavnφ relace je propagovßna do zßvislΘ relace, kde se vÜechny hodnoty K stejnΘ jako hodnota K n-tice u, nahradφ implicitnφ hodnotou.

  • odstran∞nφ n-tice u z hlavnφ relace s upozorn∞nφm

Operace je dovolena s upozorn∞nφm, ₧e pro hodnotu K n-tice u existujφ v zßvislΘ relaci n-tice s toutΘ₧ hodnotou K.

Snadno lze najφt p°φklady podobnΘ referenΦnφ integrit∞, kterΘ nejdou deklarovat ani v SQL92. Prvky referenΦnφ integrity byly s oblibou ohlaÜovßny v²robci S╪BD jako nov² rys dalÜφ verze. Zd∙razn∞me vÜak, ₧e referenΦnφ integrita, a¥ je jakkoli atraktivnφ, pokr²vß pouze nepatrnou Φßstφ pot°eb, kterΘ pro vybudovßnφ solidnφ databßze vy₧adujeme. Slo₧it∞jÜφ, i kdy₧ ne zcela obecnß, IO umo₧≥uje formulovat a pojmenovat SQL92 klauzulφ ASSERTION. V∞tÜina souΦasn²ch implementacφ SQL vÜak zatφm neumo₧≥ujφ realizovat neprocedurßln∞ slo₧itß IO. Je to do jistΘ mφry dßno i dßvno zjiÜt∞n²m faktem, ₧e provoz komplikovan∞jÜφch IO je Φasov∞ nßroΦn², ₧e by m∞l b²t optimalizovßn, podobn∞ jako se optimalizuje vyhodnocenφ dotaz∙. V b∞₧nΘ praxi se IO stßle ôdoprogramovßvajφö do aplikace, v lepÜφm p°φpad∞ jsou formou ulo₧en²ch procedur ulo₧eny v blφzkostφ definice databßze na serveru. Jejich formulace ovÜem vy₧aduje specißlnφ jazyk, kter² je zatφm u r∙zn²ch S╪BD r∙zn².

Jakß je perspektiva ? P°φznivß. P°ipravovan² standard SQL p°inßÜφ novΘ jazykovΘ prvky, kterΘ ho budou Φinit zcela sob∞staΦn²m. Jin²mi slovy °eΦeno, definice databßze i aplikace budou moci b²t vybudovßny jednφm (v²poΦetn∞ ·pln²m) jazykem. Znφ to lßkav∞, ale n∞co mi °φkß, ₧e ne₧ se implementace takovΘho jazyka objevφ na trhu, tak si pßr let jeÜt∞ poΦkßme.



<seznam dφl∙ serißlu>   <COMPUTERWORLD>