KANONINĖS SCHEMOS IR RELIACINIS MODELIS

844 0

1 4

ĮVADAS 4

2 9

KANONINĖS SCHEMOS IR RELIACINIS MODELIS 9

2.1. Duomenų pavaizdavimas lentelinėje formoje 9

2.2 Duomenų bazių kanoninės schemos 11

2.3. Duomenų bazių valdymo sistemos 14

2.4. Kanoninių schemų klasifikavimas 15

2.5. Kanoninių schemų transformavimas 16

2.6. Reliacinės algebros operacijos 21

2.7. Reliacinio skaičiavimo kalba SQL 30

2.7.1 Duomenų bazės deklaravimas 30

2.7.2. Duomenų lentelių sukūrimas 30

2.7.3 Paprastosios užklausos 31

2.7.4. Duomenų įterpimas, modifikavimas, pašalinimas 34

2.7.5. Lentelių struktūros modifikavimas 35

2.7.6. Virtualios lentelės ir sinonimai 36

2.7.7. Indeksų sukūrimas 38

2.7.8. Išraiškų panaudojimas 39

2.7.9. Agreguotų funkcijų panaudojimas 41

2.7.10. Predikatai BETWEEN, IN ir LIKE operatoriuje SELECT 42

2.7.11. Rezultatų rūšiavimas 44

2.7.12. Eilučių grupavimas 45

2.7.13. Sąlygotos eilučių grupės 47

2.7.14. Lentelių sumavimas 47

2.7.15. Lentelių sujungimas 48

2.7.16. Rezultatų lentelių rūšiavimas ir grupavimas 50

2.7.17. Vidinis lentelių sujungimas 51

2.7.18. Sub-užklausos su pavienėmis grąžinamomis reikšmėmis 54

2.7.19. Sub-užklausos su grupe grąžinamų reikšmių 56

2.7.20. Raktažodžių ANY ir ALL panaudojimas 57

2.7.21. Predikato EXISTS panaudojimas 58

2.7.22. Koreliuotos vidinės užklausos 59

3 61

FUNKCINĖS PRIKLAUSOMYBĖS IR RAKTAI 61

3.1. Funkcinių priklausomybių apibrėžimas 61

3.2. Funkcinių priklausomybių iš

švedimo taisyklės 62

3.3. Galinė funkcinių priklausomybių aibė 65

3.4. Išvedimo taisyklių savybės 67

3.5. Santykių schemos raktai 72

4 74

FUNKCINIŲ PRIKLAUSOMYBIŲ DENGTYS 74

IR JŲ EKVIVALENTIŠKUMAS 74

4.1. Išvesties orientuotieji acikliniai grafai 74

4.2. Užduotų funkcinių priklausomybių ir atributų aibių ekvivalentiškumas 78

4.3. Tiesioginės funkcinės priklausomybės 81

4.4. Minimalios funkcinių priklausomybių dengtys 84

4.5. Redukuotosios ir optimaliosios dengtys 91

5 96

SUDĖTINIŲ FUNKCINIŲ PRIKLAUSOMYBIŲ DENGTYS 96

5.1. Sudėtinės funkcinės priklausomybės 96

5.2. Sudėtinių funkcinių priklausomybių aibės pertvarkymas 99

5.3. Funkcinių priklausomybių atstatymas iš struktūrinių tipų aibės 105

6 110

JUNGIMO/PROJEKCIJOS PRIKLAUSOMYBĖS IR RELIACINIŲ SCHEMŲ PROJEKTAVIMAS 110

6.1. Daugiareikšmės priklausomybės 110

6.2. Jungimo/projekcijos priklausomybės 112

6.3. Pagrindinis duomenų bazių projektavimo kriterijus 116

6.4. Reliacinių schemų projektavimo dekompozicijos metodas 120

6.5. Nenormalizuotų schemų trūkumai 131

6.6. Dekompozicijos metodo trūkumai 133

6.7. Pilnosios reliacinės duomenų bazės. 137

6.8. Duomenų bazių projektavimo sintezės metodas 137

LITERATŪRA 144ĮVADAS

Tradicinis duomenų bazių projektavimas apibrėžiamas, kaip procesas, kurio metu yra an
nalizuojami vartotojų poreikiai, aprašomos duomenų savybės ir poreikiams. relevantinė informacija atvaizduojama DBVS palaikomomis duomenų struktūromis [1]. Šis procesas suskaidomas į keturis etapus: reikalavimų analizės fazę, konceptualaus, loginio ir fizinio projektavimo fazes. Konceptualaus projektavimo fazėje modeliuojama vartotojų informacija bei jos apdorojimas. Šioje fa
azėje naudojami trys pagrindiniai semantiniai modeliai – objektinis, EER- ir reliacinis duomenų modeliai. Šie modeliai yra neutralūs, neorientuoti į konkretų DBVS palaikomą modelį. Reikalavimų analizės fazėje giliai analizuojama organizacijos veikla ir rezultate tiksliai aprašomos atskirų vartotojų grupių funkcijos. Tačiau duomenų struktūros paprastai lieka netiksliai apibrėžtos, neformalizuotos. Konceptualaus projektavimo fazėje formalizuojami semantiniai sąryšiai tarp probleminių sąvokų, panaudojant tam tikrą vieną ar net kelis semantinius duomenų modelius. Pastaruoju atveju integruojant atskirų vartotojų grupių informacijos poreikius konceptualiniame lygmenyje skirtingus duomenų semantinius modelius tenka transformuoti, kad specifikuoti duomenų bendrąsias savybes globalinėje schemoje. Loginio projektavimo fazėje sudaroma DB loginė schema, orientuota į pasiriktos DBVS duomenų modelį, kuris gali skirtis nuo duomenų modelio, panaudoto, sudarant globalinę schemą. Čia taip reikalingos modelio transformacijos, ypač tuo atveju, kai norima loginę schemą su
uprojektuoti automatizuotu būdu. Savo ruožtu, kuriant sofistines, plačios paskirties DBVS stengiamasi suprogramuoti unifikuotus duomenų manipuliavimo modulius, orientuotus į tipinių plataus spektro semantinių duomenų sąryšių apdorojimą. Tokie sąryšiai dar vadinami duomenų abstrakcijomis. Fizinio projektavimo metu DBVS palaikomo duomenų modelio loginė schema papildoma konkrečios kompiuterinės aplinkos ir operacinės sistemos duomenų fiziniais parametrais. Šitokia nuosekli projektavimo fazių seka būdinga taip vadinamai duomenų tiesioginei inžinerijai.

Konceptualaus projektavimo fazėje, kai aprašomi įvairių vartotojų informacijos poreikiai fiksuojami semantiniai sąryšiai tarp probleminių sąvokų, aptinkamos “siauros”, nesuderintos arba, atvirkščiai, “persotintos”, pl
lačios sąvokos. Šiuo atveju poreikių integracijos etape tenka įvesti naujas sąvokas (dalykinės srities konceptus), kad panaikinti sąvokų nesuderinamumą ir užpildyti pastebėtas semantines spragas. Tokie procesai yra “humanizuoti”, čia reikalingi ekspertai, gerai išmanantys dalykinę sritį, kad duomenų modelius būtų galima semantiškai praturtinti. Analogiška situacija pastebima, sprendžiant duomenų atvirkštinės inžinerijos uždavinius [2], kai projektuojant konceptualaus lygio globalinę schemą panaudojamos palikuoninės veikiančios DB ir jų schemos bei įvertinami nauji informacijos poreikiai. Šiuo atveju reikalavimų integracijos procese fiksuojant semantinius sąryšius tarp konceptų gali atsirasti taip vadinamos semantinės spragos, kurios užpildomos įvedant naujus adjekvačius konceptus. EER- diagramos naudojamas kaip reliacinių duomenų bazių modelio kvazi-standartas, ir jų pagalba specifikuojami duomenų struktūriniai apribojimai. Tiesioginės inžinerijos atveju struktūriniai EER-apribojimai transformuojami į reliacinius apribojimus, o atvirkštinės inžinerijos atveju EER- apribojimai transformuojami į koncepcinio OBJEKTŲ-SĄVYBIŲ modelio konstrukcijas [3], semantinės išraiškos galimybių požiūriu būdingas abstraktiems duomenų tipams, kurių aprašymui gali būti panaudojama SQL3 kalba [4].

Vienas iš pagrindinių tikslų projektuojant DBVS yra “padengti” vartotojų, naudojančių duomenų bazes, uždavinių semantiką. Projektuojamos plačios paskirties DBVS orientuojamos į tam tikro duomenų modelio panaudojimą. Objektiniuose ir EER duomenų modeliuose naudojamos bendrosios duomenų abstrakcijos yra tipo/supertipo (specializavimo/apibendrinimo), agregavimo ir asociatyviniai sąryšiai. Asociatyvi.niai sąryšiai duomenų bazių koncepcinio projektavimo stadijoje yra materializuojami arba, kitais žodžiais tariant, paverčiami agregatinių sąryšių tipais. Tarp dalykinės sr
rities konceptų užduoti tipo/supertipo sąryšiai dar vadinami isa sąryšiais. Agregatinius ir isa sąryšius, specifikuotus duomenų bazių koncepcinėse schemose, vadinsime pagrindiniais struktūriniais apribojimais. Šaltiniuose [5,6] pateikta jungtinė semantinių sąryšių taksonomija. Šios klasifikacijos sąryšiai naudojami lingvistikoje, logikoje ir kognityvinėje psichologijoje. Išsami šių semantinių sąryšių analizė pateikta [5]. Specifikuojant semantinius sąryšius panaudosime apibendrintas objektinės orientacijos duomenų abstrakcijas [3], būdingas abstraktiems duomenų tipams [4].

Daugeliui šiandienos kompanijų globalus priėjimas prie duomenų bazių (DB) yra pagrindinis sėkmės šaltinis. Tačiau tai taip pat yra didelė problema, nes daugelis duomenų bazių atsirado nepriklausomai viena nuo kitos laiko atžvilgiu. Žlugo arba nedavė tikėtinos naudos nemažai duomenų integravimo projektų. “Techninės” priežastys – tai struktūrinis ir semantinis heterogeniškumas, taip pat integravimo uždavinio sudėtingumas, be to, dažnai neįvertinama duomenų integravimo kaina ir nauda. Federatyvinio informacijos integravimo požiūriu [30] naudojami trys metodai, kaip išspręsti heterogeniškų duomenų bazių schemų integravimo problemą [31,32,33]. Kad išvengti semantinių konfliktų tarp skirtingų schemų specifikacijų, jos turi turėti bendresnį vieningą duomenų modelį, kurio pagrindu turi būti sudarytos koncepcinio lygio schemos organizacijos padaliniams ir aktoriams. Ši problematika yra organizacijų modeliavimo problematika [7,34,35]. Pragmatiniai ir semantiniai aspektai detaliai išnagrinėti monografijoje [8]. Pagrindinės nuostatos, kurių prisilaikoma šioje monografijoje pragmatiniais klausimais, pateiktos [9].

Informacijos sistema yra įmonės arba organizacijos dalis ir jos branduolį sudaro duomenų sa
augyklos, patalpintos kompiuterinės sistemos išorinėje atmintyje. Kadangi informacijos sistemos apima daug organizacijos padalinių, tai duomenų įvedimas, saugojimas, apdorojimas ir panaudojimas būna paskirstytas, priklausomai nuo to, kokie vartotojai ir kokius informacinius uždavinius sprendžia valdymo procese. Vartotojų informacijos poreikiai sąlygoja informacijos sistemos turinį, išreiškiamą realaus pasaulio objektais ir sąryšiais tarp jų. Apibrėžiant organizacijos modelį knygos [10] autoriai naudoja koncepcinio modelio sąvoką. Jos turinį sudaro objektų sistema, kurios pagrindu apibrėžiama realaus pasaulio nagrinėjama dalis.

Informacijos sistema (IS) susideda iš trijų dalių [11]: koncepcinės schemos, informacijos bazės ir informacinio procesoriaus. Koncepcinė schema ir informacijos bazė yra statinė sistemos dalis, kai tuo tarpu informacinis procesorius keičia bazės turinį prisilaikant apribojimų, kuriuos išreiškia koncepcinė schema. Klasikinis ESYBIŲ-RYŠIŲ (ER) formalizmas [12] ir jo išvystymai siekia aprašyti objektų sistemos statinę struktūrą. ER-diagramos yra grafinė notacija, charakterizuojanti esybių tipus, jų atributus ir sąryšius, kurie sujungia tarpusavyje objektus. ER-formalizmo pasekėjai [13,14] stengėsi padidinti koncepcinių schemų išraiškos galimybes. Šios koncepcinių schemų galimybės padengiamos įvairiais apribojimais. Struktūriniai apribojimai yra pateikiami deklaratyvioje formoje ir tik vėliau juos informacinis procesorius konvertuoja į procedūrinę formą. Struktūriniai apribojimai susiaurina reikšmių sritis, kuriose esybių arba sąryšių atributai yra interpretuojami.

Vartotojų poreikių nustatymas apima tris modeliavimo lygius [15] : meta-lygį, probleminį lygį ir egzempliorių lygį. Kitais žodžiais tariant visi trys lygiai yra sudaryti iš meta-tipų, tipų ir tipų- egzempliorių. Egzempliorių lygis susideda iš probleminės srities konceptų pavyzdžių. Probleminio lygio konceptai yra meta-lygio sąvokų (AGENTAS, ĮVYKIS, VEIKSMAS, ESYBĖ, RYŠYS) pavyzdžiai. Probleminio lygio sąvokos įvardina pro.bleminės srities objektus arba sąryšius (PIRKĖJAS, PARDAVĖJAS, UŽSAKYMAS). Meta-sąvokos ir meta-ryšiai apibrėžiami naudojant į tikslus orientuotą vartotojų poreikių nustatymo terminologiją. ESYBĖS, RYŠIAI, ĮVYKIAI, AGENTAI yra sąvokos, kurios naudojamos kaip specialūs meta-sąvokos OBJEKTAS atvejai. RYŠYS gali būti nagrinėjamas kaip subordinuotas OBJEKTAS. OBJEKTAS ir RYŠYS turi savo egzempliorius. RYŠIŲ-EGZEMPLIORIŲ egzistavimas sąlygojamas sąryšių tarp atatinkamų OBJEKTŲ-EGZEMPLIORIŲ egzistavimu. Paprastai objekto-egzemplioriaus sąvoka reiškia kokį nors pavienį daiktą, t. y. objekto pavyzdį, o OBJEKTAS reiškia panašių daiktų klasę. Šiame darbe OBJEKTO sąvoka naudojama kaip objektų-egzempliorių KLASĖ, kadangi mes norime OBJEKTĄ suprasti kaip tipą, t. y. kaip esybių aibę su identiška struktūra. Trečiojo skyriaus teoriniame nagrinėjime mes norime apsiriboti objektų sistemos statine struktūra.

Daktaro tezėse [16] narinėjamas ESYBIŲ-RYŠIŲ-LAIKO modelis, išplėstasis ER-modelis, kuris naudojamas istorinei informacijai ir įmonės funkcijoms modeliuoti. Laikas yra įvedamas kaip atskira esybių klasė. Kiekvienas objektas arba objektų sąryšis gali būti sujungtas su LAIKU. Tai yra gera idėja natūraliau pavaizduojant objektus ir tuo pačiu jų schemas. Tačiau laike egzistuojantys objektai ir sąryšiai ER-formalizmo kalbos prasme yra RYŠIAI, kurie savyje apjungia laiką. Koncepcinių schemų prasme, statiniu aspektu LAIKĄ galima traktuoti kaip probleminį objektą, nesuteikiant jam ypatingo statuso.

Funkcinė metodologija [17,18] orientuota į valdymo funkcijų dekompoziciją, kai tuo tarpu objektinės metodologijos [19,20] orientuotos pirmiausia į objektų identifikavimą. Vėliau prie šių objektų, duomenų objektų, prijungiamos procedūros. Tai yra du skirtingi konceptualaus modeliavimo prasme požiūriai. Šiose dviejų krypčių metodologijose naudojami trijų tipų modeliai: objektų sistemos modelis, būsenų transformavimo ir duomenų srautų diagramos. Šie trys modeliuojamos sistemos aspektai tarpusavyje suderinami. Funkcijos gali būti dekomponuotos iki subfunkcijų ir, analogiškai, objektai gali būti suskaidyti į subobjektus tam, kad subfunkcijos ir subobjektai tarpusavyje “susibalansuotų”. Būsenų transformavimo diagramos iliustruoja veiksmus, kurie priklauso nuo objektų atributų reikšmių, ir šiose diagramose naudojami veiksmai yra funkcijos iš duomenų srautų diagramų; būsenų diagramų įvykiai traktuojami kaip procedūros objektų atributų reikšmių atžvilgiu. Kiekviena duomenų srautų diagramos saugykla yra objektų ir sąryšių rinkinys iš objektų sistemos modelio; srautų diagramos funkcijos manipuliuoja duomenimis, specifikuotais objektų sistemos atributais.

Šiame leidinyje ketvirtame ir penktame skyriuose išsamiai išnagrinėti struktūrinių tipų projektavimo klausimai, kurie teoriniu požiūriu nėra pakankamai vientisai ištirti objektinės metodologijos srityje [19,20]. Šias spragas pabandyta užpildyti pasinaudojant nusistovėjusiais konceptais iš duomenų bazių reliacinės teorijos [21]. Šioje teorijoje pakankamai detaliai išnagrinėtos duomenų priklausomybės – funkcinės, daugiareikšmės, jungimo-projekcijos. Jų pagrindu išvystyti duomenų bazių loginės struktūros projektavimo dekompozicijos ir sintezės metodai. Minėtos duomenų priklausomybės sudaro fundamentalų pagrindą objektų sistemos vienareikšmiškam, normalizuotam išskyrimui. Šios duomenų priklausomybės yra populiarios, tačiau jų yra ir daugiau.Visas kitas priklausomybes, kurios padidina duomenų semantinės išraiškos galimybes, “padengiamos” procedūriniais objektais, kurie realizuojami duomenų apdorojimo procedūromis IS eksploatavimo metu. Objektų sistemoje šioms procedūroms numatomi duomenų objektų atitikmenys. Procedūra PR bus adekvati objektui Q, jeigu procedūros PR kiekvienas išėjimo kintamasis yra objekto Q savybė ir kiekvienam objektui-egzemplioriui q*Q procedūra PR priskiria tiksliai po vieną objekto Q savybių reikšmę. Tai yra procedūrinių ir duomenų objektų suderinamumo kriterijus. Juo vadovaujantis duomenų objek.tai yra specializuojami, o procesai iš srautų diagramos dekomponuojami, kad gauti subalansuotą objektų sistemą. Monografijoje pateiktas koncepcinių taip vadinamų OP schemų matematinis pagrindimas. Šiomis schemomis specifikuojami specializuoti objektai su adekvačiomis objektų savybėmis. Objekto Q savybė P yra adekvati, jeigu kiekvienas objektas-egzempliorius q*Q įgauna tiksliai po vieną kiekvienos savybės P reikšmę.

Meta-sąryšis tarp ESYBĖS ir OBJEKTO įvairiuose požiūriuose yra skirtingai suprantami. Požiūryje [15] ESYBĖ yra OBJEKTO specialus atvejis. Priešingai [20], ESYBĖS konceptas apima objektus-egzempliorius, OBJEKTUS-klases, atributus, ryšius ir asociacijas. Čia OBJEKTO konceptas yra specialus ESYBĖS koncepto atvejas. Ta pati esybė pasireiškia skirtingai ir elgiasi skirtingai, priklausomai nuo konteksto, kuriame ESYBĘ vartoja tas pats arba kitas vartotojas.

Vartotojų informacijos poreikių nustatymo ir žinių atvaizdavimo procese specialistai ir ekspertai manipuliuoja esybių vardais, kurie yra įtraukiami į IS konceptualų modelį. Jis atvaizduoja duomenų savybes ir struktūrinius apribojimus. Probleminės srities priežasčių-pasekmių fenomenas sąlygoja tarp esybių taksonominius sąryšius. Taksonominiai sąryšiai yra keliai, vedantys nuo bendresnių esybių prie detalesnių. Formaliai žiūrint šie sąryšiai yra dalinis sutvarkymas – jie yra tranzityvūs, refleksyvūs ir antisimetriniai. Šis požiūris yra aprašytas [22]. Pasinaudojant esybių vardų aibės daliniu sutvarkymu apibrėžiamas universalus struktūrinis tipas. Bet kuris objektas Q yra universalaus tipo potipis. Suprantama, kad šis pasiūlytas formalizmas nėra vienintelis. Čia žinomos analogiškos paskirties kitos matematinės schemos [23,24]. Siūlomas požiūris yra žinių atvaizdavimo abstrakčioje semiotinėje erdvėje metodo [25] dalinio atvejo išvystymas, pritaikant jį objektinių duomenų bazių koncepcinių schemų projektavimui. Objektinėse duomenų bazėse naudojamos struktūrinių tipų elgsenos standartinės funkcijos [26].Koncepcinėje schemoje specifikuoti objektų apribojimai, kurie pateikiami deklaratyvinėje formoje, programų sudarymo arba generavimo CASE priemonėmis etape konvertuojami į procedūrinę formą. Apribojimų korektiškumas kontroliuojamas dviejose stadijose – programos kompiliavimo metu (static type cheking) ir jos vykdymo metu (run time checking) [27]. Struktūrinis OP modelio komponentas papildytas tipinėmis struktūrinių tipų elgsenos funkcijomis ir vartotojo užduotomis operacijomis [28] išbaigia šį modelį. Šis išbaigtas modelis traktuojamas objektiniu. Objektinio komponento kalbos prototipu yra SQL3 kalba [29], kuri atžvilgiu SQL turi abstrakčių duomenų tipų praplėtimą.

Įvade trumpai apžvelgti įvairūs požiūriai į informacijos sistemų duomenų semantikos analizę ir duomenų struktūrų projektavimą. Pagrindinis duomenų bazių projektavimo metodas, kuris turi pakankamą teorinį išbaigtumą yra reliacinių duomenų bazių projektavimo dekompozicijos metodas [21], kuris išvystytas šeštajame skyriuje iki universalių struktūrinių tipų sintezės metodo. Šis metodas gali būti panaudotas objektinių duomenų bazių ir duomenų objektų struktūriniam komponentui projektuoti. Pateikta teorinė medžiaga yra naudojama Kauno technologijos universiteto Informatikos fakultete, skaitant bakalaurinių studijų “Duomenų bazių” paskaitų kursą ir magistrinių studijų kursą “Duomenų bazės ir semantiniai modeliai”.

2.KANONINĖS SCHEMOS IR RELIACINIS MODELIS

2.1. Duomenų pavaizdavimas lentelinėje formoje

Reliacinės duomenų bazės yra populiarios, jos orientuotas vartotojui betarpiškam naudojimui. Reliacinių duomenų bazių modelio pagrindiniai privalumai yra:

– duomenų struktūros paprastumas ;

– nesudėtingi duomenų manipuliavimo metodai ir kalbos.

Visi duomenys, kur jie bebūtų užrašyti, – ar kompiuterio ekrane,ar atspausdinti popieriuje – pateikiami lentelėse. Programuotojas loginiame lygyje taipogi įsivaizduoja duomenų pateikimo formą lentelinę.Tos pačios lentelės visos eilutės turi tą patį formatą. Lentelės duomenys charakterizuoja vieną apibendrintą dalykinės srities objektą, o viena lentelės eilutė charakterizuoja vieną realaus pasaulio objektą-egzempliorių (konkretų tarnautoją, padalinį, detalę ir t.t.). Jeigu du apibendrinti informaciniai objektai TARNAUTOJAS ir PADALINYS susieti tarpusavyje sąryšiu, pavyzdžiui VYKDOMOS_PAREIGOS , tai toks sąryšis traktuojamas kaip savarankiškas apibendrintas objektas ir jam skiriama duomenų bazėje nauja lentelė, kur surašomi duomenys, charakterizuojantys sąryšį VYKDOMOS_PAREIGOS.

Paimkime pavyzdį (žr. 2.1 lentelę.). Lentelėje Grafikas surašyti duomenys, kurie charakterizuoja lėktuvų reisus.

2.1 lentelė. Grafikas

REISO_NR IŠSKRIDI-MO_PUNKTAS ATVYKI-MO_PUNKTAS IŠSKRIDI-MO_LAIKAS ATVYKI-MO_LAIKAS

t1 83 Vilnius Berlynas 11.30 13.43

t2 84 Berlynas Vilnius 15.00 17.13

. 213 Vilnius Talinas 11.43 12.45

214 Talinas Vilnius 14.20 15.22

tp 109 Vilnius Šarža 21.50 4.10

Lentelės eilutė skiriama vienam reisui. Lentelės eilutę vadinsime kortežu. Reisus charakterizuoja stulpeliai REISO_NR, IŠSKRIDIMO_PUNKTAS, ATVYKIMO¬_ PUNK¬AS, IŠSKRIDIMO_LAIKAS, ATVYKIMO_LAIKAS. Eilutės formatas keičiantis metų sezonams išlieka nepakitęs, kai tuo tarpu reisai ir atatinkamų eilučių duomenys keičiant grafiką modifikuojami. Lentelės stulpeliai yra vadinami atributais, o atributai turi savo vardus.Kiekvienam atributui priskiriamos leistinų reikšmių sritys, kurias vadinsime domenais. Kortežai turi komponentus, kurių skaičius sutampa su lentelės atributų skaičiumi. Jeigu lentelė mūsų pavyzdyje turi penkis stulpelius, tai kortežai įvardijami penkiaviečiais. Duomenų lentelę toliau vadinsime duomenų santykiu. Atributų rinkinys sudaro santykio schemą.

Pateiksime griežtesnį santykio apibrėžimą. Sakykime, kad turime santykio schemą R = A1, A2, ., An. Schemoje kiekvienam atributui Ai atitinka domenas – atributo netuščia ir suskaičiuojama reikšmių aibė Di = dom(Ai). Ankstesniame pavyzdyje dom(REISO_NR) – tai dviženklių ir triženklių sveikųjų skaičių aibė, dom(IŠSKRI¬DIMO_PUNKTAS) = dom(ATVYKIMO_PUNKTAS) – tai Vilnius ir kiti miestai, su kuriais Vilniaus aerodromas turi oro linijas. Sakykime, kad D = D1 D2 . Dn. Schemos R santykis r(R) (jį, jeigu iš konteksto yra aišku, žymėsime paprastumui r) – tai aibės R atvaizdų aibėje D rinkinys t1, t2, .,tp. Čia: – santykio r kortežų skaičius. Kiekvienas atvaizdas (žr. 2.1 lentelę ir 2.1 pav.) tj r turi tenkinti griežtą apribojimą tj(Ai) Di; 1 i n; 1 j p. Pavyzdžiui, 2.1 lentelės antrasis kortežas gali būti užduotas naudojant atvaizdą t2: t2(REISO_NR) = 84; t2(IŠSKRIDIMO_PUNKTAS) = Berlynas; t2(ATVY¬KIMO_PUNKTAS) = Vilnius; t2(IŠSKRIDIMO_LAIKAS) = 15.00; t2(ATVYKI¬MO_LAIKAS) = 17.13 . Tas pats kortežas t2 gali būti užduotas, kaip funkcinių porų aibė: t2 = (REISO_NR; 84), (IŠSKRIDIMO_PUNKTAS; Berlynas), (ATVYKIMO_PUNK¬TAS; Vilnius), (IŠSKRIDIMO_LAIKAS; 15.00), (ATVYKI¬MO_LAIKAS; 17.13)

2.1 pav.

Naudojant atvaizdus t išvengiama atributų Ai sutvarkymo aibėje R. Kitais žodžiais tariant, stulpelių išdėstymo tvarka neturi reikšmės, nes neduoda jokios papildomos informacijos apie dalykinę sritį. Santykį apibrėžėme, kaip kortežų aibę, todėl kortežų išdėstymas lentelėje taip pat neduoda papildomos informacijos apie dalykinę sritį. Pabrėšime, kad kortežų aibę suprantame, kaip paprastąją aibę, o ne kaip multi-aibę, t.y. vienodi kortežai lentelėse nesaugojami, ir dublikatai taipogi jokios papildomos informacijos neduoda! Tai yra viena iš reliacinio modelio. prielaidų, nors manipuliuojant duomenimis lentelėse gali atsirasti ir kortežų-dublikatų. Tradiciškai kortežas suprantamas kaip reikšmių sąrašas, užduotas tokia komponentų tj(Ai) išdėstymo tvarka, kaip schemoje R specifikuojami atributai Ai, 1 i n. Ateityje schemą R patogumui specifikuosime sąrašu R = (A1, A2, ., An) arba stulpeliu:

R

A1

A2

.

An.

Santykio schema yra invariantinė (nekintanti) laiko atžvilgiu, tačiau santykis r, charakterizuojantis dalykinės srities objektus ir sąryšius tarp jų, gali keistis. Todėl kortežai gali būti modifikuojami, naujai įterpiami arba pašalinami. Tam naudojamos atitinkamos trys operacijos:

1) MOD(r; A1 = d1, A2 = d2, ., An = dn ; C1 = c1, C2 = c2, ., Cg = cg);

2) ADD(r; A1 = d1, A2 = d2, ., An = dn);

3) DEL(r; A1 =d1, A2 = d2, ., An = dn).

Operacijoje MOD atributai C1, C2, ., Cg – tai atributai, kurių reikšmės pakeičiamos naujomis reikšmėmis c1, c2, ., cg. Visose trijose operacijose reikšmės d1, d2, ., dn identifikuoja kortežą, kuriam atliekama operacija.

Duomenų bazių reliacinį modelį sudaro struktūrinė arba deklaratyvinė ir manipuliacinė dalys. Deklaruojant reliacinės duomenų bazės struktūrą aprašomos santykių schemos. Santykių schemų visuma sudaro duomenų bazės schemą. Duomenų manipuliavimui paprastai naudojami taip vadinama kortežų skaičiavimo arba tiesiog reliacinio skaičiavimo kalba SQL (Structured Query Language-angl.), kurios operatoriai turi reliacinės algebros atitikmenis. Skyriaus antrojoje pusėje aprašomos reliacinės algebros operacijos ir pateikiama standartizuota reliacinio skaičiavimo kalba SQL.2.2 Duomenų bazių kanoninės schemos

Duomenų bazių kanoninė schema (KS) yra koncepcinio projektavimo rezultatas. Ji susideda iš duomenų įrašų (kortežų) tipų ir ryšių tarp jų. Savo ruožtu įrašų tipas susideda iš duomenų elementų (atributų) arba laukų. Tarp dviejų tipų fiksuojamas binarinis ryšys, jeigu tarp jų egzistuoja asociatyvinis ryšys. Binariniai ryšiai būna trijų tipų 1:1, 1:M, N:M.

Tarkime, kad vienas duomenų tipas susideda iš loginių įrašų, kurių aibė yra T1, o kitą tipą sudaro įrašų aibė T2. Egzistuojant binarinio ryšio R12 tipui 1:1 tarp duomenų tipų T1 ir T2,tarpusavyje asocijuojama po du įrašus t1 T1 ir t2 T2. Binarinio ryšio R12 tipo 1:M atveju vienam loginiam įrašui t1 T1 asocijuojama aibė S1 įrašų t2, t2 S1 T2, ir tuo pačiu metu vienam loginiam įrašui t2 T2 asocijuojamas vienas loginis įrašas t1 T1. Tarp duomenų tipų T1 ir T2 binarinio ryšio R12 tipas N:M nustatomas tada, jeigu įrašas t1 T1 asocijuojamas su įrašų t2 aibe S1; t2 S1 T2, o įrašas t2 T2 asocijuojamas su įrašų t1 aibe S2; t1 S2 T1.

Asocijuojant duomenų tipą T1 su tipu T2 būtina, kad tipai T1 ir T2 turėtų bent po vieną elementą A1 ir A2 su bendra reikšmių sritimi. Įrašas t1 T1 yra asocijuojamas su įrašu t2 T2, jeigu duomenų bazėje t1(A1) = t2(A2), t.y.: konkrečiam įrašui t1 asocijuojama įrašų t2 aibė S1:

S1 = {t2 | t1(A1) = t2(A2), t1 T1, t2 T2; dom(A1) = dom(A2)}

Bendru atveju duomenų bazėje aibė S1 gali būti tuščia. Asocijuojant tipą T1 su tipu T2 asocijavimo kriterijumi gali būti gali būti paimtas nebūtinai vienas tipo T1 laukas, o keli laukai ir būtinai tiek pat tipo T2 laukų.

Binariniai ryšiai tarp dviejų duomenų tipų gali būti nustatyti keli. Jeigu tipas T1 asocijuojamas su tipu T2 kelis, pavyzdžiui, du kartus, tai kiekvieno ryšio R12 ir R’12 atveju tipuose T1 ir T2 yra bent po vieną duomenų elementų porą A1, A2 ir A’1, A’2 tokių, kad kiekviena laukų pora A1, A2 ir A’1, A’2 turi bendras reikšmių sritis, t.y. dom(A1) = dom(A2) ir dom(A’1)= dom (A’2).

2.2 pav.

2.3 pav.

Paimkime kanoninės schemos pavyzdį (žr. 2.2 pav.). Duomenų tipas MAKL1 susideda iš elementų MAKL_NR, MIESTAS, VADOVAS, o tipas MAKL2 – iš MAKL_NR, ATLYGIS, PRIEDAS. Kiekvienam makleriui, dirbančiam prekybinėje firmoje abiejuose duomenų tipuose skiriama po vieną įrašą. Makleriai identifikuojami naudojant lauką MAKL_NR, kur kiekvienas makleris turi savo unikalų numerį. Tarp MAKL1 ir MAKL2 šiuo atveju nustatomas 1:1 tipo asociatyvinis ryšys, kuris 2.2 pav. parodytas dviejų krypčių rodykle. Virš rodyklės parodyti asociatyviniai laukai. Šiuo atveju laukų vardai sutampa. Todėl schemoje juos parodyti nebūtina.

2.3 paveiksle parodyta kita kanoninė schema, sudaryta visai prekybinės firmos duomenų bazei PREKYBA. Tipas MAKL susideda iš įrašų, kurie charakterizuoja maklerius; PIRK – iš įrašų, kurie charakterizuoja pirkėjus; PARD įrašai charakterizuoja užsakymus, kuriuos pirkėjai yra pateikę makleriams; UŽSA įrašai charakterizuoja užsakymų sudėtį, t.y. komplektus, kurie įeina į kiekvieną užsakymą; PREK tipo įrašai charakterizuoja prekių (KOMPL_NR) likučius (PREK.KIEKIS) įvairiuose miestuose; duomenų tipo SUDE įrašuose registruojami duomenys apie kiekvieno komplekto sudėtį, t.y. duomenys apie tai, kokie elementai (ELEMEN) ir kokiais kiekiais (SUDE.KIEKIS) įeina į komplektą (KOMPL). Čia ir ateityje, esant būtinumui, skirtingi atributai su tuo pačiu vardu, jeigu jie naudojami kaip skirtingų įrašų tipų elementai, bus identifikuojami naudojant tipų žymes ir elementų vardus, atskirtus per tašką. Pavyzdžiui, atributai PREK.KIEKIS ir SUDE.KIEKIS yra skirtingi: pirmasis nusako prekių likučius, o antrasis elemento skaičių, kuriuo jis įeina į komplektą. Beje, šioje dalykinėje srityje sudėtinis elementas gali būti savarankiška preke (UŽSA.KOMPL_NR) ir turėti savo sandėliavimo punktą (VIETA). Kanoninės schemos elementai APMOKETA, IVYKD_POZ, PAPILD_POZ yra LOGICAL tipo ir gali turėti dvi reikšmes “.F.” arba “.T.”. Jeigu kuris nors užsakymas (PARD.UZSAK_NR) yra apmokėtas ( APMOKETA = .T. ) ir t.o užsakymo kurį nors komplektą (UZSA.KOMPL_NR) pirkėjas iš prekybinės firmos yra gavęs, tai tada IVYKD_POZ = .T. . Jeigu prekybinė firma iš kurio nors punkto (VIETA), kur yra sandėliuojama kuri nors prekė (PREK.KOMPL_NR), organizuoja tos prekės pristatymą pirkėjams, tai PAPILD_POZ = .T. , kitu atveju – PAPILD_POZ = .F..Naudo¬jantis šia dalykine sritimi iliustruosime kanoninės schemos ryšių tipus ir kitus pavyzdžius.

Tarp duomenų tipų MAKL ir PARD parodytas 1:M tipo ryšys MAKL_NR/MAKLERIS su asociavimo atributų pora MAKL_NR ir MAKLERIS. Įrašų aibėje MAKL kiekvienam makleriui numatomas vienas įrašas su unikalia lauko MAKL_NR reikšme. Įrašų aibėje PARD po vieną įrašą skiriama kiekvienam užsakymui su unikalia lauko PARD.UZSAK_NR reikšme. Tipo MAKL lauko MAKL_NR reikšmė gali atsikartoti kelių skirtingų tipo PARD įrašų lauke MAKLERIS, nes tas pats makleris gali būti priėmęs keletą užsakymų. Todėl tarp įrašų tipų MAKL ir PARD nustatomas ryšio tipas 1:M. Tarp duomenų tipų UZSA ir PREK asociatyviniai laukai nenurodyti, nes jų vardai KOMPL_NR abiejuose tipuose sutampa. Tarp duomenų tipų PREK ir SUDE parodytas ryšys KOMPL_NR/KOMPL yra N:M tipo, nes komplektas, užregistruotas tipo PREK įrašu gali susidėti iš kelių skirtingų elementų ir, atvirkščiai, komplektas užregistruotas tipu SUDE gali būti sandėliuojamas keliuose miestuose.

2.4 pav.

Paimkime dar vieną nedidelį kanoninės schemos pavyzdį (žr. 2.4 pav.), kuriame tipai MAKL1 ir MAKL2 sujungti dviem ryšiais MAKL_NR/MAKL_NR ir VADO¬VAS/MAKL_NR. Šioje kanoninėje schemoje leistinai nustatytas ryšys VADO¬VAS/MAKL_NR, kadangi MAKL1 elementas VADOVAS ir MAKL2 elementas MAKL_NR turi bendrą reikšmių sritį, t.y. dom(VADOVAS) = dom(MAKL_NR).2.3. Duomenų bazių valdymo sistemos

Programų kompleksas, skirtas duomenų mainams tarp fizinės duomenų bazės (FDB), saugojamos išorinėje atmintyje, ir pagrindinės (operatyviosios) atminties realizuoti sudaro duomenų bazių valdymo sistemą (DBVS). DBVS paskirtį iliustruoja 2.5 paveikslas.

DBVS panaudojimas supaprastina vartotojų programas, paspartina jų sudarymą ir sumažina duomenų perteklių fizinėje duomenų bazėje. Įvairūs loginiai failai, kuriais operuoja vartotojų programos, gali būti gauti iš tų pačių fizinių failų, kurie organizuojami naudojant įvairius fizinės organizacijos metodus. Konkreti DBVS yra orientuota į tam tikrą vieną ar kelis fizinės organizacijos metodus. Tačiau klasifikuojant DBVS, žiūrima, kokio tipo duomenų struktūras palaiko viena ar kita DBVS loginiame (programuotojo) lygyje. Taip yra skiriamos reliacinės, hierarchinės ir tinklinės DBVS.

