Okno za dodajanje tabel v relacijski diagram

Osnova za vzpostavitev relacije med tabelama »Recepti« in »Viri« je tako pripravljena. Obe tabeli imata polji, ki ju bosta povezovali. Med tabelama moramo relacijo le še vzpostaviti in ji določiti osnovne lastnosti. Izvedemo ukaz Orodja–Relacije. Odpre se okno Relacije in okno Pokaži tabelo. V slednjem izberemo obe tabeli in ju dodamo. Nato okno zapremo.

Povezavo med obema tabelama na relacijskem diagramu vzpostavimo tako, da označimo polje »NazivVira« v tabeli Viri in ga povlečemo k polju »NazivVira« v tabeli Recepti. Odpre se okno Urejanje relacij. Relacijo pravilno uredimo tako, da potrdimo polje »Vzpostavi referenčno integriteto«, nato pa še »Kaskadno posodabljanje polj v relaciji«.

Lastnosti relacija med tabelama »Recepti« in »Viri«

Oblikovano relacijo med obema tabelama imenujemo strokovno povezava na osnovi referenčne integritete. Povezava je namreč oblikovana na osnovi primarnega ključa tabele Viri in dodanega polja »NazivVira« v tabeli Recepti, ki mu rečemo tudi tuj ključ ( foreign key). Posplošeno bi lahko takšno povezavo imenovali povezava med staršem in otroci. V našem primeru je starš vir, otroci pa recepti. Vir se pojavlja le enkrat in ima strokovno rečeno kardinalnost 1, receptov iz izbranega vira pa je lahko več. Temu strokovno rečemo, da ima relacija na strani tabele Recepti kardinalnost M (znak M preberemo kot mnogokrat ali angleško many). Tako dobimo povezavo s kardinalnostjo 1 proti M ali 1:M. Ta informacija je tudi informativno prikazana v obrazcu Urejanje relacij.

V zbirki podatkov Access lahko za vsako relacijo, ki sloni referenčni integriteti, določimo dve pomembni lastnosti. Prva lastnost se imenuje »Kaskadno posodabljanje polj v relaciji na strani otroka oziroma na strani M«. Če je omogočena se bo ob vsaki spremembi povezovalnega polja na strani starša (v našem primeru v polju »Viri.NazivVira«) sprememba izvršila tudi v vseh pripadajočih zapisih na strani otrok (v našem primeru v poljih »Recepti.NazivVira«). Večina relacij ima to pravilo omogočeno, saj pomeni osnovo za ohranitev relacije tudi v primeru spremembe vrednosti starša. Druga lastnost se imenuje »Kaskadno brisanje polj v relaciji na strani otroka oziroma na strani M«. Če je omogočena se bo ob brisanju očeta (v našem primeru ob brisanju katerega koli zapisa iz tabele »Viri«) izvedlo brisanje vseh otrok (v našem primeru tistih receptov, ki so povezani z brisanim virom). Če pa kaskadno brisanje ni dovoljeno, bo brisanje uspešno le takrat, kadar starš ni uporabljen v nobeni povezavi z katerim koli otrokom. Navedimo primer za obe možnosti. Vira ne dovolimo brisati, če je uporabljen pri vsaj enem receptu. Povezava je tako obvezna. Drug primer bi bila lahko povezave med receptom (stran starša, stran 1) in sestavinami (stran otroka, stran M), če bi se odločili in sestavine zapisovali v ločeni tabeli. Če bi zbrisali recept, bi želeli, da se samodejno izbrišejo tudi vse sestavine.

Omenjeni lastnosti referenčne integritete med tabelama Viri in Recepti logično predstavimo takole:

Viri --- Recepti (1:M; U:C, D:R)

In preberemo takole: »Vsak vir lahko vsebuje več receptov (1:M). Vsak recept smo povzeli po znanem viru (1:1). Če se bo naziv vira spremenil, bo izvedena kaskadna sprememba (update-cascade; U:C) tudi pri povezanih receptih. Če se bi želel vir zbrisati, je brisanje dovoljeno le v primeru, kadar ni uporabljen v katerem koli receptu (delete-restricted; D:R).
Relacijski diagram prikazuje relacijo malce drugače, kot smo jo prikazali z logičnimi zapisom. Prikaže jo kot povezavo. Informacijo o kardinalnosti pa prikazuje na eni strani s številko 1 (stran starša, kardinalnost 1), na drugi strani z znakom neskončno (stran otroka, kardinalnost M). Z dvakratnim klikom povezave pa se odpre že znan obrazec Urejanje relacij.

Relacijski diagram zbirke podatkov Recepti

