14 Kapcsolatok: Második tábla létrehozása
14.1 Bevezetés
Eddig egy táblával dolgoztunk: tbl_Kutatók. De a valódi erejét az Access akkor mutatja meg, amikor több táblát kapcsolunk össze.
Ebben a fejezetben:
- Létrehozunk egy második táblát:
tbl_Látogatások - Összekapcsoljuk a két táblát
- Megértjük a kapcsolatok fogalmát
14.2 Miért kell több tábla?
14.2.1 A probléma: Ismétlődő adatok
Képzeljük el, hogy egy táblában szeretnénk tárolni a kutatókat ÉS a látogatásaikat:
┌────────┬────────────┬───────────────┬──────────────┬────────────────┐
│ Név │ Email │ Intézmény │ LatDátum │ CélKutatás │
├────────┼────────────┼───────────────┼──────────────┼────────────────┤
│ Kovács │ kovacs.a@ │ ELTE BTK │ 2024.03.10 │ Rákóczi │
│ Anna │ elte.hu │ │ │ │
├────────┼────────────┼───────────────┼──────────────┼────────────────┤
│ Kovács │ kovacs.a@ │ ELTE BTK │ 2024.03.15 │ Rákóczi │
│ Anna │ elte.hu │ │ │ │
├────────┼────────────┼───────────────┼──────────────┼────────────────┤
│ Kovács │ kovacs.a@ │ ELTE BTK │ 2024.04.02 │ Rákóczi │
│ Anna │ elte.hu │ │ │ │
├────────┼────────────┼───────────────┼──────────────┼────────────────┤
│ Nagy │ nagy.p@ │ MNL OL │ 2024.03.12 │ színháztört. │
│ Péter │ gmail.com │ │ │ │
└────────┴────────────┴───────────────┴──────────────┴────────────────┘
Problémák:
Kovács Anna neve, emailje, intézménye háromszor ismétlődik
Ha Kovács Anna emailt vált, három helyen kell módosítani
Elgépelés veszélye: “ELTE BTK” vs “ELTE BTk” vs “Elte BTK”
Rengeteg felesleges adat tárolása
14.2.2 A megoldás: Két tábla + kapcsolat
1. tábla: tbl_Kutatók – minden kutató egyszer szerepel
┌────────┬────────────┬───────────────┬──────────────┐
│KutatóID│ Név │ Email │ Intézmény │
├────────┼────────────┼───────────────┼──────────────┤
│ 1 │ Kovács Anna│ kovacs.a@... │ ELTE BTK │
│ 2 │ Nagy Péter │ nagy.p@... │ MNL OL │
└────────┴────────────┴───────────────┴──────────────┘
2. tábla: tbl_Látogatások – látogatások
┌───────────┬─────────┬────────────┬─────────────────┐
│ LatID │KutatóID │ LatDátum │ CélKutatás │
├───────────┼─────────┼────────────┼─────────────────┤
│ 1 │ 1 │ 2024.03.10 │ Kádár-kor │
│ 2 │ 1 │ 2024.03.15 │ Kádár-kor │
│ 3 │ 1 │ 2024.04.02 │ Kádár-kor │
│ 4 │ 2 │ 2024.03.12 │ színháztörténet │
└───────────┴─────────┴────────────┴─────────────────┘
Kapcsolat: A KutatóID összeköti a két táblát!
Kovács Anna adatai egyszer szerepelnek
Email módosítás egy helyen
Nincs elgépelés veszély
Hatékony adattárolás
14.3 Kapcsolat típusok
Mielőtt létrehoznánk a második táblát, értsük meg a kapcsolat típusokat!
14.3.1 Egy-a-többhöz kapcsolat (1:N)
A leggyakoribb kapcsolat típus. Egy rekord az egyik táblában több rekordhoz kapcsolódhat a másik táblában.
Példák:
- Egy kutató → Több látogatás
- Egy fond → Több állag
- Egy állag → Több irat
Jelölés:
Kutatók (1) ─────< Látogatások (N)
A “∞” vagy “<” jel jelzi a “több” oldalt.
Hogyan működik?
- A
tbl_Kutatóktáblában minden kutató egyszer szerepel (KutatóID = 1, 2, 3, …) - A
tbl_Látogatásoktáblában több sor is hivatkozhat ugyanarra a kutatóra (KutatóID = 1, 1, 1, 2, …)
14.3.2 Több-a-többhöz kapcsolat (N:M)
Ritkább, de előfordul. Több rekord az egyik táblában több rekordhoz kapcsolódhat a másik táblában.
Példa:
- Több kutató dolgozhat több kutatási projekten
- Több iratot több témakörbe sorolhatunk
Megvalósítás: Egy köztes táblával (ezt majd a haladó kurzuson tanuljuk).
14.4 A tbl_Látogatások tábla megtervezése
Tervezzük meg a második táblánkat!
14.4.1 Milyen adatokat akarunk tárolni?
Egy látogatásról a következőket:
- Ki jött? (melyik kutató)
- Mikor jött?
- Miért jött? (kutatási téma)
- Megjegyzések (opcionális)
14.4.2 Mezők definiálása
| Mezőnév | Adattípus | Méret | Kötelező | Leírás |
|---|---|---|---|---|
| LatID | AutoNumber | - | ✓ | Egyedi azonosító (PK) |
| KutatóID | Number (Long Integer) | - | ✓ | Ki jött? (FK) |
| LatDátum | Date/Time | - | ✓ | Mikor jött? |
| CélKutatás | Short Text | 200 | ✗ | Kutatási téma |
| Megjegyzés | Long Text | - | ✗ | További jegyzetek |
Fontos:
- LatID: Elsődleges kulcs (Primary Key = PK)
- KutatóID: Idegen kulcs (Foreign Key = FK) – ez kapcsolja össze a két táblát!
Idegen kulcs (Foreign Key): Egy mező, amely egy másik tábla elsődleges kulcsára hivatkozik.
14.5 A tbl_Látogatások tábla létrehozása
Most hozzuk létre a táblát!
14.5.1 1. lépés: Új tábla létrehozása
- Létrehozás fül → Táblatervezés gomb
- Megnyílik az üres táblatervező
14.5.2 2. lépés: Mezők definiálása
14.5.2.1 LatID mező
- Mezőnév:
LatID - Adattípus:
AutoNumber - Leírás:
Látogatás egyedi azonosítója - Kattintsunk a sor bal szélére → Jobb egér → Elsődleges kulcs (vagy 🔑 gomb)
14.5.2.2 KutatóID mező
Ez a kulcsmező, amely összeköti a két táblát!
- Mezőnév:
KutatóID - Adattípus:
Number(szám) - Leírás:
Melyik kutató látogatott?
Tulajdonságok (alsó panel):
- Mező mérete (Field Size) →
Long Integer(hosszú egész) - Kötelező (Required) →
Igen
Fontos: A
KutatóIDtípusa Number (Long Integer) legyen, mert atbl_Kutatóktáblában aKutatóIDAutoNumber típusú, ami Long Integer.
14.5.2.3 LatDátum mező
- Mezőnév:
LatDátum - Adattípus:
Date/Time - Leírás:
Látogatás dátuma
Tulajdonságok:
- Formátum:
Rövid dátum - Kötelező:
Igen - Alapértelmezett érték:
=Date()(mai dátum)
14.6 Kapcsolat létrehozása a két tábla között
Most összekapcsoljuk a tbl_Kutatók és tbl_Látogatások táblákat!
14.6.1 1. lépés: Kapcsolatok ablak megnyitása
- Adatbázis-eszközök fül → Kapcsolatok gomb
Megnyílik a Kapcsolatok ablak. Ez valószínűleg üres (még nincs kapcsolat).
14.6.2 2. lépés: Táblák hozzáadása
Ha nem látjuk a táblákat, adjuk hozzá őket:
- Tervezés fül (a Kapcsolatok ablakban) → Tábla megjelenítése gomb
Vagy:
- Jobb egérgomb a Kapcsolatok ablak üres területén → Tábla megjelenítése
- Megjelenik a “Tábla megjelenítése” ablak
- Válasszuk ki:
tbl_Kutatók→ Hozzáadás - Válasszuk ki:
tbl_Látogatások→ Hozzáadás - Bezárás
Most két kis ablakot látunk a Kapcsolatok nézetben:
┌─────────────────┐ ┌──────────────────┐
│ tbl_Kutatók │ │ tbl_Látogatások │
├─────────────────┤ ├──────────────────┤
│🔑KutatóID │ │🔑LatID │
│ Név │ │ KutatóID │
│ Email │ │ LatDátum │
│ Intézmény │ │ CélKutatás │
│ RegDátum │ │ Megjegyzés │
│ Aktív │ │ │
└─────────────────┘ └──────────────────┘
14.6.3 3. lépés: Kapcsolat létrehozása
Most húzással hozzuk létre a kapcsolatot:
- Kattintsunk a
tbl_Kutatóktáblában aKutatóIDmezőre - Tartsuk lenyomva az egeret, és húzzuk át a
tbl_Látogatásoktáblában aKutatóIDmezőre - Engedjük el az egeret
Megjelenik a Kapcsolatok szerkesztése ablak!
14.6.4 4. lépés: Kapcsolat beállítása
A Kapcsolatok szerkesztése ablakban látjuk:
- Tábla/lekérdezés:
tbl_Kutatók - Kapcsolódó tábla/lekérdezés:
tbl_Látogatások - KutatóID ↔︎ KutatóID
Alul három jelölőnégyzet:
- ☑ Referenciális integritás érvényesítése (Enforce Referential Integrity)
- Lépcsőzetes frissítés a kapcsolódó mezőkben (Cascade Update Related Fields)
- Lépcsőzetes törlés a kapcsolódó rekordokban (Cascade Delete Related Records)
Mit jelöljünk be?
Referenciális integritás – MINDIG jelöljük be!
Lépcsőzetes frissítés – Jelöljük be (biztonságos)
Lépcsőzetes törlés – NE jelöljük be levéltári kontextusban!
14.6.4.1 Mit jelentenek ezek?
Referenciális integritás:
- Biztosítja, hogy érvényes kapcsolat legyen
- Nem lehet olyan látogatást felvenni, amelynek KutatóID-ja nem létezik a Kutatók táblában
- Nem lehet törölni kutatót, amíg vannak hozzá kapcsolódó látogatások
Lépcsőzetes frissítés:
- Ha módosítjuk egy kutató ID-ját (ritkán fordul elő), akkor a Látogatások táblában is automatikusan frissül
Lépcsőzetes törlés:
- Ha törlünk egy kutatót, automatikusan törlődnek az összes látogatása is
- ** Nem akarjuk véletlenül törölni a látogatási nyilvántartást!
14.6.5 5. lépés: Kapcsolat létrehozása
- Jelöljük be: ☑ Referenciális integritás
- Jelöljük be: ☑ Lépcsőzetes frissítés
- Kattintsunk: Létrehozás
Most a Kapcsolatok nézetben látunk egy vonalat a két tábla között:
┌─────────────────┐ ┌──────────────────┐
│ tbl_Kutatók │ │ tbl_Látogatások │
├─────────────────┤ ├──────────────────┤
│🔑KutatóID ───────1────<∞─ KutatóID │
│ Név │ │ LatDátum │
│ Email │ │ CélKutatás │
└─────────────────┘ └──────────────────┘
A vonal két végén:
- 1 – Egy-a-többhöz kapcsolat “egy” oldala (Kutatók)
- ∞ – “Több” oldala (Látogatások)
Ez jelenti: Egy kutatónak több látogatása lehet!
14.7 Adatok felvétele a Látogatások táblába
Most vigyünk fel néhány látogatást!
14.7.1 1. lépés: Látogatások tábla megnyitása
- Dupla kattintás a
tbl_Látogatásoktáblára (Navigációs panel) - Adatlap nézet nyílik meg
14.7.2 2. lépés: Első látogatás felvétele
Vigyük fel Kovács Anna első látogatását:
- LatID: (automatikusan 1 lesz)
- KutatóID:
1(Kovács Anna ID-ja) - LatDátum:
2024-03-10 - CélKutatás:
Rákóczi-szabadságharc levéltári forrásai - Megjegyzés: (hagyjuk üresen)
- Enter
14.7.3 3. lépés: További látogatások
Vigyünk fel még néhány látogatást:
- LatID: 2 | KutatóID: 1 | LatDátum: 2024-03-15 | CélKutatás: Rákóczi-szabadságharc
- LatID: 3 | KutatóID: 1 | LatDátum: 2024-04-02 | CélKutatás: Rákóczi-szabadságharc
- LatID: 4 | KutatóID: 2 | LatDátum: 2024-03-12 | CélKutatás: Magyar színháztörténet 1945-1970
- LatID: 5 | KutatóID: 3 | LatDátum: 2024-02-28 | CélKutatás: Barokk építészet Pécsett
Figyelem: A KutatóID-kat kézzel kell begépelni. Később megtanuljuk, hogyan lehet ezt egyszerűbbé tenni (kombinált lista).
14.7.4 4. lépés: Referenciális integritás tesztelése
Próbáljunk meg érvénytelen adatot felvinni!
- Új sor
- KutatóID:
999(ez nem létezik a Kutatók táblában!) - LatDátum: mai dátum
- Enter
Hibaüzenet: “Nem adhat hozzá vagy módosíthat rekordot, mert kapcsolódó rekord szükséges a tbl_Kutatók táblában.”
Ez pontosan a referenciális integritás működése!
Ez védi az adatainkat attól, hogy érvénytelen kapcsolatokat hozzunk létre.
14.7.5 5. lépés: Kombinált lista (Combo Box) készítése
Unalmas begépelni a KutatóID-kat. Csináljunk belőle legördülő listát!
14.7.5.1 Tervezési nézetre váltás
- Zárjuk be a
tbl_Látogatásoktáblát - Jobb egérgomb → Tervezési nézet
14.7.5.2 KutatóID mező módosítása
- Kattintsunk a
KutatóIDmezőre - Az alsó panelen keressük meg: Keresés fül (Lookup tab)
- Vezérlő megjelenítése (Display Control) → Válasszuk: Kombinált lista (Combo Box)
14.7.5.3 Sor forrása beállítása
Most adjuk meg, honnan töltse fel a listát:
- Sor típusa (Row Source Type) →
Tábla/lekérdezés - Sor forrása (Row Source) → Kattintsunk a
...gombra
Megjelenik a Lekérdezés-készítő.
- Válasszuk ki a
tbl_Kutatóktáblát - Húzzuk be a mezőket:
KutatóIDNévIntézmény
- Bezárás (✕) → Igen (mentés)
14.7.5.4 További beállítások
- Oszlopok száma (Column Count) →
3 - Kötött oszlop (Bound Column) →
1(a KutatóID-t tárolja) - Oszlopszélességek (Column Widths) →
0cm;4cm;4cm
Mit jelent ez? - Oszlopszélességek: Az első oszlop (KutatóID) 0 cm → rejtett, a Név és Intézmény látszik
14.7.5.5 Mentés és tesztelés
- Ctrl+S (mentés)
- Váltunk Adatlap nézetre
Most a KutatóID oszlopban egy legördülő lista van! 🎉
Kattintsunk rá → Látjuk a kutatók nevét és intézményét, de a rendszer az ID-t tárolja!
KutatóID ▼
┌────────────────────────────────┐
│ Kovács Anna ELTE BTK │
│ Nagy Péter ML OL │
│ Szabó Mária PTE BTK │
└────────────────────────────────┘