2.5 pav.

Svarbią vietą informacinėje sistemoje užima DB administratorius, kuris turi garantuoti sistemos funkcionalumą. Administratorius turi:

• užtikrinti DB patikimumą,

• DB saugumą,

• duomenų pilnumą ir suderinamumą.

Šioms funkcijoms realizuoti nepakanka DBVS, ir jis naudoja DB standartines programas bei savo individualias originalias programas.2.4. Kanoninių schemų klasifikavimas

Paprastai DBVS palaiko kanoninėmis schemomis užduotus 1:M ryšių tipus. Jeigu suprojektuotoje DB kanoninėje schemoje yra N:M tipo ryšių ir pasirinkta DBVS tokių ryšių nepalaiko, tai tokią schemą reikia transformuoti. Kanoninių schemų transformavimo būdai aptariami sekančiame skyrelyje. Jeigu suprojektuotoje schemoje yra 1:1 ryšių, tai tokių ryšių tipą galima traktuoti kaip dalinį tipo 1:M atveją, kai M = 1.

2.5 pav.

2.6 pav.

Tarkime, kad schemoje yra tik 1:M tipo asociatyviniai ryšiai. Paimkime duomenų tipus T1, T2 ir 1:M tipo ryšį R12 (žr. 2.5 pav.). Tipas T1 ryšio R12 atžvilgiu yra pagrindinis, o tipas T2 šio ryšio atžvilgiu yra detalusis. Jeigu schemoje neegzistuoja nė vieno tokio detaliojo duomenų tipo, kad jis būtų detalus atžvilgiu dviejų ar daugiau ryšių, kuriais jis sujungtas su pagrindiniais, tai sakome, kad schema yra hierarchinė arba medžio tipo. Jeigu schema netenkina šio apibrėžimo ir jeigu schemoje kiekvienas atskirai paimtas duomenų tipas visų ryšių, kuriais jis sujungtas su kitais duomenų tipais, atžvilgiu yra tik detalusis arba tik pagrindinis, tai tokia schema bus vadinama paprastąja tinkline. Jeigu schema netenkina abiejų apibrėžimų, tai ją vadinsime sudėtingąja tinkline. Schema, pateikta 2.6a paveiksle, yra medžio tipo, kadangi ir B, ir C, ir D tipai yra detalūs ne daugiau kaip vieno ryšio atžvilgiu. Schema 2.6b paveiksle yra paprastoji tinklinė, nes duomenų tipas B yra detalus visų ryšių atžvilgiu, o A ir C – pagrindiniai.Schema 2.5c paveiksle yra sudėtingoji tinklinė, kadangi B tipas vienu metu yra ir pagrindinis, ir detalus dviejų ryšių D ir E atžvilgiu.2.5. Kanoninių schemų transformavimas

Kuriamos duomenų bazių valdymo sistemos (DBVS) yra orientuotos į vieną iš kanoninių schemų klasę. Būdingas hierarchinių DBVS pavyzdys yra IMS sistema. Kadangi paprastosios tinklinės schemos yra sudėtingųjų tinklinių schemų dalinis atvejis, tai DBVS, aptarnaujančios sudėtingąsias tinklines struktūras, gali sėkmingai aptarnauti ir paprastąsias. Analogiškai hierarchinė kanoninė schema taip pat yra sudėtingųjų tinklinių schemų variantas, todėl sudėtingųjų tinklinių schemų DBVS gali sėkmingai palaikyti ir medžio tipo schemas. Kadangi medžio tipo duomenų struktūrų aptarnavimui fizinės organizacijos metodai yra paprastesni, tai hierarchinės DBVS yra nesudėtingos ir, suprantama, pigesnės, lyginant su sudėtingųjų tinklinių schemų DBVS. Tokių DBVS charakteringas pavyzdys yra IDMS sistema. Suprojektuotos kanoninės schemos klasė priklauso nuo duomenų prigimties, nuo to, kokia yra dalykinės srities duomenų struktūra. Jeigu projektuotojas yra profesionaliai įsisavinęs tam tikrą DBVS, tai kuriant informacines sistemas, jis duomenų bazės kanoninę schemą “suorientuoja” į tokią, kad įsisavinta DBVS galėtų ją fizinėje duomenų bazėje palaikyti (nors ir neefektingai!).

Pateiktoje kanoninių schemų klasifikacijoje bus naudojami tik 1:M ryšiai. Jie, padengia realizacine prasme ir 1:1 ryšius. Tiek hierarchinės, tiek tinklinės DBVS nepalaiko N:M ryšių ta prasme, kad DBVS neturi komandų, kuriomis galima betarpiškai apdoroti saugojamus išorinėje atmintyje asocijuotus įrašus dviejų tipų, tarp kurių egzistuoja N:M asociatyvinis ryšys. Jeigu jie kanoninėje schemoje ir nurodyti, tai jie realizuojami tik vartotojų išorinėmis programomis. Savo ruožtu, nei medžio tipo, nei

tinklinių DB schemomis N:M ryšiai negali būti deklaruojami, kadangi jie vartotojų programomis nepalaikomi. Čia pažymėsime, kad reliacinių DB schemomis nagrinėti asociatyviniai ryšiai nedeklaruojami aplamai ir realizuojami tik programiniu būdu. Duomenų apdorojimo paspartinimui čia paprastai naudojami papildomi fizinės organizacijos indeksiniai duomenų failai. Tai, suprantama, reikalauja ir papildomos išorinės atminties duomenų saugojimui. Apie failų indeksavimą bus kalbama šio skyriaus paskutiniame skyrelyje.

2.7 paveikslėlyje parodytas pavyzdys, kaip N:M ryšys gali būti eliminuotas įvedant papildomą įrašo tipą. Pradinėje schemoje (žr. 2.7a pav.) įrašų tipai UZSA ir SUDE sujungti N:M tipo asociatyviniu ryšiu KOMPL_NR/ELEMEN, kurio dėka UZSA tipo įrašų poaibis su kuria nors pasikartojančia lauko KOMPL_NR reikšme yra asocijuojamas su tipo SUDE įrašų poaibiu tokiu, kad įrašų lauko ELEMEN reikšmė atsikartoja. 2.7 paveiksle įrašų tipų atributai yra sugrupuoti, blokelių kairėje pusėje parodant identifikacinius (raktinius) laukus, o dešiniojoje pusėje – neidentifikacinius. UZSA tipo įrašai yra identifikuojami laukų KOMPL_NR ir UZSAK_NR reikšmių poromis, ir kiekvienas įrašas turi unikalią šių reikšmių porą, o SUDE tipo įrašai turi unikalias laukų KOMPL ir ELEMEN reikšmių poras. Kadangi dom(KOMPL) = dom(ELEMEN), t.y. šie laukai turi bendras reikšmių sritis, tai tarp įrašų tipų UZSA ir SUDE gali būti užduoti du asociatyviniai ryšiai. Eliminuojant ryšį KOMPL_NR/ELEMEN įvestas naujas įrašo tipas ELEM su identifikaciniu lauku ELEMEN (žr. 2.7b pav.). Šiame tipe bus saugojami įrašai, skirti visiems elementams, kurie naudojami kaip SUDE tipo prekinių komplektų (SUDE.KOMPL) komponentai (SUDE.ELEMEN). Tarp įrašų tipų ELEM ir UZSA ryšys KOMPL_NR/ELEMEN jau unikalias laukų KOMPL ir ELEMEN reikšmių poras. Kadangi dom(KOMPL_NR) = bus 1:M tipo. Nustatytas ryšys ELEMEN/ELEMEN tarp įrašų tipų ELEM ir SUDE bus 1:M tipo taip pat. Sudarytos naujos schemos DB, suprantama, turės dubliuojamus duomenis, tačiau informaciniu požiūriu po schemos transformacijos jos turinys išlieka nepakitęs. Analogiškai sekančiu žingsniu turi būti eliminuojamas ir N:M ryšys KOMPL_NR/KOMPL.

2.7 pav

2.8 paveiksle parodyta, kaip sudėtingąją tinklinę schemą (žr. 2.8a pav.) galima pertvarkyti į hierarchinę (žr. 2.8b pav.). Šiuo atveju. atsiranda duomenų dubliavimas, nes užsakymai bus registruojami du kartus. 2.9 paveiksle parodyta, kaip galima hierarchinę kanoninę schemą (žr. 2.9a pav.) transformuoti į paprastąją tinklinę. (žr. 2.9b pav.) Šiuo atveju užsakymai taip pat dubliuojami.Čia reikia pastebėti, kad asociatyvinis ryšys tarp PARD1 ir PARD2 yra 1:1, nes abiejuose tipuose identifikacinis laukas yra UZSAK_NR. Tačiau toks ryšys gali būti traktuojamas kaip ryšio 1:M dalinis atvejis ir paprastoji tinklinė DBVS pilnai užtikrina tokio tipo loginę realizaciją. Įvedant naujus įrašų tipus reikia išvengti bereikalingo laukų dubliavimo ir palikti tik identifikacinius ir asociatyvinius laukus.

2.8 pav.

2.9 pav.2.6. Reliacinės algebros operacijos

Reliacinėje algebroje yra penkios pagrindinės ir trys papildomos, išvestinės operaci¬jos.

1. Suma. Schemos R santykių r1 ir r2 suma r3 = r1 Č r2 yra aibė kortežų, kurie priklauso arba santykiui r1 arba r2, arba abiems kartu:

r1 r2 r3 = r1 r2

A B C A B C A B C

a b c b g a a b c

d a f d a f d a f

c b d c b d

b g a

Skirtumas. Schemos R santykių r1 ir r2 skirtumas r3 = r1 r2 yra aibė kortežų kurie priklauso r1, bet nepriklauso r2 (santykiai r1 ir r2 paimti iš sumavimo pavyzdžio):

r3 = r1 r2

A B C

a b c

c b d

3. Sandauga. Dviejų schemų R ir S santykių r ir s sandauga g = r s yra schemos G = R Č S kortežų g aibė, kuri gaunama santykio r kortežus paimant visose kombinacijose su santykio s visais kortežais:

r s g = r s

A B C D E A B C D E

a b c b g a b c b c

d a f d a a b c d a

c b d d a f b g

d a f d a

c b d b g

c b d d a

4. Projekcija. Projekcijos operacijos esmę sudaro tai, kad santykiui kai kurie kortežų komponentai pašalinami, o likę sukeičiami arba nesukeičiami vietomis. Paimkime schemos R = (A, B, C) santykį r. Santykio r projekcija schemoje S = (A, C) bus santykis s ir s = S (r)= A,C (r), o to paties santykio r projekcija schemoje S = (B, A) bus santykis g; g = BA (r) kuriame stulpeliai B ir A yra sukeisti vietomis:

r s = AC (r) g = BA (r)

A B C A C B A

a b c a c b a

d a f d f a d

c b g a d

Paimkime bendrąjį atvejį. Tegul R ir S yra schemos tokios, kad S R, o r – schemos R santykis (schemos egzempliorius) ir S = (A1, A2, .,An). Schemos S egzempliorius s gali būti gautas iš schemos R santykio r panaudojant projekcijos operaciją:

Gautam santykiui s būdinga tokia savybė: kiekvienam jo kortežui u , u s, santykyje r egzistuoja kortežas v, kurio visi komponentai stulpelyje Ai sutampa su kortežo u komponentais stulpelyje Ai; Ai R; Ai S.

5. Selekcija. Sakykime, kad F – tai formulė, sudaryta iš:

– operandų, kuriais gali būti konstantės ir/arba atributai Ai R;

– aritmetinių palyginimo operatorių (=, , <, >, );

– loginių operatorių (, , ).

Selekcija F (r) rezultate duoda santykį s, kurį sudaro aibė kortežų t, priklausančių r, tokių, kad įstačius konstantes ir/arba kortežo t komponentus t(Ai) į formulės F atitinkamus operandus, formulė yra teisinga. Pavyzdys:

r s = B > C (r)

A B C A B C

2 4 3 2 4 3

3 2 1 3 2 1

5 1 1

Pastebėsime, kad selekcijos operacijose naudojami aritmetinio tipo operandai, nors kai kurių aritmetinių operatorių atveju (pavyzdžiui, operatoriaus “=” arba “” atveju) galima paimti ir simbolinius operandus.

Toliau pateiksime likusias tris išvestines operacijas, kurios gali būti išreikštos ankstesnėmis pagrindinėmis operacijomis.

6. Sankirta. Schemos R santykių r1 ir r2 sankirta r3 = r1 r2 yra aibė kortežų, kurie priklauso ir r1, ir r2. Sankirta r3 nustatoma, panaudojus du kartus skirtumo operacijas r1 (r1 r2):

r1 r2 r1 r2 r3 = r1 (r1 r2)

A B C A B C A B C A B C

A b c b g a a b c d a f

D a f d a f c b a

C b a

7. Jungtis. Schemų R ir S santykių r ir s jungtis, panaudojant atžvilgiu stulpelių Ai R ir Bj S aritmetinį palyginimo operatorių , užrašysime r s . Kaip ir anksčiau,

Ai Bj

operatoriumi gali būti =, , <, , >, .Operacijos rezultate gauname schemos G = (R S) santykį g, kuris yra dekartinės sandaugos r s poaibis toks, kad kiekviename jo korteže t komponentas t(Ai) yra -ryšyje su to paties kortežo komponentu t(Bj ).

Pavyzdys:

g = r s

r s B D

A B C D E A B C D E

2 2 3 3 1 4 5 6 6 2

7 8 9 6 2 1 2 3 3 1

1 2 3 1 2 3 6 2

Jungties operacija realizuojama nuosekliai dvejomis pagrindinėmis operacijomis – sandauga ir selekcija. Jeigu Q – operatorius yra lygybės. operatorius, tai jungtis yra vadinama ekvi-jungtimi. Kaip pastebėjome iš pavyzdžio, selekcijos ir jungties operacijos atveju, lygiai kaip ir selekcijos atveju, operandai yra sudaryti iš skaitmeninių reikšmių. Tačiau jei aritmetinis palyginimo operatorius yra ”=” arba ” ”, tai operandai gali turėti ir simbolines reikšmes.

8. Natūralioji jungtis. Natūraliosios jungties operacija santykiams r ir s taikoma tada, kai šių santykių schemos R ir S turi bendrų atributų AiR S. Rezultate gaunamas naujos schemos G santykis g. Operaciją žymėsime g = r s. Ji realizuojama nuosekliai taikant dekartinės sandaugos, selekcijos ir projekcijos operacijas.

1) Paskaičiuojama sandauga r s.

2) Gautoje sandaugoje atrenkami tie kortežai, kurių Ai-komponentai iš r ir s tuose pačiuose kortežuose sutampa.

3) Pasikartojančius stulpelius Ai S (arba Ai R) trečiuoju veiksmu pašali¬name:

r s g = r s

A B C B C D A B C D

a c a c c a a B a d

a b a b a d e B a d

e b a

Natūraliosios jungties operacija gali būti naudojama tiek skaitmeniniams, tiek simboliniams operandams.

Pažymėkime schemos S atributus Ai sutrumpinimo tikslu S.Ai, o šios schemos santykio s komponentus – s.Ai. Jeigu R S = (B1, B2, ., Bk) tai operacija r s gali būti užrašyta tokiu būdu:

r s =

Čia: G – schema, sudaryta iš R ir S visų atributų, išskyrus pasikartojančius schemos S atributus S.B1, S.B2, ., S.Bk. Natūraliojoje jungtyje, kaip matome iš jos bendrojo pavidalo, antruoju selekcijos veiksmu tarp aritmetinių lygybės operatorių panaudoti loginiai konjunkcijos operatoriai. Jų skaičius turi būti toks, kad būtų galima sulyginti santykių r ir s visas pasikartojančių stulpelių Bi reikšmes; i = 1, 2, ., k.

Aprašytų operacijų iliustracijai pateiksime pavyzdį. Šiam pavyzdžiui ir sekančio skyrelio pavyzdžiams, kur bus iliustruojama reliacinio skaičiavimo kalbos operatoriai, naudosime nedidelės mokomosios duomenų bazės šešias lenteles makl, pirk, pard, užsa, prek, sude (žr. 2.2-2.7 lenteles) Šios duomenų bazės kanoninė schema buvo naudojama 2.4 skyrelyje kanoninių schemų transformavimo pavyzdžiams ir pakartotinai šios schemos užklausai reikalingas fragmentas pateiktas 2.10 paveiksle.

2.2 lentelė. makl

MAKL_NR PAVARDE VARDAS IDARB_DATA MIESTAS VADO-VAS ATLY-GIS PRIE-

DAS

000001 Zambini Rick 80/02/15 LOS ANGELES 000000 6000 5.0

000003 Vidoni Cheryl 83/03/06 NEW YORK 000000 5780 5.0

000004 Coudray Sandy 80/06/06 LOS ANGELES 000001 6237 5.0

000006 Thomas Pat 81/01/08 NEW YORK 000003 5875 5.0

000008 McLester Debble 81/04/12 LOS ANGELES 000001 4792 5.0

000011 Michaels Delores 82/05/05 CHICAGO 000012 4927 7.0

000012 Charles Ted 83/02/02 CHICAGO 000000 5945 5.0

000013 Marin Mark 83/06/05 LOS ANGELES 000001 4802 11.0

000015 Roddic Mary 84/02/13 NEW YORK 000003 5493 3.0

000016 Long Nicole 84/08/18 NEW YORK 000003 5190 7.0

000019 Rolfes Chuck 84/09/09 LOS ANGELES 000001 4586 6.0

000020 Sanders Kathy 85/03/23 CHICAGO 000012 3783 5.0

2.3 lentelė. pirk

PIRK_NR FIRMA PAVAR-DE VAR-DAS ADRESAS MIES-TAS VAL-STI-JA IN-DEK-SAS

000001 Leonard Design Services Leonard Rick 1550 Keystone St. Oceanside CA 92054

000003 Ace Furniture Martin Lisa 1960 Lindley Ave. Wasau WI 54401

000009 Custom Furniture Pollock Daniel 5934 Pine Needles Yonkers NY 10709

000011 The Office LeClere Domin 101 Pierce St. New York NY 10013

000016 American Business Suppl Daniels George 5601 Grand Ave. Los Angeles CA 90233

000017 Black’s Furniture Store Jackson Dennis 7010 Balcom Ave. San Francisko CA 94119

000018 Interior Systems Goets John 899 Kenwood St. Milwoukes WI 53201

000019 The Designer Hobbe Lake 6043 Whiteside Blvd. New York NY 10713

000022 Las Vegas Furniture Hart Paul 8301 Sale St. Las Wegas NV 89106

000024 Baker Furniture Campbell Linda 6700Tyler St. Phoenix AZ 85012

000025 Modern Furniture Store Hamilton Robert 366 Shirley Ave Phoenix AZ 85004

000027 Al Office Supply Store McVeigh John 1240 Embar San Francisko CA 94102

000028 Acceat Furnit.ure Design Squire Ana 20984 Horizon Hills Las Vegas NV 89108

000031 Al’s Furniture & Suppli Thompson Kathy 40555 Brentwood St.Lonis MO 63121

000032 Contemporary Designs Trujillo Michelie 5670 Colorado Blvd. Milwaukee WI 53220

000033 Interior Designs Long Chuck 40677 Misty Isle Dc. White Plains NY 10605

000034 La Cienega Furniture Keegan Marilyn 6045 Vineland Blvd. Los Angeles CA 90815

000035 Valley Furniture Yanish Diane 10111 Ventura Blvd. Encino CA 91316

000036 New Horizons Brendon Kelly 12508 Robin Hood Ln. Chicago IL 60619

000040 Design Center Interiors Gilbert Chuck 7619 Kraft Dc. Las Vegas NV 89106

000042 Cohen’s Furniture Cohen Larry 908 Gien Oaks Ave. San Francisko CA 94119

000043 To Design furniture Tsuma Tamio 4564 Benedict Can Rochester NY 14625

000045 Classic Interiors Lawson Eric 2015 Edmonton St.Louis MO 63106

000046 Commercial Interiors Young Sandy 14097 Gilmore Ventura CA 93003

2.4 lentelė. pard

UZSAK_NR PARD_DATA MAKLERIS PIRKEJAS APMOKETA

02002 87/09/21 000008 000025 .F.

02003 87/09/21 000006 000043 .F.

02004 87/09/21 000019 000034 .F.

02005 87/09/21 000001 000016 .F.

02006 87/09/22 000012 000036 .F.

02007 87/09/22 000015 000019 .F.

02008 87/09/22 000003 000011 .F.

02009 87/09/22 000012 000018 .F.

200010 87/09/22 000011 000031 .F.

020011 87/09/22 000015 000040 .F.

020012 87/09/22 000008 000027 .F.

020013 87/09/23 000012 000036 .F.

020014 87/09/23 000001 000001 .F.

020015 87/09/23 000015 000019 .F.

020016 87/09/23 000015 000011 .F.

020017 87/09/24 000006 000032 .F.

020018 87/09/24 000011 000038 .F.

020019 87/09/24 000013 000016 .F.

020020 87/09/24 000013 000031 .F.

020021 87/09/25 000008 000046 .F.

020022 87/09/25 000004 000027 .F.

020023 87/09/25 000003 000040 .F.

020024 87/09/25 000012 000045 .F.

020025 87/09/25 000003 000019 .F.

020026 87/09/25 000004 000017 .F.

2.5 lentelė.uzsa

UZSAK_NR KOMPL_NR KIEKIS IVYKD_POZ

020002 001032 2 .F.

020002 001025 3 .F.

020002 001013 3 .F.

020003 001021 4 .F.

020003 001005 2 .F.

020004 001027 5 .F.

020004 001038 5 .F.

020004 001013 5 .F.

020005 001019 2 .F.

020006 001007 25 .F.

020006 001031 25 .F.

020007 001022 3 .F.

020007 001033 3 .F.

020008 001007 3 .F.

020009 001029 31 .F.

020010 001005 5 .F.

020010 001021 2 .F.

020011 001029 7 .F.

020011 001025 4 .F.

020011 001031 7 .F.

020012 001015 5 .F.

020013 001022 2 .F.

020013 001019 1 .F.

020014 001021 2 .F.

020015 001025 15 .F.

020016 001031 4 .F.

020016 001025 2 .F.

020017 001029 6 .F.

020018 001038 4 .F.

020019 001027 3 .F.

020020 001024 7 .F.

020020 001032 4 .F.

020021 001013 8 .F.

020021 001025 8 .F.

2.6 lentelė. prek

KOMPL_NR PAVAD KIE-KIS VIETA KAINA PAPILD_POZ

001001 WORKSTATION-ELECTRONIC OFFICE 2 CHICAGO 1296.29 .F.

001002 HOME OFFICE SUITE 2 LOS ANGELES 1395.49 .F.

001005 EXECUTIVE SUITE ENSEMBLE 1 CHICAGO 2125.79 .F.

001007 WOOD DESK-SINGLE PEDESTAL 29 NEW YORK 736.21 .F.

001008 WORKSTATION-STAND 22 LOS ANGELES 275.66 .F.

001009 CHAIR-ADJUSTABLE SWIVEL 124 CHICAGO 245.38 .T.

001015 CREDENZA-OAK SLIDING DOOR 15 NEW YORK 745.00 .T.

001019 TABLE-BOARD ROOM 12 NEW YORK 4250.00 .F.

001021 MANAGERS OFFICE ENSEMBLE 3 NEW YORK 2380.79 .F.

001022 TABLE-WALNUT OCCACIONAL 5 NEW YORK 414.95 .F.

001024 LAMP-BRASS TABLE 140 CHICAGO 230.79 .F.

001025 DESK-EXECUTIVE-5 FOOT 63 LOS ANGELES 985.00 .F.

001029 FILE CABINET-2 DRAWER 200 NEW YORK 89.95 .T.

001031 CHAIR-EXECUTIVE SWIVEL/TILT 79 LOS ANGELES 420.00 .F.

001032 FILE CABINET-4 DRAWER 15 CHICAGO 134.69 .F.

001033 CHAIR-TRADITIONAL ARM 20 CHICAGO 125.00 .T.

001038 LAMP-DRAFTING SWING ARM 169 LOS ANGELES 149.59 .F.

001038 LAMP-DRAFTING SWING ARM 47 NEW YORK 149.59 .F.

001007 WOOD-DESK SINGLE PEDESTAL 35 CHICAGO 736.21 .F.

001007 WOOD-DESK SINGLE PEDESTAL 62 LOS ANGELES 736.21 .F.

001013 CHAIR-MODERN PNEUMATIC 115 CHICAGO 275.80 .F.

001013 CHAIR-MODERN PNEUMATIC 35 LOS ANGELES 275.80 .F.

001032 FILE CABINET-4 DRAWER 71 LOS ANGELES 134.69 .F.

001038 LAMP- DRAFTING SWING ARM 89 .CHICAGO 149.59 .F.

001027 DESK-EXECUTIVE-6 FOOT 20 CHICAGO 1475.00 .F.

001027 DESK-EXECUTIVE-6 FOOT 56 NEW YORK 1475.00 .F.

001031 CHAIR-EXECUTIVE SWIVEL/TILT 44 CHICAGO 420.00 .F.

001031 CHAIR-EXECUTIVE SWIVEL/TILT 76 NEW YORK 420.00 .F.

001024 LAMP-BRASS TABLE 56 NEW YORK 230.79 .F.

001025 DESK-EXECUTIVE -5 FOOT 47 NEW YORK 985.00 .F.

001001 WORKSTATION-ELECTRONIC OFFICE 3 LOS ANGELES 1296.29 .F.

001005 EXECUTIVE SUITE ENSEMBLE 0 NEW YORK 2125.79 .F.

001029 FILE CABINET-2 DRAWER 145 LOS ANGELES 89.95 .T.

2.7 lentelė. sude

KOMPL ELEMEN KIEKIS

001001 001007 1

001001 001013 1

001001 001032 1

001001 001038 1

001005 001027 1

001005 001031 1

001005 001024 1

001021 001025 1

001021 001031 1

001021 001024 1

001021 001015 1

001002 001025 1

001002 001032 1

001002 001013 1

Užklausa: Kokie pirkėjai pateikė užsakymus makleriams, kuriems vadovauja (PIRK.VADOVAS) vadovas, kurio kodas yra 000001? Kokios yra tų pirkėjų pavardės (PIRK.PAVARDE), pirkėjų kodai (PIRK.PIRK_NR) ir firmos (PIRK.FIRMA)? Kada pateikti tie užsakymai (PARD.PARD_DATA) ir kokios yra maklerių, kurie priėmė užsakymus, pavardės (MAKL.PAVARDE) ?

2.10 pav.

Atsakymą galima gauti įvairiais būdais. Užklausos formavimo efektyvumo palyginimui paimsime du užklausų užrašymo būdus.

1 užklausa:

m2 = (MAKL.PAVARDE, MAKL_NR, VADOVAS) (makl) ;

m3 = MAKLERIS MAKL_NR (m2) ;

mu1 = m3 pard ;

mu2 = (MAKL.PAVARDĖ, VADOVAS, PARD_DATA, PIRKĖJAS) (mu1)

mu3 = PIRK_NR PIRKEJAS (mu2) ;

mup1 = mu3 pirk ;

mup2 = (MAKL. PAVARDĖ,VADOVAS, PARD_DATA, FIRMA,PIRK_NR, PIRK.PAVARDĖ) (mup1) .

atsakymas = VADOVAS = “000001” (mup2) ;

Šioje užklausos programoje panaudota papildoma atributų pervardinimo operacija . Ji reikalinga tam, kad būtų galima naudoti natūraliosios jungties operaciją. Pirma kartą, pavyzdžiui, ji buvo panaudota tam, kad sujungti tarpinę lentelę m2 su duomenų bazės lentele pard, naudojant kanoninės schemos asociatyvinį ryšį MAKL_NR/MAKLERIS Čia pastebime tokį dalyką, kad į tarpines lenteles talpiname tik asociatyvinius laukus ir laukus, kurie buvo nurodyti vartotojo užklausoje, o paskutinėje lentelėje paliekame tik atsakymui reikalingus stulpelius.

2 užklausa:

m1 =VADOVAS = “000001” (makl) ;

m2 = (MAKL.PAVARDE, MAKL_NR, VADOVAS) (m1) ;

m3 = MAKLERIS MAKL_NR (m2) ;

mu1 = m3 pard ;

mu2 = (MAKL.PAVARDĖ, VADOVAS, PARD_DATA,PIRKĖJAS) (mu1)

mu3 = PIRK_NR PIRKEJAS (mu2) ;

mup1 = mu3 pirk ;

atsakymas = (MAKL.PAVARDĖ, VADOVAS, PARD_DATA, FIRMA,PIRK_NR, PIRK.PAVARDĖ) (mup1) .

Palyginę šias dvi užklausas pastebime, kad antroji užklausa bus efektingesnė, kadangi apdorojamos tarpinės lentelės gausis mažesnės, nors atsakymo lentelė atsakymas abiem atvejais sutaps. Užrašant užklausas reikia stengtis programoje pirmiausia naudoti selekcijas ir projekcijos operacijas, ir vėliau jungties operacijas. Tokiu būdu galima sumažinti apdorojamų duomenų apimtį ir paspartinti programos vykdymą. Atsakymą, kaip pastebėjome, galima gauti tą patį, nepriklausomai nuo to, kokią teisingą operacijų seką panaudojame.

Reliacinė algebros kalba yra pilna, ta prasme, kad galima gauti bet kokį norimą atsakymą, tačiau reliacinės algebros operacijos yra labiau teorinio pobūdžio, ir praktikoje beveik nenaudojamos reliacinės algebros programavimo kalbos. Reliacinės algebros operacijos sudaro reliacinio skaičiavimo pagrindą, sudarant praktikoje plačiai naudojamas duomenų manipuliavimo kalbas. Reliacinio skaičiavimo deklaratyviosios SQL kalbos procesoriai optimizuoja algebrinių operacijų seką tokiu būdu, kad gauti efektingą duomenų išrinkimą iš reliacinės DB ir tarpinių rezultatų apdorojimą. Vartotojas, rašydamas SQL programą, algebrinių operacijų sekos optimizavimu gali nesirūpinti..2.7. Reliacinio skaičiavimo kalba SQL

Jeigu reliacinės algebros kalba yra procedūrinė, SQL kalba yra deklaratyvioji, ir jos užklausų operatoriai pateikiami deklaratyvinėje formoje, t.y. vartotojas deklaruoja norimo rezultato lentelės struktūrą ir neužduoda elementarių reliacinės algebros operacijų. Pateikta kalba yra universali, nors kai kurie sintaksiniai elementai, pavyzdžiui, operatorių skyrikliai arba pagalbinių veiksmų komandos, priklausomai nuo panaudotos DBVS, gali skirtis. Aprašyme pateikiama kalbos operatorių užrašymo sintaksė, tačiau ji nebus komentuojama, kadangi kalbos konstrukcijų panaudojimas bus iliustruojamas pavyzdžiais. Iliustravimui panaudosime praeitame skyrelyje pateikta mokomosios DB kanonine schema ir ten pat patektomis duomenų lentelėmis.2.7.1 Duomenų bazės deklaravimas

Naudojant SQL operatorius, DB deklaruojama komanda

create database []< DB vardas >;

Nurodytoje direktorijoje sukuriama sub-direktorija DB vardu. Čia vėliau bus kuriami ir saugomi DB failai. Šioje sub-direktorijoje sukuriamos sisteminės lentelės, kuriose saugojama informacija apie sukurtos DB lentelių struktūrą. Egzistuojančių DB sąrašą galima peržiūrėti tokiu būdu :

show database;

DB aktyvizuojama komanda

start database [];

DB uždaroma taip:

stop database;

Aktyvizuojant naują bazę, senąją nebūtina uždaryti: ji uždaroma automatiškai, tačiau norint bazę visai panaikinti, prieš tai ją būtina uždaryti. DB pašalinama komanda:

drop database < DB vardas >;

Po šios komandos pašalinami visi su DB susiję objektai: DB lentelės, virtualiosios lentelės (SuperView), sinonimai, sisteminiai failai ir t.t.2.7.2. Duomenų lentelių sukūrimas

Nauja DB lentelė sukuriama komanda

create table

([,.]);

DB lentelės vardas duomenų bazėje turi būti unikalus. Duomenų tipai naudojami standartiniai ir čia jų necharakterizuosime. Pagrindiniai duomenų tipai matosi sekančiame pavyzdyje.

Pavyzdys :

create table MAKL

(MAKL_NR char(6),

PAVARDĖ char(15),

VARDAS char(10),

ĮDARB_DATA date,

MIESTAS char(15),

VADOVAS char(6),

ATLYGIS numeric(6.0),

PRIEDAS numeric(4.1);2.7.3 Paprastosios užklausos

Paprastosios užklausos sintaksė :

select

from

[where ]

into table (stulp. sąrašas) ;

Pavyzdys

Užklausa

select FIRMA, PAVARDĖ, VARDAS

from PIRK;

duoda lentelę iš trijų stulpelių:

FIRMA PAVARDE VARDAS

Leonard Design Services Leonard Rick

Ace Furniture Martin Lisa

Custom Furniture Pollock Daniel

.

Classic Interiors Lawson Eric

Commercial Interiors LTD Young Sandy

Šiai lentelei duomenys gaunami iš lentelės PIRK stulpelių FIRMA, PAVARDĖ, VARDAS. Jeigu duomenys išgaunami iš visų stulpelių, stulpeliai nevardinami, o select sakinyje nurodome simbolį“*“.

Pavyzdys

select * from MAKL;

Operatorius išduos lentelę, susidedančią iš visų lentelės MAKL stulpelių. Jeigu norime, kad operatorius stulpelyje atrinktų tik skirtingus kortežus, tada select sakinyje naudojamas raktinis žodis DISTINCT.

Pavyzdys

select distinct KOMPL_NR, PAVAD from PREK;

Operatorius kiekvieną komplektą į lentelę užrašys tik vieną kartą, nors tas komplektas gali būti sandėliuojamas ir keliose vietose. Čia pažymėsime, kad DISTINCT raktažodis nenaudotinas, jeigu stulpelių tarpe yra loginių tipų.

Pavyzdys su WHERE sąlyga

select KOMPL_NR, PAVAD, VIETA, KIEKIS

from PREK

where VIETA=“CHICAGO“;

Atsakyme gaunami tik tų kortežų duomenys, kurie tenkina WHERE sąlygą (žr. sekančią lentelę).

KOMPL_NR PAVAD VIETA KIEKIS

001001 WORKSTATION-ELECTRONIC OFFICE CHICAGO 2

001005 EXECUTIVE SUITE ENSEMBLE CHICAGO 1

001009 CHAIR-ADJUSTABLE SWIVEL CHICAGO 124

001024 LAMP-BRASS TABLE CHICAGO 140

001032 FILE CABINET-4 DRAWER CHICAGO 15

001033 CHAIR-TRADITIONAL ARM CHICAGO 20

001007 WOOD DESK-SINGLE PEDESTAL CHICAGO 35

001013 CHAIR-MODERN PNEUMATIC CHICAGO 115

001038 LAMP-DRAFTING SWING ARM CHICAGO 89

001027 DESK-EXECUTIVE-6 FOOT CHICAGO 20

001031 CHAIR-EXECUTIVE SWIVEL/TILT CHICAGO 44

Paieškos sąlygoje galima naudoti palyginimo operatorius:

= – “lygu”;

< – “mažiau negu”;

> – “daugiau negu”;

<= – “mažiau arba lygu”;

>= – “daugiau arba lygu”;

<> – “nelygu”;

! – “neigimas” (!<, !>, !=).

Tarpusavyje gali būti lyginamos tik palyginamos, t.y. to paties tipo reikšmės. Be to, tarpusavyje palyginami tipai yra SMALINT, INTEGER, NUMERIC ir FLOAT. Simbolinio tipo reikšmės imamos tarp viengubų arba dvigubų kabučių.Palyginimo savybės yra:

1) palyginant simbolinio tipo reikšmes, naudojamas ASCII vaizdavimo būdas ir todėl, pavyzdžiui „Z“ < „a“);

2) select * from UZSA where IVYKD_POZ=.T. ir select * from UZSA where IVYKD_POZ yra ekvivalentiški;

3) WHERE sąlygoje galima naudoti standartines funkcijas; pavyzdžiui, panaudojus UPPER( ) funkciją, simbolinė eilutė konvertuojama į didžiųjų raidžių eilutę, o funkcija CTOD( ) datos simbolinę eilutę konvertuoja į stulpelio datos formatą.

4) WHERE sakinyje gali būti naudojamos kombinuotos sąlygos su loginėmis jungtimis.

Pavyzdys

select KOMPL_NR, PAVAD, KIEKIS, VIETA

from PREK

where VIETA=“LOS ANGELES“ and KIEKIS < 20;

WHERE sąlygoje galima panaudoti tokias logines jungtis (pirmumo tvarka ):

NOT – išrenka kortežus, kurie netenkina pateiktos sąlygos;

AND – tenkina abi sąlygas;

OR – tenkina bent vieną sąlygą.

Jeigu loginės jungtys yra to paties tipo, sudėtinė WHERE sąlyga tikrinama iš kairės į dešinę. Sudėtingu atveju galima naudoti skliaustelius.

Pavyzdys su atsakymu

select KOMPL_NR, VIETA, KIEKIS, KAINA

from PREK

where VIETA=“LOS ANGELES“ or VIETA=“NEW YORK“

and KIEKIS < 20 and KAINA < 1000;

KOMPL_NR VIETA KIEKIS KAINA

001002 LOS ANGELES 2 1395.49

001008 LOS ANGELES 22 275.66

001015 NEW YORK 15 745.00

001022 NEW YORK 5 414.95

001025 LOS ANGELES 63 985.00

001031 LOS ANGELES 79 420.00

001038 LOS ANGELES 169 149.59

001007 LOS ANGELES 62 736.21

001013 LOS ANGELES 35 275.80

001032 LOS ANGELES 71 134.69

001001 LOS ANGELES 3 1296.29

001029 LOS ANGELES 145 89.95

Kitas pavyzdys su atsakymu

select KOMPL_NR, PAVAD, VIETA, KIEKIS, KAINA

from PREK

where (VIETA=“LOS ANGELES“ or VIETA=“NEW YORK“)

and (KIEKIS < 20 a.nd KAINA < 1000);

KOMPL_NR VIETA KIEKIS KAINA

001015 NEW YORK 15 745.00

001022 NEW YORK 5 414.95

Sakinys INTO TABLE nėra būtinas. Jis naudojamas rezultatams atsiminti išorinės atminties lentelėje. Jeigu norime įsiminti ne visus stulpelius, reikia nurodyti ir stulpelių sąrašą:

INTO TABLE (stulp. sąrašas)

Pavyzdys

select KOMPL_NR, PAVAD, KIEKIS, VIETA

from PREK

where VIETA = „LOS ANGELES“

into table LA_PR (KOMPL_NR, PAVAD, KIEKIS) ;

Sukurta lentelė LA_PR bus saugojama DB ir užregistruota DB kataloge.2.7.4. Duomenų įterpimas, modifikavimas, pašalinimas

Į lentelę įterpiant įrašus, naudojamas operatorius

INSERT INTO

[()]

VALUES ()

Pavyzdys

INSERT INTO MAKL

