Gögn ķ lausaleik

 Myndun vensla ķ MS Access 97

 

Įrni Sigurjónsson

 

 

Myndun vensla er mjög mikilvęgur žįttur ķ notkun Access gagnagrunnsins. Séu engin vensl mynduš fęr kerfiš ekki aš njóta sķn sem venslašur gagnagrunnur (Relational Database Management System). Meš myndun vensla er mešal annars hęgt aš minnka innslįttarvinnu stórlega og fękka villum.

 

Hvaš eru vensl?

Gögn ķ Access gagnagrunnskerfinu eru geymd ķ töflum (tables), og eru töflurnar sambęrilegar viš spjaldskrį, en hverri fęrslu (record) mį lķkja viš spjald ķ spjaldskrįnni. Ķ hverri töflu eru svęši (fields), svo sem nafn, kennitala, upphęš eša męligildi.

            Nś mį hugsa sér aš viš séum aš smķša reikningakerfi og žurfum aš geta flett upp ógreiddum reikningum og séš sķmanśmer greišanda (meš žaš fyrir augum aš rukka). Ķ frumstęšum gagnagrunnskerfum žarf aš skrį sķmanśmer višskiptavinarins meš hverjum einasta reikningi, en slķkt er aušvitaš sóun į plįssi. Og hvaš gerist svo žegar sķmanśmeriš breytist? Žį sitjum viš uppi meš tvö og brįšlega žrjś mismunandi sķmanśmer fyrir sama manninn.

            Žetta vandamįl er leyst meš venslušum gagnagrunni. Žį er höfš ein tafla meš nöfnum og sķmanśmerum višskiptamanna og önnur, vensluš tafla, geymir reikningana. Žannig er sķmanśmeriš bara geymt į einum og žaš vķsum staš.

            Žegar venslin eru mynduš eru töflurnar tengdar (joined) meš žvķ aš draga lķnu milli lykilsvęša ķ svokallašri venslamynd. Venslamyndin er opnuš ķ Access ķ gagnagrunnsglugganum, annašhvort meš hnappi (žrišji hnappur frį hęgri, og nefnist hann Relationships), eša meš žvķ aš velja Tools: Relationships af valmyndinni.

            Ašeins er hęgt aš draga tengilķnu milli svęša af sama tagi (t.d. bęši séu texti og žaš jafnlangur, eša bęši séu dagsetning) og oftast er žęgilegast aš haga žvķ svo til aš svęšin heiti bęši sama nafni (t.d. bęši Reikningsnśmer). Ein undantekning er žó frį žvķ aš bęši svęšin eigi aš vera af sama tagi, og žaš er žegar annaš žeirra er AutoNumber; žį žarf hitt aš vera Long Integer.

            Ef litiš er til dęmisins hér ofar myndum viš draga tengilķnu frį kennitölu višskiptamannsins yfir į kennitölusvęši ķ reikningatöflunni (einnig mętti nota višskiptamannsnśmer, ef kennitölur lęgju ekki alltaf fyrir). Viš gerum rįš fyrir aš kennitölur séu einkvęmar og skilgreindar sem frumlykill ķ višskiptamannatöflunni, en aš reikningsnśmerin séu einkvęm tala ķ reikningatöflunni. Žegar tengilķnan er mynduš kemur upp valgluggi, sem lķtur svona śt:

 


 

 


Hér kemur fram aš venslin sem er veriš aš mynda eru einn-fyrir-marga (one-to-many), en meš žvķ er įtt viš aš fyrir hvern einn višskiptamann (kennitölu) getum viš haft marga reikninga. Hver kennitala mun ašeins koma einu sinni fyrir vinstra megin (einkvęm ķ hópi višskiptamanna) en mörgum sinnum (vonandi mjög mörgum sinnum!) ķ safni reikninga.

            Svo reynt sé loks aš svara spurningunni „Hvaš eru vensl?“ mį svara žvķ svo, aš vensl eru tenging sem mynduš er milli tveggja svęša ķ žeim tilgangi aš binda saman gögn sem meš réttu eiga saman. Gagnakerfiš getur fylgst meš venslunum og nżtt sér žau žegar gögn eru sett inn eša sótt.

 

Hakreita žįttur

