Adatbázis-kezelés · Access-projekt › Vásárlási nyilvántartás tervezése Accessben
11. osztály · haladó Access-gyakorlás
Vásárlási nyilvántartás tervezése Accessben
Kitalált vásárlásokból öt összekapcsolt alaptáblát tervezel. A normálformákat konkrét függőségeken vizsgálod, majd Accessben beállítod a kulcsokat. Egy külön bővítésben az eladók adatait is kezelheted.

A lecke végére
- elkülöníted a vevőt, terméket, számlát és számlatételt
- megkülönbözteted a részleges és tranzitív függőséget
- helyes mezőtípusokkal hozol létre kapcsolatokat
Amit már tudsz
- ismered a relációs modellt és a kulcsokat
- Accessben tervezőnézetet nyitsz és mezőt hozol létre
Indulj a valódi igényből
A nyilvántartásból derüljön ki, ki mikor milyen termékből mennyit vásárolt, és mennyi volt a vásárláskori egységár. Csak kitalált adatokat használj. Egy számlán több termék, egy termék több számlán is szerepelhet.
A normálformák helyes sorrendje
| Lépés | Mit ellenőrzünk? | Példa |
|---|---|---|
| 1NF | Egy mezőben egy, a feladathoz választott érték; nincs ismétlődő terméklista egy cellában. | Minden számlatétel külön sor. |
| 2NF | 1NF mellett nincs nem kulcsattribútumot érintő részleges függőség egyetlen jelölt kulcs részétől sem. | A terméknév a termékkódtól függ, nem a teljes számla–termék párostól: külön Áru tábla kell. |
| 3NF | Kezdő példánkban megszüntetjük a nem kulcsmezőkön át vezető tranzitív függőségeket. | A kategóriakódhoz tartozó név külön Kategória táblába kerül. |
Egy egyszerű, egymezős jelölt kulcs esetén nincs olyan valódi kulcsrész, amely részleges függőséget okozna. Egy irányítószámból pedig nem feltételezhetünk általánosan egyetlen települést: a példában a címet a vevőnél tároljuk.
Hozd létre a táblákat
| Tábla | Mezők és Access-típusok |
|---|---|
| Vevő | VevoID: Számláló (PK); VevoNev, Irsz, Telepules, Cim: Rövid szöveg |
| Kategória | KategoriaID: Számláló (PK); KategoriaNev: Rövid szöveg |
| Áru | AruID: Számláló (PK); AruNev: Rövid szöveg; AktualisAr: Pénznem; KategoriaID: Szám / Hosszú egész (FK) |
| Számla | SzamlaID: Számláló (PK); VevoID: Szám / Hosszú egész (FK); VasarlasDatuma: Dátum/idő |
| Számlatétel | SzamlaID és AruID: Szám / Hosszú egész (összetett PK és FK); Mennyiseg: Szám / Hosszú egész; Egysegar: Pénznem |
| Eladó (választható) | EladoID: Számláló (PK); EladoNev: Rövid szöveg; a Számlához EladoID idegen kulccsal kapcsolható |
Az alapprojekt öt táblából áll. A hatodik, Eladó tábla külön bővítés: az eladót ne keverd a vevő adatai közé. A számlatételben nem Számláló az idegen kulcs, hanem a hivatkozott Számlálóhoz illeszkedő Szám / Hosszú egész.
A SzamlaID és AruID összetett kulcs azt feltételezi, hogy egy termék egy számlán legfeljebb egyszer szerepel. Ha ugyanaz a termék külön tételeken is megjelenhet, használj külön TetelID kulcsot vagy számlán belüli sorszámot.
Kapcsold össze és ellenőrizd
- Tervezőnézetben jelöld ki a Számlatétel két kulcsmezőjének sorkijelölőjét a Ctrl nyomva tartásával, majd válaszd az Elsődleges kulcs parancsot.
- Az Adatbáziseszközök → Kapcsolatok ablakban hozd létre a szülő–gyerek kapcsolatokat.
- Állíts be hivatkozási épséget. A kapcsolatok: Vevő 1 → több Számla; Számla 1 → több Számlatétel; Áru 1 → több Számlatétel; Kategória 1 → több Áru.
- Adj Mennyiseg mezőhöz >0, az árakhoz >=0 érvényességi szabályt és értelmes hibaüzenetet. Az irányítószámot négykarakteres szövegként kezeld.
- Rögzíts két vevőt, három terméket, két számlát és legalább négy tételt. A szülőtáblákat töltsd először.
Próbáld ki a kapcsolat védelmét
Rögzíts nem létező SzamlaID értékkel egy számlatételt. Ezután próbáld ugyanazt a SzamlaID–AruID párt kétszer felvinni. Végül számítsd ki egy számla összegét a mennyiség és a vásárláskori egységár alapján.
Előbb próbáld meg, utána ellenőrizd
A nem létező szülőre mutató sort a hivatkozási épség, az azonos kulcspárt az összetett elsődleges kulcs utasítja el. A számla értéke a tételenkénti Mennyiseg × Egysegar értékek összege. Például 2 × 1500 + 1 × 800 = 3800.
Ellenőrizd a munkádat
Nyisd meg az Adatbáziseszközök → Kapcsolatok ablakot, és nézd át a következőket.
- Mind az öt alaptábla elkészült, és mindegyiknek van elsődleges kulcsa?
- Minden idegen kulcs típusa Szám / Hosszú egész, és nem Számláló?
- A Kapcsolatok ablakban mind a négy kapcsolat látszik, az „1” és a „∞” jellel, hivatkozási épséggel?
- A számlatételben a vásárláskori egységár szerepel, nem az áru aktuális ára?
- A nem létező számlára mutató tételt és az ismétlődő kulcspárt az Access elutasította?
Továbbgondolás: miért kell a számlatételben is tárolni az egységárat?
Ha a számla összegét az Áru tábla AktualisAr mezőjéből számolnánk, egy későbbi áremelés visszamenőleg megváltoztatná a régi számlákat is, ami hibás nyilvántartás. Ezért a vásárlás pillanatában érvényes árat a tételben „lefagyasztjuk”. Ez nem fölösleges ismétlés (redundancia), hanem egy másik adat: az ár egy adott időpontban.
Ha a kapcsolat létrehozásakor az Access nem engedi bekapcsolni a hivatkozási épséget, legtöbbször a két mező típusa nem egyezik (például Számláló és Rövid szöveg), vagy a gyerektáblában már van olyan sor, amelynek nincs szülője. Előbb ezeket javítsd, a tesztadatokat pedig a szülőtáblákkal kezdd.
A normálformák és a kulcsok elméleti alapjai a relációs adatmodell leckében találhatók.