VALUES („000001“, „Zambini“, „Riek“, (02/15/80), „LOS ANGELES“,

„000000“, 6000, 5.0);

Operatorius įveda vieną kortežą su visais komponentais. Stulpelių sąrašas praleistas, kadangi visi įrašo komponentai užpildomi reikšmėmis ir tos reikšmės sąraše išdėstytos taip pat, kaip atitinkami stulpeliai deklaruotoje lentelėje MAKL. Norint įterpti reikšmes į visus lentelės stulpelius, stulpelių nurodyti nebūtina. Stulpelių sąrašas specifikuojamas, norint modifikuoti atskirus stulpelius. Taip pat galima įterpti dalinį reikšmių sąrašą. Tada būtina nurodyti ir atatinkamų stulpelių sąrašą tokia pat tvarka. Įterpiamame korteže nespecifikuotiems stulpeliams priskiriamos nulinės reikiamo tipo reikšmės Visų įterpia¬mų reikšmių tipai turi atitikti stulpelių paskelbtus tipus.

Norint įterpti duomenis iš atrinktų egzistuojančios lentelės eilučių, reikia naudoti operatorių

insert into

[()]

;

SELECT sakinys operatoriuje INSERT gali būti taikomas kitai lentelei, kuri yra informa¬cijos šaltinis.

Pavyzdys

insert into MAKL1

select *

from MAKL

where PAVARDE <> „Zambini“;

Eilučių modifikavimui naudojamas operatorius UPDATE:

UPDATE

SET =
[, = .]

[];

Pavyzdys

Padidinti priedo procentą koeficientu 1.25 tarnautojams-makleriams, įsidarbinusiems iki 1992 m. liepos 5 dienos:

update MAKL

set PRIEDAS = (PRIEDAS * 1.25)

where IDARB_DATA < CTOD(„07/05/92“);

Eilučių pašalinimui iš lentelės naudojamas operatorius DELETE:

DELETE FROM

[];

Pavyzdys

delete from MAKL

where PAVARDE = „LONG“;2.7.5. Lentelių struktūros modifikavimas

Norint papildyti lentelę naujais stulpeliais, naudojama komanda:

ALTER TABLE

ADD (

[,.]);

Pavyzdys

alter table MAKL1

add (TELEF char(8));

Norint efektyviai modifikuoti lentelę, paprastai elgiamasi taip: pirmiausiai sudaroma lentelė su norimais stulpeliais, po to į naują lentelę įterpiamos eilutės iš jau egzistuojančios lentelės.

Pavyzdys

create MAKL2

(MAKL_NR char(6),

PILNAS_VARD char(25),

IDARB_DATA date,

ATLYGIS decimal(6.0),

PRIEDAS decimal(4.1));

insert into MAKL2

select MAKL_NR, (PAVARDE+VARDAS),

IDARB_DATA, ATLYGIS, PRIEDAS

from MAKL;

Jeigu stulpeliui duomenys nepriskiriami, jie inicijuojami tuščiais tarpais arba nuliais, priklausomai nuo duomenų tipo. Datos stulpeliai inicijuojami tuščia datos eilute („mm/dd/yy“), loginiai stulpeliai – reikšme .F. .

Lentelė pašalinama iš DB komanda DROP TABLE :

drop table MAKL2;2.7.6. Virtualios lentelės ir sinonimai

Virtualios (view) lentelės sudaromos iš DB lentelių. Su jomis galime elgtis taip pat, kaip su bazinėmis lentelėmis. Joms taikomas SELECT operatorius. Per view lentelių duomenis galima užrašyti ir į bazinį failą, jeigu view-lentelė sujungta tik su vienu baziniu duomenų failu. Virtualių lentelių duomenys nesaugojami ir egzistuoja tik SQL programos vykdymo metu. Kai duomenys baziniuose failuose keičiasi, view-lentelės atvaizdas iš karto „atsinaujina“. Virtualiose lentelėse mes atvaizduojame bazinių lentelių projekcijas ir selekcijas. Virtualių lentelių sukūrimui naudojama CREATE VIEW komanda:

CREATE VIEW [()]

AS

[WITH CHECK OPTION];

Jeigu nenurodytas, tai atitinka sąrašą iš SELECT operatoriaus dalies. Šį sąrašą reikia aiškiai nurodyti, jeigu bent vieno stulpelio sudarymui panaudojama standartinė funkcija ar kokia nors išraiška.

Trečioji dalis naudojama modifikuojamose virtualiose lentelėse. Ši dalis parodo, kad jūs esate saugūs ir neįterpsite tokių duomenų, kurie neatitinka SELECT dalies WHERE sąlygos.

Pavyzdys

create view LOSAN

as select MAKL_NR, PAVARDE, IDARB_DATA

from MAKL1

where MIESTAS = „LOS ANGELES“ ;

select * from LOSAN;

Antrasis operatorius pateikia virtualios lentelės duomenis ekrane:

MAKL_NR PAVARDE IDARB_DATA

000001 Zambini 80/02/15

000004 Coudray 80/06/06

000008 McLester 81/04/12

000013 Marin 83/06/05

000019 Rolfes 84/09/09

Nesudėtingos restruktūrizacijos pavyzdys

create view ADRES (PILN_V, MIESTAS, VALSTIJA)

as select PAVARDE+VARDAS, MIESTAS, VALSTIJA

from PIRK;

Duomenų sujungimo pavyzdys

create view UZSAKYM (UZSAK_NR,PARD_DATA,MAKLERIS)

as select PARD.UZSAK_NR,PARD.PARD_DATA,MAKL.PAVARDE

from PARD, MAKL

where PARD.MAKLERIS = MAKL.MAKL_NR;

select * from UZSAKYM;

Šis pavyzdys iliustruoja, kaip virtualioje lentelėje UZSAKYM galima apjungti duomenis iš dviejų bazinių lentelių PARD ir MAKL, panaudojant natūraliąją jungtį:

UZSAK_NR PARD_DATA MAKLERIS

020002 87/09/21 McLester

020003 87/09/21 Thomas

020004 87/09/21 Rolfes

020005 87/09/21 Zambini

020006 87/09/22 Charles

020023 87/09/25 Vidoni

020024 87/09/25 Charles

020025 87/09/25 Vidoni

020026 87/09/25 Coudray

Virtualios lentelės pašalinamos analogiškai, kaip ir bazinės lentelės.

Pavyzdys.

drop view UZSAKYM ;

Bazinių ir virtualių lentelių vardams galima sukurti sinonimus, paprastai, trumpesnius, kad lengviau būtų sudaryti SELECT, DROP ir kitus operatorius.

Pavyzdys.

create synonym P1 for PIRK;

create synonym UZ for UZSAKYM;

Sinonimai pašalinami komanda DROP.

Pavyzdys.

drop synonym UZ;2.7.7. Indeksų sukūrimas

Kaip ir storoms knygoms, duomenų failams naudojami indeksai. Jie paspartina paiešką. SQL procesorius jais ”stengiasi” pasinaudoti. Indeksas nesudaromas virtualioms lentelėms. Bet jeigu baziniam failui sudarytas indeksas, tai procesorius juo pasinaudoja, sudarydamas virtualią lentelę iš atitinkamos bazinės lentelės.

Pavyzdys

Indekso lentelė

Indekso raktas Įrašo Nr

Coudray 3

Thomas 4

Vidoni 2

Zambini 1

SQL-duomenų lentelė makleris

Įrašo Nr. Indekso raktas Kiti laukai

PAVARDE IDARB_DATA MIESTAS ATLYGIS

1 Zambini 80/02/15 LOS ANGELES 6000

2 Vidoni 80/03/06 NEW YORK 5780

3 Coudray 80/06/06 LOS ANGELES 6237

4 Thomas 81/01/08 NEW YORK 5875

Šios dvi INDEX- ir SQL-lentelės iliustruoja, kad tuo atveju, kai SQL-lentelė būtų skaitoma iš fizinio duomenų failo be indekso, ji būtų nuskaitoma fiziniu nuoseklumu: 1 įrašas, 2 įrašas ir t.t. Jeigu SQL-lentelė indeksuota, paieška joje vykdoma INDEX-rakto reikšmės augimo (arba mažėjimo) tvarka. Duotame pavyzdėlyje SQL-lentelė indeksuota lauko PAVARDE atžvilgiu reikšmių augimo tvarka. Todėl duomenų loginiai įrašai iš SQL-lentelės bus nuskaitomi prisilaikant nurodyto rūšiavimo. Indekso raktas vartotojui yra neprieinamas.

Indeksai paspartina duomenų paiešką, bet pailgina duomenų įrašų įterpimus ir pašalinimus. Indeksuoti galima tą pačią lentelę kelių laukų atžvilgiu.

Indeksų failas sukuriamas CREATE INDEX komanda:

CREATE [UNIQUE] INDEX

ON ( [ASC/DESC]

[, [ASC/DESC] .]);

Šiuo operatoriumi specifikuoti stulpeliai vadinami indeksų raktais. Šių laukų reikšmės išdėstomos jų didėjimo (ASC) arba mažėjimo (DESC) tvarka

Pavyzdys

create index PAV

on PIRKEJAS (PAVARDE);

create unique index UZSAK

on PARDUOTA (UZSAK_NR);

Panaudojus raktažodį UNIQUE, negalima įrašyti įrašų su pasikartojančia indekso rakto reikšme.

Indeksas pašalinamas komanda:

drop index UZSAK;2.7.8. Išraiškų panaudojimas

Į išraiškas gali įeiti:

• aritmetiniai operatoriai +, -, /, *, **, ^;

(čia: / – dalyba, * – daugyba, ** – kėlimas kvadratu, ^ – eksponentė;)

• konstantos – skaitmeninės, loginės, simbolinės;

• programos kintamieji;

• standartinės funkcijos.

Išraiškos naudojamos:

• galutinių rezultatų pakeitimui;

• naujų skaičiuojamų stulpelių apibrėžimui SELECT sakinyje;

• WHERE sakinio sąlygų apibrėžimui;

• HAVING sakinio išraiškų apibrėžimui.

Pavyzdys, iliustruojantis naujo skaičiuojamo stulpelio įterpimą

select MAKL_NR, PAVARDE, VARDAS, ATLYGIS*12,“(METIN ATL)“

from MAKL

where ATLYGIS*12 > 50000;

MAKL_NR PAVARDE VARDAS EXP1 EXP2

000001 Zambini Rick 72000 (METIN ATL)

000003 Vidoni Cheryl 69360 (METIN ATL)

000004 Coudray Sandy 74844 (METIN ATL)

000006 Thomas Pat 70500 (METIN ATL)

000008 McLester Debbie 57504 (METIN ATL)

000011 Michaels Delores 59124 (METIN ATL)

000012 Charles Ted 71340 (METIN ATL)

000013 Marin Mark 57624 (METIN ATL)

000015 Roddick Mary 65916 (METIN ATL)

000016 Long Nicole 62280 (METIN ATL)

000019 Rolfes Chuck 55032 (METIN ATL)

Du kiti pavyzdžiai iliustruos standartinių funkcijų TUDAY ir UPPER panaudojimą. Funkcija TUDAY nustato einamąją kompiuterinę datą, o funkcija UPPER simbolinę eilutę paverčia didžiosiomis raidėmis.

Pavyzdys, iliustruojantis standartinės funkcijos TUDAYTE panaudojimą

select PAVARDE, VARDAS, IDARB_DATA

from MAK

where (TUDAY( ) IDARB_DATA) > 365*5;

Pavyzdys, iliustruojantis standartinės funkcijos UPPER panaudojimą

select FIRMA, MIESTAS, VALSTIJA

from PIRK

where UPPER(MIESTAS) = „SAN FRANCISCO“;

FIRMA MIESTAS VALSTIJA

Black’s Furniture Store San Francisco CA

A1 Office Supply Store San Francisco CA

Cohen’s Furniture San Francisco CA

Šiame pavyzdyje, funkcija UPPER, kai miestai yra iš DB išrenkami, jų pavadinimus paverčia didžiosiomis raidėmis, o šie pavadinimai sulyginami su programoje užsiduota konstanta SAN FRANCISCO. Tačiau šiuo atveju rezultatyvinėje lentelėje miestų pavadinimai išvedami tokie, kaip jie sugojami DB. Norint miestus atspausdinti didžiosiomis raidėmis, UPPER funkciją panaudoti SELECT sakinyje.

Pavyzdys

select FIRMA, UPPER(MIESTAS), VALSTIJA

from PIRK

where UPPER(MIESTAS)=“SAN FRANCISCO“;

FIRMA EXP1 VALSTIJA

Black’s Furniture Store SAN FRANCISCO CA

A1 Office Supply Store SAN FRANCISCO CA

Cohen’s Furniture SAN FRANCISCO CA2.7.9. Agreguotų funkcijų panaudojimas

Pagrindinės agreguotos funkcijos yra:

• COUNT () – eilučių skaičius;

• SUM () – skaitmeninio stulpelio reikšmių suma;

• MIN () – skaitmeninio datos arba simbolinio stulpelio reikšmės minimumas;

• MAX () – skaitmeninio datos arba simbolinio stulpelio reikšmės maksimumas;

• AVG () – skaitmeninio stulpelio vidutinė reikšmė.

Pavyzdys

select COUNT(*)

from MAKL;

COUNT1

12

SQL funkcijos netaikomos konstantoms, atminties kintamiesiems ir loginiams stulpe¬liams.

Pavyzdys

select SUM (ATLYGIS)

from MAKL;

SUM1

12

Pavyzdys

select MAX(ATLYGIS), MIN(ATLYGIS), AVG(ATLYGIS)

from MAKL;

MAX1 MIN2 AVG3

6237 3783 5284.17

Agreguotų funkcijų argumentams galima taikyti raktažodį DISTINCT.

Pavyzdys

select COUNT(DISTINCT Miestas)

from PIRK;

COUNT1

15

Pavyzdys

select COUNT(*)

from PIRK

where VALSTIJA=“NY“;

COUNT1

52.7.10. Predikatai BETWEEN, IN ir LIKE operatoriuje SELECT

Sakinį

where ATLYGIS >= 1500 and ATLYGIS <= 2500

galima pakeisti kitu sakiniu

where ATLYGIS BETWEEN 1500 and 2500

ir sakinį

where VALSTIJA=“AZ“ or

VALSTIJA=“MO“ or

VALSTIJA=“WI“

galima pakeisti sakiniu

where VALSTIJA IN(„AZ“, „MO“, „WI“) ,

o išrinkimo sąlygos abiem atvejais išliks tos pačios.

Pavyzdys

select FIRMA, MIESTAS, VALSTIJA, INDEKSAS

from PIRK

where VALSTIJA in („AZ“,“MO“,“WI“);

FIRMA MIESTAS VALSTIJA INDEKSAS

Ace Furniture Wasau WI 54401

Interior Systems Milwaukee WI 53201

Baker Furniture Phoenix AZ 85012

Modern Furniture Store Phoenix AZ 85004

Al’s Furniture & Supplies St. Louis MO 63121

Contemporary Designs Milwaukee WI 53220

Classic Interiors St. Louis MO 63106

Pavyzdys

select FIRMA,MIESTAS,VALSTIJA,INDEKSAS

from PIRK

where VALSTIJA like „N_“;

FIRMA MIESTAS VALSTIJA INDEKSAS

Custom Furniture Yonkers NY 10709

The Office New York NY 10013

The Designer New York NY 10713

Las Vegas Furniture Las Vegas NV 89106

Accent Furniture Designs Las Vegas NV 89108

Interior Designs White Plains NY 10605

Design Center Interiors Las Vegas NV 89106

To Design Furniture Rochester NY 14625

Pavyzdys

select distinct KOMPL_NR,PAVAD

from PREK

where PAVAD like „%DESK%“;

KOMPL_NR PAVAD

001007 WOOD DESK-SINGLE PEDESTAL

001025 DESK-EXECUTIVE-5 FOOT

001027 DESK-EXECUTIVE-6 FOOT2.7.11. Rezultatų rūšiavimas

SELECT

FROM

WHERE
ORDER BY [ASC/DESC]

[, [ASC/DESC].];

Pavyzdys

select KOMPL_NR,PAVAD,VIETA,KIEKIS

from PREK

order by VIETA asc, PAVAD asc;

KOMPL_NR PAVAD VIETA KIEKIS

001009 CHAIR-ADJUSTABLE SWIVEL CHICAGO 124

001031 CHAIR-EXECUTIVE SWIVEL/TILT CHICAGO 44

001013 CHAIR-MODERN PNEUMATIC CHICAGO 115

001033 CHAIR-TRADITIONAL ARM CHICAGO 20

001027 DESK-EXECUTIVE-6 FOOT CHICAGO 20

001038 LAMP-DRAFTING SWING ARM CHICAGO 89

001007 WOOD DESK-SINGLE PEDESTAL CHICAGO 35

001001 WORKSTATION-ELECTRONIC OFFICE CHICAGO 2

001031 CHAIR-EXECUTIVE SWIVEL/TILT LOS ANGELES 79

.

001019 TABLE-BOARD ROOM NEW YORK 12

001022 TABLE-WALNUT OCCASIONAL NEW YORK 5

001007 WOOD DESK-SINGLE PEDESTAL NEW YORK 29

Pavyzdys

select KOMPL_NR,PAVAD,VIETA,KIEKIS

from PREK

order by VIETA asc,KIEKIS desc;

KOMPL_NR PAVAD VIETA KIEKIS

001024 LAMP-BRASS TABLE CHICAGO 140

001009 CHAIR-ADJUSTABLE SWIVEL CHICAGO 124

001013 CHAIR-MODERN PNEUMATIC CHICAGO 115

.

001022 TABLE-WALNUT OCCASIONAL NEW YORK 5

001021 MANAGERS OFFICE ENSEMBLE NEW YORK 3

001005 EXECUTIVE SUITE ENSEMBLE NEW YORK 0

Pavyzdys

select KOMPL_NR,PAVAD,VIETA,KIEKIS

from PREK

where VIETA=”CHICAGO”

order by KOMPL_NR;

KOMPL_NR PAVAD VIETA KIEKIS

001001 WORKSTATION-ELECTRONIC OFFICE CHICAGO 2

001005 EXECUTIVE SUITE ENSEMBLE CHICAGO 1

001007 WOOD DESK-SINGLE PEDESTAL CHICAGO 35

001009 CHAIR-ADJUSTABLE SWIVEL CHICAGO 124

001013 CHAIR-MODERN PNEUMATIC CHICAGO 115

001024 LAMP-BRASS TABLE CHICAGO 140

001027 DESK-EXECUTIVE-6 FOOT CHICAGO 20

001031 CHAIR-EXECUTIVE SWIVEL/TILT CHICAGO 44

001032 FILE CABINET-4 DRAWER CHICAGO 15

001033 CHAIR-TRADITIONAL ARM CHICAGO 20

001038 LAMP-DRAFTING SWING ARM CHICAGO 892.7.12. Eilučių grupavimas

Eilutes galima grupuoti, SELECT operatoriuje panaudojus du papildomus GROUP BY- ir HAVING- sakinius. Grupės atżvilgiu galima panaudoti agreguotas funkcijas. GROUP BY- ir HAVING- sakiniais operacijas perkeliame nuo visos lentelės prie grupių.

GROUP BY- sakinys sujungia eilutes su vienodomis stulpelių reikšmėmis į vieną grupę. Kiekvienas stulpelis, paminėtas GRUOP BY- sakinyje, turi būti specifikuotas SELECT- sakinyje, ir atvirkščiai. Skaičiuojamų stulpelių GROUP BY- sakinyje galima nespecifikuoti.

Pavyzdys

select KOMPL_NR, PAVAD, SUM(KIEKIS)

from PREK

group by KOMPL_NR, PAVAD;

G_KOMPL_NR G_PAVAD SUM1

001001 WORKSTATION-ELECTRONIC OFFICE 5

001002 HOME OFFICE SUITE 2

001005 EXECUTIVE SUITE ENSEMBLE 1

001007 WOOD DESK-SINGLE PEDESTAL 126

.

Pavyzdys: grupavimo būdu galima suskaičiuoti pardavėjų skaičių kiekviename mieste

select MIESTAS, COUNT(*)

from MAKL

group by MIESTAS;

G_MIESTAS COUNT1

CHICAGO 3

LOS ANGELES 5

NEW YORK 4

GROUP BY-sakinys gali būti naudojamas kartu su ORDER BY-sakiniu.

Pavyzdys

select KOMPL_NR, PAVAD, SUM(KIEKIS)

from PREK

group by KOMPL_NR, PAVAD

order by PAVAD;

G_KOMPL_NR G_PAVAD SUM1

001009 CHAIR-ADJUSTABLE SWIVEL 124

001031 CHAIR-EXECUTIVE SWIVEL/TILT 199

001013 CHAIR-MODERN PNEUMATIC 150

001033 CHAIR-TRADITIONAL ARM 20

001015 CREDENZA-OAK SLIDING DOOR 15

001025 DESK-EXECUTIVE-5 FOOT 110

001027 DESK-EXECUTIVE-6 FOOT 76

001005 EXECUTIVE SUITE ENSEMBLE 1

.2.7.13. Sąlygotos eilučių grupės

Sąlygotos eilučių grupės nurodomos HAVING-sakiniu. HAVING-sakinys vykdomas analogiškai WHERE-sąlygai.

Pavyzdys

Prekių, kurių vieneto kaina didesnė už 500 lt ir bendras kiekis didesnis už 10, sąrašą galima suformuoti tokiu SELECT-operatoriumi:

select PAVAD, KOMPL_NR, SUM(KIEKIS), KAINA

from PREK

where KAINA>500

group by PAVAD, KOMPL_NR ,KAINA

having SUM(KIEKIS)>10

order by PAVAD;

G_PAVAD G_KOMPL_NR SUM1 G_KAINA

CREDENZA-OAK SLIDING DOOR 001015 15 745

DESK-EXECUTIVE-5 FOOT 001025 110 985

DESK-EXECUTIVE-6 FOOT 001027 76 1475

TABLE-BOARD ROOM 001019 12 4250

WOOD DESK-SINGLE PEDESTAL 001007 126 736.21

Paprastai HAVING sakinys naudojamas kartu su GROUP BY-sakiniu. Jei GROUP BY-sakinys nepanaudotas, tai HAVING-sakinys visą lentelę traktuoja kaip paprastą grupę.2.7.14. Lentelių sumavimas

Skirtingais SELECT sakiniais gautas lenteles galima sumuoti, panaikinant eilutes-dublikatus. Sumuojamos lentelės turi turėti tokio pat tipo ir formato stulpelius. Rezultatus galima rūšiuoti, paskutiniame SELECT operatoriuje panaudojant ORDER BY-sakinį.

Pavyzdys

Norint nustatyti miestus, kuriuose randasi nors vienas pirkėjas, nors vienas makleris arba tuose miestuose yra sandėliuojama nors vieno tipo prekė, galima panaudoti SELECT-operatorius kartu su kortežų sumavimo operatoriumi UNION:

select MIESTAS from PIRK

union

select MIESTAS from MAKL

union

select VIETA from PREK

order by 1;

MIESTAS

CHICAGO

Chicago

Encino

LOS ANGELES

Las Vegas

Los Angeles

.

Šiame pavyzdėlyje matome, kad stulpelis ORDER BY-sakinyje gali būti nurodytas ne vardu, o jo numeriu.2.7.15. Lentelių sujungimas

Lentelių sujungimui naudojamas SELECT-operatorius. Sujungiamos lentelės nurodomos sakinyje FROM, o sujungimo sąlygos nurodomos sakinyje WHERE.

Pavyzdys

select UZSAK_NR, MAKL, MAKL_NR, PAVARDE

from PARD, MAKL

where PARD.MAKLERIS = MAKL.MAKL_NR;

PARD.UZSAK_NR MAKL.MAKL_NR MAKL.PAVARDE

020002 000008 McLester

020003 000006 Thomas

020004 000019 Rolfes

020005 000001 Zambini

020006 000012 Charles

020007 000015 Roddick

020008 000003 Vidoni

020009 000012 Charles

020010 000011 Michaels

020011 000015 Roddick

.

Šioje užklausoje duomenys išrenkami iš lentelių makl ir pard. Išrenkami duomenys asocijuojami panaudojat kanoninės schemos (žr. 2.10 pav.) ryšį MAKL_NR/MAKLE¬RIS. Asociacija realizuojama natūraliosios jungties algebrine operacija. WHERE-sakinio sujungimo sąlygoje tarpusavyje gali būti palyginami tik palyginami (t.y. to paties tipo) stulpeliai.

2.10 pav.

Pavyzdys:

Išrinkti maklerio Charles gautus užsakymus.

select UZSAK_NR, MAKL.MAKL_NR, PAVARDE

from PARD, MAKL

where PARD.MAKLERIS = MAKL.MAKL_NR

and PAVARDE = „Charles“;

PARD.UZSAK_NR MAKL.MAKL_NR MAKL.PAVARDE

020006 000012 Charles

020009 000012 Charles

020013 000012 Charles

020024 000012 Charles

SELECT- ir WHERE-sakiniuose galima panaudoti išraiškas ir funkcijas.

Pavyzdys:

Išrinkti užsakymo 20021 komplektus, jų kiekius, komplektų kainas ir suskaičiuoti, kiek reikia mokėti už šio užsakymo komplektus.

select distinct UZSA.KOMPL_NR, UZSA.KIEKIS,

KAINA, (UZSA.KIEKIS*KAINA)

from UZSA, PREK

where PREK.KOMPL_NR = UZSA.KOMPL_NR

and UZSAK_NR = „020021“;

UZSA.KOMPL_NR UZSA.KIEKIS PREK.KAINA EXP1

001013 8 275.80 2206.40

001024 6 230.79 1384.74

001025 8 985.00 7880.00

Pavyzdys

select MAKL.PAVARDE, UZSAK_NR, FIRMA

from PARD, MAKL, PIRK

where MAKL_NR = MAKLERIS

and PIRKEJAS = PIRK_NR

order by MAKL.PAVARDE;

MAKL.PAVARDE PARD.UZSAK_NR PIRK.FIRMA

Charles 020006 New Horizons

Charles 020009 Interior Systems

Charles 020013 New Horizons

Charles 020024 Classic Interiors

Coudray 020022 A1 Office Supply Store

Coudray 020026 Black’s Furniture Store

Marin 020019 American Business Supply

Marin 020020 Al’s Furniture & Supplies

McLester 020002 Modern Furniture Store

.2.7.16. Rezultatų lentelių rūšiavimas ir grupavimas

Rezultatus galima rūšiuoti ir grupuoti analogiškai kaip išrenkant duomenis iš vienos lentelės.

Pavyzdys

select UZSAK_NR,PARD_DATA,PAVARDE

from PARD,MAKL

where MAKLERIS = MAKL_NR

order by PARD_DATA DESC, PAVARDE;

PARD.UZSAK_NR PARD.PARD_DATA MAKL.PAVARDE

020024 87/09/25 Charles

020026 87/09/25 Coudray

020022 87/09/25 Coudray

020021 87/09/25 McLester

020025 87/09/25 Vidoni

020023 87/09/25 Vidoni

020020 87/09/24 Marin

020019 87/09/24 Marin

020018 87/09/24 Michaels

020017 87/09/24 Thomas

020013 87/09/23 Charles

.

Pavyzdys

select MAKL_NR, PAVARDE, count(*)

from PARD, MAKL

where MAKL.MAKL_NR = PARD.MAKLERIS

group by MAKL_NR, PAVARDE

having count(*) > 2

order by 3;

G_MAKL_NR G_PAVARDE COUNT1

000003 Vidoni 3

000008 McLester 3

000012 Charles 4

000015 Roddick 42.7.17. Vidinis lentelių sujungimas

Pavyzdys:

Išrinkti vadovams pavaldžius maklerius, nurodant ir vadovų, ir pavaldinių pavardes.

select VAD.PAVARDE,“Vadovauja:“,PAVAL.PAVARDE

from MAKL VAD,MAKL PAVAL

where VAD.MAKL_NR = PAVAL.VADOVAS

order by VAD.PAVARDE desc;

VAD.PAVARDE EXP1 PAVAL.PAVARDE

Zambini Vadovauja: Coudray

Zambini Vadovauja: McLester

Zambini Vadovauja: Marin

Zambini Vadovauja: Rolfes

Vidoni Vadovauja: Thomas

Vidoni Vadovauja: Roddick

Vidoni Vadovauja: Long

Charles Vadovauja: Michaels

Charles Vadovauja: Sanders

Šioje užklausoje panaudota principinė naujovė: tai pačiai bazinei duomenų lentelei makl, kurios vardas SELECT-sakinyje yra MAKL sukuriama papildomos virtualios lentelės vad ir paval; vad = paval = makl; su naujais vardais VAD ir PAVAL. Programiniu būdu sudarytos lentelės traktuojamos kaip savarankiškos lentelės, ir jos natūraliosios jungties būdu sujungiamos į rezultayvinę lentelę, pasinaudojant asociatyviniu ryšiu VAD.MAKL_NR/PAVAL.VADOVAS. Šis asociatyvinis ryšys užklausoje realizuojamas WHERE-sakiniu

where VAD.MAKL_NR = PAVAL.VADOVAS .

Reliacinės algebros kalba ši užklausa gali būti užrašyta tokiu būdu:

m1 = (VADOVAS, PAVARDE) (makl) ;

VADOVAS PAVARDE

000000 Zambini

000000 Vidoni

000001 Coudray

000003 Thomas

000001 McLester

000012 Michaels

000000 Charles

000001 Marin

000003 Roddick

000003 Long

000001 Rolfes

000012 Sanders

m2 = VADOVASMAK; PAVARDEPAVAL.PAVARDE (m1) ;

MAK PAVAL.PAVARDE

000000 Zambini

000000 Vidoni

000001 Coudray

000003 Thomas

000001 McLester

000012 Michaels

000000 Charles

000001 Marin

000003 Roddick

000003 Long

000001 Rolfes

000012 Sanders

m3 = (MAKL_NR, PAVARDE) (makl) ;

MAKL_NR PAVARDE

000001 Zambini

000003 Vidoni

000004 Coudray

000006 Thomas

000008 McLester

000011 Michaels

000012 Charles

000013 Marin

000015 Roddick

000016 Long

000019 Rolfes

000020 Sanders

m4 = MAKL_NRMAK; PAVARDEVAD.PAVARDE (m3) ;

MAK VAD.PAVARDE

000001 Zambini

000003 Vidoni

000004 Coudray

000006 Thomas

000008 McLester

000011 Michaels

000012 Charles

000013 Marin

000015 Roddick

000016 Long

000019 Rolfes

000020 Sanders

mm = m2m4 ;

MAK PAVAL.PAVARDE VAD.PAVARDE

000001 Coudray Zambini

000001 McLester Zambini

000001 Marin Zambini

000001 Rolfes Zambini

000003 Thomas Vidoni

000003 Roddick Vidoni

000003 Long Vidoni

000012 Michaels Charles

000012 Sanders Charles

atsakymas = (VAD.PAVARDE, PAVAL.PAVARDE) (mm) ;

VAD.PAVARDE PAVAL.PAVARDE

Zambini Coudray

Zambini McLester

Zambini Marin

Zambini Rolfes

Vidoni Thomas

Vidoni Roddick

Vidoni Long

Charles Michaels

Charles Sanders

Rezultatyvinę lentelę gavome tokią pat, kaip ir SQL-užklausos atveju. SQL-užklausoje buvo įterptas papildomas stulpelis EXP1 su pastovia jo eilučių reikšme “Vadovauja:”.2.7.18. Sub-užklausos su pavienėmis grąžinamomis reikšmėmis

Pirmajame (išoriniame) SELECT-operatoriuje galima naudoti vidinį SELECT-operatorių, patalpintą išorinio operatoriaus WHERE-sąlygoje. Čia galimi du atvejai:

1) vidinis SELECT-sakinys grąžina vieną vienvietį kortežą (pavienę reikšmę);

2) vidinis SELECT-sakinys grąžina keletą vienviečių kortežų (grupę reikšmių).

Pirmuoju atveju išorinė WHERE-sąlyga tikrina, kaip tenkinama aritmetinė palyginimo sąlyga, kai jos dešinėje pusėje grąžinama viena palyginimui skirta reikšmė.

Pavyzdys

select UZSAK_NR,PARD_DATA

from PARD

where PIRKEJAS =

(select PIRK_NR from PIRK

where FIRMA=“American Business Supply“)

order by PARD_DATA;

UZSAK_NR PARD_DATA

020005 87/09/21

020019 87/09/24

Šiame pavyzdyje vidinis (antrasis) SELECT-operatorius grąžina iš lentelės PIRK vienintelę reikšmę PIRK_NR = “000016”, o pirkėjas (PIRKEJAS) su šiuo kodu turi du užsakymus “020005” ir “020019”, užregistruotus PARD lentelėje.

Vidiniuose SELECT-operatoriuose galima naudoti agreguotas funkcijas, nes jos suskaičiuoja pavienes reikšmes.

Pavyzdys

select PAVARDE, ATLYGIS

from MAKL

where ATLYGIS > (select avg (ATLYGIS) from MAKL)

order by PAVARDE;

PAVARDE ATLYGIS

Charles 5945

Coudray 6237

Roddick 5493

Thomas 5875

Vidoni 5780

Zambini 6000

Išorinėje WHERE-sąlygoje galima naudoti logines jungtis, kurios jungia kelis vidinius SELECT-operatorius.

Pavyzdys

select UZSAK_NR, PARD_DATA

from PARD

where PIRKEJAS =

(select PIRK_NR from PIRK

where FIRMA = „American Business Supply“)

or MAKLERIS =

(select MAKL_NR from MAKL

where PAVARDE=“Zambini“)

order by UZSAK_NR;

UZSAK_NR PARD_DATA

020005 87/09/21

020014 87/09/23

020019 87/09/24

Ši užklausa bus teisingai suformuota, jeigu DB saugojami duomenys išpildo sąlygą, kad firma atstovauja visada vienas pirkėją (PIRK_NR) ir makleris su nurodyta pavarde(PAVARDE) turi unikalų kodą (MAKL_NR).2.7.19. Sub-užklausos su grupe grąžinamų reikšmių

Jeigu vidinis SELECT-operatorius grąžina daugiau kaip vieną reikšmę, palyginimui reikia naudoti predikatus IN, ANY, arba ALL. Vidinis operatorius gali grąžinti grupę reikšmių, tačiau tik vienam išorinio operatoriaus stulpeliui.

Pavyzdys

select UZSAK_NR, PIRKEJAS, PARD_DATA

from PARD

where PIRKEJAS in

(select PIRK_NR from PIRK

where INDEKSAS like „9%“)

order by UZSAK_NR;

UZSAK_NR PIRKEJAS PARD_DATA

020004 000034 87/09/21

020005 000016 87/09/21

020012 000027 87/09/22

020014 000001 87/09/23

020019 000016 87/09/24

020021 000046 87/09/25

020022 000027 87/09/25

020026 000017 87/09/25

Išorinio SELECT-operatoriaus WHERE-sąlyga įgyja požymį “teisinga“, jeigu stulpelio PIRKEJAS reikšmė sutampa su viena kuria nors reikšme iš aibės, kurią suformuoja vidinis SELECT-operatorius.

Vidinis SELECT-operatorius negali turėti ORDER BY- arba UNION-sakinių. Vidinis operatorius gali turėti GROUP BY- arba HAVING-sakinius. Tačiau šie sakiniai gali būti panaudoti tik vieną kartą, bendrai imant išorinius ir vidinius SELECT-operatorius.

Pavyzdys:

Išrinkti pirkėjų numerius, firmas, pavardes, vardus ir miestus tų pirkėjų, kurie turi užsakymus,į kuriuos įeina komplektas su kodo reikšme “001025”.

select PIRK_NR, FIRMA, PAVARDE, VARDAS, MIESTAS

from PIRK

where PIRK_NR in

(select PIRKEJAS from PARD

where UZSAK_NR in

(select UZSAK_NR from UZSA

where KOMPL_NR = „001025“))

order by PIRK_NR;

PIRK_NR FIRMA PAVARDE VARDAS MIESTAS

000011 The Office LeClerc Dominique New York

000019 The Designer Hobbs Luke New York

000025 Modern Furniture Store Hamilton Robert Phoenix

000040 Design Center Interiors Gilbert Chuck Las Vegas

000046 Commercial Interiors LTD Young Sandy Ventura

Šiuos trijų lygių SELECT-operatorius galima pakeisti vieno lygio sujungimo tipo užklausa, gaunant tą patį rezultatą:

select PIRK_NR, FIRMA, PAVARDE, VARDAS, MIESTAS

from PIRK, PARD, UZSA

where PIRK_NR = PIRKEJAS

and PARD.UZSAK_NR = UZSA.UZSAK_NR

and KOMPL_NR = „001025“

order by 1;

Kiekvieną užklausą su vidiniais SELECT-operatoriais galima pakeisti sujungimo tipo užklausa, tačiau atvirkščias teiginys neteisingas. Pavyzdžiui, jeigu duomenis reikia išrinkti išoriniais ir vidiniais SELECT-operatoriais, tai ją galima realizuoti, tik naudojant sujungimo tipo užklausą.2.7.20. Raktažodžių ANY ir ALL panaudojimas

Raktažodis ANY leidžia nustatyti, ar WHERE-sąlyga teisinga bent vienai reikšmei iš tų, kurias grąžina vidinis SELECT-operatorius.

Pavyzdys

select MAKL_NR, PAVARDE, MIESTAS, PRIEDAS

from MAKL

where PRIEDAS < any

(select PRIEDAS from MAKL

where MIESTAS=“CHICAGO“)

order by MAKL_NR;

MAKL_NR PAVARDE MIESTAS PRIEDAS

000001 Zambini LOS ANGELES 5.0

000003 Vidoni NEW YORK 5.0

000004 Coudray LOS ANGELES 5.0

000006 Thomas NEW YORK 5.0

000008 McLester LOS ANGELES 5.0

000012 Charles CHICAGO 5.0

000019 Rolfes LOS ANGELES 6.0

000020 Sanders CHICAGO 5.0

Mieste CHICAGO dirba trys makleriai, kurie gauna tokius priedus :

• Michaels – 7.0 %

• Charles – 5.0 %

• Sanders – 5.0 %

Į atsakymą papuola tie makleriai, kurie gauna priedus, mažesnius už 7.0 %. Jeigu norėtume išrikti visus maklerius, kurie gauna tokius pat priedus, kaip ir CHICAGO dirbantys makleriai, tai vietoje WHERE-sąlygos

where PRIEDAS = any

reiktų panaudoti ankstesnėje užklausoje tokią WHERE-sąlygą:

where PRIEDAS in

Raktažodis ALL leidžia nustatyti, ar išorinė WHERE-sąlyga teisinga visoms vidinio SELECT-operatoriaus.grąžinamoms reikšmėms.

Pavyzdys

select MAKL_NR, PAVARDE, MIESTAS, PRIEDAS

from MAKL

where PRIEDAS > all

(select PRIEDAS from MAKL

where MIESTAS = „CHICAGO“)

order by MAKL_NR;

MAKL_NR PAVARDE MIESTAS PRIEDAS

000013 Marin LOS ANGELES 11.0

000015 Roddick NEW YORK 8.02.7.21. Predikato EXISTS panaudojimas

