A jó adatbázis-tervezés egyik célja az, hogy megszüntesse az adatok redundanciáját (azt, hogy több helyen legyenek tárolva ugyanazok az adatok). E célból az adatokat több tematikus táblába kell elosztani, hogy egy tény csak egyszer legyen rögzítve. Ezután megadhatja Access, hogy újra összehozza az osztott információkat – ezt úgy teheti meg, hogy közös mezőket helyez el a kapcsolódó táblákban. Ahhoz azonban, hogy ezt a lépést megfelelően végezhesse el, először meg kell értenie a táblák közötti kapcsolatokat, és csak ezután kell megadnia azokat az adatbázisban.
Tartalom
Bevezetés
Miután létrehozott egy táblát az adatbázis minden témájához, meg kell adnia Access, hogy szükség esetén újra összehozza ezeket az információkat. Ehhez az egymással kapcsolatban lévő táblákban közös mezőket kell elhelyezni, majd meg kell adni a táblák közötti kapcsolatokat. Ezután létrehozhat lekérdezéseket, űrlapokat és jelentéseket, ha egyszerre több tábla adatait szeretné megjeleníteni. Az itt látható űrlap adatai például több táblából származnak.
1. Az űrlap adatai a Vevők táblából...
2. ...a Rendelések táblából...
3. ...a Termékek táblából...
4. ...és a Rendelés részletei táblából származnak.
A vevő Számlázási cím mezőben található neve a Vevők táblából származik, a rendelés azonosítója és dátuma a Rendelések táblából, a terméknév a Termékek táblából, az egységár és mennyiség pedig a Rendelések részletei táblából. Az űrlapon megjelenítendő információk kinyerése érdekében a táblák között több kapcsolat áll fenn.
Az előbbi példában szereplő négy tábla mezőit úgy kell összehangolni, hogy azonos rend szerint írják le a tárolt adatokat. Ezt az összehangolást a táblák között létesített kapcsolatok használatával lehet megvalósítani. A táblakapcsolatok a kulcsmezők adatait rendelik egymáshoz – ezek neve gyakran megegyezik a két táblában. A legtöbb esetben az egyező mezők egyike az egyik tábla elsődleges kulcsa, amellyel minden rekord egyedileg azonosítható, a másika pedig a másik táblában szereplő idegen kulcs. Az alkalmazottak például hozzárendelhetők az általuk kezelt megrendelésekhez úgy, hogy kapcsolatot létesít az Alkalmazottak tábla Alkalmazottkód mezője és a Rendelések tábla azonos nevű mezője között.
1. Az Alkalmazottkód mező mindkét táblában szerepel, az egyikben elsődleges kulcsként...
2. ...a másikban idegen kulcsként.
A táblakapcsolatok típusai
A Access három típusú táblakapcsolatot tartalmaz.
-
Egy-a-többhöz kapcsolat
Használjunk példaként egy rendeléskövetési adatbázist, amely egy Customers (Ügyfelek) és egy Orders (Rendelések) táblát tartalmaz. Egy vevő tetszőleges számú megrendelést adhat fel. Ennek megfelelően a Vevők tábla egy vevőjéhez több megrendelést is társíthat a Rendelések táblában. A Vevők és a Rendelések tábla között tehát egy-a-többhöz kapcsolat áll fenn.
Az adatbázisban úgy jelenítheti meg az egy-a-többhöz kapcsolatokat, hogy a kapcsolat „egy” oldalán található elsődleges kulcsot új mezőként (vagy mezőkként) hozzáadja a kapcsolat „több” oldalán található táblához. Ebben az esetben például egy új mezőt – a Vevők tábla azonosító mezőjét – ad a Rendelések táblához, és vevőazonosítónak nevezi. Access ezután a Rendelések tábla Vevőazonosító számával megkeresheti az egyes rendelésekhez tartozó megfelelő ügyfelet.
-
Több-a-többhöz kapcsolat
Most tekintsük át a Products (Termékek) és a Orders (Rendelések) tábla közötti kapcsolatot. Egyetlen megrendelés több termékre is szólhat. Ugyanakkor egy termék több megrendelésben is szerepelhet. Ezért a Rendelések tábla egyes rekordjaihoz több rekord is kapcsolódhat a Termékek táblában. Ugyanígy a Termékek tábla egyes rekordjaihoz a Rendelések tábla több rekordja is kapcsolódhat. Az ilyen kapcsolatot több-a-többhöz kapcsolatnak nevezik. Jegyezze meg, hogy a meglévő több-a-többhöz kapcsolatok csak úgy ismerhetők fel, ha mindkét oldalukat megvizsgálja.
Ha ábrázolni szeretne egy több-a-többhöz kapcsolatot, létre kell hoznia egy harmadik táblát (egy úgynevezett illesztőtáblát), amely a több-a-többhöz kapcsolatot két egy-a-többhöz kapcsolatra bontja le. Mindkét tábla elsődleges kulcsát elhelyezze a harmadik táblában. Így a harmadik tábla rögzíti a kapcsolat minden előfordulását (példányát). A Rendelések és a Termékek tábla között például több-a-többhöz kapcsolat áll fenn, amely a Rendelés részletei táblában, két egy-a-többhöz kapcsolattal adható meg. Minden rendelésben több termék szerepelhet, és minden termék több rendelésben is megjelenhet.
-
Egy-az-egyhez kapcsolat
Egy-az-egyhez kapcsolat esetén az első tábla minden egyes rekordjához legfeljebb egy rekord kapcsolódhat a második táblában, és a második tábla minden egyes rekordjához is csak legfeljebb egy rekord kapcsolódhat az első táblában. Ilyen kapcsolatot ritkán használnak, mert az így kapcsolódó információkat leggyakrabban egy táblában tárolják. Az egy-az-egyhez kapcsolat akkor lehet hasznos, ha egy sok rekordból álló táblát több kisebb, könnyebben kezelhető táblára kíván felosztani, ha egy tábla valamely részét biztonsági megfontolásból külön kívánja tárolni, vagy ha az egyik táblában olyan adatokat szeretne tárolni, amelyek csak a főtábla bizonyos rekordjaira érvényesek. Ha egy ilyen kapcsolatot hoz létre, a két táblában lennie kell egy közös mezőnek.
Miért célszerű táblakapcsolatokat létrehozni?
Táblakapcsolatokat kétféleképpen hozhat létre: közvetlenül a Kapcsolatok ablakban, vagy úgy, hogy áthúz egy mezőt a Mezőlista ablaktáblából. Access táblakapcsolatokkal dönti el, hogyan kell táblákat összekapcsolni, ha egy adatbázis-objektumban kell használnia őket. Több oka is van annak, hogy más adatbázis-objektumok (űrlapok, lekérdezések és jelentések) létrehozása előtt miért érdemes táblakapcsolatokat létrehozni.
-
A táblakapcsolatok információval szolgálnak a lekérdezéstervekhez
Ha több táblából származó rekordokkal dolgozik, gyakran kell létrehoznia olyan lekérdezést, amely összeilleszti a táblákat. A lekérdezés megfelelteti az első tábla elsődlegeskulcs-mezőjében lévő értékeket egy, a második táblában lévő idegenkulcs-mezőnek. Ha például azokat a sorokat szeretné eredményül kapni, amelyek felsorolják egy-egy vevő minden megrendelését, akkor egy olyan lekérdezést kell létrehoznia, amely a Vevők táblát a Rendelések táblával illeszti össze a vevőt azonosító mező alapján. A Kapcsolatok ablakban manuálisan megadhatja az illesztendő mezőket. Ha azonban már van definiálva kapcsolat a táblák között, Access a meglévő táblakapcsolat alapján biztosítja az alapértelmezett illesztéseket. Emellett, ha a lekérdezési varázslók egyikét használja, Access a már definiált táblakapcsolatokból gyűjtött információkat felhasználva tájékozott választási lehetőségeket jelenít meg, és előre kitölti a tulajdonságbeállításokat a megfelelő alapértelmezett értékekkel.
-
A táblakapcsolatok információval szolgálnak az űrlap- és jelentéstervekhez
Űrlap vagy jelentés tervezésekor Access a már definiált táblakapcsolatokból gyűjtött információkat felhasználva tájékozott választási lehetőségeket jelenít meg, és előre kitölti a tulajdonságbeállításokat a megfelelő alapértelmezett értékekkel.
-
A táblakapcsolatok adják azt az alapot, amelynek segítségével előírhatja a hivatkozási integritás megőrzését, és így megakadályozhatja az árvarekordok jelenlétét az adatbázisban. Az árvarekord olyan rekord, amely nem létező rekordra hivatkozik, például egy olyan megrendelésrekord, amely egy nem létező vevőrekordra hivatkozik.
Az adatbázisok tervezésekor az információkat táblákba osztja fel, amelyek mindegyikének van egy elsődleges kulcsa. Ezután olyan idegen kulcsokat vesz fel a kapcsolódó táblákba, amelyek ezekre az elsődleges kulcsokra hivatkoznak. Az idegen és elsődleges kulcsoknak ezek a párjai alkotják a táblakapcsolatok és a többtáblás lekérdezések alapját. Fontos, hogy ezek az elsődleges kulcsokra mutató idegen kulcshivatkozások szinkronban maradjanak. A hivatkozások szinkronizálásáról hivatkozási integritással lehet gondoskodni, amely nagyban függ a táblakapcsolatoktól.
A hivatkozási integritás fogalma
Az adatbázisok tervezése során különféle tematikus táblákba rendezi az adatbázis információit, hogy minimalizálja az adatok redundanciáját. Ezután lehetővé teszi Access az adatok újra összehozását azáltal, hogy közös mezőket helyez el a kapcsolódó táblákban. Ha például egy egy-a-többhöz kapcsolatot szeretne létrehozni, akkor vegye fel az „egy” tábla elsődleges kulcsát további mezőként a „több” táblába. Az adatok újra összehozásához Access a "több" táblában lévő értéket veszi fel, és megkeresi a megfelelő értéket az "egy" táblában. Ily módon a „több” táblában megtalálható értékek az „egy” táblában lévő megfelelő értékekre hivatkoznak.
Például egy-a-többhöz kapcsolat van a Szállítók és a Rendelések tábla között, és törölni szeretné egy szállítót. Ha a törölni kívánt szállítónak vannak megrendelései a Rendelés táblában, akkor ezek a megrendelések „árvákká” válnak a szállító rekord törlésekor. A megrendelések továbbra is tartalmazni fognak egy szállítóazonosítót, de az azonosító már nem lesz érvényes, mivel az a rekord, amelyre hivatkozik, már nem létezik.
A hivatkozási integritásnak az a célja, hogy megakadályozza az árvarekordok létrejöttét és megőrizze a hivatkozások közötti összhangot, hogy ez a hipotetikus helyzet soha ne jöhessen létre.
A hivatkozási integritás megőrzéséhez engedélyezni kell azt az adott táblakapcsolathoz. A kényszerítés után Access elutasít minden olyan műveletet, amely sérti a táblakapcsolat hivatkozási integritását. Ez azt jelenti, hogy Access elutasítja a hivatkozás célját módosító frissítéseket és a hivatkozás célját eltávolító törléseket. Lehetséges, hogy teljesen érvényes szükség van egy olyan szállító elsődleges kulcsának módosítására, akinek rendelései vannak a Rendelések táblában. Ilyen esetekben arra van szükség, hogy Access egyetlen művelet részeként automatikusan frissítse az összes végrehajtott sort. Így Access biztosítja, hogy a frissítés teljes mértékben befejeződjön, hogy az adatbázis ne maradjon inkonzisztens állapotban, egyes sorok frissülnek, mások pedig nem. Ezért Access támogatja a Kapcsolt mezők kaszkádolt frissítése beállítást. Ha érvényesíti a hivatkozási integritást, és a Kapcsolt mezők kaszkádolt frissítése lehetőséget választja, majd frissít egy elsődleges kulcsot, Access automatikusan frissíti az elsődleges kulcsra hivatkozó összes mezőt.
Szüksége lehet egy sor és minden hozzá kapcsolódó rekord törlésére is – például egy Szállító sor és minden, a szállítóhoz kapcsolódó rendelés törlésére. Ezért Access támogatja a Kapcsolt rekordok kaszkádolt törlése beállítást. Ha érvényesíti a hivatkozási integritást, és a Kapcsolt rekordok kaszkádolt törlése lehetőséget választja, majd töröl egy rekordot a kapcsolat elsődleges kulcsoldalán, Access automatikusan törli az elsődleges kulcsra hivatkozó összes rekordot.
Táblakapcsolatok megtekintése
A táblakapcsolatok megtekintéséhez kattintson az Adatbáziseszközök lap Kapcsolatok parancsára. Megnyílik a Kapcsolatok ablak, és megjeleníti az összes létező kapcsolatot. Ha nincs megadva táblakapcsolat, és első alkalommal nyitja meg a Kapcsolatok ablakot, Access megkéri, hogy adjon hozzá egy táblát vagy lekérdezést az ablakhoz.
A Kapcsolatok ablak megnyitása
-
Kattintson a Fájl, majd a Megnyitás gombra, majd válassza ki és nyissa meg az adatbázist.
-
Kattintson az Adatbáziseszközök lap Kapcsolatok csoportjában a Kapcsolatok gombra.
-
A Kapcsolatok tervezés lap Kapcsolatok csoportjában kattintson a Minden kapcsolat elemre.Ez megjeleníti az adatbázis összes definiált kapcsolatát. Vegye észre, hogy a rejtett táblák (azok a táblák, amelyeknek a Tulajdonságok párbeszédpanelén be van jelölve a Rejtett jelölőnégyzet) és kapcsolataik nem jelennek meg, hacsak be nem jelöli a Rejtett objektumok megjelenítése jelölőnégyzetet a Navigációs beállítások párbeszédpanelen.
A táblakapcsolatokat a Kapcsolatok ablakban a táblák között húzódó kapcsolatvonalak jelölik. Azokat a kapcsolatokat, amelyek nem őrzik meg a hivatkozási integritást, a kapcsolat alapjául szolgáló közös mezőket összekötő vékony vonalak jelzik. Ha a vonalra kattintva kijelöli a kapcsolatot, a vonal megvastagszik, ezzel mutatva, hogy ki van jelölve. Ha a kapcsolathoz előírja a hivatkozási integritás megőrzését, akkor a vonal két vége vastagabb lesz, és a kapcsolat egyik oldalán a vonal vastag részén az 1 szám, a vonal másik oldalon lévő vastag részén pedig a végtelen szimbólum (∞) lesz látható.
Ha a Kapcsolatok ablak aktív, a menüszalagon az alábbi parancsok állnak rendelkezésre.
A Kapcsolatok tervezése lap Eszközök csoportjában:
-
Kapcsolatok szerkesztése: Ez a parancs megnyitja a Kapcsolatok szerkesztése párbeszédpanelt. Ha kijelöl egy kapcsolatvonalat, a Kapcsolatok szerkesztése parancsra kattintva módosíthatja a táblakapcsolatot. Azt is megteheti, hogy duplán kattint a kapcsolatvonalra.
-
Elrendezés törlése: Ez a parancs eltávolítja a táblákat és a kapcsolatokat a Kapcsolatok ablakból. Vegye észre, hogy ez a parancs csak elrejti a táblákat és a kapcsolatokat, de nem törli őket.
-
Kapcsolatjelentés: Ez a parancs létrehoz egy jelentést, amelyben fel vannak tüntetve az adatbázisban lévő táblák és kapcsolatok. A jelentésben csak azok a táblák és kapcsolatok láthatók, amelyek nincsenek elrejtve a Kapcsolatok ablakban.
A Kapcsolatok tervezés lap Kapcsolatok csoportjában:
-
Táblák hozzáadása Lehetővé teszi a táblák megjelenítését a Kapcsolatok ablakban.
-
Tábla elrejtése: Ez a parancs elrejti a kijelölt táblát a Kapcsolatok táblában.
-
Közvetlen kapcsolatok: Ez a parancs megjeleníti a kijelölt tábla összes kapcsolatát és a kapcsolódó táblákat a Kapcsolatok táblában, ha még nincsenek megjelenítve.
-
Minden kapcsolat: Ez a parancs megjeleníti az adatbázis összes kapcsolatát és a kapcsolódó táblákat a Kapcsolatok ablakban. Vegye észre, hogy a rejtett táblák (azok a táblák, amelyeknek a Tulajdonságok párbeszédpanelén be van jelölve a Rejtett jelölőnégyzet) és kapcsolataik nem jelennek meg, hacsak be nem jelöli a Rejtett objektumok megjelenítése jelölőnégyzetet a Navigációs beállítások párbeszédpanelen.
-
Bezárás: Ez a parancs bezárja a Kapcsolatok ablakot. Ha módosította a Kapcsolatok ablak elrendezését, akkor a program rákérdez, hogy szeretné-e menteni a módosításokat.