Fyrir mörgum  notendum vefst hvaš hakreitirnir žrķr į žessari valmynd standa fyrir, og skal nś sagt frį žvķ, en fyrst žurfum viš žó aš glöggva okkur į hugtökum. Žegar töflur eru tengdar meš žessum hętti er venja aš kalla ašra töfluna, ķ žessu tilviki višskiptamannatöfluna, foreldri, og hina afkvęmi. Einnig eru höfš oršin frumtafla (primary table) um foreldriš og afleidd tafla (related table) um afkvęmiš. Žį mį geta žess aš venja er aš setja foreldristöfluna vinstra megin, hina hęgra megin, enda stundum talaš um vinstri og hęgri töflu ķ samręmi viš žaš. Įstęšan fyrir žvķ aš Access gat sér réttilega til um aš hér ętti aš mynda einn-fyrir-marga vensl en ekki einn-fyrir-einn er sś, aš kennitalan er einkvęm foreldrismegin en ekki afkvęmamegin.

            Vķkjum žį aš hakreitunum. Viš žann fyrsta stendur Enforce referential integrity, sem žżtt hefur veriš „venslagįtun“. Sé hakaš viš žennan reit er Access bešiš aš sjį til žess aš ekki myndist munašarleysingjar mešal afkvęma. Žaš merkir aš viš bišjum Access aš hindra aš viš bśum t.d. til reikninga sem enginn višskiptamašur į aš greiša (ž.e.a.s. įn samsvarandi kennitölu vinstra megin). Venslin eru semsé gįtuš (=tékkuš) fyrir okkur jafnóšum. Lesandinn getur prófaš hvernig žetta virkar og hakaš ķ žennan reit og prófaš svo aš mynda reikninga įn žess aš mynda fyrst višskiptamenn. Žaš er einfaldlega ekki hęgt. Jafnframt hindrar kerfiš nś aš foreldri (višskiptamanni) sé eytt, liggi einhver afkvęmi (reikningar) fyrir ķ afleiddu töflunni. Žetta fyrirkomulag getur sparaš rukkurum og fjįrmįlastjórum mikinn höfušverk og nżtist vitaskuld mörgum öšrum og ķ margs konar samhengi.

            Nęsti reitur: žar stendur Cascade Update Related Fields, sem viš getum žżtt „sjįlfvirk breyting tengdra svęša“. Žetta merkir, svo viš höldum okkur viš dęmiš aš ofan, aš ef kennitölu višskiptamanns er breytt (ķ vinstri töflunni) breytist samsvarandi svęši (kennitölurnar) sjįlfkrafa ķ reikningatöflunni. Ef ekki vęri hakaš viš žennan reit og venslagįtun vęri žó ķ gangi (hakaš viš fyrsta reit),  myndi kerfiš banna okkur aš breyta kennitölum višskiptamanna ef žaš myndi leiša til žess aš munašarleysingjar sköpušust mešal reikninga.

            Žrišji og sķšasti reitur: Cascade Delete Related Records, sem žżša mętti „sjįlfvirk eyšing venslašra fęrslna“. Sé hakaš viš žennan reit er afleišingin sś aš ķ hvert sinn sem ég eyši višskiptamanni vinstra megin eyšast allir reikningar į hann sjįlfkrafa hęgra megin. Žetta getur veriš varasamt (henda öllum reikningunum?!), en getur žó jafnframt veriš til stórra žęginda sé varlega aš fariš.

            Aušvelt er aš prófa hvernig venslin virka meš žvķ aš opna tvęr töflur hliš viš hliš ķ töfluham og eyša og breyta fęrslum vinstra megin og sjį hvernig afkvęmin bregšast viš.

            Žegar hakaš hefur veriš reitina žrjį mį żta į OK hnappinn til aš stašfesta vališ, og kemur žį stundum villuboš fram. Žar geta veriš tvenns konar villur į ferš: annašhvort er skilgreining gagnataga ósamręmanleg (žś ert t.d. aš reyna aš tengja 10 stafa langt textasvęši viš 11 stafa langt textasvęši), eša gögnin sem žegar eru komin ķ töflurnar stangast į viš žį reglu sem žś ert aš reyna aš mynda (t.d. žegar komnar lausaleiksfęrslur ķ flokk afkvęma). En gangi allt aš óskum ętti žessi mynd (eša sambęrileg) aš birtast nęst:

 


 


Hér eru komin į traust tengsl milli višskiptamanna og reikninganna. Žykku endarnir į tengilķnunni tįkna aš žar sé venslagįtun ķ gangi og tįknin 1 og , sem minna okkur žęgilega į jólasveina, tįkna aš venslin hér séu af geršinni einn-fyrir-marga, eša meš öšrum oršum: einn višskiptamašur fyrir marga reikninga. Feitletrun tįknar aš viškomandi svęši sé frumlykill.

 

 

Lausaleiksvandamįliš getur veriš bżsna alvarlegt ķ gagnasöfnum (hvaš svo sem sagt veršur um slķk vandamįl annars stašar), žvķ hver vill sitja uppi meš reikninga sem enginn į aš borga, višskiptamenn sem hvergi eiga heima — ef vensl eru ekki rétt mynduš milli póstnśmeratöflu og višskiptamannatöflu — og žar fram eftir götunum? Meš réttri notkun į venslaglugganum ķ Access mį leysa žetta vandamįl į einfaldan hįtt.