Jeigu WHERE-sąlygoje naudojamas EXISTS predikatas, ši sąlyga įvertinama reikšme „teisinga“, jeigu vidinis sakinys grąžina bent vieną kortežą.

Pavyzdys

select PIRK_NR, FIRMA, MIESTAS, VALSTIJA

from PIRK

where exists

(select * from PARD

where PIRK.PIRK_NR = PARD.PIRKEJAS)

order by PIRK_NR;

Šis išorinis SELECT-operatorius išrenka pirkėjus, kurie yra užsisakę kokias nors prekes. Jei šioje užklausoje EXISTS predikatą pakeisime NOT EXISTS predikatu, atsakyme bus išrinkti pirkėjai, neužsakę prekių.

PIRK.PIRK_NR PIRK.FIRMA PIRK.MIESTAS PIRK.VALSTIJA

000003 Ace Furniture Wasau WI

000009 Custom Furniture Yonkers NY

000022 Las Vegas Furniture Las Vegas NV

000024 Baker Furniture Phoenix AZ

000028 Accent Furniture Designs Las Vegas NV

000033 Interior Designs White Plains NY

000035 Valley Furniture Encino CA

000042 Cohen’s Furniture San Francisco CA

Pažymėtina, kad konstrukciją “SELECT * “vidinėje užklausos dalyje galima panaudoti tik su EXISTS arba NOT EXISTS predikatu iš išorinės dalies.2.7.22. Koreliuotos vidinės užklausos

Koreliuotose vidinėse užklausose stulpelių reikšmes vidiniams SELECT-sakiniams nustato išorinis SELECT-operatorius. Tos išorinės reikšmės aktyvizuoja vidinę užklausą. Jeigu tiek išoriniame, tiek vidiniame SELECT-sakiniuose naudojama ta pati lentelė, tai juose tai lentelei reikia priskirti skirtingus vardus, nes šiuo atveju vienoje lentelėje tuo pačiu metu nagrinėjamos skirtingos eilutės.

Pavyzdys

select ISOR.VARDAS, ISOR.PAVARDE, ISOR.MIESTAS,

ISOR.IDARB_DATA,ISOR.ATLYGIS

from MAKL ISOR

where ATLYGIS=

(select max(ATLYGIS) from MAKL VIDIN

where

VIDIN.MIESTAS = ISOR.MIESTAS)

order by ISOR.PAVARDE;

ISOR.VARDAS ISOR.PAVARDE ISOR.MIESTAS ISOR.ATLYGIS

Ted Charles CHICAGO 5945

Sandy Coudray LOS ANGELES 6237

Pat Thomas NEW YORK 5875

Kiekvienam makleriui viena atlygio reikšmė iš išorinio SELECT-operatoriaus perduodama vidiniam SELECT-sakiniui, kuris paruošia vieną vidinę maksimalaus atlygio reikšmę. Jeigu šios reikšmės sutampa, tai makleris iš išorinio sakinio yra tinkamas atsakymui.

3FUNKCINĖS PRIKLAUSOMYBĖS IR RAKTAI

3.1. Funkcinių priklausomybių apibrėžimas

Tarkime, kad R = (A1, A2,., An) yra santykių schema, o X ir Y – du šios schemos atributų poaibiai. Sakoma, kad X su Y sieja funkcinė priklausomybė (FP) X Y , jeigu bet kuriame schemos R santykyje r(R) dviejuose kortežuose t1 ir t2 pasikartojant X-komponentams t1(X) ir t2(X) būtinai turi pasikartoti ir Y-komponentai t1(Y) ir t2(Y), t.y. jei t1(X) = t2(X), tai ir t1(Y) = t2(Y).

3.1 pav. 3.2 pav.

Paimkime schemą PREK ir funkcines priklausomybes KOMPL_NR KAINA, KOMPL_NR PAVADINIMAS, PAVADINIMAS KOMPL_NR (žr. 3.1 pav.). Nepriklausomai nuo to, kuriame mieste (VIETA) komplektas (KOMPL_NR) yra sandėliuojamas, komplekto kaina išlieka ta pati, t.y. pasikartojant KOMPL_NR-komponentui, būtinai pasikartoja ir KAINA-komponentas (žr. 3.1 lent.). 3.1 lentelėje ši priklausomybė nepažeidžiama ir modifikuojant lentelės duomenis tą priklausomybę negalima pažeisti. Tą patį galima pasakyti ir apie kitas funkcines priklausomybes. Funkcinių priklausomybių schemoje PREK galima nurodyti ir daugiau. Pavyzdžiui, teisingos yra funkcinės priklausomybės KOMPL_NR,VIETA KIEKIS ir KOMPL_NR,VIETA PAPILD_POZ (žr. 3.2 pav.).

Tarkime, kad R – santykio schema; A, B, C, D – jos atributai, o A B, B C – duotosios funkcinės priklausomybės. Galima nesunkiai įrodyti, kad FP A C logiškai seka iš pirmųjų dviejų. Paimkime du santykio r(R) kortežus t1 ir t2 (žr. 3.1 lentelę). Čia: t1 = , o t2 = . Kadangi t1(A) = t2(A) = a1 ir duota, kad A B, tai būtinai t1(B) turi sutapti su t2(B). Pateiktame santykyje r(R) taip nėra: t1(B) = b1, o t2(B) = b2. Tai reiškia, kad santykis neteisingas ir B-komponentus turime suvienodinti, pavyzdžiui, tokiu būdu: t1(B) = t2(B) = b1. Pradinėse sąlygose buvo duota, kad B C. Jeigu t1(B) = t2(B) = b1 , o t1(C) = c1 ir t2(C) = c2, tai Ckomponentus taip pat suvienodiname: t1(C) = t2(C) = c1. Todėl iš sąlygos t1(A) = t2(A) ir A B, B C seka, kad t1(C) = t2(C). Tai reiškia, kad teisinga yra A C. Ji logiškai seka iš dviejų ankstesniųjų ir gali būti išvesta pasinaudojant tranzityvumo taisykle.

3.1 lentelė

A B C D

t1 a1 b1 c1 d1

t2 a1 b2 (b1) c2 (c1) d2

Schemoje R nurodytas FP vadinsime užduotųjų funkcinių priklausomybių (UFP) aibe. Kitas FP galima išvesti naudojant funkcinių priklausomybių išvedimo taisykles, kurias panagrinėsime sekančiuose dviejuose skyreliuose.3.2. Funkcinių priklausomybių išvedimo taisyklės

Jeigu schemoje R yra užduota funkcinių priklausomybių aibė F , tai visas kitas FP galima išvesti taikant funkcinių priklausomybių išvedimo taisykles. Jeigu iš F taikant išvedimo taisykles galima išvesti X Y, tai šį faktą ateityje žymėsime X Y F+.

Parodysime, kad jei XYF+, tai X Y yra teisinga ir žymėsime F FT X Y. Mes norime įrodyti, kad jei X Y išvedama naudojant korektiškas taisykles, tai bet kuris santykis r(R), tenkinantis F turi tenkinti ir X Y. Pažymėję raidėmis X, Y, Z, W schemos R atributų poaibius, pateiksime šešias išvedimo taisykles, kuriose atributų poaibį X Z = W paprastumui žymėsime X,Z , o schemos W kortežą – x,z (atributų reikšmės atskirsime taip pat kableliu be tarpo).

FT1. Refleksyvumas: X FT X X.

FT2. Papildymas: X Y FT X,Z Y.

FT3. Adityvumas: X Y; X Z FT X Y,Z.

FT4. Projektyvumas: X Y,Z FT X Y; X Z.

FT5. Tranzityvumas: X Y; Y Z FT X Z.

FT6. Pseudotranzityvumas: X Y; Y,Z W FT X,Z W.

Norint parodyti, kad šios taisyklės korektiškos (patikimos), reikia įsitikinti, kad bet koks santykis r(R), tenkinantis F, turi tenkinti ir FP iš F+ . Santykis r(R) tenkina X Y, jeigu santykis-projekcija Y (X=x (r)) kiekvienai x reikšmei turi ne daugiau kaip vieną kortežą. Panagrinėkime santykį prek (žr. 3.2 lentelę) su dviem kortežais t1 ir t2 tokiais, kad t1(KOMPL_NR) = t2(KOMPL_NR). Šioje schemoje KOMPL_NR KAINA yra užduota ir KAINA (KOMPL_NR=001027 (prek)) = <29.00>. Šios dvi operacijos prie bet kokių atributo KOMPL_NR reikšmių duoda ne daugiau kaip vieną kortežą (vieną arba nei vieno).

3.2 lentelė. prek

KOMPL_NR

PAVAD

KIEKIS

VIETA

KAINA

PAPIL_POZ

001038 CTRL SUPER AT I/O 89 KAUNAS 15.00 .F.

t1 001027 CTRL LOCAL BUS VESA IDE 20 KAUNAS 29.00 .F.

t2 001027 CTRL LOCAL BUS VESA IDE 56 VILNIUS 29.00 .F.

Panagrinėkime taisyklių FT1 ÷ FT6 patikimumą atskirai po vieną.

FT1. Refleksyvumas. X X visada teisinga, nes X (X=x (r)) negali turėti daugiau kaip vieną kortežą

FT2. Papildymas. Užsiduokime X Y ir Z R. Tada X,Z=x,z (r) X=x (r) , nes santykį X,Z=x,z (r) būtinai padengs santykis X=x (r). Kadangi Y (X=x (r)) turi ne daugiau kaip vieną kortežą (tai iliustravome pavyzdžiu), todėl Y (X,Z=x,z (r)) tikrai negali turėti daugiau kaip vieną kortežą. Taigi, X,Z Y yra teisinga. Pavyzdžiui, jei KOMPL_NR KAINA, tai teisinga yra ir KOMPL_NR,VIETA KAINA.. Tarkime KOMPL_NR = 001027. Pavaizduokime rezultatus po santykio prek dviejų selekcijų (žr. 3.3 ir 3.4 lenteles).

3.3 lentelė. KOMPL_NR = 001027 (prek)

KOMPL_NR

PAVAD

KIEKIS

VIETA

KAINA

PAPIL_POZ

001027 CTRL LOCAL BUS VESA IDE 20 KAUNAS 29.00 .F.

001027 CTRL LOCAL BUS VESA IDE 56 VILNIUS 29.00 .F.

3.4 lentelė. KOMPL_NR,VIETA = 001027,KAUNAS (prek)

KOMPL_NR

PAVAD

KIEKIS

VIETA

KAINA

PAPIL_POZ

001027 CTRL LOCAL BUS VESA IDE 20 KAUNAS 29.00 .F.

Šiose lentelėse:

KOMPL_NR,VIETA = 001027,KAUNAS (prek) KOMPL_NR = 001027 (prek);

KAINA (KOMPL_NR,VIETA = 001027,KAUNAS (prek)) = KAINA (KOMPL_NR = 001027 (prek)) = <29.00>.

FT3. Adityvumas. Sakykime X Y; X Z yra teisingos. Jeigu r tenkina X Y ir X Z tai abu santykiai-projekcijos

Y (X=x (r)) ir Z (X=x (r))

turi ne daugiau kaip po vieną kortežą. Santykis YZ (X=x (r)) turės taip pat ne daugiau kaip vieną kortežą, nes kitu atveju arba Y (X=x (r)), arba Y (X=x (r)) turėtų bent po du kortežus. Todėl teisinga bus funkcinė priklausomybė X Y,Z.

FT4. Projektyvumas. Tarkime X Y,Z teisinga arba Y,Z (X=x (r)) turi ne daugiau kaip vieną kortežą kiekvienai x reikšmei. Kadangi

Y (Y,Z (X=x (r))) = Y (X=x (r)),

tai Y (X=x (r)) turi ne daugiau kaip vieną kortežą ir X Y yra teisinga.

FT5. Tranzityvumas. X Y; Y Z FT X Z.

Tranzityvumą įrodėme pavyzdžiu ankstesniame skyrelyje.

FT6. Pseudotranzityvumas. Sakykime, duotos teisingos FP X Y ir Y,Z W. Paimkime t1, t2 r tokius,. kad

t1(X,Z) = t2(X,Z) (3.1)

Iš (3.1) seka, kad

t1(X) = t2(X) ir (3.2)

t1(Z) = t2(Z). (3.3)

Iš X Y (buvo užsiduota) ir (3.2) seka, kad

t1(Y) = t2(Y), (3.4)

o iš (3.3) ir (3.4) seka, kad

t1(Y,Z) = t2(Y,Z). (3.5)

Buvo užsiduota taip pat Y,Z W. Iš jos ir (3.5) darome išvadą, kad

t1(W) = t2(W) (3.6)

3.3 pav.

Tokiu būdu, jeigu t1(X,Z) = t2(X,Z), tai ir t1(W) = t2(W) ir X,Z W yra teisinga.

Paimkime ankstesnę schemą PREK su nurodytomis funkcinėmis priklausomybėmis, kurios yra sunumeruotos (žr. 3. 3 pav.).

Šioje schemoje panaudoti tokie pažymėjimai :

X = KOMPL_NR,

Y = PAVAD,

Y,Z = PAVAD,VIETA,

W = KIEKIS,

Z = VIETA,

X,Z = KOMPL_NR,VIETA.

Trečioji FP gali būti išvesta iš pirmųjų dviejų naudojant pseudotranzityvumo taisyklę.3.3. Galinė funkcinių priklausomybių aibė

3.4 pav.

Užduotųjų FP aibę F kartu su kitomis funkcinėmis priklausomybėmis, kurios iteraciniu būdu išvestos iš F arba iš anksčiau išvestųjų panaudojant korektiškų taisyklių rinkinį (sistemą), vadinsime funkcinių priklausomybių galine aibe ir žymėsime ją F+.

Paimkime ankstesnę schemą PREK ir užduotųjų funkcinių priklausomybių aibę F (žr. 3.4 pav.). Iš šios F naudojant formalias taisykles galima sudaryti F+ (žr. 3.5 pav.)

3.5 pav.

Pirmoji FP PAVAD KAINA išvesta iš PAVAD KOMPL_NR, o KOMPL_NR KAINA naudojant tranzityvumo taisyklę FT5. Pasinaudojant pseudotranzityvumu (FT6) išvestos 2-oji, 3-oji ir 4-oji funkcinės priklausomybės. Išvedamų FP aibėje F+ yra ir daugiau, pavyzdžiui:

KOMPL_NR KOMPL_NR (FT1);

KOMPL_NR,VIETA VIETA (FT1, FT2) ir t.t.

Pateiksime tris naujus apibrėžimus.

Jeigu turim schemą R ir X R , o Y X, tai FP X Y visada teisinga ir vadinama trivialiąja funkcine priklausomybe. Funkcinė priklausomybė KOMPL_NR, VIETA VIETA bus trivialioji, nes priklausomybės dešiniosios pusės atributas VIETA yra ir priklausomybės kairiojoje pusėje.

Pažymėkime schemoje R visas įmanomas funkcines priklausomybes H:

H = { X Y | X,Y R }

Tada F- = H F+ sudaro užduotųjų funkcinių priklausomybių F išorę. Visos X Y F– logiškai neseka iš F ir yra F atžvilgiu neteisingos. Pavyzdžiui, neteisingos yra 5-oji ir 6-oji funkcinės priklausomybės (žr. 3.5 pav.).

3.6 pav.

Schemoje R paimkime užduotųjų FP aibę F ir vieną poaibį X R. Atributų poaibis Y R bus vadinamas X-dengtimi X+ , jeigu bet kokiam Z Y galioja X Z F+ . Schemoje PREK užsidavę X = PAVAD,VIETA, jo dengtis bus X+ = PAVAD, VIETA,KOMPL_NR,KIEKIS,KAINA,PAPILD_POZ (žr. 3.6 pav.). Šių funkcinių pri¬klausomybių dešiniosios pusės yra X+ poaibiai, o aibę X+ šiame pavyzdyje sudaro visi schemos atributai.3.4. Išvedimo taisyklių savybės

Panagrinėsime anksčiau pateiktos FP išvedimo taisyklių sistemos FT1 ÷ FT6 tokias savybes:

– patikimumą,

– pertekliškumą,

– pilnumą.

Patikimumas. Schemai R funkcinės priklausomybės X Y išvedimo taisyklė FT yra patikima, jeigu ją naudojant funkcinę priklausomybę X Y tenkina bet kuris schemos R santykis r(R). Kad FT1÷ FT6 yra patikimos, įrodėm anksčiau (3.3 skyrelyje).

Pertekliškumas. Pirmiausia pastebėsime, kad pasinaudojant FT1÷FT6, funkcinių priklausomybių išvedimo taisyklių galima sugalvoti ir daugiau. Trivialiosios funkcinės priklausomybės išvedimo taisyklę

Y X FT X Y (3.7)

galima apibrėžti naudojant refleksyvumą (FT1) ir papildymą (FT2). Tarkime, kad X = A,B; Y = A. Tada:

A A (refleksyvumas)

Y Y

A,B A (papildymas).

X Y

Kitas pavyzdys:

X Y ; X,Y = Z’ ; Z’ W FT X W (3.8)

Šią taisyklę pagrįsime anksčiau nagrinėtu pseudotranzityvumu FT6:

X Y, Y,Z W FT X,Z W

Tarkime, kad

X = A ; Y= B ;

Z’ = A,B ;

W = C .

Jeigu:

A B (duota);

X Y

Y Z

B,A C (duota)

Z’ W

X Z W

tada A,A C (pseudotranzityvumas).

Kadangi A,A = A ,

gauname A C .

X W

Pseudotranzityvumo taisyklė FT6 yra bendresnė už 3.8 taisyklę. Dėl šios priežasties pakanka pasinaudoti pseudotranzityvumu, kad pagrįsti 3.8 taisyklę. Ši taisyklė yra dalinis FT6 atvejis , nes pseudotranzityvumo atveju atributams Z jokių apribojimų nėra.

Suprantama, kad parodytos 3.7 ir 3.8 taisyklės yra perteklinės atžvilgiu FT1 ÷ FT6, nes jos buvo sudarytos pasinaudojant FT1, FT2 ir FT6. Galima paklausti, ar išvedimo taisyklių FT1 ÷ FT6 sistemos viduje nėra perteklinių. Pasirodo, kad taip. Pavyzdžiui, FT6 gali būti sudaryta iš FT1, FT2, FT3 ir FT5. Įrodykime tai.

Z Z (FT1);

X,Z Z (FT2); (3.9)

X Y (FT6 prielaida); (3.10)

X,Z Y (iš 3.10 pagal FT2); (3.11)

X,Z Y,Z (iš 3.9 ir 3.11 pagal FT3); (3.12)

Y,Z W (FT6 prielaida); (3.13)

X,Z W (FT6 išvestis – iš 3.12 ir 3.13 pagal FT5). (3.14)

Paimkime kitą atvejį. Parodysime, kad pasinaudojant taisyklėmis FT1, FT2 ir FT6 galima išvesti taisykles FT3, FT4 ir FT5. Tranzityvumas FT5 yra FT6 dalinis atvejis, kai išraiškose 3.13 ir 3.14 atributų poaibis Z = . Lieka išvesti FT3 ir FT4.

Pradėkime nuo FT3:

Y’,Z’ Y’,Z’ (FT1); (3.15)

Y Z W

X Y’ (FT3 prielaida); (3.16)

Y

X,Z’ Y’,Z’ (iš 3.15 ir 3.16 pagal FT6); (3.17)

Z Y W

X Z’ (FT3 prielaida); (3.18)

Y

X,X Y’,Z’ (iš 3.17 ir 3.18 pagal FT6); (3.19)

X Y’,Z’ (iš 3.19, kadangi X’,X’=X’).

Išvesime FT4 taisyklę:

Y’ Y’ (FT1);

Y’,Z’ Y’ (FT2); (3.20)

Y’,Z’, Y’ (ta pati 3.20); (3.21)

Y Z W

X Y’,Z’ (FT4 prielaida); (3.22)

Y

X, Y’ (iš 3.21 ir 3.22 pagal FT6); (3.23)

X Y’ (FT4 išvestis – iš 3.23);

X Z’ (FT4 išvestis, analogiškai pagal 3.20 ÷ 3.23).

Išnagrinėtas paskutinis atvejis rodo, kad FT1, FT2 ir FT6 sudaro pilną taisyklių poaibį atžvilgiu FT1 ÷ FT6. Todėl pakanka sudarant F+ pasinaudoti tik šiomis taisyklėmis. Taisyklės FT1, FT2 ir FT6 yra vadinamos Amstrongo aksiomomis.

Tolimesniam nagrinėjimui bus naudinga dar viena taip vadinama kaupimo taisyklė.

FT7. Kaupimas: X Y,Z ; Y V,W FT X Y,Z,W.

Kad ši taisyklė korektiška pakanka pasinaudoti anksčiau išvestomis korektiškomis taisyklėmis.

X Y,Z (duota); (3.24)

X Y (FT4); (3.25)

Y V,W (duota); (3.26)

X V,W (iš 3.25 ir 3.26 pagal FT5); (3.27)

X Y,Z,V,W (iš 3.24 ir 3.27 pagal FT3); (3.28)

X Y,Z,W (FT7 išvestis – ir 3.28 pagal FT4).

Kaupimo taisyklė FT7 yra paprasta ir kartu su FT1 ir FT4 sudaro atžvilgiu Amstrongo aksiomų pilnąją taisyklių sistemą. Kad tai įrodytume, reikia parodyti, kad iš FT1, FT4 ir FT7 galima išvesti FT2 ir FT6. Pradėsime nuo FT2:

X Y (FT2 prielaida.) (3.29)

X,Z X,Z (FT1) (3.30)

X,Z X,Y,Z (iš 3.29 ir 3.30 pagal FT7) (3.31)

X,Z Y (FT2 išvestis – iš 3.31 pagal FT4).

Parodykime, kad pseudotranzityvumo taisyklė FT6 seka iš FT1, FT4 ir FT7:

X,Z X,Z (FT1); (3.32)

X Y (FT6 prielaida); (3.33)

X,Z X,Y,Z (iš 3.22 ir 3.23 pagal FT7); (3.34)

Y,Z W (FT6 prielaida); (3.35)

X,Z X,Y,Z,W (iš 3.34 ir 3.35 pagal FT7); (3.36)

X,Z W (FT6 išvestis – iš 3.26 pagal FT4).

Tokiu būdu sistema FT1 , FT4 ir FT7 yra pilna atžvilgiu FT1 , FT2 ir FT6. Jeigu Amstrongo aksiomų sistema yra pilna, tai ir taisyklių sistema FT1 , FT4 ir FT7 bus pilna. Šią taisyklių sistemą vadinsime trumpai B-aksiomomis.

Pilnumas. Schemoje R apibrėžėme F+ kaip FP aibę, kurią sudaro užduotųjų FP aibe F kartu su kitomis FP, kurias galima išvesti pasinaudojant Amstrongo aksiomomis iš F arba iteraciniu būdu iš F ir iš anksčiau išvestųjų. Kadangi Amstrongo sistema (arba FT1÷ FT6) yra patikima, tai X Y išvesta iš F yra teisinga arba, kitais žodžiais tariant, logiškai seka iš F (žymėsime F X Y). Dabar įrodysime, kad sistema FT1 ÷ FT6 yra pilna, t. y. atvirkščią dalyką: kiekviena FP X Y, kuri logiškai seka iš F, gali būti išvesta panaudojant FT1 ÷ FT6 sistemos taisykles. Kitais žodžiais tariant, neegzistuoja FP W Z , kuri logiškai seka iš F, tačiau neišvedama naudojant taisyklių sistemą.Tuo tikslu sudarykime santykį r(R), kuris tenkina visas funkcines priklausomybes iš F+, bet netenkina X Y F–.

Sakykime, kad R = (A1 , A2 ,., An), o ai ir bi du skirtingi elementai iš dom(Ai ), i = 1, 2, ., n. Pradžioje sudarykime santykį s(R) funkcinei priklausomybei X Y F–. Šis santykis turi du kortežus t ir u. Kortežas t = , o

Pavaizduokime šią situaciją 3.7 paveikslėlyje. Šis santykis netenkina FP X Y iš aibės F–. Kodėl? Kortežuose t ir u t(X) = u(X). Sakykime, kad t(Y) = u(Y). Tada komponentai iš u(Y) turėtų būti ai ir Y turėtų priklausyti X+. Kadangi X X+ F+, tai iš projektyvumo taisyklės X Y irgi turėtų priklausyti F+. Bet tai prieštarautų sąlygai X Y F–. Toliau parodysime, kad s(R) tenkina visas FP iš F+.Tam tik reikia peržiūrėti priklausomybes W Z; W X+ , nes jeigu W X+, tai t(W) u(W).

3.7 pav.

Sudarykime tokią išraiškų seką, kai W X+:

X X+ (iš Xdengties apibrėžimo); (3.37)

X+ W (FT4); (3.38)

W Z; t(W) = u(W) (užduota); (3.39)

X Z (iš 3.37 ÷ 3.39 du kartus panaudojus FT5). (3.40)

Tokiu būdu iš 3.40 gauname, kad Z X+ ir t(Z) = u(Z), o santykis s(R) tenkina W Z.

Sudarykime kitą santykį r(R), tenkinantį visas FP iš F+ , bet prieštaringą kiekvienai X Y F–. Jis vadinamas Amstrongo santykiu ir gaunamas apjungiant santykius s(R), sudarytus kiekvienai X Y F– . Amstrongo santykis r(R) dviejų FP atveju X Y ; U V iš F– pateiktas 3.8 paveikslėlyje. Amstrongo santykis r (R) tenki¬na visas FP iš F+ ir pažeidžia visas FP iš F–.

3.8 pav.

Iš Amstrongo santykio analizės galima padaryti išvadą, kad neegzistuoja priklausomybių W Z, kurios logiškai seka iš F ir nėra išvedamos naudojant FT1 ÷ FT6 (arba Amstrongo sistemą FT1, FT2, FT6). Tokiu būdu F X Y tada ir tik tada, kai X Y F+. Pakankamumo sąlyga (“tada”) seka iš taisyklių sistemos FT1 ÷ FT6 patikimumo, o būtinumo sąlyga (“tik tada”) iš taisyklių sistemos FT1 ÷ FT6 pilnumo, kurį iliustravome Amstrongo santykiu.3.5. Santykių schemos raktai

Sakykime, kad:

R = (A1 , A2 ,., An) – santykio schema;

F – užduotųjų funkcinių priklausomybių aibė;

X – schemos R atriburtų poaibis.

X yra schemos raktas, jeigu:

1) X Y F+

2) visiems Y X galioja Y R F+

Jeigu schemoje R tenkinama tik pirmoji sąlyga ir netenkinama antroji, tai raktas X vadinamas superraktu. Jeigu schema tenkina pirmąją sąlygą ir X yra nurodytas schemoje R, tai X vadinamas pažymėtuoju raktu. Pažymėtasis raktas gali būti superraktas. Schemoje R gali būti nurodyti keli pažymėtieji raktai arba net visi. Toliau schemose nurodysime tik raktus (o ne superraktus). Raktinius (pirminius) atributus žymėsime simboliu “ * “. Paimkime schemą MAI su nurodytu raktu X = M,A (žr. 3.9 pav.).

3.9 pav.

Parodysime, kad Y = A,I taip pat yra raktas. Pasinaudokime funkcinių priklausomybių išvedimo taisyklėmis FT1 ÷ FT6 :

1) I M (duota);

2) A,I M (FT2);

3) A A (FT1);

4) A,I A (FT2);

5) A,I M,A (FT3);

6) M,A I (duota);

7) M,A M,A (FT1);

8) M,A M,A,I (FT3);

9) A,I M,A,I (FT5).

Panaudojus išvedimo taisykles FT1, FT2 ir FT6 funkcinę priklausomybę A,I M,A,I galima nustatyti paprasčiau:

1) M,A I (duota);

2) M,A M,A (FT1);

3) M,A M,A,I (FT3);

4) I M (duota);

5) A,I M,A,I (FT6).

Dar paprasčiau naują raktą Y = A,I galima nustatyti naudojant B-aksiomas:

1) I M (duota);

2) A,I A,I (FT1);

3) A,I M,A,I (FT7).

4IR JŲ EKVIVALENTIŠKUMAS

4.1. Išvesties orientuotieji acikliniai grafai

Šiame skyrelyje panagrinėsime orientuotųjų aciklinių išvedimo (OAI) grafų panaudojimą modeliuojant schemoje R funkcinės priklausomybės X Y išvedimą iš UFP aibės F. OAI grafas – tai orientuotas grafas be ciklų visose viršūnėse. Grafo viršūnės bus paženklintos schemos R atributų žymėmis (vardais) ir OAI grafas poaibiui X R sudaromas taisyklėmis GT1 ir GT2.

GT1. Kiekvienam atributui iš X skiriama po vieną izoliuotą grafo H’ viršūnę ir paženkliname izoliuotas viršūnes atatinkamų atributų vardais. Sudarytas H’ yra OAI grafas.

GT2. Jeigu H yra OAI grafas, turintis visų viršūnių tarpe viršūnes a1, a2, .,ak, su jų žymėmis a1= žym(A1), a2= žym(A2), . , ak= žym(Ak), o A1, A2 ,., Ak Z F, tai papildytas grafas H bus sudarytas iš ankstesniojo, pridedant naują viršūnę u su žyme c = žym(C), C Z, (jeigu tokios viršūnės grafe nebuvo) bei lankus (ai, u), i = 1, 2, .,k , (jeigu viršūnė u po pirmo žingsnio nebuvo izoliuotoji ir lanko (ai, u) dar nėra grafe. Šį žingsnį kartojame visiems C Z ir visoms funkcinėms priklausomybėms W Z F; W = A1,A2,.,Ak , jei tik grafas H visiems atributams Ai iš W turi viršūnes su atatinkamomis žymėmis žym (Ai). Sudarytas grafas H yra OAI grafas poaibiui X R. Sakome, kad grafas H sudarytas poaibiui X, nes taisyklėje GT1 poaibiui X skyrėme izoliuotąją viršūnę. Kiekvienoje iteracijoje taisyklę GT2 kartojame, jeigu po paskutinėsiteracijos OAI grafas buvo papildytas. Procesą baigiame, jeigu grafą H paskutinėje iteracijoje nebepakeitėme.

OAI grafo H panaudotąja aibe U(H) vadinsime FP iš F, panaudotas taisyklėse GT1 ir GT2.

Paimkime schemą ST_GR su UFPA (žr. 4.1 pav.). Sudarykime šiai schemai OAI grafą atžvilgiu X=UŽ,LA (4.2 pav.). Sudarytame OAI grafe U(H) susideda iš pirmųjų trijų funkcinių priklausomybių. Viršūnės su žymėmis UŽ ir LA po pirmos taisyklės GT1 pritaikymo grafe H buvo izoliuotosios. Galutinai sudarytame grafe H jos liko pirminėmis, nes joks lankas į jas neįeina. Ketvirtoji FP liko nepanaudota, nes grafo viršūnė su žyme UŽ po pirmos taisyklės GT1 panau¬dojimo buvo izoliuotoji. Penktoji FP sudarant H taip pat nereikalinga, nes atributas STudentas nepriklauso poaibiui Y anksčiau panaudotose funkcinėse priklausomybėse A1 ,A2 ,.,Ak Y U(H).

4.1 pav.

4.2 pav.

Sudarytas OAI grafas H dengia FP X Y, jeigu X yra grafo H pirminės viršūnės ir jis turi viršūnes su poaibio Y visų atributų vardais. Jeigu grafe H pirminių viršūnių vardai yra X – vardai ir visų viršūnių iš H atributus pažymėsime X+ , tai bet kokiems Y X+ grafas H dengia FP X Y. Ankstesniame pavyzdyje sudarytas OAI grafas dengia funkcines priklausomybes UŽ,LA VI; UŽ,LADĖ ir UŽ,LA KA; UŽ,LA VI,DĖ ir t.t.

OAI grafas gali būti sudarytas laisvai užduotai funkcinei priklausomybei X Y F+. Jo sudarymui panaudosime nagrinėtas taisykles GT1 ir GT2. OAI grafo sudarymo procesą tęskime tol, kol grafe gauname viršūnes su visomis Y-žymėmis. Jeigu tai nepavyksta padaryti, reiškia, kad OAI grafas funkcinei priklausomybei X Y neegzistuoja. Šis algoritmas panašus į ankstesnįjį, kai OAI grafą konstravome poaibiui X R. Skirtumas tik tas, kad procesą sustabdome, jeigu Y X+. 4.2 pav. parodytas toks grafas funkcinei priklausomybei

UŽ,LA UŽ,KA .

X Y

Sudarant šį grafą, paeiliui buvo panaudotos 1-oji, 2-oji ir 3-oji funkcinės priklausomybės. Pastebėsime tai, kad jeigu F X Y, tai funkcinei priklausomybei X Y egzistuoja OAI grafas. Be to, jeigu F X Y, tai vieną kartą panaudojus B- aksiomą FT1, kelis kartus FT7 ir galiausiai vieną kartą panaudojus FT4 galima sudaryti tokią funkcinių priklausomybių seką, kad X Y būtų sekoje paskutinioji. Iliustruokime tai ankstesniu pavyzdžiu. Paimkime pradžioje funkcinių priklausomybių bet kokią seką S, sudarytą funkcinei priklausomybei UŽ,LA UŽ,KA :

LA,VI DĖ (duota); (4.1)

UŽ,LA UŽ,LA (FT1); (4.2)

UŽ,LA VI (duota); (4.3)

UŽ,LA UŽ,LA,VI (FT7); (4.4)

UŽ,LA UŽ,LA,VI,DĖ (FT7); (4.5)

UŽ,LA UŽ,VI,.DĖ (FT4); (4.6)

DĖ KA (duota); (4.7)

UŽ,LA UŽ,VI,DĖ,KA (FT7); (4.8)

UŽ,LA UŽ,KA (FT4). (4.9)

4.3 pav.

Perkelkime sekoje S funkcinę priklausomybę X X į pirmąją vietą. Funkcinę priklausomybę LA,VI DĖ (4.1) perkelkime į tą vietą, kad ji iš karto būtų panaudota dešiniosios pusės kaupimui (t.y. prieš FP (4.5)). Gausime seką S’:

UŽ,LA UŽ,LA (FT1); (4.10)

UŽ,LA VI (duota); (4.11)

UŽ,LA UŽ,LA,VI (FT7); (4.12)

LA,VI DĖ (duota); (4.13)

UŽ,LA UŽ,LA,VI,DĖ (FT7); (4.14)

UŽ,LA UŽ,VI,DĖ (FT4); (4.15)

DĖ KA (duota); (4.16)

UŽ,LA UŽ,VI,DĖ,KA (FT7); (4.17)

UŽ,LA UŽ,KA (FT4). (4.18)

Sekoje S’ visos funkcinės priklausomybės, kurios išvestos naudojant taisyklę FT4 (pavyzdyje (4.15)), išskyrus paskutinę FP (4.18), gali būti gautos netaikant FT4 taisyklės.

Funkcinė priklausomybė

Z W

UŽ, LA UŽ, VI, DĖ yra išvesta iš

W“

Z W’ W

UŽ, LA LA, UŽ, VI, DĖ .

W“

Jeigu Z W išvedime toliau būtų nenaudojama, tai ją reiktų iš sekos S’ išmesti. Kadangi taip nėra, ją turime palikti, o palikus galimos dvi situacijos: arba jos atžvilgiu bus taikoma taisyklė FT4, arba taisyklė FT7. Jeigu atžvilgiu Z W pritaikyta FT4, tai būtų gauta, pavyzdžiui, Z W“; W“ W, bet Z W“ gali būti išvesta iš Z W’,W iš karto. Taip, kad Z W būtų galima iš sekos S’ pašalinti. Mūsų pavyzdyje tokios situacijos nėra. Turime kitą situaciją, kurioje Z W panaudojama kartu su funkcine priklausomybe (4.16)

U V

DĖ KA

taisykle FT7 išvedant funkcinę priklausomybę (4.17)

Z W V

UŽ,LA UŽ,VI,DĖ,KA .

U

Vietoje šios FP išveskime naują, pasinaudojant (4.14) ir (4.16):

Z W’ W V

UŽ,LA LA,UŽ,VI,DĖ,KA.

U

Tada seką S’ pertvarkysime į galutinę seką S“:

UŽ,LA UŽ,LA (FT1); (4.19)

UŽ,LA VI (duota); (4.20)

UŽ,LA UŽ,LA,VI (FT7); (4.21)

LA,VI DĖ (duota); (4.22)

UŽ,LA UŽ,LA,VI,DĖ (FT7); (4.23)

DĖ KA (duota); (4.24)

UŽ,LA UŽ,LA,VI,DĖ,KA (FT7); (4.25)

UŽ,LA UŽ,KA (FT4). (4.26)

Paskutinioji (4.26) priklausomybė X Y išvesta taisykle FT4 po to, kai funkci¬nės priklausomybės (4.25) dešinioji pusė buvo tiek sukaupta, kad pilnai padengtų Y.

Šiuo pavyzdžiu pailiustravome pilną atitikimą tarp dviejų priklausomybės X Y išvedimo algoritmų – tarp B-aksiomų sekos konstravimo ir OAI grafo sudarymo šiai priklausomybei. Kadangi B-aksiomų sistema yra pilnoji tai ir OAI grafą galima sudaryti bent kuriai funkcinei priklausomybei iš F+.

Paimkime atvejį, kai yra sudaryti du OAI grafai. Tarkime, kad H grafas sudarytas FP X Y F+ ir grafas L funkcinei priklausomybei Y Z F+. Suprantama, X Z F+. Tada norint sudaryti OAI grafą FP X Z, grafus H ir L galima suklijuoti tokiu būdu. Grafo H viršūnes su Y-žymėmis sutapatiname su grafo L viršūnėmis, turinčiomis atitinkamas Y-žymes. Toks grafas dengs ir X Y ir X Z. Be to, jeigu H sudarytas funkcinei priklausomybei X Y, o V W U(H), tai F X V. Aišku, jeigu V W panaudotas sudarant grafą H, tai jame buvo numatytos viršūnės visiems V – atributams. Todėl V X+ ir X V F+. Jeigu V W U(H), tai egzistuoja OAI grafas funkcinei priklausomybei X V, kuriame FP V W yra nepanaudota..4.2. Užduotų funkcinių priklausomybių ir atributų aibių ekvivalentiškumas

Dvi UFP aibės F ir G yra ekvivalentiškos, jeigu F+ = G+. Aibių F ir G ekvivalentiškumą žymėsime F G.

Kad nustatant F G nereiktų skaičiuoti F+ ir G+, panaudosime paprastesnį būdą, bet prieš tai parodysime, kad:

(F+)+ = F+; (4.27)

ir iš F G seka

F+ G+. (4.28)

Pirmasis teiginys trivialus. Jeigu F X Y, tai FP X Y bus išvedama iš F panaudojus kurią nors pilnąją išvedimo taisyklių sistemą ir priklausys F+. Jeigu egzistuotų FP X Y, priklausanti (F+)+ ir nepriklausanti F+ , tai tada panaudota sistema būtų nepilna.

Antrajam teiginiui paneigti reikėtų rasti egzistuojančią tokią FP X Y, kad F X Y , bet nepriklausančią G+. Bet pagal (4.28) teiginio prielaidą F G ir G X Y, nes papildomos funkcinės priklausomybės iš G F negali sutrukdyti išvesti X Y. Todėl X Y G+.

Paimkime dvi funkcinių priklausomybių aibes F ir G. Jeigu X Y G ir kiekvieną X Y galima išvesti iš F, tai apibendrinant šį faktą naudosime pažymėjimą F G.

Dvi aibės F ir G yra ekvivalentinės tada ir tik tada, kai F G ir G F.

Padarykime prielaidą, kad FG ir GF. Įrodysime, kad tada F G. Sakykime, F G, o X Y G. Kadangi F F+ ir F+ apima kiekvieną X Y G, tai G F+ ir G+ (F+)+ = F+ (žiūr. 4.27 ir 4.28 išraiškas). Sakykime, kad be F G dar G F. Tada analogiškai F+ G+. Iš G+ F+ ir F+ G+ gaunam, kad F+ = G+ arba F G.

Dabar įrodykime, kad F G tik tada, kai F G ir G F. Tam padarykime prielaidą, kad F G, ir pamatysime, kad būtinai F G. Iš tiesų, jeigu F G, tai pagal apibrėžimą F+ = G+. Jei X Y G+ tai F X Y. Jeigu X Y G, tai X Y G+ ir tada vėl F X Y arba F G. Kadangi pagal apibrėžimą F ir G ekvivalentiškumas yra simetrinis, tai G F. Tokiu būdu negalima situacija, kad ekvivalentiškumui F G prieštarautų du kartus paimti teiginiai G F ir F G. Paimkime pavyzdį (žr. 4.4 pav.).

4.4 pav.

Kad nustatyti F G, pakanka pastebėti, kad 4-oji FP išvedama iš 1-sios ir 2-sios, 5-oji išvedama iš 1-sios ir 3-sios, 6-oji išvedama iš 2-sios ir 3-sios, o visos trys pirmosios išvedamos iš 4-sios, 5-sios ir 6-sios.

UFP aibė F yra neperteklinė, jeigu ji neturi nuosavo poaibio F’ tokio, kad F F’. Aibė F yra neperteklinė funkcinių priklausomybių aibės G dengtis, jeigu F G ir F – neperteklinė. Ankstesniame pavyzdyje F dengia G ir yra neperteklinė. Bet kokia funkcinė priklausomybė iš G yra perteklinė F atžvilgiu.

Analogiškai funkcinėms priklausomybėms apibrėšime atributų ekvivalentiškumą. Dvi atributų aibės X ir Y ekvivalentiškos FP aibės F atžvilgiu, jeigu

F X Y ir

F Y X.

Aibių X ir Y ekvivalentiškumą žymėsime X Y. Ankstesniame pavyzdyje F atžvilgiu

UŽ,LA LA,DĖ .

Panagrinėsime kitą svarbų teiginį. Paimkime dvi ekvivalentiškas ir neperteklines aibes F ir F’ (žr. 4.5 pav.).

4.5 pav.

Jeigu X Y F , tada aibėje F’ egzistuoja funkcinė priklausomybė V W ir X V atžvilgiu F (ir F’ atžvilgiu taip pat). Įrodymui sudarysime OAI grafą H’ funkcinei priklausomybei X Y F panaudojant F’ . Pasirinkime

X Y

VI, LA UŽ F

ir sudarykime OAI grafą H’ panaudojant F’ (žr. 4.6 pav.).

4.6 pav.

Šiame grafe U(H’) = {VI, LA DĖ; LA, DĖ UŽ}.

Kiekviena FP iš U(H’) turi OAI grafą aibėje F. Aibėje U(H’) turi egzistuoti funkcinė priklausomybė V W, kuri turi OAI grafą H aibėje F , ir šiame grafe panaudojama X Y. Paimkime iš U(H’) funkcinę priklausomybę

V W

LA, DĖ UŽ

ir sudarykime jai OAI grafą H aibėje F (žr. 4.7 pav.).

4.7 pav.

Šiame grafe būtinai bus naudojama

X Y

VI,LA UŽ .

Kodėl? Jeigu aibėje U(H’) nebūtų tokios V W, tai tada funkcinei priklausomybei X Y egzistuotų OAI grafas aibėje F {X Y} ir tokiu būdu X Y būtų perteklinė aibėje F. Kadangi aibėje U(H) yra funkcinė priklausomybė X Y, tai F V X. Bet aibėje U(H’) buvo V W. Taigi, F’ X V ir todėl F X V .4.3. Tiesioginės funkcinės priklausomybės

Neperteklinėje funkcinių priklausomybių aibėje F išskirsime FP poaibį EF(X), X R, kurių kairiosios pusės yra ekvivalentiškos atributams X. Tada

EF = {EF(X) | X R , EF(X) }

Jeigu yra užduotos dvi neperteklinės ekvivalentinės aibės F ir G, tai pasinaudoję ankstesniame skyrelyje pateiktu įrodymu, galime tvirtinti, kad EF turi tiek pat aibių, kiek jų turi EG. Naudojant schemoje DĖ_GR užduotas aibes F ir F’ atributams X R, pavyzdžiui, X = VI,LA galima nurodyti tiksliai po vieną aibę EF(VI,LA) ir EF'(VI,LA):

EF(VI, LA) = {VI,LA UŽ; LA, DĖ VI; UŽ, LA DĖ} ,

EF'(VI, LA) = {VI,LA DĖ; LA, DĖ UŽ; LA, DĖ VI; UŽ, LADĖ}

Tiksliai po vieną aibę EF(X) ir EF'(X) būtų galima nurodyti ir kitiems X R, jeigu tik egzistuoja EF(X) (taip pat ir EF'(X) ). Funkcinių priklausomybių EF(X) kairiųjų pusių aibę toliau žymėsime eF(X).