Povezava med tabelama Recepti in Viri je končana in bo v ozadju vplivala na akcije vnosa, spremembe in brisanja v vsem življenjskem veku zbirke podatkov. Vložen trud pa bo poplačan tudi drugje, na primer že pri oblikovanju prvega obrazca ali poročila. Oblikovalec obrazca ali poročila bo vse podatke črpal iz skupnega podatkovnega modela zbirke podatkov, strokovno imenovanega skladišče (repository) in na osnovi pridobljenih podatkov avtomatsko oblikoval polja, sezname, obrazce, pod obrazce in vse ostale elemente programov.

Uporaba virov v receptih

Namen vzpostavitve povezave med tabelama Recepti in Viri je tudi praktične narave. Naša želja je, da vire vnesemo le enkrat, recepte pa z njimi opišemo čim preprosteje. Access ima za izpolnitev te funkcionalnosti dodatno lastnost že na ravni polja tabele. V pogledu načrta tabele ima vsako polje ob splošnih lastnosti omogočene še lastnosti iskanja, ki so dosegljive na zavihku Iskanje.

Pred nami sta tako še dva navidezno kompleksna koraka. Prvi korak je priprava seznama vrednosti, drugi pa določitev obveznosti in indeksacija polja »Recepti.NazivVira«. Poglejmo si oba koraka.

V prvem koraku pripravimo seznam vrednosti. Znova odpremo tabelo »Recepti« v obliki načrta ter označimo polje »NazivVira«. V spodnjem levem kotu odpremo zavihek Iskanje. Lastnost »Kontrolnik prikaza« nastavimo na vrednost »Kombinirano polje«. Lastnosti »Vir vrstic« priredimo tabelo »Viri«. Vemo, da sta tabeli povezani po stolpcu »NazivVira«, ki je v tabeli »Viri« na mestu 1. Lastnost »Štetje stolpcev« nastavimo na 3, kar bo povzročilo, da bo kombinirano polje ali, preprosteje, padajoči seznam prikazoval ob nazivu še drugo in tretjo vrednost – dodaten naziv in avtorje. Dovolimo še prikaz glave stolpcev, izkustveno nastavimo širino stolpcev na vrednosti »5 cm; 7 cm; 7 cm«. Ker vemo, da bomo imeli veliko virov, omogočimo ob pregledovanju seznama 16 vrstic. Širina seznama naj bo natančno 19 cm (5 cm + 7 cm + 7 cm). Določimo še zadnjo zelo pomembno lastnost. Vnos vira omejimo le na vrednosti iz seznama. Tako bomo zadostili povezavi na osnovi referenčne integritete. Sebe kot uporabnika pa zavezali, da bomo vir najprej vnesli v tabelo Viri in ga šele nato uporabili. In to je tudi pravilno, saj recept vedno izvira iz znanega vira.

Polje »Naziv vira« spremenimo v seznam

Tabelo Recepti znova odpremo in dopolnimo podatke o viru. Dopolniti moramo vse zapise. Izbiramo le vrednosti iz seznama.

Recepti so dopolnjeni s podatkom o viru.

V drugem koraku pripravimo lastnost obveznosti. Tabelo Recepti znova odpremo v načinu načrta, označimo polje »NazivVira« in izvedemo še zadnji zelo pomembni spremembi. Obe bomo izvedli na zavihku Splošno. Polje »NazivVira« označimo kot zahtevano tako, da priredimo lastnosti »Zahtevano« vrednost »Da«. Nato lastnosti »Indeksirano« priredimo vrednost »Da (podvojeni vnosi dovoljeni)«. Prva lastnost bo od nas zahtevala, da bomo v zbirko podatkov vnašali le recepte iz znanega vira. Druga lastnost pa pravzaprav omogoča kardinalnost povezave 1:M. V našem primeru to, da ima lahko vir več receptov.

Zgolj ilustrativno omenimo tudi pomen druge izbire, imenovane »Da (podvojeni vnosi niso dovoljeni)«. V takšnem primeru bi bili tabeli povezani s kardinalnostjo 1:1, kar je za naš primer nesprejemljivo, saj bi lahko vir vseboval zgolj en recept.

Po nastavitvi lastnosti »Indeksirano« nad poljem »NazivVira« se samodejno oblikuje nov indeks, ki ni primaren in ni enoličen. Lastnost novega indeksa lahko vidimo v oknu Indeksi.

Viru podatkov je določena kardinalnost 1:M

In to je za zdaj oziroma za začetek tudi zadnji korak pri oblikovanju zbirke podatkov Moji recepti.

Moj mikro, Marec 2010 | Štefan Hozjan |