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.

  • Adatbázis-kezelés · Access-projekt
  • Saját feladat
  • Önellenőrzés
Bevásárlókocsit ábrázoló gomb a vásárlási nyilvántartás témájához.

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 köztes tábla feladata
Számlaegy vásárlási esemény
Számlatételtermék, mennyiség, akkori ár
Árua termék törzsadatai
A számlatétel köti össze a két oldalt. A tételben őrzött egységár megmarad akkor is, ha később változik a termék aktuális ára.

A normálformák helyes sorrendje

Normalizálás a vásárlási példában
LépésMit ellenőrzünk?Példa
1NFEgy 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.
2NF1NF 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.
3NFKezdő 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

Tervezési minta – öt alaptábla és egy választható bővítés
TáblaMezők és Access-típusok
VevőVevoID: Számláló (PK); VevoNev, Irsz, Telepules, Cim: Rövid szöveg
KategóriaKategoriaID: Számláló (PK); KategoriaNev: Rövid szöveg
ÁruAruID: Számláló (PK); AruNev: Rövid szöveg; AktualisAr: Pénznem; KategoriaID: Szám / Hosszú egész (FK)
SzámlaSzamlaID: Számláló (PK); VevoID: Szám / Hosszú egész (FK); VasarlasDatuma: Dátum/idő
SzámlatételSzamlaID é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

  1. 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.
  2. Az Adatbáziseszközök → Kapcsolatok ablakban hozd létre a szülő–gyerek kapcsolatokat.
  3. Á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.
  4. 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.
  5. 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.

Gyakori hiba

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.

Források és továbbolvasás