Dabar pateiksime tiesioginės FP X Y apibrėžimą. Užduotai FP aibei G atributų poaibis Y R yra tiesioginėje funkcinėje priklausomybėje nuo X R, jeigu funkcinei priklausomybei X Y egzistuoja atžvilgiu G bent viena neperteklinė dengtis F ir joje OAI grafas H tokie, kad U(H) EF(X) =

Prie šių sąlygų, turint neperteklinę dengtį F , šios dengties FP X Y galima išvesti iš funkcinių priklausomybių, kurios priklauso F EF(X). Tada ir egzistuoja X Y. Gali būti atvejų, kai EF(X) = . Be to, iš X Y seka X Y. Paimkime pavyzdį (žr. 4.8 pav.

4.8 pav.

Čia F yra neperteklinė aibė ir dengia aibę G. Funkcinei priklausomybei MO, ME DS OAI grafas parodytas 4.9 pav.

Šiame grafe U(H) = {MO KA; KA,ME DS}, o EF(X) = . Kadangi U(H) EF(X) = , tai MO,ME DS. Galima parodyti, kad FP X Y pakanka nustatyti atžvilgiu G bent vieną neperteklinę dengtį F , tenkinančią U(H) EF(X) = , ir tada X Y. Sakykime, kad F’ – bet kokia kita neperteklinė G dengtis, ekvivalentinė aibei F (žr. 4.10 pav.).

Sudarykime aibėje F OAI grafą H funkcinei priklausomybei X Y (žr. 4.11 pav.).

4.9 pav.

4.10 pav.

4.11 pav.

Šiame grafe U(H) = {MO KP; KP KK; ME,KK DS}. Čia X Y, kadangi sudarant H nepanaudotos funkcinės priklausomybės iš EF(X), kai X = MO,ME ir Y = DS. Kiekvienai W Z U(H) sudarykime aibėje F’ OAI grafus (žr. 4.12 pav.).

4.12 pav.

Sujunkime juos į vieną grafą H’ funkcinei priklausomybei X Y (žr. 4.13 pav.).

4.13 pav.

Grafo H’ fragmentas dengia W Z U(H). Tada F’ X W arba F X W, nes F’ F. Grafe H’ nebus panaudotų funkcinių priklausomybių iš EF'(X), kadangi jos nebuvo naudojamos sudarant OAI grafus kiekvienai W Z U (H). Sakykime, kad grafe H išliko U V EF'(X), nes viename iš pavienių grafų ji buvo panaudota. Jeigu W Z yra tokia, kad sudarant grafą H’ buvo panaudota U V EF'(X), tai F’ W U arba F W U. Kadangi U X, tai F W X ir X W, o W Z EF'(X). Tačiau X Y ir sudarant grafą H funkcinių priklausomybių iš EF'(X) mes nenaudojome. Todėl prielaida, kad grafe H’ , sudarytame aibėje F’ funkcinei priklausomybei X Y gali būti panaudota U V EF'(X), yra neteisinga. Padarome išvadą, kad X Y užduotoje aibėje G yra teisinga tik tada, kai kiekvienoje G dengtyje F U(H) EF(X) = .4.4. Minimalios funkcinių priklausomybių dengtys

Paimkime penkias neperteklines ekvivalentines UFP aibes (žr. 4.14 pav). Visos aibės F1÷F5 yra neperteklinės. Kitų neperteklinių šiame pavyzdyje nėra. Aibės F1 ir F2 yra minimalios, kadangi jos turi po tris funkcines priklausomybes ir kitų mažesnių UFP aibių nėra.

Sakykime, kad F neperteklinė ir bet kokia (minimali arba neminimali) UFP aibė, o EF(X) . Paimkime bet kokios FP kairiąją pusę X ir atributų poaibį Y R tokius, kad X Y. Tada egzistuoja toks Z eF(X), kad Y Z. Paimkime kitą pavyzdį (žr. 4.15 pav).

4.14 pav.

4.15 pav.

4.16 pav.

Čia LA,DĖ,TM VI,LA,TM. Paimkime Z eF(X), kuriam OAI grafas atžvilgiu Y Z būtų minimalus, t.y. grafas turėtų minimalų viršūnių skaičių. Mūsų pavyzdyje užsiduokime Z = UŽ,LA,TM ir Y = VI,LA,TM .Sudarykime funkcinei priklausomybei Y Z OAI grafą (žr. 4.16 pav.). Pažymėkime šį grafą H (į jį punktyrais pažymėti elementai neįeina). Sakykime, kad aibėje U(H) yra U V EF'(X). Tada H dengtų FP Y U ir viršūnes, skirtas atributams iš V, būtų galima pašalinti. Tegul grafas su pašalintomis viršūnėmis bus H’, o H’, kaip ir H, dengs Y U. Ir čia gauname prieštarą, kad funkcinei priklausomybei Y Z grafas H buvo minimalus. Reiškia, kad Z buvo parinktas neteisingai ir vietoje jo reikėjo pasirinkti U. Tokiu būdu aibėje U(H) negali būti funkcinių priklausomybių EF(X). Čia seka išvada, kad Y Z. Jeigu Y eF(X), tai užsidavus Z = Y iš karto gautume, kad Y Z, nes visada Y Y. Nagrinėtame pavyzdyje paimkime Y’ = UŽ,LA,TM. Kaip ir anksčiau X Y’ , o Y’ eF(X). Naujai sudarytas grafas H funkcinei priklausomybei Y’ Z’ bus minimalus, kai Y’ = Z’ (žr. 4.17 pav.). Sudarant jį funkcinės priklausomybės U V EF'(X) nenaudojamos ir Y’ Z’.

4.17 pav.

Dabar įrodysime kitą teiginį, kuris jau susijęs su minimaliomis UFP aibėmis. Paimkime neperteklinę UFP aibę F (žr. 4.18 pav.).

4.18 pav.

Jeigu F yra minimali FP aibė, tai jokioje EF'(X) neegzistuoja skirtingų Y U ir Z V iš F tokių, kad Y Z.

Padarykime prielaidą, kad F yra minimali, Y eF(X) , Y Z, bet Y U ir Z V yra skirtingos. Parodysime, kad tada Y U (1-ąją FP) ir Z V (2-ąją FP) galima sujungti į vieną Z U,V (3-ąją FP) ir iš F gauti sumažintą jai ekvivalentišką aibę F’. Sudarykime aibėje F funkcinei priklausomybei Y Z OAI grafą H, kuriame nenau¬dojamos funkcinės priklausomybės iš EF(X) (žr. 4.19 pav.). Čia:

U(H) = DK DP ir U (H) EF'(X) = ir Y Z .

Bet sudarytas H funkcinei priklausomybei Y Z yra OAI grafas ir aibėje F’ (žr. 4.20 pav.), o U(H) = DK DP ir U (H) EF'(X) = ir Y Z .

Abiem atvejais grafe H nenaudojamos nei Y U, nei Z V. Kadangi H dengia Y Z, tai F Y Z. Bet Z U,V F’ , todėl F’ Y U. Dėl tokių pat priežasčių F’ Z V. Visos kitos funkcinės priklausomybės iš F yra ir aibėje F’ . Todėl F’ F. Ir atvirkščiai, iš F seka visos funkcinės priklausomybės iš F’ . Tam pakanka pastebėti, kad F = Z U,V. Iš tiesų, Y Z, nes Y, Z EF(X) , o Y U ir Z V F . Todėl F = F’ ir F F’. Priklausomybių Y U ir Z V apjungimas reiškia, kad F nebuvo minimali, ir tai prieštarauja padarytai prielaidai. Jeigu naujoje aibėje F’ vėl aptiktume skirtingas Y U ir Z V iš EF'(X) tokias, kad Y Z, tai jas vėl apjungtume ir gautume naują, dar mažesnę dengtį, ekvivalentinę ankstesniajai (ir pradinei F). Minimalios aibės F’ funkcinių priklausomybių iš EF'(X) tarpe neliks skirtingų Y U ir Z V tokių, kad Y Z. Ši išvada galioja visiems X R, EF(X) .

4.19 pav.

4.20 pav.

Apibendrinkime šiuo momentu gautus rezultatus. Tiriant UFP aibę pakanka nustatyti bent vieną neperteklinę dengtį F, kad įsitikinti tiesiogine FP X Y (įrodėme 4.3 skyrelyje), jeigu ji egzistuoja. Paėmus neperteklinėje dengtyje F du atributų poaibius X ir Y tokius, kad X Y visada egzistuos Z eF(X) toks, kad Y Z (įrodėme šio skyrelio pradžioje). Tai sudaro prielaidas minimizuoti F ir tirti minimalių dengčių savybes.

Jeigu dvi Y U ir Z V yra s.kirtingos ir Y Z, tai tokias funkcines priklausomybes galima apjungti į vieną ir tokiu būdu minimizuoti neperteklinę dengtį. Minimalioje dengtyje F ekvivalentiškumo klasių skaičius |EF| išliks toks pat kaip ir pradinėje neperteklinėje dengtyje. Iš anksčiau (skyriuje 4.3) žinome, kad dengtyje F prie užduoto X funkcinių priklausomybių aibei EF(X) atitinka tiksliai viena funkcinių priklausomybių aibė EG(X) kitoje ekvivalentinėje dengtyje G. Todėl |EF|= |EG| . Padarytų išvadų pagrindu parodysime dar stipresnį faktą, kad ekvivalentiškumo klasėse EF(X) ir EG(X) funkcinių priklausomybių skaičius sutampa, t. y. |EF(X)| = |EG(X)| .

Paimkime dvi minimalias ekvivalentines dengtis F ir G su nurodytomis funkcinių priklausomybių ekvivalentiškumo klasėmis (4.21 pav.). Kiekvienai ekvivalentiškumo klasei, pavyzdžiui, EF(X2), atitinka viena ekvivalentiškumo klasė EG(X2). Bet kurioje poroje atributų poaibis iš eF(X2) ir atributų poaibis iš eG(X2) tarpusavyje yra ekvivalentiški.

4.21 pav.

Pavyzdžiui, 5 – osios funkcinės priklausomybės

Y U

VI,LA DP

ir 9 – osios funkcinės priklausomybės

Z V

LA,DK UŽ

kairiosios pusės yra ekvivalentiškos:

Y Z

VI,LA LA,DK .

Ekvivalentiškumo klasėse EF(X) ir EG(X) funkcinių priklausomybių skaičius visada sutampa. Mūsų pavyzdyje:

|EF(X1)| = |EG(X1)| = 2 ,

|EF(X2)| = |EG(X2)| = 3 ,

|EF(X3)| = |EG(X3)| = 1 .

Paimkime F ir G ir parodykime, kad tikrai |EF(X)| = |EG(X)|. Sakykime, kad X = X2 , ir palyginkime funkcines priklausomybes iš EF(X2) ir EG(X2).

EF(X2): EG(X2):

Y1 U1 Z1 V1

UŽ,LA DK ; LA,DK UŽ ;

Y2 U2 Z2 V2

LA,DP VI,UŽ ; VI,LA DK ;

Y3 U3 Z3 V3

VI,LA DP . UŽ,LA VI .

Aibėje EF(X2) visos kairiosios pusės turi būti skirtingos. Priešingu atveju atatinkamas funkcines priklausomybes būtų galima apjungti, o tai prieštarautų prielaidai, kad F yra minimali. Dėl tos pačios priežasties aibėje EG(X2) visos kairiosios pusės taip pat skirtingos. Aibėje eG(X2) bent vienas elementas turi skirtis nuo visų elementų iš eF(X2). Kitu atveju |EF(X2)| = |EG(X2)| ir nieko daugiau įrodynėti netektų. Sakykime, kad Z1 nesutampa su jokiu ei eF(X2). Tada pasinaudoję ankstesniu įrodymu galime teigti, kad aibėje eF(X2) turi egzistuoti Yk toks, kad Z1 Yk . Mūsų pavyzdyje(žr. 4.22 pav.):

Z1 Y2

LA,DK LA,DP

4.22 pav.

Z1 V1

Funkcinėje priklausomybėje LA,DK UŽ aibę Z1 pakeiskime į Y2 ir gausime kitą

Y2 V1

teisingą priklausomybę LA,DP UŽ . Aibę EG(X2) papildysime priklausomybe

Y2 V1

LA,DP UŽ .

Kadangi Z1 Y2, tai Z1 V1 pašalinus iš modifikuotos aibės G’ išlieka lygybė (G’)+ =

G+. Gautoji EG'(X2) atrodys taip:

Y2 V1

LA,DP UŽ ;

Z2 V2

VI,LA DK ;

Z3 V3

UŽ,LA VI .

Jeigu naujoje eG'(X2) atributų poaibis Y2 sutaptų su kuriuo nors Zj , tai funkcines priklausomybes Y2 V1 ir Zj Vj apjungtume į vieną Y2 V1,Vj . Bet gautas rezultatas prieštarautų, kad G buvo minimali. Tokiu būdu Y2 nesutaps su jokiu Zj. Aibės G modifikavimą galima tęsti iki galo, kol visi elementai modifikuotoje aibėje eG'(X2) sutaps su atatinkamais elementais iš eF(X2). Jeigu neaptiksime prieštarų, kad G nebuvo minimali, tai modifikuotoje EG'(X2) funkcinių priklausomybių skaičius nepasikeis ir |EF(X2)| = |EG(X2)|. Pernumeruokime iš naujo minimalią aibę EG'(X2) taip, kad Zj taptų Yj .

EF(X2): EG'(X2):

Y1 U1 Z1 V1

UŽ,LA DK ; UŽ,LA VI ;

Y2 U2 Z2 V2

LA,DP VI,UŽ ; LA,DK UŽ ;

Y3 U3 Z3 V3

VI,LA DP . VI,LA DK ..

4.23 pav.

Panašiais samprotavimais remiantis galima teigti, kad iš Yj Zj seka Zj Yj . Paskutinės išvados pagrindu, turėdami dvi minimalias F ir G bei nustatytas ekvivalentiškumo klases EF(X) ir EG(X), funkcinių priklausomybių Y U EF(X) ir Z V EG(X), tokių, kad Y Z ir Z Y, kairiąsias puses galima sukeisti vietomis, nepažeidžiant tokiu veiksmu F ir G ekvivalentiškumo ir minimalumo. Pavyzdyje 4-osios funkcinės priklausomybės iš F kairiosios pusės LA,DP vietoje galima įstatyti 9-osios FP iš G kairiąją pusę LA,DK ir gauti naują minialią F’ (žiūr. 4.21 pav.) su nauja funkcine priklausomybe 4′.

Toliau panagrinėsime pavyzdį (žr. 4.23 pav.),kuris taip pat iliustruoja minimalios aibės F modifikavimo galimybę. Iš aibių F ir G paimkime 4-ąją ir 8-ąją funkcines priklausomybes:

Y U

FP4 = TECHN_P,DATA,LAIKAS TALONAS,NUSIKALT ;

Z V

FP8 = AUTOMOB,DATA,LAIKAS TALONAS,NUSIKALT .

Šiame pavyzdyje Y Z , todėl 4-oje FP vietoj Y galima įstatyti Z ir sudaryti FP8′, gaunant tokią F’, kad F+ = (F’)+.(žr. 4.23 pav.).4.5. Redukuotosios ir optimaliosios dengtys

Pradėkime nuo pavyzdžio, pateikto 4.24 pav.

4.24 pav.

Šiame pavyzdyje visos funkcinių priklausomybių aibės G’ , G , F’ , F yra ekvivalentinės. Aibėje G 4-oji FP panaudota vietoje 1- osios iš G’ . 4-oji FP yra redukuota kairiąja puse atžvilgiu 1-osios, kurios kairiojoje pusėje buvo pašalintas FA atributas. 6 – oji ir 7- oji priklausomybės yra redukuotos kairiosiomis pusėmis atatinkamai 2-osios ir 3-osios priklausomybių atžvilgiu. Po redukcijos kairiosiomis pusėmis G turi išlikti ekvivalentiška G’ . 5-osios funkcinės priklausomybės iš G dešiniojoje pusėje pašalinę atributą FA gavome 8-ąją. Ji redukuota dešiniąja puse atžvilgiu 5-osios. Analogišku būdu 9-oji ir 10-oji funkcinės priklausomybės yra redukuotos dešiniosiomis pusėmis atatinkamai 6-osios ir 7-osios atžvilgiu. Gauta F’ po redukcijos turi išlikti ekvivalentiška aibei G, o tuo pačiu ir aibei G’ . Pastebėsime, kad 8-ojoje FP MO , gautoje po redukcijos dešiniąja puse, dešinioji pusė yra tuščia aibė. Pati FP yra perteklinė ir ją atmetus gauname vėl ekvivalentišką aibę F, kurią toliau redukuoti nėra galimybės. Pastebėsime taip pat, kad 5-oji FP aibėje G yra perteklinė, nes G {FP5} G’, ir ją būtų galima pašalinti iš G. Tačiau aibėje G’ , kol ši nebuvo redukuota iš kairės, 5-ąją FP MO FA pašalinti negalima. Jeigu ją pašalintumėme, tai G’ {FP5} nebus ekvivalentiška aibei G’ , nes šią priklausomybę MO FA iš kitų priklausomybių aibėje G’ neišvesime. Pateiksime bendrųjų atvejų apibrėžimus. Atributas A yra pašalinis FP X Y kairiojoje pusėje,

jeigu X = A,X’ ; X X’ ir (F {X Y}) { X’ Y } F .

Atributas B bus pašalinis priklausomybės X Y dešiniojoje pusėje, jeigu

Y = B,Y’ ; Y Y’ ir (F { X Y}) {X Y’} F .

Funkcinė priklausomybė X Y bus redukuota kairiąja puse, jeigu ji neturi pašalinių atributų kairiojoje pusėje. Kairiąja puse redukuotą FP dar vadiname pilnąja FP. Funkcinių priklausomybių aibę F, kuri susideda iš priklausomybių, redukuotų kairiosiomis pusėmis, vadinsime kairiosiomis pusėmis redukuota aibe.

Funkcinė priklausomybė X Y bus redukuota dešiniąja puse, jeigu ji neturi pašalinių atributų dešiniojoje pusėje. FP aibę F, kuri susideda iš priklausomybių, redukuotų dešiniosiomis pusėmis, vadinsime dešiniosiomis pusėmis redukuota aibe. Funkcinių priklausomybių aibę F, redukuotą kairiosiomis ar dešiniosiomis pusėmis ir neturinčią FP X , vadinsime redukuotąja aibe. Mūsų pavyzdyje aibė G yra redukuota kairiosiomis pusėmis, aibė F’ – redukuota kairiosiomis ir dešiniosiomis pusėmis, o F redukuotąja.

Įrodysime, kad aibę G’ redukavus kairiosiomis pusėmis, o vėliau gautą aibę G redukavus dešiniosiomis pusėmis, gautą aibę F’ toliau redukuoti kairiosiomis pusėmis nėra tikslo, nes nebegalima ką nors pakeisti. Paimkime aibėje F’ priklausomybę X Y ; Y :

X Y

MO,TE AP

A X’

Sakykime, kad atributas A aibėje X yra pašalinis ir X’ = X A . Padarius šią prielaidą F’ {X Y} {X’ Y} F’ ir F’ X’ Y . Sudarykime aibėje F’ funkcinei priklausomybei X’ Y OAI grafą H (žr.4.25 pav.). Čia U(H) = { TE AP. } .

4.25 pav.

Jeigu X Y U(H) , tai X Y yra perteklinė aibėje F’ ir tuo pačiu X Y yra neredukuota dešniąja puse, nes Y . Bet mes nagrinėjame F’ redukuota dešniosiomis pusėmis. Taigi, X Y negali būti perteklinė. Bet tada ji turėtų būti naudojama grafe H, o tada F’ X’ X . Kadangi F’ G , seka G X’ X . Suprantama X’ X galėtų būti išvesta aibėje G nenaudojant X’ Y,Z . Išeitų, kad

G {X Y,Z} {X’ Y,Z} G

arba, kitais žodžiais tariant, kad G nėra redukuota kairiosionis pusėmis. Bet tai prieštarauja pradinėms sąlygoms ir F’ , kuri yra redukuota dešniosiomis pusėmis, redukuoti dar kartą kairiosionis pusėmis neteks. Galiausiai aibėje F’ pašalinus funkcines priklausomybes X , gausime redukuotą aibę F.

Apibendrinsime gautus tarpinius rezultatus. Redukuota dengtis F bus visada neperteklinė, nes joje yra pašalintos visos X ; X . R ir perteklinių FP nelieka. Atvirkščias teiginys bus neteisingas, nes neperteklinės dengties funkcinės priklausomybės gali būti neredukuotos kairiosiomis arba dešniosiomis pusėmis. Jeigu F yra FP aibė, nepertekilnė ir redukuota kairiosiomis pusėmis, tai po redukcijos dešniosiomis pusėmis, priklausomybės X negausime, nes tada tokią X būtų galima pašalinti ir FP skaičius aibėje F sumažėtų , o tai prieštarautų jos nepertekliškumui. Iš anksčiau turėjome, kad neperteklinė F gali būti neminimali ir teigti, kad redukuota aibė yra minimali būtų neteisinga.

Sugrįškime prie minimalių FP aibių ir paimkime dar vieną pavyzdį, kuriame UFP aibės F1 degtys yra G ir F2 (žr. 4.26 pav.). Aibės F1 ir G yra redukuotos. Aibė F2 nėra redukuota, nors yra minimali. Redukavus FP3′ kairiąja puse gausime 3-ąją FP, o redukavus FP6′ dešniąja puse gausime FP6. Po redukcijos gausime naują minimaliąją ir redukuotąją aibę F3.

4.26 pav.

Minimalią dengtį F2 redukavus kairiosiomis pusėmis, FP skaičių sumažinti negalima. Jeigu funkcinės priklausomybės X Y, Y iš ekvivalentiškumo klasės EF(X) kairiojoje pusėje X = X’,A atributą A pašalinsime, tai naujoje minimalioje aibėje F, F’ F , naudosime vietoje X Y naują X’ Y. Jeigu gautoje F’ nustatytume tokią situaciją, kad Z’ V ir Z’ eF(X), tai priklausomybes X’ Y ir Z’ V galėtume apjungti, bet tai prieštarautų F minimalumui. Todėl minimalią dengtį redukuojant kairiosiomis pusėmis, FP skaičius pasikeisti negali. FP skaičius pasikeisti negali minimalią dengtį redukuojant dešiniosiomis pusėmis. Jeigu FP X Y ; Y dešiniojoje pusėje Y =Y’,B perteklinį atributą B atmestume, tai naujosios aibės F’, F’ F, priklausomybėje X Y visada Y’ , nes kitu atveju FP X Y’ aibėje F’ reikėtų atmesti, o tai vėl prieštarautų F minimalumui.

Pateiksime naują apibrėžimą. Aibė F yra optimali, jeigu neegzistuoja kita ekvivalentinė aibė su mažesniu panaudotų atributinių vardų skaičiumi.

Po redukcijos aibėje F3 panaudotų atributų vardų skaičius tapo mažesnis negu aibėje F1, tačiau aibė F3 nėra optimali F1 dengtis, nes egzistuoja jai ekvivalentinė G, o joje panaudotų atributų vardų skaičius yra dviem mažesnis. Aibėje F3 panaudotų atributinių vardų skaičių būtų dar galima sumažinti tokiu būdu. Paimkime iš G priklausomybę FP10 ir iš F3 priklausomybę FP5, t.y.

Z V

FP10 = VI,LA DK ;

Y U

FP5 = VI,LA DS,DN .

Kadagi Y Z, tai FP5 aibėje F3 galima pakeisti nauja priklausomybe FP5′

Z U V

VI,LA DS,DN,DK .

Naujoje aibėje, sakykime F4 (žr. 4.27 pav.) redukavę FP5′ dešiniąja puse gausime pakaitalą FP5“ = VI,LA DK.

Sakykime, kad paskutinė gauta minimali dengtis yra F (žr. 4.27 pav.). Ši dengtis, lyginant ją su pradine užsiduota minimalia ir redukuota aibe F1 (žr. 4.26 pav.), turi mažesnį bendrą atributų skaičių. Palyginkime ją su jai ekvivalentine dengtimi G.

4.27 pav.

Aibė F nėra optimali, nes egzistuoja dengtis G su mažesniu panaudotų atributinių vardų skaičiumi. Aibę F sudarėme minimizavimo ir redukcijos būdu, tačiau jos optimalumo nepsiekėme. Optimalių dengčių sudarymo taisyklės nagrinėjamos sekančiame skyriuje.

5SUDĖTINIŲ FUNKCINIŲ PRIKLAUSOMYBIŲ DENGTYS

5.1. Sudėtinės funkcinės priklausomybės

Šiame skyrelyje parodysime, kaip užsiduotųjų funkcinių priklausomybių (UFP) aibę F galima pateikti kitokioje, labiau kompaktikoje formoje.

5.1 pav. Struktūrinių tipų grafinis vaizdavimas

Paimkime atributų poaibius R1, R2, ., Rk, R S. Čia: S – universalioji schema. Sudėtinė funkcinė priklausomybė (SFP)

(R1; R2; .; Rk) R

yra teisinga, jeigu kiekvienas santykis s (S) tenkina funkcines priklausomybes

Ri Rj,

Ri R; 1 i, j k.

Sudėtinėje funkcinėje priklausomybėje (R1, R2, ., Rk) R sąrašas (R1, R2, ., Rk) yra šios sudėtinės FP kairioji pusė, Ri – kairioji aibė, R – dešinioji aibė. Dalinis SFP atvejis yra sudėtinė funkcinė priklausomybė, kurioje R = . Tokią SFP nurodysime tik sąrašu (R1, R2, ., Rk). Sudėtinės funkcinės priklausomybės apibendrina užsiduotą funkcinių priklausomybių aibę, atributų ir šių priklausomybių grupavimą į ekvivalentiškumo klases (struktūrinius tipus). Struktūriniams tipams vaizduoti naudosime grafinę notaciją (˛r. 5.1 pav.). Struktūrinių tipų komponentų pažymėjimai pateikti 5.2 pav. Kiekviena SFP turi savo normalizuotą pavidalą, charakterizuoja dalykinės srities tam tikrą informacijos vienetą ir sudaro savarankišką duomenų struktūrą.

5.2 pav. Struktūrinių tipų komponentų grafinis žymėjimas

Sakykime, kad Q – SFP aibė, o F – aibė, susidedanti iš funkcinių priklausomybių. Aibė Q yra ekvivalentinė aibei F, žymėsime Q F, jeigu kiekvienas santykis s(S), tenkindamas F, tenkina Q; ir atvirkščiai – tenkindamas Q, tenkina ir F. Aibė Q yra F-dengtis, jeigu Q F.

5.3 pav. Užsiduotos FP aibės F’ ir jos neperteklinės dengties F pavyzdys

Sakykime, turime UFP aibę F’ ir jos neperteklinę dengtį F, sudarytą iš funkcinių priklausomybių. Kaip galima gauti aibės F’ dengtį Q, sudarytą iš SFP? Tam panaudosime SFP sudarymo taisyklę SFPT.

Sudėtinių funkcinių priklausomybių sudarymo taisyklė SFPT. Funkcinės priklauso¬mybės iš F sugrupuojamos į ekvivalentiškumo klases EF(X), X S. Kiekvienai EF(X) aibėje Q skiriama viena SFP, kurioje kiekvienai kairiajai pusei iš eF(X) numatoma viena kairioji aibė; dešiniosios pusės iš EF(X) apjungiamos į dešiniąją aibę.

Aišku, kad dengtis Q turės |EF| sudėtinių funkcinių priklausomybių. Paimkime dvi ekvivalentines aibes F’ ir F (žr. 5.3 pav.). Čia aibė dengtis Q turės |EF| sudėtinių funkcinių priklausomybių. Taisykle SFPT sudaryta sudėtinių funkcinių priklausomybių aibė Q, kuri yra ekvivalentinė FP aibei F’ (ir jos dengtis), yra:

Q = {(DK; DP) DK,DP;

(UŽ,LA; LA,DK; LA,DP; VI,LA) DK,UŽ,VI,DP;

Ri Ri’ R

(UŽ,LA,TM) PP}.

SFP aibė Q yra užsiduotų FP aibės F’ dengtis. Ji yra.sudaryta panaudojant F. Parodysime, kad taisyklė SFT1 yra korektiška, ir Q F’. Kadangi F F’, tai įrodymui, kad Q F’ pakanka nustatyti, kad Q F. Paimkime bet kokį X, X S ir sudėtinę funkcinę priklausomybę (R1; R2; .; Rk ) R tokią, kad Ri eF(X); 1 i k. Aibės F funkcinių priklausomybių Zi Yi, Zi eF(X) kairiosios pusės Zi tiksliai vieną kartą atkartojamos SFP (R1; R2; .; Rk) R kuria nors kairiąja aibe. Sakykime, kad Zi atkartoja Ri. Bet:

Ri R (seka iš SFP apibrėžimo);

Yi R (seka iš taisyklės SFT1);

ir tada Ri Yi (FP projektyvumas).

Kadangi Ri =Zi, gauname, kad kiekviena Zi Yi iš EF(X) gali būti išvesta iš SFP, sudarytos pagal taisyklę SFT1. Apibendrinę šią išvadą visiems Zi eF(X) ir visiems X S; EF(X) gauname, kad visos FP iš F išvedamos iš SFP aibės Q

Atvirkščias teiginys, kad visos SFP iš Q išvedamos iš F būtų neteisingas tik tuo atveju, jeigu bet koks santykis s(S), tenkinantis funkcines priklausomybes Zj Yi iš EF(X); X S; EF(X) netenkintų sudėtinių funkcinių priklausomybių (R1; R2; .; Rk) R, iš Q. Priklausomybės (R1; R2; .; Rk) R visos kairiosios aibės Ri; i = 1,2,.,k atkartojamos tiksliai po vieną kartą kairiosiomis pusėmis Zi eF(X).

Tarkime, kad:

Ri = Zi; Zi Yi EF(X);

ir Ri’ = Zi’; Zi’ Yi’ EF(X).

Sudarytoje SFP visos kair.iosios aibės yra tarpusavyje ekvivalentiškos ir Ri Ri’. Iš Ri Yi ir Ri Ri’ sumos gausime funkcinę priklausomybę Ri Yj,Ri’.

Be to: Zi’ Yi’ (duota)

ir Ri’ Yi’, ( nes Ri’ = Zi’);

Ri Yi,Ri’,Yi’ (FP kaupimas);

Ri Yi,Yi’ (FP projektyvumas).

Tęsiant dešniosios pusės kaupimo procesą visos aibės EF(X) atžvilgiu gausime:

Ri R; R = Yi | Zi’ Yi EF(X).

Funkcinė priklausomybė Ri R bus teisinga visoms i = 1, 2, ., k. Tokiu būdu visos priklausomybės (R1; R2; .; Rk) R; i = 1, 2, ., k ,sudarytos iš F naudojant taisyklę SFT1 gaunamos teisingos. Apibendrinę šią išvadą visiems X S, EF(X) sakysime, kad santykis s(S) tenkindamas FP iš F tenkina ir SFP iš Q. Iš abiejų įrodymų seka, kad Q F.

Sudėtinių funkcinių priklausomybių arba struktūrinių tipų (ST) aibė Q vadinama UFP aibės F struktūrine dengtimi, jeigu bet kuriuose dviejose sudėtinėse funkcinėse priklausomybėse Qi ir Qj iš Q neegzistuoja dvi skirtingos kairiosios aibės Ri ir Rj tokios, kad Ri Rj. Kitais žodžiais tariant, dviejuose skirtinguose struktūriniuose tipuose Qi ir Qj negali egzistuoti atatinkamos dvi kairiosios aibės Ri ir Rj, kurios priklauso tai pačiai ekvivalentiškumo klasei eF(X), Q F; X S; EF(X) Struktūrinės dengties apibrėžimas kokybiniu požiūriu nieko naujo neduoda, lyginant ją su SFP aibės dengtimi. Abiem atvejais – tiek SFP, tiek ST dengčių atvejais – suprantame, kad yra modeliuojama ta pati UFP aibė. Tačiau struktūrinių tipų ir jų dengčių terminologija bus naudojama pabrėžti tam metodologiniam faktui, kad struktūriniai tipai yra sudaromi specifikuojant informacinės sistemos duomenų FP tiesioginiu būdu naudojant sintezės metodą (žr. 6.8 sk.), t.y. jos gali būti užduotose lokalinėse schemose, o ne universaliojoje santykių schemoje, kuri apima visus sistemos atributus.5.2. Sudėtinių funkcinių priklausomybių aibės pertvarkymas

Pasinaudokime praeitame skyrelyje išnagrinėta SFP sudarymo taisykle SFPT sudarykime funkcinių priklausomybių aibei F’ (žr. 5.4 pav.) SFP dengtį Q’:

Q’ = {(DK,DP) DK,DP;

(Uˇ,LA; LA,DK; LA,DP; VI,LA) DK,Uˇ,VI,DP;

(Uˇ,LA,TM; LA,DK,DP,TM) PP}.

Praeitame skyrelyje buvome sudarę SFP aibę Q funkcinių priklausomybių aibei F’ (˛r. 5.4 pav.):

Q = {(DK; DP) DK,DP;

(Uˇ,LA; LA, DK; LA,DP; VI,LA) DK,Uˇ,VI,DP;

(Uˇ,LA,TM) PP}.

Aibės F ir F’ yra ekvivalentinės. Aibė F yra neperteklinė perteklinės F’ dengtis. Kadangi F F’, tai ir sudarytos SFP aibės yra ekvivalentinės, t.y. Q Q’. Šiame pavyzdyje aibė Q’ atžvilgiu Q yra perteklinė, nes trečiojoje SFP randasi perteklinė aibė LA,DK,DP,TM. Šiame skyrelyje išnagrinėsime įvairias struktūrinių dengčių pertvarkymo operacijas.

5.4 pav. FP aibė F yra neperteklinė F’ dengtis

Sakykime, kad turime SFP aibę Q ir jos sudėtinę funkcinę priklausomybę (R1 ; R2 ;.; Rk) * R. Įvesime keletą naujų apibrėžimų. Sudėtinėje FP atributas A yra perkeliamasis, jeigu jį perkėlus iš kairiosios aibės Ri į dešiniąją aibę R naujoji SFP aibė išlieka ekvivalentinė senajai Q. Kairioji aibė Ri yra perteklinė, jeigu iš karto galima perkelti jos visus atributus į dešiniąją aibę R nepažeidžiant ekvivalentiškumo. Sudėtinė funkcinė priklausomybė (R1 ; R2 ;.; Rk) * R yra redukuota kairiosiomis aibėmis, jeigu visose kairiosiose aibėse Ri; i = 1, 2, .,k nėra perkeliamų atributų. (R1 ; R2 ;.; Rk) * R yra redukuota dešiniaja aibe, jeigu dešiniojoje pusėje R nėra pašalinių atributų, kuriuos pašalinus ankstesnė sudėtinė funkcinė priklausomybė liks išvedama iš modifikuotos naujosios SFP aibės. SFP yra redukuotoji, jeigu ji redukuota kairiosiomis ir dešiniąja aibėmis. SFP aibė yra redukuotoji, jeigu ji susideda iš redukuotųjų SFP. SFP aibė Q yra minimali, jeigu neegzistuoja kita jai ekvivalentinė aibė, kurios bendras kairiųjų aibių skaičius yra mažesnis už SFP aibės Q kairiųjų aibių skaičių. SFP aibių modifikavimo taisyklės yra gana paprastos, lyginant jas su UFP aibės modifikavimu. SFP aibių modifikavimas yra vaizdesnis, kai naudojama grafinė notacija, nors teoretinė bazė čia išlieka ta pati, kaip ir UFP aibių atveju. Toliau aptarsime šias taisykles.

5.5 pav. Struktūrinių tipų aibėje Q tipo Q kairiojoje aibėje Ri atributas DP yra perkeliamasis

SFP aibė redukuojama analogiškai FP aibės atveju: pradžioje kairiosiomis atributų aibėmis, vėliau dešiniosiomis. Redukuojant kairiosiomis aibėmis perkeliamieji atributai iš kairiųjų aibių perkeliami į atatinkamų SFP į dešiniąsias aibes.

Redukavimo kairiosiomis aibėmis taisyklė RKAT. Aibės Q sudėtinės funkcinės priklausomybės Q kairiosios atributų aibės Ri atributą A perkeliame į dešiniąją aibę, jeigu Q (Ri – A) Ri , ir sudarom vietoj Q naują priklausomybę Q’.

5.6 pav.Struktūrinėje dengtyje Q’ struktūrinis tipas Q’ gautas atributą DP perkėlus į dešiniąją pusę

Po šio veiksmo aibė Q bus pertvarkyta į naują Q’, kurioje vietoje priklausomybės Q bus įvesta nauja priklausomybė Q’ su nauja kairiąja aibe , o dešinioji aibė bus papildyta atributu A. Jeigu po per¬kėlimo aptinkame priklausomybę S (SQ’) su kairiąja aibe X tokią, kad R’i S, tai priklausomy¬bes Q’ ir S apjungiame, susumuodami jų kairiąsias ir dešiniąsias aibes.

Paimkime grafiniame pavidale sudarytą priklausomybių aibę Q su priklausomybės Q kairiąja aibe Ri (žr. 5.5 pav.). Šioje aibėje atributas DP yra perkeliamasis. Pritaikius redukavimo taisyklę RKAT gausime naują SFP aibę Q’ (žr. pav. 5.6 pav.), kurioje priklausomybė Q’ yra pamodifikuota. Čia Q’ Q, nes:

LA,DK,TM LA,DK,TM (refleksyvumas);

DK DP (FP specifikuota tipu O);

LA,DK,TM LA,DK,TM,DP (kaupimas).

Tokiu būdu ir redukavimo taisyklė veikia korektiškai.

Redukuojant kairiosiomis aibėmis galima tokia situacija, kad visa kairioji atributų aibė yra perteklinė. Tokia situacija gali būti aptikta, jeigu SFP aibė buvo sudaryta iš perteklinių FP aibės. Eliminuojant perteklines kairiąsias aibes naudojama taisyklė PKAET..

Perteklinių kairiųjų aibių eliminavimo taisyklė PKAET. Aibės Q priklausomybės Q su duotosiomis kairiosiomis aibėmis Ri ir Rj aibės Ri visi atributai perkeliami į šios priklausomybės dešiniąją aibę, jeigu po perkėlimo Q Ri Rj .

Čia pažymėsime, kad bet kokiame tipe Q aibė Ri, kurią ruošiamės eliminuoti, negali būti vienintelė, jeigu prieš tai buvo panaudota taisyklė RKAT. Jeigu taisyklė RKAT buvo naudota tiek kartų, kad daugiau jos taikyti nereikėjo, tai bent viena kairioji redukuota aibė Ri turi išlikti, nes kitu atveju priklausomybė Q su kairiąja aibe Ri, taisykle RKAT būtų buvusi apjungta su kita priklausomybe S. Pritaikius šią taisyklę 5.5 paveikslėlio tipui Q, kairiosios aibės Ri visus atributus galima perkelti į dešiniąją aibę (žr. 5.7 pav.).

5.7 pav. Struktūrinė dengtis Q“ su kairiosiomis aibėmis redukuota SFP Q“

Priklausomybė LA,DK,TM UŽ,LA,TM lieka išvedama aibėje Q“:

LA,DK,TM LA,DK,TM (refleksyvumas)

LA,DK UŽ,LA (specifikuota antrojoje SFP)

LA,DK,TM UŽ,LA,DK,TM (kaupimas)

LA,DK,TM UŽ,LA,TM (projektyvumas)

Pažymėsime tą faktą, kad redukavimo kairiosiomis aibėmis ir perteklinių kairiųjų aibių eliminavimo klausimas neaktualus, jeigu SFP aibė buvo sudaryta naudojant SFPT taisyklę iš redukuotos užsiduotų FP aibės. Be to, po taisyklių RKAT ir PKAET daugkartinio ir pilno taikymo visada gauta SFP aibė bus užsiduotų FP aibės F struktūrinė dengtis, nes taisyklė RKAT garantuoja, kad dviejuose skirtinguose struktūriniuose tipuose Qi ir Qj negali egzistuoti atatinkamos dvi kairiosios aibės Ri ir Rj, kurios priklauso tai pačiai ekvivalentikumo klasei eF(X), Q F; X S; EF(X)

Redukavimo dešiniosiomis aibėmis taisyklė RDAT1. Dešiniojoje aibėje R paliekami atributai R (R1 R2 . Rk), o kiti pašalinami. Tris kartus pritaikius šią taisyklę vietoj ST aibės Q“, pateiktos 5.7 pav., gausime naują, modifikuotą (žr. pav. 5.8 pav.). Taisyklės RDAT1 patikimumas akivaizdus, nes kairiosios atributų aibės visada refleksyviai užduota savo atributus.

5.8 pav. Struktūrinė dengtis, gauta pritaikius redukavimo dešiniosiomis aibėmis taisykle RDAT1

Redukavimo dešiniosiomis aibėmis taisyklė RDAT2. Aibės Q struktūrinio tipo Q (su bet kuria paimta kairiąja aibe Ri) deiniosios atributų aibės R atributą A pašaliname, jeigu po pašalinimo A . Redukuojant tipo Q kairiąją aibę Ri galima užsiduoti bet kurią, nes pagal SFP apibrėžimą visos kairiosios aibės yra ekvivalentiškos. Atributų dengties indeksas Q panaudotas, kad pažymėti tą faktą, jog atributinė dengtis nustatoma įvertinant visą specifikuotą užsiduotųjų funkcinių priklausomybių aibę.

5.9 pav. Struktūrinė dengtis, gauta pritaikius redukavimo dešiniosiomis aibėmis taisyklę RDAT2

Panaudojus šią taisyklę atžvilgiu 5.8 pav. parodyto trečiojo struktūrinio tipo gauname redukuotą struktūrinių tipų aibę (žr. 5.9 pav.). Taisyklė RDAT2 yra bendresnė atžvilgiu RDAT1 ir universali. Taisyklės RDAT1 taikymas apsiriboja tik vienu struktūriniu tipu. Dėl to ji yra labai paprasta, tačiau tik ją naudojant negalima atlikti pilnos redukcijos dešiniosiomis aibėmis. Naudojant taisyklę RDAT2 įvertinamos visos užduotos FP. Pavyzdžiui, atributo DK pašalinimo iš trečiojo struktūrinio tipo (žr. 5.8 pav.) galimybę pasinaudojant kairiąja aibe UŽ,LA,TM pastebime iš to fakto, kad egzistuoja funkcinė priklausomybė UŽ,LA LA,DK, kuri specifikuota antruoju struktūriniu tipu. Todėl DK (UŽ,LA,TM)+.

Struktūrinių dengčių minimizavimo taisyklė SDMT. Jeigu struktūrinės dengties Q struktūrinis tipas Q turi dvi kairiąsias aibes Ri ir Rj tokias, kad Ri Rj, tai kairioji aibė Ri pašalinama.

5.9 paveikslėlio antrajame struktūriniame tipe LA,DP LA,DK. Kairiąją aibę LA,DP pašalinus gausime minimalią ir redukuotą struktūrinę dengtį (žr. 5.10 pav.). Minimizavimo taisyklės taikymo prielaida yra tiesioginės FP egzistavimas. Nustatant šią sąlygą struktūrinių dengčių atveju patogu pasinaudoti struktūrinių tipų detalumo samprata.

5.10 pav. Struktūrinė d.engtis, gauta pritaikius minimizavimo taisykę SDMT

Sakykime, kad turime struktūrinės dengties Q du tipus Q ir O su atatinkamomis kairiosiomis aibėmis Ri = X,Y ir Rj.Struktūrinis tipas Q bus detalusis at˛vilgiu O, jeigu X Rj, t.y., jeigu egzistuoja struktūrinio tipo Q kairiosios aibės Ri poaibis X, ekvivalentiškas struktūrinio tipo O kairiajai aibei Rj. Analogiškai O atžvilgiu Q bus apibedrinantis ST. 5.10 pav. trečiasis tipas yra detalusis atžvilgiu antrojo, nes UŽ,LA VI,LA. Antrasis tipas yra detalusis atžvilgiu pirmojo, nes LA,DK DK. Čia kairiąsias ekvivalentines aibes LA,DP ir LA,DK sieja tiesioginė funkcinė priklausomybė LA,DP LA,DK , nes funkcinės priklausomybės LA,DP LA,DK išvedimui (egzistavimo patvirtinimui) nereikia naudoti antruoju tipu specifikuotomis FP: čia atributas LA yra bendras abiem priklausomybės pusėms, o likusius detaliojo ST kairiųjų aibių poaibius sieja funkcinė priklausomybė DP DK, specifikuota pirmuoju struktūriniu tipu.

5.11 pav. Optimali stuktūrinė dengtis (b), gauta iš dengties (a) panaudojus vietoj kairiosios aibės {LA, PS, PN} aibę {LA, DK}

Anksčiau buvo pažymėta, kad redukavimas kairiosiomis aibėmis nereikalingas, jeigu struktūrinė dengtis buvo sudaryta iš redukuotos FP aibės panaudojant taisyklę SFPT. Perteklines kairiąsias aibes eliminuoti nereikia taip pat, jeigu perteklinės FP buvo eliminuotos iš užsiduotų FP aibės iki taisyklės SFPT panaudojimo. Tą patį faktą galima pažymėti ir apie ST aibės minimizavimą – jis nereikalingas, jeigu tai buvo atlikta su užsiduotų FP aibe, iš kurios buvo sudaryta ST dengtis. Tačiau redukavimą dešiniosiomis aibėmis atlikti būtina, norint gauti paprastesnius tipus. Tuo atveju, jeigu SFP dengtis sudaroma tiesioginiu būdu, t.y. neatliekant UFPA redukavimo ir minimizavimo, tai aprašytos ST dengties pertvarkymo operacijos turi būti naudojamos aprašyta tvarka.

Skyrelio pabaigoje parodysime, kaip struktūrinius tipus dar galima supaprastinti naudojant ST dengčių optimizavimą. 5.11a pav. pateiktas supaprastintas pavyzdys, kuriame vietoje atributo su vardu Dėstytojo_Pasas panaudoti du atributai – Paso_Serija ir Paso_Numeris. Nesunku pastebėti, kad bendrą atributų skaičių struktūrinėje dentyje (žr.

5.11a pav.) galima sumažinti antrojo struktūrinio tipo antrojoje kairiojoje aibėje vietoje poaibio PS,PN įstačius atributą DK (žr. 5.11b pav.). Abi struktūrinės dengtys išliks ekvivalentinės, kadangi atributų ekvivalentiškumas PS,PN DK seka iš funkcinių priklausomybių, specifikuotų pirmuoju tipu.5.3. Funkcinių priklausomybių atstatymas iš struktūrinių tipų aibės

Dabar panagrinėsime atvirkščią uždavinį: kaip sudaryti FP aibę G , ekvivalentinę užduotai struktūrinių tipų aibei Q. Paimkime Q ir G tokius, kad G Q. FP aibė G bus vadinama charakteringąja aibe. Jeigu ST iš Q kiekviena kairioji aibė Ri yra panaudojama funkcinės priklausomybės iš G kairiąja puse tiksliai vieną kartą, tai aibę G vadinsime ST aibės Q natūraliąja charakteringąja aibe. Natūraliajai charakteringajai aibei sudaryti naudosime taisyklę NCHT.

Paimkime ST aibės Q sudėtinę funkcinę priklausomybę Q = (R1; R2; .; Rk) R.

Taisyklė NCHT. Kiekvienai priklausomybei Q iš Q numatomas funkcinių priklausomybių poaibis {R1 R2; R2 R3; .; Rk-1Rk; Rk R1,R}. Funkcinių priklausomybių poaibius, sudarytus visiems Q iš Q, apjungiame į FP aibę G.

Įrodymas, kad NCHT yra korektiška, t.y. G Q yra trivialus ir analogiškas taisyklės SFT korektiškumo įrodymui. Paimkime ST aibę Q (žr. 5.12 pav.) iš anksčiau nagrinėto pavyzdžio ir sudarykime pagal taisyklę NCHT FP dengtį G (žr. 5.13 pav.).

5.12 pav. Struktūrinių tipų aibės pavyzdys, iš kurio bus atstatyta natūralioji charakteringoji FP aibė

5.13 pav. Natūralioji charakteringoji FP aibė sudaryta iš struktūrinių tipų aibės

Gauta natūralioji charakteringoji FP aibė G nėra redukuota dešiniosiomis FP pusėmis, nors ST aibė Q ir buvo redukuota. Po redukcijos deiniosiomis pusėmis gausime redukuotąją FP aibę G’. Kadangi Q buvo minimali, tai FP dengtis bus minimali taip pat.

Baigiant ST ir FP aibių dengčių analizę panagrinėkime dar vieną nesudėtingą pavyzdį (žr. 5.14 pav.). Kompiuterizuotos informacijos sistemos vartotojais (VAR) gali būti finansistas (FIN), komersantas (KOM), gamybos dispečeris (DIS) ir technologas (TECH). Organizacijos valdymo funkcijos sugrupuotos į prekybos ir gamybos valdymo funkcijų sistemas. Savo ruožtu prekybos sistemoje skiriamos buhalterinės apskaitos ir sandėlių apskaitos posistemės. Gamybos valdymo sistemoje skiriamos gamybos operatyvaus valdymo ir gamybos normavimo posistemės. Duomenys, reikalingi šių funkcijų palaikymui, sąlyginai suskirstyti pagal šias valdymo funkcijas ir tikslu užtikrinti duomenų bazių sankcijonuotą panaudojimą eksploatuojami pagal schemas (SCH) PRekyba ir GAmyba, bei poshemes (POS) PR_BUH, PR_SAN, GA_OV ir GA_NOR.

5.14 pav. Dalykinės srities pavyzdys, kuriam bus sudaryta FP aibė

Vartotojas prisijungdamas per terminalą (TER) prie duomenų poschemių naudoja vieną slaptažodį. Pavyzdžiui, finansistas gali prisijungti per terminalą T1 prie schemos PR poschemių PR_BUH ir PR_SAN naudodamas slaptažodį slž1. Tas pats vartotojas su tuo pačiu slaptažodžiu gali prisijungti tik prie vienos schemos poschemių. Tas pats vartotojas gali naudoti tik vieną tos pačios schemos poschemę. Čia išvardinti ir kiti nenurodyti duomenų bazių sankcijonuotą panaudojimą charakterizuojančių duomenų apribojimai gali būti aprašyti naudojant užduotų funkcinių priklausomybių aibę F (žr. 5.15 pav.).

5.15 pav. Užsiduotų FP minimalios ir redukuotos aibės F pavyzdys

Aibė F yra minimali ir redukuota. Pasinaudoję taisykle SFT iš aibės F sudarykime jos struktūrinę dengtį Q’ (žr. 5.16 pav.). Redukavę minimalią ST aibę Q’ dešiniosiomis atributų aibėmis gausime jai ekvivalentinę minimalią redukuotą aibę Q (žr.

5.16 pav. Minimali nerudukuota struktūrinė dengtis Q’ , sudaryta taisykle SFT iš minimalios ir redukuotos FP aibės

5.17 pav.). Aibė Q yra tuo pačiu ir optimali. Pritaikę taisyklę NCHT atstatykime FP dengtį. Ją redukavę FP dešiniosiomis pusėmis gausime minimalią redukuotą aibę G (žr. 5.18 pav.). Ji bus ekvivalentinė pradinei aibei F (žr. 5.15 pav.), tačiau jos nesutampa.

5.17 pav. Redukuota struktūrinė dengtis, gauta redukavus struktūrinius tipus dešiniosiomis aibėmis

5.18 pav. Iš optimalios struktūrinės dengties atstatyta minimali ir redukuota natūralioji charakteringoji FP aibė, kuri nėra optimali

Nors struktūrinė dengtis Q buvo optimali, tačiau atstatyta FP aibės dengtis G nėra optimali, nes joje bend.ras atributų skaičius (16) yra didesnis už minimalios dengties F bendrą atributų skaičių (15). Lyginant tarpusavyje FP aibes F ir G pastebime, kad aibėje G vietoj funkcinės priklausomybės VAR,SLA SCH naudojama funkcinė priklausomybė VAR,SLA POS,TER. Aibėje G funkcinė priklausomybė VAR,SLA SCH yra perteklinė (žr 5.18 pav.), kai tuo tarpu aibėje F (žr. 5.15 pav.) ji jokiu būdu nėra perteklinė, nes be jos sudarant 5.16 paveikslėlyje parodytą struktūrinę dengtį niekaip negalėtume išvesti kairiųjų aibių ekvivalentiškumą VAR,SLA POS,TER. Palyginkime tarpusavyje optimalią FP aibę F su jos struktūrine dengtimi Q (žr. 5.17 pav.). Optimalioje struktūrinėje dengtyje Q bendras atributų skaičius yra 12, kuris yra mažesnis už bendrą atributų skaičių 15 funkcinėje dengtyje F. Bendru atveju optimalioje struktūrinėje dengtyje bendras atributų skaičius visada yra nedidesnis už šį skaičių ekvivalentinėje optimalioje funkcinėje dengtyje. Šis teiginys yra trivialus ir jo neįrodysime. Užsiduotų FP aibės specifikavimas struktūrinėmis dengtimis yra kompaktiškesnis. Be vaizdumo tai yra papildomas ST dengčių panaudojimo privalumas.

6

JUNGIMO/PROJEKCIJOS PRIKLAUSOMYBĖS IR RELIACINIŲ SCHEMŲ PROJEKTAVIMAS6.1. Daugiareikšmės priklausomybės

Paimkime dalykinės srities pavyzdį. 6.1 paveikslėlyje pavaizduotas gaminio (GAMINYS) technologinis maršrutas ir to gaminio sandėliavimas: gaminys G1 apdoro¬jamas technologinėmis (OPERACIJA) operacijomis O1 ir O2, o po to, kai jau jis yra pagamintas, sandėliuojamas arba sandėlyje (SANDĖLIS) S1 arba sandėlyje (SANDĖLIS) S2. Gaminio G1 sandėlyje S1 likutis (KIEKIS) yra K1, o sandėlyje S2 to pačio gaminio likutis (KIEKIS) yra K2. Paimkime duomenų, kurie charakterizuoja šią dalykinę sritį, reliacinę schemą R = (GAMINYS, OPERACIJA, SANDĖLIS, KIEKIS) ir duomenų santykį, pavaizduotą 6.1 lentelėje. Pažymėsime tokią svarbią šios dalykinės srities savybę, kad informacija apie tai, kokiomis operacijomis gaminys yra apdorojamas, yra nepriklausoma nuo informacijos apie to gaminio sandėliavimo vietas ir to gaminio likučius sandėliuose. Analogiškai, gaminio sandėliavimo vietos ir likučiai sandėliuose yra nepriklausomi nuo gaminio technologinio maršruto. Kitais žodžiais tariant, tarp gaminio technologinių duomenų ir duomenų apie gaminio sandėliavimą nėra tiesioginių asociatyvinių ryšių, nėra kokių nors duomenų priklausomybių, pavyzdžiui, žinomų iš anksčiau, funkcinių priklausomybių. Netiesioginiai asociatyviniai ryšiai tarp nagrinėjamos probleminės srities sandėliavimo ir technologinių duomenų yra. Tačiau šie ryšiai egzistuoja per duomenų atributą GAMINYS, kadangi tas pats gaminys apdorojamas tam tikromis operacijomis, o po apdorojimo tas pats gaminys yra sandėliuojamas tam tikrose sandėliavimo vietose ir tose vietose yra tam tikri gaminio kiekiai. Netiesioginių asociatyvinių ryšių egzistavimas sudaro prielaidas įvesti daugiareikšmes priklausomybes, kurias toliau apibrėšime formaliai.

6.1 pav. Gaminio G1, kuris apdorojimas operacijomis O1 ir O2,sandėyje S1kiekis yra K1ir sandėjyje S2kiekis yra K2

6.1 lentelė.Gaminių apdorojimo ir sandėliavimo duomenų pavyzdys

GAMINYS OPERACIJA SANDĖLIS KIEKIS

s G1 O1 S2 K2

t G1 O2 S1 K1

u G1 O1 S1 K1

v G1 O2 S2 K2

u’=s’ G2 O2 S2 K3

v’=t’ G2 O3 S2 K3

s“=t“=u“=v“ G3 O1 S1 K4

X Y Z

Paimkime schemos R atributų poaibius X, Y ir Z = R X,Y . Schemos R duomenys tenkina daugiareikšmę priklausomybę (DP) X Y, jeigu bet kokiame schemos R egzemplioriuje r(R) esant dviems kortežams s ir t, kurių X-komponentai sutampa, t.y. s(X) = t(X), tame pačiame egzemplioriuje r(R) būtinai egzistuos kortežai u ir v tokie, kad bus išpildytos sąlygos:

u(X) = v(X) = s(X) = t(X) ;

u(Y) = s(Y) ; u(Z) = t(Z) ;

v(Y) = t(Y) ; v(Z) = s(Z) .

Šį DP reikalavimą galima perfrazuoti taip: jeigu santykyje r(R) yra du kortežai s ir t su vienodais X-komponentais, tai šiuose kortežuose Y-komponentus sukeitus vietomis gausime kortežus u ir v, kurie būtinai priklauso paimtam duomenų santykiui. 6.1 lentelėje pateikti duomenys daugiareikšmę priklausomybę GAMINYS OPERACIJA tenkina. Paimkime, pavyzdžiui, 6.1 lentelės kortežus s = ir t = . Šiuose korte˛uose s(GAMINYS) = t(GAMINYS) = G1, o komponentus s(OPE¬RACIJA) = O1 ir t(OPERACIJA) = O2 sukeitę vietomis gausime kortežus u = ir v = , kurie priklauso tai pačiai lentelei. Pateiktame DP apibrėžime nereikalaujama, kad korte˛ai s, t, u ir v turi būti skirtingi. Užsiduokime kitus du kortežus s’ = ir t’ = , kuriuose X-komponentai taip pat sutampa. Komponentus s'(Y) = O2 ir t'(Y) = O3 sukeitę vietomis gausime turimus kortežus u’ = s’ ir v’ = t’. Priklausomybės GAMINYS OPERACIJA reika¬lavimus tenkins ir lentelės paskutinis kortežas. Pažymėję s“ = t“ = ir komponentus s“(Y) = O1, t“(Y) = O1 sukeitę vietomis gausime u“ = v“ = s“ = t“ = .

Nenagrinėdami DP išvedimo visų taisyklių pateiksime tik dvi reliacinių schemų projektavimo požiūriu svarbias taisykles:

DT1) X Y X Y ;

