Üks hea andmebaasikujunduse eesmärke on eemaldada andmete liiasus (duplikaatandmed). Selle eesmärgi saavutamiseks tuleb jagada andmed mitmeks teemapõhiseks tabeliks nii, et iga fakt on esitatud ainult üks kord. Seejärel tuleb võimaldada Accessil jagatud teave uuesti kokku koguda – selleks tuleb seada seotud tabelite jaoks ühised väljad. Selle õigesti tegemiseks peate esmalt siiski mõistma oma tabelite vahelisi seoseid ja seejärel määrama need seosed oma andmebaasis.
Selle artikli teemad
Sissejuhatus
Kui olete loonud oma andmebaasi iga teema jaoks tabeli, peate võimaldama Accessil see teave vajadusel uuesti kokku koguda. Selleks tuleb luua seotud tabelites ühised väljad ja määratleda oma tabelite vahelised seosed. Seejärel saate luua päringuid, vorme ja aruandeid, mis kuvavad korraga mitme tabeli teabe. Näiteks siin kuvatud vorm sisaldab mitmest tabelist pärit teavet:
1. Selle vormi teave pärineb tabelist Kliendid...
2. ...tabelist Tellimused...
3. ...tabelist Tooted...
4. ...ja tabelist Tellimuse üksikasjad.
Välja Arve adressaat nimi laaditakse alla tabelist Kliendid, väärtused Tellimuse ID ja Tellimuse kuupäev pärinevad tabelist Tellimused, tootenimi pärineb tabelist Tooted ning väärtused Ühiku hind ja Kogus pärinevad tabelist Tellimuse üksikasjad. Need tabelid on üksteisega lingitud mitmel viisil, et tuua vormile iga tabeli teave.
Ülaltoodud näite tabelite välju tuleb sobitada nii, et neis kuvataks teave sama tellimuse kohta. Sellist sobitamist saab teha tabeliseoste abil. Tabeliseos toimib võtmeväljadel andmete vastendamise teel – võtmeväli on sageli mõlemas tabelis sama nimega. Enamasti on vastendatavad väljad ühe tabeli primaarvõti, mis kujutab endast iga kirje kordumatut identifikaatorit, ning teise tabeli võõrvõti. Näiteks saab töötajaid seostada tellimustega, mille eest nad vastutavad, luues tabelite Töötajad ja Tellimused väljade Töötaja ID vahelise tabeliseose.
1. Töötaja ID kuvatakse mõlemas tabelis – primaarvõtme...
2. ...ja võõrvõtmena.
Tabeliseoste tüübid
Accessis on kolme tüüpi tabeliseoseid.
-
Üks-mitmele seos
Kasutagem näitena tellimuste jälitamise andmebaasi, mis sisaldab tabelit Kliendid ja tabelit Tellimused. Klient võib esitada suvalise arvu tellimusi. Neid jälitatakse iga tabelis Kliendid esindatud kliendi puhul, tabelis Tellimused võib olla palju tellimusi. Tabeli Kliendid ja tabeli Tellimused vahel on üks-mitmele seos.
Andmebaasikujunduses üks-mitmele seose loomiseks võtke seose "üks"-poolelt primaarvõti ja lisage see lisavälja või -väljadena seose "mitmele"-poolel asuvasse tabelisse. Käesoleval juhul lisate näiteks uue välja – tabeli Kliendid välja ID – tabelisse Tellimused ja panete sellele nime Kliendi ID. Seejärel saab Access kasutada tabeli Tellimused kliendi ID-d iga tellimuse puhul õige kliendi leidmiseks.
-
Mitu-mitmele seos
Vaatleme nüüd tabeli Tooted ja tabeli Tellimused vahelist seost. Üks tellimus võib sisaldada mitut toodet. Teisest küljest võidakse üks toode kuvada ka paljudes tellimustes. Seetõttu võib tabeli Tellimused iga kirje kohta olla tabelis Tooted mitu kirjet. Lisaks võib tabeli Tooted iga kirje kohta olla tabelis Tellimused mitu kirjet. Seda seost nimetatakse mitu-mitmele seoseks. Arvestage, et tabelitevaheliste mitu-mitmele seoste tuvastamiseks peate arvestama seose mõlema poolega.
Mitu-mitmele seose loomiseks peate looma kolmanda tabeli (mida nimetatakse sageli sõlmtabeliks), mis jaotab mitu-mitmele seose kaheks üks-mitmele seoseks. Lisage mõlema tabeli primaarvõti kolmandasse tabelisse. Selle tulemusena salvestatakse seose iga esinemisjuht või eksemplar kolmandasse tabelisse. Näiteks tabeli Tellimused ja tabeli Tooted vahel on mitu-mitmele seos, mis määratletakse tabelisse Tellimuse üksikasjad kahe üks-mitmele seose loomise teel. Ühe tellimuse kohta võib olla mitu toodet ning iga toode võib esineda mitmes tellimuses.
-
Üks-ühele seos
Üks-ühele seose puhul võib igal esimese tabeli kirjel olla teises tabelis ainult üks vastav kirje ning igal teise tabeli kirjel võib olla esimeses tabelis ainult üks vastav kirje. See seos pole eriti levinud, kuna enamasti salvestatakse sel viisil seotud teave samasse tabelisse. Üks-ühele seost võite kasutada mitme väljaga tabeli jagamiseks, turvalisust silmas pidades mõne tabeliosa isoleerimiseks või ainult põhitabeli alamhulgale rakenduva teabe salvestamiseks. Sellise seose tuvastamisel peab mõlemal tabelil olema ühine üldväli.
Milleks luua tabeliseoseid?
Tabeliseoseid saate luua otse akna Seosed kaudu või lohistades välja paanilt Väljaloend. Access kasutab tabeliseoseid selleks, et otsustada, kuidas liita tabeleid, kui peate kasutama neid andmebaasiobjektis. On mitu põhjust, miks peaksite enne muude andmebaasiobjektide (nt vormide, päringute ja aruannete) loomist looma tabeliseosed.
-
Tabeliseosed teavitavad päringukujundusi
Mitme tabeli kirjetega töötamiseks peate sageli looma päringu, mis need tabelid liidab. Päring vastendab esimese tabeli primaarvõtme välja väärtused teise tabeli võõrvõtme väljaga. Näiteks iga kliendi kõigi tellimustega ridade tagastamiseks koostage päring, mis liidab välja Kliendi ID põhjal tabeli Kliendid ja tabeli Tellimused. Aknas Seosed saate liidetavad väljad käsitsi määrata. Kui teil aga on juba tabelitevaheline seos määratletud, pakub Access olemasoleva tabeliseose põhjal vaikeliitmise. Kui kasutate ühte päringuviisarditest, kasutab Access määratletud tabeliseostest kogutud teavet, et pakkuda teile teadlikke valikuid ning eeltäita atribuudisätted sobivate vaikeväärtustega.
-
Tabeliseosed teavitavad teie vormi- ja aruandekujundusi
Vormi või aruande kujundamisel kasutab Access määratletud tabeliseostest kogutud teavet, et pakkuda teile teadlikke valikuid ning eeltäita atribuudisätted sobivate vaikeväärtustega.
-
Tabeliseoste alusel saate jõustada viitamistervikluse, et vältida oma andmebaasis orbkirjeid. Orbkirje on kirje, mis viitab mõnele olematule kirjele – nt tellimusekirje, mis viitab olematule kliendikirjele.
Andmebaasi kujundamisel jaotate oma teabe tabelitesse, millel on igaühel oma primaarvõti. Seejärel lisate neile primaarvõtmetele viitavatesse seotud tabelitesse võõrvõtmed. Need võõrvõtme ja primaarvõtme paarid moodustavad tabeliseoste ja mitme tabeli päringute aluse. On oluline, et need võõrvõtme ja primaarvõtme viited oleksid sünkroonitud. Tabeliseostest sõltumatu viitamisterviklus aitab tagada viidete sünkroonsuse.
Viitamistervikluse olemus
Andmebaasi kujundamisel jaotate oma andmebaasiteabe paljudesse teemapõhistesse tabelitesse, et minimeerida andmete liiasust. Seejärel annate Accessile vahendid, mille abil andmed uuesti koguda, paigutades üldväljad seotud tabelitesse. Näiteks üks-mitmele seose loomiseks võtke "üks"-poole tabelist primaarvõti ja lisage see lisaväljana "mitmele"-poole tabelisse. Andmete uuestikogumiseks võtab Access "mitmele"-poole tabeli väärtuse ja otsib "üks"-poole tabelist vastava väärtuse. Nii viitavad "mitmele"-poole tabeli väärtused "üks"-poole tabeli vastavatele väärtustele.
Oletame, et teil on tabelite Ekspediitorid ja Tellimused vahel üks-mitmele seos ning soovite mõne ekspediitori kustutada. Kui ekspediitoril, kelle soovite kustutada, on tabelis Tellimused mõni tellimus, siis need tellimused muutuvad selle ekspediitori kirje kustutamisel nn orbudeks. Need tellimused sisaldavad endiselt ekspediitori ID-d, kuid see ID ei kehti enam, kuna selle aluseks olevat kirjet pole enam olemas.
Viitamistervikluse eesmärk on takistada orbude teket ning säilitada viidete sünkroonsus, et sellist hüpoteetilist olukorda kunagi ei tekiks.
Viitamistervikluse jõustamiseks lubage see vastava tabeliseose puhul. Pärast viitamistervikluse jõustamist hülgab Access kõik toimingud, mis kahjustavad tabeli seose viitamisterviklust. See tähendab, et Access hülgab mõlemad värskendused, mis muudavad viite sihtmärki, ning kustutamistoimingud, mis eemaldavad viite sihtmärgi. Võimalik, et teil on tõesti vaja muuta sellise ekspediitori primaarvõtit, kellel on tabelis Tellimused mõni tellimus. Sel juhul on vaja, et Access värskendaks ühe toimingu käigus automaatselt kõik mõjutatud read. Nii tagab Access selle, et värskendamine viiakse täielikult lõpule ning teie andmebaas ei jää vastuolulisse olekusse, kus mõni rida on värskendatud ning mõni rida mitte. Seetõttu toetab Access suvandit Kaskaadvärskenduse seostuvad väljad . Kui jõustate viitamistervikluse ja valite suvandi Kaskaadvärskenda seostuvad väljad ning seejärel värskendate primaarvõtme, värskendab Access automaatselt kõik primaarvõtmele viitavad väljad.
Võimalik, et peate tõesti kustutama mõne rea ja kõik sellega seotud kirjed – näiteks ekspediitori kirje ja kõik selle ekspediitori seotud kirjed. Seetõttu toetab Access suvandit Kaskaadkustuta seostuvad kirjed. Kui jõustate viitamistervikluse ning valite suvandi Kaskaadkustuta seostuvad kirjed ja seejärel kustutate seose primaarvõtme poolel mõne kirje, kustutab Access automaatselt sellele primaarvõtmele viitavad väljad.
Tabeliseoste kuvamine
Tabeliseoste kuvamiseks klõpsake vahekaardi Andmebaasi tööriistad nuppu Seosed. Avaneb aken Seosed, kus kuvatakse kõik olemasolevad seosed. Kui ühtegi tabeliseost pole veel määratletud ning avate akna Seosed esimest korda, palub Access teil lisada sellesse aknasse mõne tabeli või päringu.
Akna Seosed avamine
-
Klõpsake menüüd Fail, nuppu Ava ning seejärel valige ja avage andmebaas.
-
Klõpsake menüü Andmebaasiriistad jaotises Seosed nuppu Seosed.
-
Klõpsake menüü Seoste kujundus jaotises Seosed nuppu Kõik seosed.
See kuvab kõik teie andmebaasi määratletud seosed. Arvestage, et peidetud tabeleid (tabeleid, mille puhul on dialoogiboksis Atribuudid märgitud ruut Peidetud) ning nende seoseid ei kuvata, välja arvatud juhul, kui dialoogiboksis Navigeerimissuvandid on märgitud ruut Kuva peidetud objektid.
Tabeliseost tähistab seosejoont, mis kuvatakse akna Seosed tabelite vahel. Seos, mis ei jõusta viitamisterviklust, kuvatakse seda seost toetavate üldväljade vahel peene joonena. Kui valite seose selle joont klõpsates, siis muutub joon paksemaks, näitamaks, et see on valitud. Kui jõustate seose viitamistervikluse, kuvatakse see joone otsad paksemana. Lisaks kuvatakse seose ühel poolel joone paksema osa kohal arv 1 ning teisel poolel joone paksema osa kohal lõpmatuse sümbol (8).
Kui aken Seosed on aktiivne, saate valida järgmiste lindi käskude seast soovitud käsu.
Tehke menüü Seoste kujundus jaotises Tööriistad järgmist.
-
Redigeeri seoseid. Avab dialoogiboksi Seoste redigeerimine. Seoserea valimisel saate klõpsata käsku Redigeeri seoseid, et muuta tabeliseost. Võite seoserida ka topeltklõpsata.
-
Tühjenda küljend. Eemaldab aknast Seosed kõik tabelid ja seosed. Arvestage, et see käsk ainult peidab tabelid ja seosed, mitte ei kustuta neid.
-
Seoste aruanne. Loob aruande, kus kuvatakse teie andmebaasi tabelid ja seosed. Aruandes kuvatakse ainult need tabelid ja aruanded, mis pole aknas Seosed peidetud.
Tehke menüü Seoste kujundus jaotises Seosed järgmist.
-
Tabelite lisamine Lubab aknas Seosed kuvatavate tabelite valiku.
-
Peida tabel. Peidab aknas Seosed valitud tabeli.
-
Otseseosed. Kuvab aknas Seosed kõik valitud tabeli seosed ja seotud tabelid, kui need pole veel kuvatud.
-
Kõik seosed. Kuvab aknas Seosed teie andmebaasi kõik seosed ja seotud tabelid. Arvestage, et peidetud tabeleid (tabeleid, mille puhul dialoogiboksi Tabeli kuvamine ruut Peidetud on märgitud) ja nende seoseid ei kuvata, välja arvatud juhul, kui dialoogiboksis Navigeerimissuvandid on märgitud ruut Kuva peidetud objektid.
-
Sule. Suleb akna Seosed. Kui muutsite akna Seosed paigutust, siis küsitakse, kas soovite need muudatused salvestada.