DT2) X Y X Z ; Z = R X,Y .

TaisyklėDT1 teigia, kad kiekviena funkcinė priklausomybė (FP) yra daugia¬reikšmė priklausomybė. P.aimkime funkcinę priklausomybę

GAMINYS,SANDĖLIS KIEKIS

X Y

bei korte˛us t ir u (˛r. 6.1 lent.), kuriuose t(X) = u(X) = G1,S1 . Kadangi 6.1 lentelės duomenys funkcinę priklausomybę X Y tenkina, tai t(Y) = u(Y) = K1. iuose korte¬˛uose vienodus komponentus t(Y) ir u(Y) sukeitus vietomis gausime, suprantama, teisingus duomenys, ir daugiareikšmę priklausomybę X Y nepažeisime. Pabrėšime, kad atvirkščias teiginys, jog kiekviena DP yra tuo pačiu metu ir FP, yra neteisingas.

Antroji taisyklė DT2 taip pat yra triviali. Paimkime tą pačią anksčiau turėtą DP

GAMINYS OPERACIJA .

X Y

Jeigu ši DP yra teisinga, tai teisinga bus ir priklausomybė

GAMINYS SANDĖLIS,KIEKIS ,

X Z = R X,Y

nes korte˛uose s ir t sukeitę komponentus s(Z) = S2,K2 ir t(Z) = S1,K1 vietomis gausime, kaip ir DP X Y atveju, teisingus tuos pačius kortežus u ir v.

Daugiareikšmės priklausomybės X Y įvedimas schemoje R bus korek¬tiškas, jei bet kokį schemos egzempliorių r galima suprojektuoti į schemas R1 = X,Y ir R2 = X,Z , gaunant dvi naujas lenteles r1 = R1 (r) ir r2 = R2 (r), kurias natūraliosios jungties operacija sujungus tarpusavyje atstatysime paimtą egzempliorių r. Po projekcijos operacijos 6.1 lentelės duomenys bus atvaizduoti 6.2 ir 6.3 lentelių duomenimis. Šias lenteles natūraliosios jungties operacija sujungę gausime pirminę 6.1 lentelę. Tai yra būdas, kaip patikrinti, ar duomenų lentelė tenkina daugiareikšmę priklausomybę.

6.2 lentelė.Gaminių operacijos 6.3 lentelė. Gaminių sandėliavimas

GAMINYS OPERACIJA GAMINYS SANDĖLIS KIEKIS

G1 O1 G1 S2 K2

G1 O2 G1 S1 K1

G2 O2 G2 S2 K3

G2 O3 G3 S1 K4

G3 O1 X Z

X Y

6.2. Jungimo/projekcijos priklausomybės

Praeitame skyrelyje nagrinėtas DP apibendrina taip vadinamos jungimo/projekci¬jos priklausomybės (JPP) arba, kitais žodžiais tariant, kiekviena daugiareikšmė priklausomybė yra JPP. Kaip ir DP atveju, užduodant JPP duomenų lentelėje turi egzistuoti netiesioginiai asociatyviniai ryšiai. Jeigu DP X Y atveju schemoje R buvome išskyrę dvi atributų grupes Y ir Z = RX,Y ,tai JP priklausomybei bendruoju atveju išskirsime kelias atributų grupes Ri; i = 1, 2, ., p . Kiekviena atributų grupė Ri turi turėti tiesioginę asociaciją su bent viena atributų grupe Rj per šių grupių bendrus atributus Ri Rj .

Schemos R duomenys turi jungimo/projekcijos priklausomybę *[R1; R2; ., Rp], jeigu schemos R bet kokiame santykyje r(R) egzistuojant kortežams t1, t2, ., tp tokiems, kad ti(Ri Rj) = tj(Ri Rj), tame pačiame santykyje r(R) bus kortežas t toks, kad t(Ri) = ti(Ri) ; i = 1, 2, ., p . Universaliosios schemos R atributų poaibius Ri toliau vadinsime priklausomybės komponentais.

Paimkime schemą R su užsiduota FP aibe (žr. 6.2a pav.) ir šios schemos egzempliorių (žr. 6.4 lent.). Sugrupuokime universaliosios schemos R atributus į tris naujas schemas, suteikdami šioms schemoms vardus R1, R2 ir R3. Taip pat užduokime tarp naujų schemų asociatyvinius ryšius ir pavaizduokime juos kanoniniame pavidale (žr. 6.2b pav.). Atributų grupės R1 ir R3 tiesiogiai asocijuojamos per bendrą atributą ŠŠ, atributų grupės R3 ir R2 – per atributą KŠ, o R ir R2 – per atributą VE. 6.2a pav.Veislininkystės schemos pavyzdys 6.2b pav. Atributų grupavimas į schemas R1, R2, R3

6.4 lentelė. Universalaus santykio r pavyzdys

ŠV ŠŠ VE KŠ KV

t1 Tobis Bear Dog Race Mirta

t2 Margis Wolf Dog Fox Morka

t3 Pukis Bear Vilk Fox Šatrė

t Tobis Bear Dog Fox Morka

Kad nustatyti, ar jungimo/projekcijos priklausomybė JP1 = *[R1; R2; R3] yra teisinga, turime įsigilinti į universaliosios schemos R atributų vardų semantiką; ši semantika lieka tik dalykinės srities eksperto galvoje ir tik dalis dalykinės srities duomenų semantikos užduodama formaliai. Priklausomybės komponento R1 atributais ŠV, ŠŠ ir VE charakterizuojami patinukai: jų vardai, kokiems šeimininkams jie priklauso ir kokios yra jų veislės. Funkcinėmis priklausomybėmis ŠV ŠŠ .ir ŠV VE užduodama tik tokia semantika “šuniukas su vardu šv priklauso nedaugiau, kaip vienam šeimininkui šš ir turi nedaugiau, kaip vieną veislę ve”. Analogiškai komponento R2 atributai KV, KŠ ir VE charakterizuoja kalytes. Komponentų R1 ir R2 duomenys yra sąlyginai nepriklausomi ir asocijuojami tik bendru atributu VE. Šio asociatyvinio atributo semantika yra tokia: “šuniukas šv gali būti kryžminamas su kalyte kv, jei abu šv ir kv turi tą pačią veislę ve”. Komponento R3 atributai ŠŠ ir KŠ turi tarpusavio tiesioginį asociatyvinį ryšį, kurio semantika yra: “ šuniuko šeimininkas šš ir kalytės šeimininkas kš yra sudarę sutartį dėl savo globotinių kryžminimo”.Šis asociatyvinis sąryšis yra užduodamas tiesiog atributų apjungimu į vieną poaibį-komponentą R3. Paimtas iš universaliosios schemos duomenų lentelės koks nors kortežas <šv; šš, ve; kš, kv> interpretuojamas taip: “šuniukas su vardu šv ir kalytė su vardu kv gali būti sukryžminti, jeigu jie yra tos pačios veislės ve ir, jeigu šeimininkai šš ir kš yra tarpusavyje sudarę sutartį dėl savo globotinių kryžminimo”. Išskirdami priklausomybę JP1 = *[R1; R2; R3] tvirtiname, kad bet kokiame schemos R egzemplioriuje r kortežų t1, t2 ir t3 komponentus <šv, šš,ve>, ir <šš, kš> galime natūraliosios jungties būdu apjungti į kortežą t = <šv, šš, ve, kš, kv> , kuris turi priklausyti egzemplioriui r. Kitais žodžiais tariant, gautas kortežas bus teisingas, ir šuniukas su vardu šv ir kalytė su vardu kv gali būti sukryžminti, nes abu “partneriai” yra tos pačios veislės, o jų šeimininkai turi sudarę sutartį dėl globotinių kryžminimo. Šiame pavyzdyje asociacija, užduota reikšmių pora-kintamuoju <šv, kv>, yra netiesioginė ir visada teisinga, jeigu tik išpildytos sąlygos dėl šuniukų poros veislės ir šuniukų šeimininkų sutarties.

Apibrėšime jungimo-projekcijos priklausomybę bendruoju atveju. Schema R turi jungimo-projekcijos (JP) priklausomybę *[R1; R2; .; Rp], jeigu schemos R; R = ; bet kokiame egzemplioriuje r egzistuojant kortežams t1, t2, ., tp tokiems, kad ti(RiRj) = tj( RiRj ) , tame pačiame egzemplioriuje r būtinai bus kortežas t toks, kad t(Ri) = ti(Ri) ; i = 1, 2, ., p.

6.2 lentelėje pateikti duomenys priklausomybę JP1 = *[R1; R2; R3] tenkina. Paimkime kortežus

t1 = ;

t2 = ;

t3 = .

Kadangi t1(R1 R2) = t2(R1 R2) = ;

t2(R2 R3) = t3(R2 R3) = ;

t1(R1R3) = t3(R1 R3) = ,

tai tada toje pačioje lentelėje bus teisingas kortežas

t = ,

nes t(R1) = t1(R1) = ;

t(R2) = t2(R2) = ;

t(R3) = t3(R3) = .

JP priklausomybėms naudosime grafinį žymėjimą. 6.4 paveikslėlyje parodyta priklau¬somybė JP1. Pastebėsime tai, kad užduotos JP priklausomybės komponentai turi apimti visus nagrinėjamos schemos R atributus.

6.4 pav. JP priklausomybės grafinis vaizdavimas

Ar tikrai paimtos 6.4 lentelės duomenys tenkina priklausomybę JP1? Suprojektuokime šią lentelę į schemas R1 = ŠV,ŠŠ,VE , R2 = KV,KŠ,VE ir R3 = ŠŠ,KŠ . Suprojektavę gausime santykius r1, r2 ir r3 (˛r. 6.5, 6.6 ir 6.7 lenteles).

6.5 lentelė. r1 6.6 lentelė r2 6.7 lentelė. r3

ŠV ŠŠ VE KV KŠ VE ŠŠ KŠ

Tobis Bear Dog Mirta Race Dog Bear Race

Margis Wolf Dog Morka Fox Dog Wolf Fox

Pukis Bear Vilk Šatrė Fox Vilk Bear Fox

6.8 lentelė. r1 r2 6.9 lentelė. r1 r2 r3

ŠV ŠŠ VE KŠ KV ŠV ŠŠ VE KŠ KV

Tobis Bear Dog Race Mirta Tobis Bear Dog Race Mirta

Tobis Bear Dog Fox Morka Tobis Bear Dog Fox Morka

Margis Wolf Dog Race Mirta Margis Wolf Dog Fox Morka

Margis Wolf Dog Fox Morka Pukis Bear Vilk Fox Šatrė

Pukis Bear Vilk Fox Šatrė

Natūraliosios jungties operacija sujunkime šias tris lenteles į vieną. Kokias lenteles ir Kokia nuoseklumo tvarka jungsime lenteles, rezultatą gausime tą patį. Sujunkime pradžioje lenteles r1 ir r2. Po sujungimo gausime tarpinę. lentelę r1 r2 . Šią tarpinę lentelę sujungę su lentele r3 gausime rezultatinę, kuri savo turiniu sutampa su pradine lentele r (žr. 6.4 lent.). Šis faktas parodo, kad paimtas schemos R egzempliorius r duomenų priklausomybę JP1 = *[R1; R2; R3] tenkina. Sekančiame skyrelyje remiantis pastebėta duomenų savybe bus suformuluotas pagrindinis DB projektavimo kriterijus. 6.5 paveiksle parodyta schemos S pavyzdys su daugiareikšme priklausomybe VE KA. Kita daugiareikšmė priklausomybė VE RA,RI yra perteklinė, nes ji išvedama iš užsiduotos priklausomybės VE KA pagal praeitame skyrelyje nagrinėtą DP išvedimo taisyklę. JP priklausomybė JP2 = *[S1; S2] atžvilgiu parodytų DP yra perteklinė taip pat. JP priklausomybės komponentų S1 ir S2 atributai tarpusavyje turi

6.5 pav. JP2, išvesta iš VE KA

vieną asociatyvinį ryšį per bendrą atributą VE. Pieno riebumą ir karvėms duodamo pašaro racioną neapsprendžia konkreti karvė (atributo KA reikšmė), o tik karvės veislė, ir visos karvės tos pačios veislės yra šeriamos vienodų racionų pašarais ir tų karvių pieno riebumas pagal šiame pavyzdyje daromas prielaidas yra vienodas. Schemos R atributų grupavimas į daugiareikšmių priklausomybių X Y , X Z ; Z = R X; kairiąsias bei dešiniąsias puses ir schemos R atributų grupavimas į JP priklausomybės *[X,Y; X,Z] du komponentus atliekami ta pačia semantine prasme vienodai. Tiek DP, tiek JP priklausomybės vienodai apriboja schemos R egzempliorių leistinas atributines reikšmes. Tačiau JP priklausomybė yra bendresnė ir DP priklausomybė yra jos dalinis atvejis, kai JP priklausomybė turi du komponentus. Aprašytą analogiją tarp DP ir JP pateiksime formalia JP priklausomybės išvedimo taisykle JPT1:

JPT1) X Y *[X,Y; X,Z]; Z = R – X -Y .

Suprantama, kad *[R1; R2] R1R2 R1, tačiau teigti, kad bendruoju atveju, kai JPP turi daugiau negu du komponentus, iš JPP galima išvesti DP būtų neteisinga. Pavyzdžiui, ankstesnės priklausomybės JP1 = *[R1; R2; R3] komponentai R1 ir R2 apima schemos R visus atributus, tačiau priklausomybė *[R1; R2] ir tuo pačiu priklausomybė BR MN,MO yra neteisingos, nes DB schema R = {R1, R2} duos informacijos nuostolius. Pavyzdžiui, kortežas , sujungtas su kortežu duos kortežą , kuris nepriklauso universaliam santykiui r.6.3. Pagrindinis duomenų bazių projektavimo kriterijus

Praeitame skyrelyje buvo parodyta, kaip galima patikrinti, ar schemos R egzemp¬liorius r tenkina užsiduotą jungimo-projekcijos priklausomybę *[R1; R2; .; Rp]. Jeigu duomenų santykis r tenkina užsiduotą JP priklausomybę, tai jį galima suprojektuoti į santykių schemas R1, R2, .,Rp , o antruoju veiksmu gautas projekcijas natūraliosios jungties operacija atstatydavome egzempliorių r. Jeigu tai padaryti pavyksta bet kokio teisingo egzemplioriaus atveju, tai tada galima teigti, kad JP priklausomybė yra užsiduota teisingai. Natūralu šią situaciją charakterizuoti tokiu būdu. Egzemplioriai r charakterizuoja dalykinės srities būsenas įvairiais laiko momentais. Visus duomenys, kurie charakterizuoja leistiną būseną tam tikru laiko momentu galima saugoti reliacinėje DB, kurios schema yra R = {R1, R2, .,Rp}. Saugojamas lenteles r1, r2, ., rp galima apjungti į vieną universalų santykį r = r1 r2 . rp , kuris pilnai charakterizuoja dalykinės srities būseną duotam laiko momentui. Sakysime, kad DB schema R neduoda informacijos nuostolių, kadangi iš jos duomenų visada galima atstatyti dalykinės srities būseną. Jeigu DB schema šį kriterijų tenkina, tai tada lenteles ri; i = 1, 2, ., p; galima eksploatuoti nepriklausomai, jos yra mažesnės ir lengviau palaikomos.

Užsiduokime DB schemą R={R1, R2, R3} ; R1 = ŠV,ŠŠ,VE ; R2 = KV,KŠ,VE ; R3 = ŠŠ,KŠ . Universalioji santykių schema, kuri apima visus dalykinės srities atributus bus R = R1 R2 R3 . Sakykime, kad tam tikru laiko momentu dalykinė sritis yra charakterizuojama schemos R egzemplioriumi r, kuris pateiktas 6.10 lentelėje.

6.10 lentelė. r

ŠV ŠŠ VE KŠ KV

t Tobis Bear Dog Race Mirta

Margis Wolf Dog Fox Morka

Pukis Bear Vilk Fox Šatrė

6.11 lentelė. r1 = R1(r) 6.12 lentelė. r2 = R2(r) 6.13 lentelė. r3 = R3(r)

ŠV ŠŠ VE KV KŠ VE ŠŠ KŠ

t1 Tobis Bear Dog t2 Mirta Race Dog t3 Bear Race

Margis Wolf Dog Morka Fox Dog Wolf Fox

Pukis Bear Vilk Šatrė Fox Vilk Bear Fox

Suprojektavę santykį r į DB schemą R gausime tris projekcijas r1 = R1(r), r2 = R2(r) ir r3 = R3(r) (žr. 6.11, 6.12, 6.13 lenteles), kurias, natūraliosios jungties būdu apjungę, gausime santykį s = r1 r2 r3 (žr. 6.14 lent.).

6.14 lentelė. s = r1 r2 r3

ŠV ŠŠ VE KŠ KV

t Tobis Bear Dog Race Mirta

Tobis Bear Dog Fox Morka

Margis Wolf Dog Fox Morka

Pukis Bear Vilk Fox Šatrė

Gautas santykis s skiriasi nuo būseną charakterizuojančio santykio r tuo, kad santykyje s atsirado naujas kortežas < Tobis, Bear, Dog, Fox, Morka>. Jis yra neteisingas, nes patinuką Tobis ir patelę Morka nėra numatyta kryžminti, nors jie yra tos pačios veislės. Šiame skyrelyje paimtas dalykinės srities pavyzdys skiriasi nuo ankstesnio pavyzdžio tuo, kad čia duomenis neapribojome ankstesne JP priklausomybe *[R1; R2; R3] . Dabartiniame pavyzdyje kryžminimui partnerius šeimininkai parenka tos pačios veislės, tačiau individualiai, o ne pagal bendrą išankstinę šeimininkų sutartį dėl šuniukų kryžminimo. Pasirinkta DB schema šiame pavyzdyje yra atsitiktinė, ir čia neįvertinami duomenų apribojimai. Užsiduota DB schema R={R1, R2, R3} “iškraipo” dalykinės srities būsenas, nes iš DB lentelių r1, r2 ir r3 atstatytas santykis turi papildomus neteisingus kortežus.

Paeiliui panaudotas projekcijos ir natūralaus sujungimo operacijas užduokime funkcija mR , kai DB schema yra R = {R1, R2, ., Rp} :

mR(r) = (r) (r) . (r) = s .

Sakysime, kad schemos R duomenų bazė išsaugoja informaciją arba R tenkina pagrindinį DB projektavimo kriterijų, jeigu bet koks dalykinę sritį charakterizuojantis santykis r gali būti išsaugotas duomenų bazėje, t.y.:

mR(r) = (r) (r) . (r) = r .

Ankstesniame pavyzdyje s r, todėl schema R = {R1, R2, R3} duoda informacijos nuostolius.

Funkcijai mR būdingos tokios savybės:

1) r mR(r) ;

2) jeigu r s , tai mR(r) mR(s) ;

3) mR(r) = mR(mR(r)) .

Pirmoji savybė seka iš to fakto, kad paėmus kortežą t r (žr. 6.14 lent.) ir jį suprojekta¬vus į schemas R1, .R2 ir R3, gauti korte˛ai t1 r1, t2 r2 ir t3 r3 (žr. 6.11, 6.12, 613 lent.) būtinai tarpusavyje susijungs, nes

t1(R1 R2) = t2(R1 R2) ;

t1(R1 R3) = t3(R1 R3) ;

t2(R2 R3) = t3(R2 R3) .

Todėl santykyje (r1 r2 r3) = s būtinai bus atstatytas korte˛as t, ir t s .

Antrąja funkcijos mR savybe, vadinama monotoniškumu, galima įsitikinti pastebėjus, kad jeigu r s, tai

r1 = R1 (r) R1 (s) ,

r2 = R2 (r) R2 (s) ,

r3 = R3 (r) R3 (s) .

Jeigu t1 r1 R1 (s) ,

t2 r2 R2 (s) ,

t3 r3 R3 (s) ,

ir t1, t2, t3 tarpusavyje susijungia, tai po sujungimo bus atstatytas korte˛as t, ir jis būtinai turi priklausyti santykiui mR (s).

Trečiąją savybę, vadinamą idempotentiškumu, galima įrodyti tokiu būdu. Jeigu r1, r2 ir r3 yra gauti, suprojektavus tą patį santykį r, tai kiekvienas kortežas t1 r1, t2 r2 ir t3 r3 natūraliosios jungties operacijoje (r1 r2 r3) = mR (r) su kokiu nors kitu kortežu susijungia (sakome santykiai r1, r2 ir r3 yra pilnai sujungiami). Tokiu būdu visi kortežai t1, t2, t3, kaip komponentai, rasis santykio mR (r) kortežuose, o santykio mR (r) visi kortežai bus sudaryti tik iš tokių sujungiamų komponentų. Pasinaudokime ankstesniu pažymėjimu s = mR (r). Jeigu dar kartą suprojektuosime santykį s, tai projekcijos bus:

r1 = R1 (s) ,

r2 = R2 (s) ,

r3 = R3 (s) .

Bet sujungę tarpusavyje vienodus santykius visada gausime tą patį rezultatą. Tokiu būdu

mR (r) = mR (s) = mR (mR (r)) .

Toliau pagrindinį DB projektavimo kriterijų apibrėšime per dalykinės srities duomenų apribojimus, palikdami ankstesnius pažymėjimus. Pasinaudodami funkcijos mR idempotentiškumo savybe santykį s = mR (r) = mR (mR (r)) apibrėšime, kaip šios funkci¬jos nejudantį tašką, o nejudančių taškų aibę pažymėsime FIX(R). Jeigu r FIX(R), tai schema R dalykinės srities būsenų “neiškraipo”. Pažymėkime galimų būsenų aibę raide B. Jeigu B FIX(R) (žr. 6.6 pav.), tai tada visos galimos būsenos iš duomenų bazės su schema R bus atstatomos. 6.6 paveiksle duomenų bazė di; di = R(ri); parodyta, kaip lentelių ,gautų iš būsenos ri projekcijos operacija R , visuma, o duomenų bazės di visų lentelių sujungimas natūraliosios jungties operacija parodytas kaip (di).

Kokios yra dalykinės srities galimos būsenos? Jas apibrėšime, kaip leistinas, kurios charakterizuojamos apribojimus tenkinančiais duomenimis. Pažymėkime duomenų apribojimus (funkcines, daugiareikšmes ir JP priklausomybes) raide C,o leistinų būsenų aibę – SAT(C). Tada pagrindinis DB kriterijus bus išreiškiamas tokiu būdu: SAT(C) FIX(R).

6.6 pav. Pagrindinis DB kriterijus: SAT(C) FIX(R)

Sekančiame skyrelyje bus parodyta, kaip dekompozicijos metodu galima suprojektuoti DB schemas, tenkinančias tokiame pavidale užduotą pagrindinį informacijos išsaugojimo kriterijų.6.4. Reliacinių schemų projektavimo dekompozicijos metodas

Šio metodo idėja yra ta, kad universaliajai santykių schemai R užduodamos duomenų priklausomybės, kurių pagrindu schema R dekomponuoja¬ma, gaunant keletą santykių schemų, kurių visuma DB schemą. Visoms santykių schemoms – pradinei, tarpinėms ir rezultatyvinėms – apibrėžiamos taip vadinamos santykių schemų normalinės formos. Pati primytiviausia santykių schemos normalinė forma yra pirmoji normalinė forma (1NF). Šiai normalinei formai taikomi minimalūs reikalavi¬mai

Pirmoji normalinė forma. Schema R yra pirmojoje normalinėje formoje, jeigu kiekvienas jos egzempliorius sudaro plokščią lentelę. Lentelė yra plokščia, jeigu

• shemos atributai yra nepriklausomi (be hierarchinių ryšių) ir

• atributų reikšmės yra atomarinės

Schemos R santykio r(R) atributo reikšmė yra atomarinė, jeigu ji neskaidoma į dalis tam, kad asocijuoti jas su kitos ar tos pačios lentelės duomenimis. Paimkime dvi duomenų lenteles 6.15 ir 6.16 .

6.15 lentelė. Pilotai 6.16 lentelė. Zodiako_ ženklai

PILOTAS GIM_DATA PRADŽIA PABAIGA ŽENKLAS

Blonskis J.

Gustas R.

Gudas S. 70/08/02

45/09/21

50/09/16

08/01

09/03

09/03 08/22

10/04

10/04 Liūtas

Mergelė

Mergelė

Pilotų lentelės atributo GIM_DATA reikšmės nėra terminalinės, nes gimimo mėnuo ir diena gali būti panaudotos Zodiako ženklo nustatyti. Duomenys apie pilotus gali būti pavaizduoti 6.17 arba 6.18 lentelėmis, panaudojant tik atomarines atributų reikšmes.

6.17 lentelė. Modifikuota lentelė Pilotai 6.18 lentelė. Modifikuota lentelė Zodiako_ženklai

PILOTAS

GIM_DATA

MET MĖN DIENA PRADŽIA

MĖN DIENA PABAIGA

MĖN DIENA ŽENKLAS

Blonskis J.

Gustas R.

Gudas S. 70 08 02

45 09 21

50 09 16

08 01

09 03

09 03 08 22

10 04

10 04 Liūtas

Mergelė

Mergelė

Tačiau ir šiuo atveju abi lentelės netenkina 1NF reikalavimų, nes atributų vardai užduodami per du hierarchinius lygius. Tie patys duomenys pateikti 6.19 ir 6.20 lentelėse. Jų schemose atributų vardai parinkti tokie, kad abi santykių schemos tenkintų 1NF reikalavimus.

6.19 lentelė. 1NF lentelė Pilotai 6.20 lentelė. 1NF lentelė Zodiako_ženklai

PILOTAS ME MĖ DI PR_MĖ PR_D PA_MĖ PA_D ŽENKLAS

Blonskis J.

Gustas R.

Gudas S. 70

45

50 02

09

09 02

21

16 08

09

09 01

03

03 08

10

10 22

04

04 Liūtas

Mergelė

Mergelė

Pagrindinis privalumas yra tai, kad 1NF schemų atveju duomenų lentelių atžvilgiu galima taikyti reliacinės algebros operacijas. Kitas privalumas yra tai, kad naudojant atomarines atributų reikšmes galima duomenų atžvilgiu užduoti stipresnius apribojimus. Paimkime dvi panašias reliacines schemas (žr. 6.7 pav.) su užsiduotomis analogiškomis funkcinėmis priklausomybėmis GIM_DATAŽENKLAS ir MĖ,DIŽENKLAS. Antroji FP yra stipresnė, kadangi kairiosios pusės atributai yra labiau detalūs, ir jų reikšmių pasikartojimo tikimybė duomenų lentelėse yra didesnė. Pavyzdžiui 6.21 lentelėje atributo GIM_DATA jokia reikšmė nepasikartoja, kai tuo tarpu 6.22 lentelėje tiek Gusto R., tiek Gudo S. gimimo mėnesiai ir dienos sutampa. Iš šio sutapimo seka, kad ir jų Zodiako ženklai turi sutapti. FP apribojimus galima duomenų santykiuose kontroliuoti programiškai, ir tokiu būdu užtikrinti aukštesnį duomenų vientisumą.

6.7 pav. Dviejų schemų pavyzdys, kuriame schemoje P2 užduota FP yra stipresnė už analogišką FP iš schemos P1

6.21 lentelė. P1 6.22 lentelė. P2

PILOTAS GIM_DATA ŽENKLAS PILOTAS ME MĖ DI ŽENKLAS

Blonskis J.

Gustas R.

Gudas S. 70/02/02

45/09/21

50/09/21 Liūtas

Mergelė

Mergelė Blonskis J.

Gustas R.

Gudas S. 70

45

50 02

09

09 02

21

21 Liūtas

Mergelė

Mergelė

Antroji normalinė forma. Santykių schema R yra antrojoje normalin.ėje formoje (2NF), jeigu ji yra 1NF ir kiekvienas nepirminis atributas A yra tik pilnojoje funkcinėje priklausomybėje nuo bet kurio rakto. Schemos R atributas A vadinamas pirminiu užsiduotų funkcinių priklausomybių aibės F atžvilgiu, jeigu A įeina bent į vieną schemos raktą. Kitu atveju jis vadinamas nepirminiu. Paimkime funkcinę priklausomybę XY iš aibės F+ ir atributų poaibį X’, X’X . Jeigu X’Y F+, tai funkcinę priklausomybę XY vadiname daline, o X’Y vadiname pilnąja. Jeigu X yra schemos R raktas, tai Y yra dalinėje funkcinėje priklausomybėje nuo rakto X. Schemoje GRAFIKAS (6.8 pav.) atributai REISAS ir DATA yra pirminiai; atributas GALERĖJA yra dalinėje FP nuo rakto REISAS,DATA , o funkcinė priklausomybė REISASGALERĖJA yra pilnoji. Pažymėtina, kad kiekviena dalinė FP yra tranzityvioji:

REISAS,DATA REISAS,DATA (refleksyvumas)

REISAS GALERĖJA (užsiduota)

REISAS,DATA REISAS (projektyvumas)

REISAS,DATA GALERĖJA (tranzityvumas)

6.8 pav. REISASGALERĖJA yra pilnoji funkcinė priklausomybė, o REISAS,DATAGALERĖJA yra dalinė

Kadangi REISAS,DATA GALERĖJA yra dalinė FP nuo rakto, tai ši FP yra tuo pačiu ir tranzityvioji nuo rakto taip pat. Šia išvada pasinaudosime vėliau analizuodami aukš¬tesnes normalines formas.

Schema GRAFIKAS nėra 2NF, nes egzistuoja nepirminis atributas GALERĖJA, kuris yra dalinėje funkcinėje priklausomybėje nuo rakto REISAS,DATA . Kita schema GRAFIKAS1 (žr. 6.9 pav.) yra 2NF, nes abu nepirminiai atributai PILOTO_KODAS ir PILOTO_PAVARDĖ yra tik pilnosiose FP nuo rakto REISAS,DATA .

6.9 pav. Santykių schemos 2NF pavyzdys

Trečioji normalinė forma. Santykių schema R yra trečiojoje normalinėje formoje (3NF), jeigu ji yra 1NF ir neegzistuoja nepirminis atributas A, kuris yra tranzityviojoje FP nuo bet kurio rakto.

Nors schema GRAFIKAS1 yra 2NF, tačiau nebus 3NF, nes atributas PILOTO_PAVARDĖ yra tranzityviojoje funkcinėje priklausomybėje nuo rakto REISAS,DATA .

Apibrėšime 2NF ir 3NF griežčiau. Tarkime, kad:

F – užsiduotų funkcinių priklausomybių aibė; F+ – funkcinių priklausomybių galinė aibė;

R – santykių schema;

X – bet koks R raktas; XR;

YR;

A – nepirminis atributas; AX; AY .

Schema R atžvilgiu F yra 3NF, jeigu neegzistuoja trejetas X, Y ir A tokie, kurie tenkina šias tris sąlygas:

1) XY F+

2) YA F+

3) YX F+

2NF yra dalinis 3NF atvejas, kai papildomai pareikalaujama, kad YX . Tarkime, kad:

F – užsiduotų funkcinių priklausomybių aibė; F+ – funkcinių priklausomybių galinė aibė;

R – santykių schema;

X – bet koks R raktas; XR;

YR; YX;

A – nepirminis atributas; AX; AY .

Schema R atžvilgiu F yra 2NF, jeigu neegzistuoja trejetas X, Y ir A tokie, kurie tenkina šias tris sąlygas:

1) XY F+

2) YA F+

3) YX F+

6.9 paveikslo schemoje užsiduokime:

X = REISAS,DATA ; Y = PILOTO_KODAS ir A = PILOTO_PAVARDĖ.

Su šia užsiduota trejuke iš karto paneigiame, kad schema GRAFIKAS1 nėra 3NF, nes tenkinamos visos trys sąlygos, tačiau negalima paneigti, kad shema nėra 2NF, nes užsiduota užsiduotoje trejukėje YX . Tačiau paneigti, kad schema GRAFIKAS nėra 2NF, nepavyks, nes tokia trejukė, kai YX, neegzistuoja. Iš čia seka, kad nagrinėjama schema yra 2NF. 6.10 paveiksle pateikta schema PREK1 bus 3NF, nes paneigti ją nepavyks. Užsiduokime, pavyzdžiui, X = KOMPL_NR,VIETA ; Y = PAVAD,VIETA ir A = KIEKIS . Užsiduotoje trejukėje galioja KOMPL_NR,VIETA PAVAD,VIETA ; PAVAD,VIETA KIEKIS . Tokiu būdu pirmosios dvi sąlygos tenkinamos, tačiau funkcinė priklausomybė PAVAD,VIETA KOMPL_NR,VIETA yra teisinga, ir trečioji sąlyga netenkinama. Jeigu bandysime ieškoti kokią nors kitą trejukę X, Y, A, kuri patenkintų visas tris sąlygas, tai padaryti nepavyks. Iš čia seka, kad schema PREK1 yra 3NF.

6.10 pav. 3NF schemos pavyzdys

Dabar įrodysime tokį teiginį: jei schema R su užsiduota FP aibe F yra 3NF, tai ji yra ir 2NF. Tam pakanka parodyti, kad kiekviena dalinė FP yra tranzityvioji. Tarkime, kad nepirminis atributas A yra dalin.ėje FP nuo rakto X. Tada egzistuos X’, X’X, toks, kad F X’A . Čia bus netiesa, kad X’X, nes tokiu atveju X’ būtų raktas. Taip pat žinome, kad AX, nes A yra nepirminis atributas, ir AY. Tokiu būdu nepirminis atributas A tranzityviai priklauso nuo rakto X, nes: X X’, X’A, X’X F+, A X’,X . Iš čia seka išvada, kad, jeigu FP yra dalinė, tai ji yra ir tranzityvioji. Tuo atveju, kai nagrinėjama schema R yra 3NF, užsiduotoje FP aibėje F nėra (arba joje negalime išvesti) tranzityviųjų FP nuo rakto X. Jeigu taip, tai tada nėra ir dalinių FP. Jeigu nėra dalinių FP, tai nagrinėjama schema yra 2NF.

Paimkime DB schemą R = {R1, R2, Rn}. Čia Ri (i = 1, 2, .,n); yra santykių schema. Sakysime, kad DB schema R yra 3NF, jeigu kiekviena santykių schema Ri yra 3NF. Dekompozicijos metodo esmę sudaro tai, kad DB schema suprojektuojama, dekomponuojant pradinę universaliąją schemą R, kuri turi visus atributus, į “smulkesnes” santykių schemas Ri . Dekompozicijos rezultate gauname normalizuotą DB schemą R. Jeigu dekompozicijos procese panaudojamos tik funkcinės priklausomybės, tai gauta DB schema R gali tenkinti 3NF reikalavimus. Toliau pateiktas normalizavimo algoritmas, kuris garantuoja 3NF reikalavimus.

Normalizavimo algoritmas NA3. Tarkime, kad R – universalioji schema, ir joje yra užduota FP aibė F. Šioje schemoje nustatome trejukę X, Y ir A, kurios dėka panei¬giame, kad schema R nėra 3NF. Čia, kaip ir anksčiau, panaudoti tokie pažymėjimai:

F – užsiduotų funkcinių priklausomybių aibė; F+ – funkcinių priklausomybių galinė aibė;

R – santykių schema;

X – bet koks R raktas; XR;

A – nepirminis atributas; AX; AY .

Algoritmas susideda iš 2 punktų.

1) Schema suskaidoma į dvi naujas schemas R1 ir R2: R1 = X,A ; R2 = R-A . T.y. į pirmąją schemą įkeliame raktą X ir nepirminį atributą A, o schemą R2 paliekame tokią pat kaip pradinę R tik joje atmetame atributą A. Aišku, kad schema R1 būtinai bus 3NF, o gautoje schemoje R2 iš naujo užsiduodame FP aibę, ir patikriname ar ši schema tenkina 3NF reikalavimus. Jeigu schema R2 yra 3NF, tai normalizavimo procesas baigimas ir DB schema R = {R1, R2}. Jeigu R2 netenkina 3NF reikalavimus, tai schemą R2 traktuojame kaip pradinę R ir kartojame šį 1 punktą. Suprantama, kad senojoje modifikuotoje schemoje R2 atributų skaičius bus vienu atributu sumažintas. Šį žingsnį kartojant visada pasieksime galiausiai schemos R2 3NF, o tai reiškia, kad algoritmas yra baigtinis. Toliau vykdome 2 punktą.

2) Tarkime, kad po pirmo punkto kartojimo gavome DB schemą R = {R1, R2, ., Rn}. Patikriname, ar gautoje santykių schemų aibėje nėra schemų su vienodais raktais. Jeigu gavome kelias tokias schemas, tai jas apjungiame į vieną, paimdami bendrą raktą ir visus nepirminius atributus. Tarkime, kad yra gautos dvi schemos X,A ir X,B. Šias dvi schemas apjungę gausime schemą X,A,B . Apjungtą (iš dviejų ar daugiau schemų) schemą traktuojame kaip schemą R ir tikriname, ar ji yra 3NF. Jei ji nėra 3NF, tai vykdome 1 punktą. Jei apjungtų schemų po šio punkto vykdymo nebegauname, tai algoritmą baigiame, o jo rezultatas yra R = {R1, R2, ., Rm}.

Pažymėsime tą faktą , kad pateiktas algoritmas rezultate duoda DB schemą, kuri tenkina pagrindinį DB projektavimo – informacijos išsaugojimo – kriterijų (žr. 6.3 sk.). Iš tiesų, kai pirmuoju punktu schemą R išskaidėme į dvi schemas R1 ir R2, tai bet kokius šių schemų du santykius r1(R1) ir r2(R2) natūraliosios jungties operacija sujungę atstatysime universalųjį r(R). Jeigu, tęsiant algoritmą, schema R2 būtų toliau dekomponuojama, gautume vietoj R2 dvi naujas, o šių naujų schemų bet kokius santykius sujungę atstatytume santykį r2(R2). Algoritmą baigus vykdyti gaunama DB schema R = {R1, R2, ., Rn}. Iš DB santykių r1, r2, ., rn galima atstatyti universalųjį santykį r(R). Tokiu būdu algoritmas NA3 užtikrina informacijos išsaugojimo kriterijų.

Pritaikykime NA3 schemai GRAFIKAS (žr. 6.8 pav.), kuri netenkina, kaip jau buvo parodyta anksčiau 2NF reikalavimus. Pažymėkime (6.11.a pav.): X = REISAS,DATA ; Y = REISAS ; A = GALERĖJA . Pasirinktas trejetas tenkina visas tris sąlygas: 1) XY F+ ; 2) YA F+ 3) YX F+ . Pritaikę algoritmo 1 punktą, gausime 3NF DB schemą R = {R1, R2} (6.11b pav.). Pritaikykime NA3 schemai GRAFIKAS1 (žr. 6.9 pav.), kuri netenkina 3NF reikalavimus. Pažymėkime (6.12a pav.): X = REISAS,DATA ; Y = PILOTO_KODAS ; A = PILOTO_PAVARDĖ . Po dekompozicijos gausime 3NF DB schemą R = {R1, R2} (6.12b pav.). Pastebėsime, kad taikant algoritmą NA3 rezultate visada gausime tiksliai vieną santykių schemą su universaliosios schemos raktais, o santykių kitų schemų raktai būtinai skirsis nuo universaliosios shemos raktų.

a) b)

6.11 pav. Schemos GRAFIKAS dekomponavimas, sudarant DB schemą {R1, R2}.

6.12 pav. Schemos GRAFIKAS1 dekomponavimas, sudarant DB schemą {R1, R2}.

Ketvirtoji normalinė forma. Prieš nagrinėjant ketvirtąją normalinę formą (4NF) apibrėšime trivialiąsias daugiareikšmes priklausomybes (DP). Schemoje R daugiareikšmė priklausomybė X Y yra trivialioji, jei :

a) X,Y = R

arba

b)Y X .

Pirmuoju atveju schemoje R be atributų iš aibių X ir Y kitų atributų nėra, ir tada aišku, kad bet kokiame santykyje r(R) dviejuose korte˛uose s ir t X-komponentams sutampant Y-komponentus sukeičiant vietomis naujų kortežų u ir v, besiskiriančių nuo s ir t, neišvesime. Todėl visada s,t r(R) , o tai reiškia, kad prie bet kokių X ir Y daugiareikšmė priklausomybė X Y bus teisinga. Antruoju atveju įrodymas taip pat labai paprastas:

X X (FP refleksyvumas);

X Y (FP projektyvumas);

X Y (DP pirmoji aksioma).

Kaip matome X Y visada teisinga, jeigu Y X .

Paimkime santykių schemą R su bet kokiu jos raktu K ir jos atributų du poaibius X, Y; X,Y R . Schema R yra 4NF, jeigu neegzistuoja netrivialiųjų daugiareikšmių priklausomybių X Y, kurių kairiosios pusės X nepadengia schemos R bent vieną raktą K. Atvirkščiai: schema R nebus 4NF, jeigu schemoje R yra bent viena netrivialioji DP ir jos kairioji pusė nedengia jokį raktą K. Jeigu shemoje R egzistuoja netrivialioji daugiareikšmė priklausomybė X Y ir X K , tai tokia DP nemaio 4NF.

Paimkime schemą R su užsiduotomis FP ir DP (6.10 pav.). Norint nustatyti, ar ši schema yra 4NF turime pradžioje užsiduoti FP ir DP ir nustatyti po to, pasinaudojant funkcinėmis priklausomybėmis, raktus. Šioje schemoje užsiduotų FP ir DP aibė pažymėta raide D, o iš D išvedamos priklausomybės pažymėtos D+. Čia: 3 DP išvesta iš 1 FP, panaudojant DP išvedimo pirmąją aksiomą; 4DP išvesta iš 2 DP, panaudojant DP išvedimo antrąją aksiomą; 5 ir 6 DP yra trivialiosios DP, kurios nustatant schemos normalinę formą yra ignoruojamos. Ši schema nebus 4NF, nes užsiduota antroji DP nėra trivialioji, o šios DP kairioji pusė – atributas GAMINYS – nedengia raktą GAMINYS,OPERACIJA,SANDĖLIS . Schema GAMYBA nebus 4NF ir dėl 3 DP, kuri yra išvesta iš 1 FP. Ši DP nėra trivialioji, o jos kairioji pusė GAMINYS,SANDĖLIS nedengia raktą GAMINYS,OPERACIJA,SANDĖLIS .

6.13 pav. Schema GAMYBA su užsiduotomis FP ir DP, kuri nėra 4NF

Normalizavimo algoritmas NA4. Šis algoritmas taikomas atžvilgiu netrivialiųjų DP. Čia panaudosime tokius pažymėjimus:

R – santykių schema;

D – užsiduotų FP ir DP aibė; D+ – galinė aibė DP, kuri susideda iš aibės D daugiareikšmių priklausomubių ir DP, kurios išvedamos iš D ;

K – bet koks R raktas; KR;

X Y – netrivialioji DP; X Y D+ ; X,Y R ;

Z = R-X-Y ; Z .

Algoritmas susideda iš 2 punktų.

1) Schema suskaidoma į dvi naujas schemas R1 ir R2: R1 = X,Y ; R2 = R-Y . T.y. į pirmąją schemą įkeliame schemos R atributų poaibius X ir Y, o schemą R2 paliekame tokią pat kaip pradinę R tik joje atmetame atributus Y. Gautoje schemose R1 ir R2 iš naujo užsiduodame F- ir D- priklausomybes, ir patikriname ar šios schemos tenkina 4NF reikalavimus. Jeigu abi schemos R1 ir R2 yra 4NF, tai normalizavimo procesas baigimas ir DB schema R = {R1, R2}. Jeigu viena iš šių naujų schemų, .pavyzdžiui R2, netenkina 3NF reikalavimus, tai schemą R2 traktuojame kaip pradinę R ir kartojame šį 1 punktą. Suprantama, kad senojoje modifikuotoje schemoje R2 atributų skaičius bus vienu atributu sumažintas. Šį žingsnį kartojant visada pasieksime galiausiai schemos R2 4NF, o tai reiškia, kad algoritmas yra baigtinis. Toliau vykdome 2 punktą.

2) Tarkime, kad po pirmo punkto kartojimo gavome DB schemą R = {R1, R2, ., Rn}. Patikriname, ar gautoje santykių schemų aibėje nėra schemų su vienodais raktais. Jeigu gavome kelias tokias schemas, tai jas apjungiame į vieną, paimdami vieną bendrą ir visus nepirminius atributus. Tarkime, kad yra gautos dvi schemos X,A ir X,B . Šias dvi schemas apjungę gausime schemą X,A,B . Apjungtą (iš dviejų ar daugiau schemų) schemą traktuojame kaip schemą R ir tikriname, ar ji yra 4NF. Jei ji nėra 4NF, tai vykdome 1 punktą. Jei apjungtų schemų po šio punkto vykdymo nebegauname, tai algoritmą baigiame, o jo rezultatas yra R = {R1, R2, ., Rm}.

a) b)

6.14 pav. Pradinės schemos GAMYBA dekomponavimas į DB 4NF

Pritaikykime šį algoritmą schemai GAMYBA (žr. 6.13 pav.), kurios normalizavimą pradėsime nuo netrivialiosios 2 daugiareikšmės priklausomybės GAMINYS OPERACIJA (6.14a pav.), kuri trukdo 4NF. Pirmuoju algoritmo punktu išskirsime naujas schemas R1 ir R2, kurios abi yra 4NF (6.14b pav.). Iš tiesų schema R1 yra 4NF, nes čia jokių netrivialiųjų DP užduoti negalime. Schemoje R2 iš parodytos FP galėsime išvesti daugiareikšmę priklausomybę GAMINYS,SANDĖLIS KIEKIS , tačiau pastaroji yra trivialioji, nes schemoje R2 be X- ir Y- atributų kitų nėra. Pagaliau, jeigu ši DP ir nebūtų trivialioji, kairioji priklausomybės pusė dengia visą raktą GAMINYS,SANDĖLIS , ir todėl ši DP nemaišo 4NF. Kadangi kitų netrivialiųjų DP užduoti negalime, tai čia turime pripa˛inti, kad schema R2 yra 4NF.

Reikia pažymėti, kad tokį pat rezultatą būtume gavę, jeigu normalizavimą būtume pradėję nuo 4 DP, kuri buvo išvesta antrąja išvedimo taisykle iš 2 DP. Jeigu dekomponavimą būtume pradėję nuo 3 DP, kuri buvo išvesta pirmąja išvedimo taisykle iš 1 FP, tai po pirmosios iteracijos gautume tą patį rezultatą, kaip ir tuo atveju, jeigu algoritmą NA3 taikytume 1 funkcinės priklausomybės atžvilgiu. Ir dar pastebėsime, kad taikant NA4 pavyksta “supiaustyti” dekompozicijos rezultate universaliosios schemos raktą, kai tuo tarpu, taikant NA3, rezultate gaudavome DB schemos vieną santykių schemą su universaliosios schemos raktu.

Tarkime, kad rezultatyvinė DB schema yra R = {R1, R2, ., Rn}. DB schema R yra 4NF, jeigu kiekviena jos santykių schema Ri (i = 1, 2, ., n) yra 4NF. Duomenų bazės schema R , būdama 4NF, bus ir 3NF. Kad pastarasis teiginys yra teisingas, reikia įrodyti, kad schemos R kiekviena santykių schema Ri , būdama 4NF, bus ir 3NF. Pastarasis teiginys seka iš to fakto, kad kiekviena FP yra DP. Tarkime, kad turime schemą R, kuri yra 4NF, bet nėra 3NF. Tada egzistuos nepirminis atributas A, kuris tranzityviai per atributų poaibį Y priklausys nuo rakto X: XY F+ ;YA F+ ;YX F+ . Bet iš YA seka Y A ; Y yra neraktas ir Y A . Todėl taikant NA4 atributams Y,A bus numatyta nauja schema , ir tokiu būdu tranzityvioji FP X A bus eliminuota. Algoritmo NA4 taikymo procese eliminuosime visas tranzityviasias FP nuo rakto ir tokiu būdu užtikrinsime schemos R 4NF.

Jungimo/projekcijos normalinė forma. Jungimo/projekcijos normalinė forma (JPNF) nustatoma naudojant jungimo/projekcijos priklausomybes (JPP). 6.2 skyrelyje buvo pateikta šių priklausomybių išvedimo taisyklė JPT1:

JPT1) X Y *[X,Y; X,Z]; Z = R – (XY) .

Ši taisyklė leidžia išvesti JPP iš DP. Dabar parodysime, koks yra ryšys tarp FP ir JPP. Šis ryšys nėra tiesioginis, tačiau jei 3NF dumenų bazės schema R = {R1, R2, ., Rn} yra suprojekuota, naudojant NA3 ir užsiduotą FP aibę F, (pažymėsime ją kaip funkciją R(F)), tai iš šios DB schemos vienareikšmiškai seka jungimo/projekcijos priklausomybė *[ R1; R2; ..;Rn] . Pažymėsime šią išvedimo taisyklę JPT2:

JPT2) R(F) *[ R1; R2; .;Rn] .

Analogikai jei 4NF dumenų bazės schema R = {R1, R2, ., Rn} yra suprojekuota, naudojant NA4 ir užsiduotą FP ir DP aibę D (pažymėsime ją kaip funkciją R(D)), tai iš šios DB schemos vienareikšmiškai seka jungimo/projekcijos priklausomybė *[ R1; R2; .;Rn] . Pažymėsime šią išvedimo taisyklę JPT3:

JPT3) R(D) *[ R1; R2; .;Rn] .

6.15 pav. Užsiduotų priklausomybių aibės C ir galinės priklausomybių aibės C+ pavyzdys

6.15 paveiksle parodytas užsiduotų priklausomybių aibės C pavyzdys. Kitos priklauso¬my¬bės, kurios gali būti išvestos iš C, sudaro galinę priklausomybių aibę C+.

Naudojant taisyklę JPT2 iš užsiduotų funkcinių priklausomybių išvesta JP2. Parodysime, kaip tai atlikta. Pritaikę algoritmo NA3 pirmąjį punktą funkcinės priklausomybės ŠVŠŠ atžvilgiu, vėliau ŠVVE atžvilgiu ir, galiausiai, KV KŠ atžvilgiu gausime tokias schemas:

Algoritmo antruoju punktu apjungus dvi pirmąsias schemas su bendru raktu ŠV, gausime DB schemą R(F) = {R1, R4, R5}, kuri yra 3NF :

Tada, taikant taisyklę JPT2, R(F) *[ R1; R4; .;R5] .

Priklausomybė JP3 išvesta pasinaudojant funkcine priklausomybe ŠV ŠŠ,VE :

ŠV ŠŠ,VE (užsiduota aibėje C);

ŠV ŠŠ,VE (pritaikyta taisyklė DT1);

ŠV ŠŠ,VE *[ R1; R6] (pritaikyta taisyklė JPT3).

Priklausomybė JP4 = *[R3; R] yra trivialioji, kadangi ji turi vieną komponentą – visą universaliąją schemą R. Suprantama, kad bet kokius santykius r3, r3 = R3(r(R)), ir r(R) natūraliosios jungties operacija apjungus visada gausime universaliosios schemos R santykį r(R). Kadangi trivialiųjų JPP galima užduoti daug, tai jos niekada nespecifikuojamos, tačiau jomis patogu pasinaudoti apibrėžiant jungimo/projekcijos normalinį formą (JPNF).

Santykių schema R yra užsiduotų priklausomybių C at˛vilgiu jungimo/projekcijos normalinėje formoje (penktojoje normalinėje formoje), jeigu kiekviena JPP iš aibės F+ (JPP = *[R1; R2; .; Rn]) yra arba trivialioji, arba kiekvienas priklausomybės komponentas Ri (i = 1, 2, ., n) yra schemos R super-raktas. Pagal šį apibrėžimą trivialioji priklausomybė JP4 nemaišo JPNF, kai tuo tarpu visų kitų 6.12 paveiksle parodytų JP priklausomybių JP1, JP2 ir JP3 atžvilgiu schema R nėra JPNF, nes, pavyzdžiui, JP1 yra netrivialioji JPP ir visi jos komponentai nedengia raktą ŠV,KV .

Normalizavimo algoritmas NA5. Šis algoritmas taikomas atžvilgiu netrivialiųjų JPP. Čia panaudosime tokius pažymėjimus:

R – santykių schema;

C – užsiduotų FP, DP ir JPP aibė; C+ – galinė JPP aibė, kuri susideda iš aibės C jungimo/projekcijos priklausomubių ir JPP, kurios išvedamos iš C ;

K – bet koks R raktas; KR;

*[R1; R2; .; Rn] – netrivialioji JPP iš aibės C+ ; Ri R ; i = 1, 2, ., n .

Algoritmas susideda iš 2 punktų.

1) Schema R suskaidoma į naujas schemas R1, R2, ., Rn . Gautose schemose Ri (i = 1, 2, ., n) iš naujo užsiduodame F-, D- ir JP- priklausomybes, ir patikriname ar šios schemos tenkina JPNF reikalavimus. Jeigu gautos viso santykių schemos yra JPNF, tai normalizavimo procesas baigimas ir DB schema R = {R1, R2, ., Rn }. Jeigu viena iš šių naujų schemų, pavyzdžiui Rj, netenkina JPNF reikalavimus, tai schemą Rj traktuojame kaip pradinę R ir kartojame šį 1 punktą. Suprantama, kad schemose R1, R2, ., Rn atributų skaičius, lyginant su schemos R atributų skaičiumi, bus sumažintas. Šį žingsnį kartojant visada pasieksime galiausiai schemų JPNF, o tai reiškia, kad algoritmas yra baigtinis. Toliau vykdome 2 punktą.

2) Tarkime, kad po pirmo punkto kartojimo gavome DB schemą R = {R1, R2, ., Rm}. Patikriname, ar gautoje santykių schemų aibėje nėra schemų su bedrais raktais. Jeigu gavome kelias tokias schemas, tai jas apjungiame į vieną, paimdami bendrą raktą ir visus nepirminius atributus. Tarkime, kad yra gautos dvi schemos X,A ir X,B . Šias dvi schemas apjungę gausime schemą X,A,B . Apjungtą (iš dviejų ar daugiau schemų) schemą traktuoj.ame kaip schemą R ir tikriname, ar ji yra JPNF. Jei ji nėra JPNF, tai vykdome 1 punktą. Jei apjungtų schemų po šio punkto vykdymo nebegauname, tai algoritmą baigiame, o jo rezultatas yra R = {R1, R2, ., Rp}.

Pritaikę šio algoritmo pirmą punktą atžvilgiu užsiduotos JP1 (žr. 6.15 pav.) gausime DB schemą R = {R1, R2, R3} (6.16 pav.).

6.16 pav. JPNF duomenų bazės schema

Kadangi kiekviena santykių schema yra JPNF, tai ir visa DB schema yra JPNF. Kiekviena JPNF duomenų bazės schema yra ir 4NF. Šis teiginys seka iš JPT3 taikymo: jeigu dar aptiktume sudarytų santykių schemų tarpe bent vieną netrivialiąją DP, kuri maišo 4NF, tai iš jos būtų galima dar išvesti netrivialiąją JPP, o tai reikštų, kad DB schema nėra JPNF. Bet mes DB buvome normalizavę iki JPNF.6.5. Nenormalizuotų schemų trūkumai

Paimkime 1NF santykių schemą GRAFIKAS (6.17a pav.), kurią normalizavę gausime JPNF dumenų bazės schemą {G1, G2}(6.17b pav.).

a) b)

6.17 pav. DB schema {G1, G2}, gauta normalizavus santykių schemą GRAFIKAS

6.23 lentelė.Grafikas 6.24 lentelė.G1 6.25 lentelė. G2

REIS DATA PILOTAS GAL REIS GAL REIS DATA PILOTAS

112 06/06 Blonskis J. 7 112 7 112 06/06 Blonskis J.

112 06/07 Gustas R. 7 203 8 112 06/07 Gustas R.

203 06/07 Blonskis J. 8 203 06/07 Blonskis J.

Paimkime pradinės schemos vieną egzempliorių Grafikas. Po projekcijos operacijos patalpinkime duomenis į schemų G1 ir G2 lenteles G1 (6.24 pav.) ir G2 (6.25 pav.). Čia pastebėsime tokius nenormalizuotos schemos trūkumus:

1) nenormalizuotų schemų lentelėse yra bereikalingas duomenų dubliavimas;

2) nenormalizuotų schemų lentelėse pasireiškia duomenų modifikavimo, pašalinimo ir įterpimo anomalijos (nepageidautini reiškiniai).

Dėl funkcinės priklausomybės REIS GAL lentelėje Grafikas pasikartojant atributo REIS reikšmėms pasikartos ir atributo GAL reikšmės, ir tai yra bereikalingas duomenų dubliavimas. Po normalizavimo lentelėje G1 šie duomenys nebebus dubliuojami.

Su bereikalingu dubliavimu siejasi modifikavimo anomalijos. Jeigu tarkime 112 reisu skrendantiems lėktuvams vietoj 7 galerėjos bus priskirta kokia nors kita, pavyzdžiui 6 galerėja, tai tada atributo GAL reikšmė turėtų būti modifikuojama tiek kartų kiek kartų pasikartoja atributo REIS reikšmė 112. Kadangi lentelėje G1 atributo REIS reikšmės nedubliuojamos, tai atributo GAL reikšmę pakanka modifikuoti vieną kartą.

Pašalinimo ir įterpimo anomalijos susijusios su tuo, kad nenormalizuotoje lentelėje yra saugojama nevienalytė informacija. Lentelėje Grajikas saugojama informacija apie pilotų darbo grafiką ir apie galerėjų priskyrimą lėktuvų reisams. Jeigu tarkime pašalintume duomenis apie 203 reiso lėktuvų skrydžius (duotu pavyzdžiu kortežą <203; 06/07; Blonskis J.; 8>), tai automatiškai prarastume informaciją apie 203 reiso lėktuvams priskirtą galerėją. Jeigu paliksime vieną kortežą <203; ; ; 8> su atributų DATA ir PILOTAS neapibrėžta reikšme , tai negalima kontroliuoti duomenų bazės pilnumą, nes tampa neaišku, ką reiškia saugojama reikšmė reiškia – ar ši atributų reikšmė yra nežinoma ir reikia įvesti trūkstamus duomenis, ar einamuoju DB eksploatavimo metu ši atributų reikšmė yra nereikalinga. Kitais žodžiais tariant, simbolis (paprastai čia naudojamas tarpo ženklas) įgauna dvigubo neapibrėžtumo prasmę “nežinoma reikšmė – neadjekvati reikšmė”. Normalizuotoje DB pašalinus duomenis apie 203 reiso lėktuvų skrydžius (duotu atveju lentelėje G2 pašalinus kortežą <20; 06/07; Blonskis J.>), informacija apie 203 reisui priskirtą galerėją išliks lentelės G1 korteže <203; 8>.

Analogiška situacija susidaro įterpiant naujus kortežus nenormalizuotos schemos lentelėje Grafikas. Tarkime, kad į šią lentelę reikia įterpti naują kortežą <304; ; ; 6> tam, kad duomenų bazėje patalpinti informaciją apie naujam 304 reisui prislirtą 8 galerėją. Tačiau čia vėl turime situaciją, kai eksploatuojamos DB atributų reikšmės turi dvigubą neapibrėžtumą. Šioje situacijoje, kortežą <304; 8> įterpus į lentelę G1, dvigubo neapibrėžtumo išvengiame.

Kuo aukštesnis yra DB normalizavimo laipsnis, tuo dubliavimo ir anomalijų lygis yra sumažinamas.6.6. Dekompozicijos metodo trūkumai

Paprastai praktikoje projektuojant duomenė bazes apsiriboja 3NF, kadangi čia pakanka naudoti nesunkiai suvokiamas funkcines priklausomybes. Dekompozicijos metodo trūkumus išnagrinėsime apsiribojant 3NF.

1 trūkumas: funkcinių priklausomybių nuostoliai. Naudojant normalizavimo algoritmą NA3 universaliajai schemai R gautos DB schemos R santykių schemose Ri (i = 1, 2, .,n) suprojektuotų FP aibė FR;FR = ; nėra ekvivalentinė pradinėje schemoje R užduotų FP aibei F. Paimkime 5.3 skyrelyje nagrinėtą pavyzdį (6.18 pav.).

6.18 pav. Normalizavimui pasirinkta schema R

Eliminuodami tranzityviąją funkcinę priklausomybę VAR,SLA SCH pasirinkime normalizavimui trejukę X, Y, A (žr. 6.18 pav.) ir sudarykime DB schemą R = {R1, R2} (6.18pav.), kuri yra 3NF. Po normalizavimo suprojektavus funkcines priklausomybes gausime jų aibę FR ; FR = FR1 FR2 . Tačiau FR nėra F dengtis, nes iš FR neišvesime funkcines priklausomybes SCH,SLA TER ir SCH,VAR POS . Tokiu atveju sakome, kad DB schema R nepilnai charakterizuoja FP aibę F. Jeigu DB schemoje atsiranda FP nuostoliai, tai prarandame galimybę kontroliuoti duomenų vientisumą, duomenų bazės duomenų santykius neapjungiant į universaliosios schemos R duomenų santykį.

6.19 pav. Po normalizavimo DB schemoje gaunami FP nuostoliai

2 trūkumas: užsidavus perteklinę užduotų funkcinių priklausomybių aibę dekom¬po¬zicijoje gausime perteklinių santykių schemų. Paimkime schemą R (6.20 pav.), ku¬rioje užduotų funkcinių priklausomybių F yra perteklinė: čia funkcinė priklausomybė REG_DATA,FAKUL PR_KOM yra perteklinė, nes ji gali būti išvesta iš kitos priklau¬somybės FAKUL PR_KOM , jos kairiąją pusę papildžius atributu REG_DATA . Pradėjus pirmuoju žingsniu normalizavimą nuo perteklinės priklau¬so¬my¬bės REG_DATA,FAKUL PR_KOM gausime dvi santykių schemas R1 ir R2 (6.20b), iš kurių pirmoji nėra 3NF. Antruoju žingsniu R1 dekomponavus į R11 ir R12, rezultate gausime DB schemą {R11, R12, R2} (6.20c pav.). Gautoje DB schemoje santykių schema R12 yra perteklinė. Jeigu REG_DATA,FAKUL PR_KOM nebūtų užduota, ir normalizavimą pradėtume nuo neperteklinės priklausomybės FAKUL PR_KOM, tai iš karto gautume DB schemą {R11, R2}.

6.20 pav. Normalizavus pradinę schemą R su pertekline FP REG_DATA,FAKUL PR_KOM DB schemoje {R11, R12, R2} santykių schema R12 gaunama perteklinė

3 trūkumas: santykių schemų rezultatyvinis skaičius priklauso nuo to, kokia mini¬ma¬li FP aibė yra užduota. Paimkime tą pačią pradinę schemą R su su skirtingomis mini¬maliomis užduotomis FP aibėmis F (6.21a pav.) ir F’ (6.22a pav.); F F’. Pritaikę

6.21 pav. Normalizavus schemą R su užsiduota FP aibe F gaunama DB schema {R1, R21, R22}

6.22 pav. Normalizavus schemą R su užsiduota FP aibe F’ gaunama DB schema {R3, R22}

algoritmo NA3 pirmą punktą atžvilgiu tranzityviosios priklausomybės DP KA gausi¬me santykių schemas R1 ir R2 (6.21b pav.), o schema R2 dar nėra 3NF. Pritaikę algoritmo pirmą punktą dar kartą atžvilgiu tranzityviosios priklausomybės DK ML gausi¬me DB schemą R = {R1, R21, R22} (6.21c pav.), kuri yra 3NF. Pritaikykime algoritmą NA3, kai schemoje R yra užduota FP aibė F’. Po algoritmo pirmojo punkto taikymo atžvilgiu tranzityviosios priklausomybės DP KA gausime kaip ir anksčiau santykių schemas R1 ir R2 (6.22b pav.). Pritaikę algoritmo pirmą punktą dar kartą atžvilgiu tranzityviosios priklausomybės DP ML gausi¬me santykių schemas R1, R22 ir R23 (6.22c pav.). Kadangi schemos R1 ir R21 turi tą patį raktą DP, tai šias schemas apjungiame ir gauname rezultatyvinę 3NF bazės schemą R’ = {R3, R22} (6.22d). Gautos dvi DB schemos R ir R’ skiriasi, ir schemoje R yra trys santykių schemos, o R’ – dvi. Sudarant schemą R santykių schemas R1 ir R21 apjungti negalėjome, nes jų raktai DP ir

DK skyrėsi, nors užduotos FP aibės F atžvilgiu šie raktai yra ekvivalentiniai. Šį trečiąjį dekompozicijos metodo trūkumą būtų galima pašalinti, jeigu algoritmo NA3 (žr. 6.4 sk.) antrąjį punktą modifikuotume taip: .

2) Tarkime, kad po pirmo punkto kartojimo gavome DB schemą R = {R1, R2, ., Rn}. Patikriname, ar gautoje santykių schemų aibėje nėra schemų su ekvivalentiniais raktais. Jeigu gavome kelias tokias schemas, tai jas apjungiame į vieną, paimdami bendrą raktą ir visus nepirminius atributus. Tarkime, kad yra gautos dvi schemos X,A ir X’,B. Šias dvi schemas apjungę gausime schemą X,A,B . Apjungtą (iš dviejų ar daugiau schemų) schemą traktuojame kaip schemą R ir tikriname, ar ji yra 3NF. Jei ji nėra 3NF, tai vykdome 1 punktą. Jei apjungtų schemų po šio punkto vykdymo nebegauname, tai algoritmą baigiame, o jo rezultatas yra R = {R1, R2, ., Rm}.

Suprantama, kad algoritmas po šitokio modifikavimo taptų sudėtingesnis, nes antruoju algoritmo punktu tektų nustatyti raktų ekvivalentiškumą, o tam savo ruožtu reiktų užsiduotų FP aibę F suskirstyti į FP ekvivalentiškumo klases (žr. 4.3 sk.).

4 trūkumas: DB projekto nevienareikšmiškumas. Tame pačiame pavyzdyje (žr. 6.21 pav.), kur užduota FP aibė yra F, jeigu normalizavimą pradėsime ne nuo dalinės priklausomybės PR,DP KA, o nuo kitos dalinės PR,DK KA , tai vietoj DB schemos R (6.21c pav.) gausime schemą R’ (6.22d pav.).6.7. Pilnosios reliacinės duomenų bazės.

Paimkime reliacinės duomenų bazės (RDB) schemą R (R = {R1, R2, .,Rn}); ir užsiduotą FP aibę F. RDB R atžvilgiu F yra pilnoji, jeigu tenkina keturis reikalavimus:

1) aibę F pilnai charakterizuoja schema R;

2) kiekviena santykių schema Ri yra 3NF; i = 1, 2, ., n .

3) aibės F atžvilgiu negalime sudaryti kitą RDB schemą su mažesniu santykių schemų skaičiumi tokią, kad tenkintų pirmuosius du reikalavimus;

4) schema R tenkina pagrindinį DB projektavimo kriterijų.

Paimkime užsiduotą FP aibę F ir DB schemą R; R = {R1, R2, .,Rn}. Sakysime, kad schema R pilnai charakterizuoja FP aibę F, jeigu

F {K Ri Ri R; K – schemos Ri bet koks raktas} .

6.4 skyrelyje buvo parodyta, kad normalizavimo algoritmas NA3 garantuoja schemos R trečiąją normalinę formą ir užtikrina pagrindinio kriterijaus reikalavimus, tačiau, kaip buvo parodyta 6.6 skyrelyje, netenkina pirmojo, o tuo pačiu ir trečiojo reikalavimų. Toliau pateikiamas RDB sintezės metodas, kuris tenkina visus keturis RDB reikalavimus.6.8. Duomenų bazių projektavimo sintezės metodas

Šis metodas pagrįstas struktūrinių dengčių (žr. 5 sk.) panaudojimu. Universa¬liojoje santykių schemoje R užduotos funkcinių priklausomybių (UFP) aibės F struktūrinę dengtį Q buvome apibrėžę taip: struktūrinių tipų aibė Q vadinama UFP aibės F struktūrine dengtimi, jeigu F Q ir bet kuriuose dviejuose struktūriniuose tipuose Qi ir Qj iš Q neegzistuoja dvi skirtingos kairiosios aibės Ri ir Rj tokios, kad Ri Rj. Kitais žodžiais tariant, dviejuose skirtinguose struktūriniuose tipuose Qi ir Qj negali egzistuoti atatinka¬mos dvi kairiosios aibės Ri ir Rj, kurios priklauso tai pačiai ekvivalentiškumo klasei eF(X), Q F; X R; EF(X) Tame pačiame skyriuje buvo parodyta, kaip galima iš FP aibės F sukonstruoti jos sudėtinių funkcinių priklausomybių dengtį G ir po to struktūrinę dengtį Q tokias, kad būtų patenkintas dengčių reikalavimas F G Q. Parodyta, kad struktūrinės dengties konstravimą galima atlikti redukavimo kairiosiomis aibėmis taisykle RKAT. Perteklinių kairiųjų aibių eliminavimo taisykle PKAET galima pašalinti perteklines kairiąsias aibes. Naudojant struktūrinių dengčių minimizavimo taisyklę SDMT galima pilnai minimizuoti struktūrinę dengtį Q, nustatant iš FP aibės F tiesiogines FP. Kad supaprastinti taisyklės SDMT euristiką tiesioginėms FP aptikti įvestos apibedrinančiųjų ir detaliųjų struktūrinių tipų sąvokos. Struktūrinių dengčių tiesioginis konstravimas naudojant RKAT, PKAET, RDAT1, RDAT2 ir SDMT turi tokį privalumą, kad konstruojant struktūrines dengtis nebūtina pareikalauti, kad FP aibė F būtų užduota universaliojoje schemoje R, nes pastaroji praktiniu požiūriu gali būti pakankamai didelė ir iš anksto prieš pradedant DB projektavimą net nežinoma. Natūralu, kad FP aibė yra paskirstyta (nustatoma renkant informaciją iš skirtingų vartotojų) ir gali būti nuolat kaupiama analizuojant informacijos sistemos visų vartotojų informacijos poreikius ir šiuos poreikius apibendrinant.

Tarkime, kad pradiniu momentu turime nustatę tik dvi funkcines priklausomybes LA,DK LA,DP ir LA,DP LA,DK (žr. 5.9 pav.), kurias traktuojame, kaip sudėtines FP. Kadangi šių priklausomybių kairiosios aibės yra ekvivalentinės, t.y. LA,DK LA,DP , tai taisykle RKAT šios trys SFP bus apjungtos į vieną (UŽ,LA; LA,DK; LA,DP) LA,DK,DP,UŽ . Po to taisykle RDAT1 visi dešiniosios aibės atributai bus pašalinti, ir gausime priklausomybę Q = (LA,DK; LA,DP). Tarkime, kad po kurio laiko sukaupėme dar dvi funkcines priklausomybes DK DP ir DP DK ir sudarėme dar vieną sudėtinę priklausomybę O = (DP; DK). Dabar turime sudarę struktūrinius tipus O ir Q (žr. 6.23a pav.), tačiau čia LA,DK LA,DP . Ši tiesioginė FP seka iš detaliojo tipo O egzistavimo, kur DP DK . Po kairiosios aibės LA,DK eliminavimo gausime naują struktūrinę dengtį (6.23b pav.), kurioje vietoj tipo Q panaudotas tipas Q’.

6.23 pav. Struktūrinis tipas Q’ gautas minimizuojant Q

RDB sintezės metodo algoritmas SINTEZ susideda iš trijų punktų:

1) Iš duotos FP aibės F sudaroma minimali redukuota struktūrinė dengtis Q = {Q1, Q2, ., Qn}.

2) Kiekvienam struktūriniam tipui Qi iš aibės Q numatome po vieną santykių schemą Ri ; i = 1, 2, ., n .

3) Antruoju punktu gautas schemas Ri papildome dar santykių schema R , skirta universliajam struktūriniam tipui, jeigu tokios schemos aibėje {R1, R2, ., Rn,} nebuvo. Sudaryta RDB schema yra R; R = {R1, R2, ., Rn, R}.

Paimkime iš 5 skyriaus dalykinės srities (žr. 5.10, 5.11 pav.) minimalios redukuotos struk¬tū¬ri¬¬nės dengties pavyzdį (6.24a pav.) ir sudarykime algoritmo SINTEZĖ antruoju punktu RDB schemą (6.24b pav.). Kiekvienai santykių schemai Ri (i = 1, 2, ., n) galima pažymėti raktų aibę {Kij; j = 1, 2, ., m}: raktas Kij yra priskiriamas kiekvienai struktūrinio tipo Qi kairiajai aibei Kj. Čia taip pat parodyta natūralioji charakteringoji FP aibė G, kuri sudaryta naudojant taisyklę NCHT (žr. 5.3 sk.). Visos funkcinės priklausomybės bus raktinės, t. y. šių FP kairiosios pusės bus raktai (o ne super-raktai), nes kiekvi.ena sudėtinė FP Qi buvo redukuota kairiosiomis aibėmis.

6.24 pav. RDB schema {R1, R2, R3} gauta iš ST aibės {Q1, Q2, Q3}

Algoritmo trečiajame punkte įvesta universliosios schemos sąvoka, kuri yra analogiška universalaus struktūrinio tipo sąvokai. Apibrėšime universliojo ST sąvo¬ką. Pateiksime universaliojo struktūrinio tipo apibrėžimą. Pažymėkime: F – FP aibę iš kurios buvo sintezuota struktūrinė dengtis; eF(Q) – struktūrinio tipo Q atributų kairiųjų poaibių R aibę (R eF(Q)); EF(Q) – struktūrinio tipo Q FP ekvivalentiškumo klasę. Struktūrinis tipas Q (QQ) bus universalusis, jeigu iš F galima išvesti FP aibę {R A ; R eF(Q); A – struktūrinės dengties atributas}.

Pateiksime dar dviejų projektavimo prasme naudingų savokų apibrėžimus. Struktūrinis tipas Q su kairiosiomis aibėmis {Rj; j = 1, 2, .,m} bus detalusis atžvilgiu tipo O sukairiosiomis aibėmis {Ri; i = 1, 2, .,n}, jeigu jeigu egzistuoja X, Ri ir Rj tokie, kad X Rj, (X Ri) t.y., jeigu egzistuoja struktūrinio tipo Q kairiosios aibės Ri poaibis X, ekvivalentiškas struktūrinio tipo O kairiajai aibei Rj. Apibrėšime universliojo detaliojo ST sąvoką. Tarkime, kad turime ST tipų aibę Q; Q = {Q1, Q2, ., Qn}. Struktūrinis tipas Qy su kairiosiomis aibėmis {Rj; j = 1, 2, ., m} yra universalusis detalusis, jeigu aibėje {Rj; j = 1, 2, ., m} egzistuoja kairioji aibė Rj ir kiekvienas tipas Qx iš aibės Q turi kairiąją aibę Ri tokią, kad Ri Y; YRj ; {Rj; j = 1, 2, ., m}. Šią išorinę priklausomybę žymėsime Qy Qx ir sakysime, kad struktūrinis tipas Qy detalizuoja Qx, o struktūrinis tipas Qx apibendrina Qy .

Analogiškai apibrėšime universaliosios detalizuotos schemos sąvoką. Tarkime, kad turime DB schemą R; R = {R1, R2, ., Rn}. Schema Ry su nustatyta raktų aibe {Kj; j = 1, 2, ., m} yra universalioji detalizuota, jeigu raktų aibėje {Kj; j = 1, 2, ., m} egzistuoja raktas Kj ir kiekvienoje schemoje Rx iš aibės R egzistuoja raktas Kx tokie, kad Kx Y; YKj . Šią išorinę priklausomybę žymėsime Ry Rx ir sakysime, kad santykių schema Ry detalizuoja Rx, o schema Rx apibendrina Ry .

Detalizavimo priklausomybė abiem atvejais – tiek struktūrinių tipų, tiek DB schemų atvejais – pasižymi refleksyvumu ir tranzityvumu, t.y. R R ir iš R1 R2 R3 seka R1 R3 . Čia įrodysime teiginį, kad kiekvienas universalusis detalizuotas struktūrinis tipas yra universalusis. Jeigu struktūrinis tipas Qy iš Q su kairiosiomis aibėmis {Rj; j = 1, 2, ., m} yra universalusis detalusis, kuris kiekvieną tipą Qx iš aibės Q detalizuoja, tai Qx turi kairiąją aibę Rx tokią, kad Rx Y; YRj . Tai reiškia, kad iš atstatytos charakteringosios FP aibės F galima išvesti priklausomybes Rx Y ir Y Rx . Bet Rj Y (FP projektyvumas), o Y Rx . Tarkime, kad V yra tipo Qx dešinioji aibė o atributas A paimtas iš V . Tada iš FP tranzityvumo savybės seka, kad Rj A. Jeigu V užsiduosime Qy dešinąją aibę, ir AV , tai iš karto gausime Rj A. Priklausomybę Rj A išvesime ir tais atvejais, kai A paimsime iš tipų Qy arba Qx bet kurios kairiosios aibės. Tai reiškia, kad visą FP aibę {Rj A; Rj eF(Qy); A – struktūrinės dengties atributas} galima išvesti iš F.

Mūsų pavyzdyje Q3 Q3 Q2 Q1 (6.24 pav.). Kadangi Q3 yra universalusis detalusis, o tuo pačiu ir universalusis struktūrinis tipas, tai algoritmo ketvirtuoju punktu papildomos schemos įvesti nereikėjo. Paimkime struktūrinės dengties kitą pavyz¬dį, nagrinėtą 5.2 skyrelyje (6.25 pav.). Šioje struktūrinėje dengtyje neaptiksime universaliojo detaliojo tipo, kuris detalizuoja visą dengtį. Pavyzdžiui, Q1 Q2 , nes {POS} {POS, TER}, tačiau Q1 nedetalizuoja Q3 ir Q4. Tačiau tipas Q1 yra universalusis, ir tai galime pastebėti neatstatinėjant visą charakteringąją FP aibę, o pasinaudojant FP išvedimo refleksyvumo ir kaupimo taisyklėmis (žr. 3.2 ir 3.4 sk.):

POS, TER POS, TER (refleksyvumas);

POS, TER VAR, SLA (duota);

POS, TER POS, TER, VAR, SLA (kaupimas);

POS, TER POS, TER, VAR, SLA, SCH (kaupimas);.

6.25 pav . Šioje struktūrinėje dengtyje stuktūrinis tipas Q1 yra universalusis

Paimkime kitą pavyzdį, kai sintezės trečiuoju punktu būtina įvesti papildomą santykių schemą. Šio pavyzdžio dalykinė sritis buvo nagrinėta 6.1 skyrelyje. Iš funkcinių priklausomybių sudarius struktūrinę dengtį (6.26a pav.), algoritmo SINTEZĖ antruoju ir trečiuoju punktais gausime DB schemą (6.26b pav.), kurią sudaro santykių schemos R ir R2. Ketvirtuoju algoritmo punktu struktūrinę dengtį papildžius universaliuoju tipu Q3 gausime DB schemą {R1, R2, R3}.

6.26 pav . Struktūrinė dengtis, papildyta universaliuoju struktūriniu tipu Q3

Paimkime dar vieną dalykinės srities pavyzdį (žr. 6.1 pav.), ypatingą tuo, kad nevisi atributai yra apimti funkcinėmis priklausomybėmis arba, kitais žodžiais tariant, dalykinėje srityje egzistuoja laisvųjų atributų. Šiame pavyzdyje galima sudaryti tik vieną FP ekvivalentiškumo klasę Q1 (6.27a pav.) ir atributas OPE neįtrauktas į jokios FP kairiąją ar dešiniąją pusę. Sudarant universalųjį tipą Q (6.27b pav.) tipo Q1 kairiąją aibę {GAM, SAN} teko papildyti laisvuoju atributu OPE, ir tokiu būdu DB schema bus R = {R1, R} (6.27c pav.). Jeigu laisvųjų atributų būtų daugiau, tai juos visus reiktų įjungti į universalaus struktūrinio tipo dešiniąją aibę.

6.27 pav . Universalusis struktūrinis tipas Q2 sudarytas prijungiant laisvąjį atributą OPE

Papildomos universaliojo struktūrinio tipo įvedimas reikalingas, kad patenkinti pagrindinį DB projektavimo kriterijų. Dekompozicijos metode, kaip žinome iš 6.4 skyrelio, taikant normalizavimo algoritmą NA3 sudarytoje DB schemoje visada gausime vieną santykių schemą su universaliuoju raktu, o tai garantuoja, kad DB schema užtikrins pagrindinį informacijos išsaugojimo kriterijų. Šio kriterijaus užtikrinimui sintezės metode vietoj santykių schemos su universaliuoju raktu įvedėme papildomą universalųjį struktūrinį tipą. Skirtumas čia yra tik toks, kad panaudojant universalųjį struktūrinį tipą papildomos santykių schemos, kurią algoritme SINTEZĖ buvome pažymėję R, raktas gali gautis mažesnis, lyginant jį su universaliuoju raktu. Toliau parodysime, kaip galima “supjaustyti” papildomą schemą R, panaudojant JP priklausomybes, užduodamas schemoje R.

Paimkime iš ankstesnio pavyzdžio papildomai įvestą universalųjį struktūrinį tipą Q ir jame panaudotų atributų aibėje užduokime JP priklausomybę. Suprantama, kad čia mes paimame iš jo sudarytą santykių schemą R, kurios visi atributai yra raktiniai.

6.28pav . Universaliojo struktūrinio tipo reliacinė schema R dekomponuota į dvi santykių schemas S1 ir S2

Schemą R panaudojant normalizavimo algoritmą NA5 (žr. 6.4 sk.) dekomponuosime be informacijos nuostolių (žr.6.3 sk.) į dvi schemas S1 ir S2. Kadangi schemų R1 (žr. 6.27 pav.) ir S1 raktai sutampa, tai pagal algoritmą NA5 šias schemas galima apjungti, ir DB schemoje {R1, R} vietoj R panaudosime S2. Rezultatyvinė DB schema bus {R1, S2}.

Sintezės metodas užtikrina pilnųjų RDB reikalavimus:

1) aibę F pilnai charakterizuoja schema R;

2) kiekviena santykių schema Ri yra 3NF;

3) aibės F atžvilgiu negalime sudaryti kitą RDB schemą su mažesniu santykių schemų skaičiumi tokią, kad tenkintų pirmuosius du reikalavimus;

4) schema R tenkina pagrindinį DB projektavimo kriterijų.

Iš šių keturių reikalavimų ketvirtąjį užtikriname panaudojant DB schemoje papildomą universalųjį struktūrinį tipą, kuris, kaip buvo ką tik parodyta, gali būti dekomponuojamas. Charakterizuosime sintezės metodą pirmaisiais trimis požiūriais.

Palikime tokius pažymėjimus: F – FP aibė, iš kurios buvo sintezuota minimali ir redukuota struktūrinė dengtis Q; eF(Q) – struktūrinio tipo Q (Q Q) atributų kairiųjų poaibių K aibę (K eF(Q)); EF(Q) – struktūrinio tipo Q FP ekvivalentiškumo klasė; G – natūralioji charakteringoji FP aibė, atstatyta (žr. 5.3 sk.) iš struktūrinės dengties Q. Sakykime, kad iš F tiesioginiu būdu, t. y. naudojant sudėtinių FP sudarymo taisyklę SFPT (žr. 5.1 sk.). ir vėliau nuosekliai taikant SFP pertvarkymo taisykles (žr. 5.2 sk.) buvo sudaryta SFP redukuota ir minimali struktūrinė dengtis Q. Kadangi SFPT ir SFP pertvarkymo taisyklės yra patikimos, tai Q F. Sakykime, kad iš Q algoritmo SINTEZĖ antruoju punktu sudarėme DB schemą R; R = {R1, R2, ., Rn}. Ši schema pilnai charakterizuos F. Tai seka iš tokių samprotavimų. Jei iš Q panaudojant patikimą natūraliosios charakteringosios aibės sudarymo taisyklę NCHT (žr. 5.3 sk.) sudarysime DB schemos R FP aibę G, tai G Q. Shema R charakterizuos G, nes G {K Ri Ri R; K – santykių schemos Ri bet koks raktas iš aibės eF(Q)}. Bet iš Q F ir G Q seka G F. Kadangi R charakterizuoja G, tai tuo pačiu charakterizuoja ir F. Tokiu būdu sintezės metodu sudaryta DB schema tenkina pilnųjų DB pirmąjį reikalavimą.

Antrasis reikalavimas tenkinamas taip pat. Natūraliosios charakteringosios aibės G visos funkcinės priklausomybės yra raktinės, t. y. šių FP kairiosios pusės yra raktai, nes kiekviena sudėtinė FP Q buvo redukuota kairiosiomis aibėmis. Kadangi visos FP iš aibės G yra tik raktinės, tai jų tarpe nebus nei vienos tranzityviosios FP nuo rakto, o tai reiškia, kad kiekviena Ri ir tuo pačiu R yra 3NF.

Sudaryta R yra minimali, t. y. negalima sudaryti kitą DB schemą su mažesniu santykių schemų skaičiumi. Antruoju algoritmo SINTEZĖ punktu kiekvienam struktūriniam tipui Q buvome paskyrę po vieną santykių schemą Ri . Pažymėkime struktūrinės dengties Q ekvivalentiškumo klasių aibę EF(Q); EF(Q) = { EF(Q) Q Q} Tačiau struktūrinėje dengtyje Q ekvivalentiškumo klasių skaičius EF(Q) negali būti sumažintas, nes SFP aibė Q algoritmo SINTEZĖ pirmuoju punktu buvo redukuota kairiosiomis aibėmis, dėl ko SFP aibė Q tapo struktūrine dengtimi, kurioje struktūrinių tipų skaičių sumažinti nebegalima. Iš čia seka , kad DB schema R yra minimali. Kadangi prieš tai buvome parodę, kad R tenkina abu pirmuosius pilnųjų DB reikalavimus, o santykių schemų skaičių schemoje R sumažinti negalima, tai iš čia seka, kad R tenkina ir trečiąjį reikalavimą.

Sintezės metodas turi tą privalumą, lyginant šį metodą su dekompozicijos metodu, kad jis garantuoja DB pilnumo kriterijų. Be to, abu metodai tenkina pagrindinį informacijos išsaugojimo kriterijų (žr. 6.3 sk.). Sintezės metodo trūkumas, lyginant jį su dekompozicijos metodu, yra tas, kad sintezės keliu suprojektuota DB gali turėti daugiau santykių schemų. Pavyzdžiui, sintezės keliu iš struktūrinės dengties (žr. 6.25 pav.) gausime keturias santykių schemas, kai tuo tarpu dekompozicijos metodu tai pačiai dalykinei sričiai sudaryta RDB turės tik dvi schemas.LITERATŪRA

1. A. Dogac, B. Yuruten, S. Spacapietra. A generalized expert system for database design. IEEE Transactions on Software Engineering, 18(4), 1989, pp. 479-491.

2. R.H.L. Chiang. A knowledge-based system for perfoming reverse engineering of relational databases. Decision Support Systems 13, 1995, pp. 295-312.

3. B.Paradauskas. Conceptual Object-Relationship-Property Approach: Three Different Interpretations of the Same Entity. INFORMATICA, 6(4), 1995, pp. 497-522.

4. American National Standarts Institute (ANSI) Database Commitee (X3H2). Database Language SQL3. J.Melton, Editor. August 1994.

5. C. Storey. Understanding Semantic Relationships. VLDB Journal, 2, 1993, pp. 455-488.

6. R. Chaffin, D.J. Herrman. The nature of semantic relations: A comparison of two approaches. In: M. Evens (ed.). Relational Models of the Lexicon: Representing Knowledge in Semantic Networks. New York: Cambridge University Press, 1988, pp. 289-334.

7. Bubenko J. Extending the Scope of Information Modelling. Fourth Internacional Workshop on the Deductive Approach to Information Systems and Databases, Lloret – Costa Brava, Universitat Politecnica de Catalunya, 1993.

8. R.Gustas. Semantic and Pragmatic Dependencies of Information Systems. Monograph.- Technologija,Kaunas,1997,p. 273.

9. F3 Consortium,. F3 Reference Manual”, ESPRIT Project 6612, Swedish Institute for Systems Development, Electrum 212, S-16440, Kista, Sweden, 1994.

10. Boman, J. Bubenko, jr., P. Johannesson, B. Wangler. Models, Concepts and Information: an Introduction to Conceptual Modelling for Information Systems Development.- Royal Institute of Technology and Stockholm University, Sweden, Oktober 1993.

11. ISO. Concepts and Terminology for the Conceptual Schema and the Information base. ISO/TC9/SC5/WG3, 1982.

12. P.P.S. Chen. The Entity-Relationship Model – Towards a Unified View of Data. ACM Transactions on Database Systems, vol. 1,no. 1,pp. 9-36, 1976.

13. M.L. Brodie. On the Development of Data Models. In „On Conceptual Modelling – Perspectives from Artificial Intelligence, Databases and Programming Languages“, pp. 19-47, Springer Verlag, New York, 1984.

14. R. Hull. A Survey of Theoretical Research on Typed Complex Database Objects. In Databases, J. Paredaens (Ed), Academic Press, London, 1987.

15. A. Dardenne, A. van Lamsweerde, S. Fickas. Goal-directed Requirments Acquisition. In „Science of Compiuter Programing“, vol. 20, pp. 3-50, 1993.

16. B. Wangler. Contributions to Functional Requirements Modelling. Doctoral Thesis, Royal Institute of Technology and Stockholm University, Sweden, 1993.

17. DeMarco. Structured Analysis and Systems Specifications. Englewood Cliffs, New Jersey: Prentice Hall, 1979.

18. E. Yourdon. Modern Structured Analysis. Englewood Cliffs,New Jersey: Yourdon Press, 1989.

19. G. Booch. Object-Oriented Design. Redwood City, Calif.: Benjamin/Cummings, 1991

20. J. Rumbaugh, et al. Object-Oriented Modeling and Design. Englewood Cliffs, New Jersey: Prentice-Hall International, Inc., 1991.

21. D. Maier. The Theory of Relational Databases. Compiuter Science Press Rockville, 1983.

22. B. Paradauskas. Conceptual and Relational Schemes of Entities. Informatica, vol. 4, no. 3-4, pp. 351-359, Vilnius, 1993.

23. R.J. Brachman and H.J. Levesque, eds. Readings in Knowledge Representation. Morgan Kaufmann, Los Altos, CA, 1985.

24. Sciore. The Universal Instance and Database Design. Doctoral Diss., Princeton Univ., Priceton, NJ, 1980.

25. E. Ambrazevičius, B. Paradauskas. The Method of Knowlegde Representation for Semiotical Design of Complex System Models. Cybernetics Problems: Situational Management and Semiotical Modelling, State Academy of Sciences, Mocsow, pp. 3-13, ( in Russian).

26. B. Paradauskas, A. Vainauskas. Koncepcinių schemų procedūrinė interpretacija. Konferencijos “Informacinės technologijos’ 97” pranešimų medžiaga. Technologija.

27. I.B.Zdonik and D.Maier. Readings in Object-Oriented Databases. Morgan Kaufma.nn, 1989.

28. B.Paradauskas. Conceptual Object-Relationship-Property Approach: Three Different Interpretations of the Same Entity. INFORMATICA, Vol.6, No.4, 497-522.

29. American National Standarts Institute (ANSI) Database Commitee (X3H2). Database Language SQL3. J.Melton, Editor. August 1994.

30. R. Butkienė, B. Paradauskas. Federatyvinis informacijos integravimo požiūris.Konferencijos “Integruotosios projektavimo ir gamybos sistemos” pranešimų medžiaga.- Kaunas,1997, 10 p.

31. W. Litwin. Malpha: A Relational Multidatabase Manipulation language. In Proc. 1th IEEE Int. Conf. on Data Ingineering, Los Angeles, February 1984, IEEE.

32. Spacapietra S., and Parent C. View integration: a step forward in solving structural conflicts. IEEE Transactions on Data and Knowledge Engineering,1992.

33. Litwin, L.Mark, and N.Roussopoulos. Interoperatability of multiple autonomous databases. ACM Computing Surveys, 1990.

34. Y.Papakonstantinou, H.Garcia-Molina, and J.Widom. Object exchange across heterogeneos information sources. In IEEE Internacional Conference on Data Enginearing, March 1995.

35. Davis A.M. Software Requirements: Analysis and Specification. Englewood Cliffs, N.J.:Prentice-Hall, Inc., 1990.

Komentuokite!