Adatbázisok - bevezető

Adatbázis

Értelmezés: adatok rendszerezett gyűjteménye (tipikusan digitális formában).

ABKR: adatbáziskezelő rendszer
DBMS: database management system
SGBD: sistem de gestiune a bazelor de date

Relációs adatmodell

A reláció egy entitást leíró táblázat, melynek oszlopai az entitás tulajdonságai (attribútumok), sorai pedig az entitás példányai (rekordok).

Minden attribútumnak adott típusa van (pl. szám, szöveg, legfeljebb 10 karakteres szöveg, dátum, pénzösszeg stb.).

Példa: “Alkalmazottak” reláció:

SorszámVezetéknévKeresztnévTelefonEmailCNPMunkakör
1KissJános0123456789a.b@c.d0123HR
2MóriczKa0789045601a.c@c.d0456Munkás
3NagyÉva1234567890a.d@c.d0789Takarító

RDBMS: Relational Database Management System
MS Access: relációs adatmodellt használó adatbáziskezelő rendszer, a MS Office csomag része.

Problémák az egyszerű táblázatokon alapuló („Excel-es”) adattárolással:

Pl. „Eladások” táblázat: dátum, ügyfél, áru, mennyiség, tel., email, ország stb.

Funkcionális függőség

Két attribútum közötti viszony. Azt mondjuk, hogy Y függ X-től (jelölés: X → Y), ha minden rekordban adott X értékhez adott Y érték társul, azaz nem tartozik két különböző Y ugyanahhoz az X-hez.

Pl. az előbbi „Eladások” táblázatban:

    ügyfél → tel.
    ügyfél → email

Kulcs

Olyan attribútum vagy attribútum-csoport, amely egyértelműen meghatározza az egyén minden attribútumát (nincs két rekord ugyanazzal a kulccsal). Általában aláhúzással jelöljük.

Péla:

Szeretnénk az ismétlődéseket elkerülni az előbbi példában:

    Eladások: dátum, ügyfél, áru, mennyiség, tel., email, ország

Próbáljuk meg két táblázattá alakítani:

    Eladások: dátum, ügyfél név, áru, mennyiség
    Ügyfelek: név, tel., email, ország

A név megváltozása esetén még mindig baj van, ezért próbálunk azonosítót rendelni az ügyfelekhez (ez kulcsként viselkedik az Ügyfelek táblában):

    Eladások: dátum, ügyfél ID, áru, mennyiség
    Ügyfelek: ID (azonosító), név, tel., email, ország

Normalizáció a relációs adatmodellben

Meghatározunk úgynevezett „normálformákat”:

        Eladások: dátum, ügyfél, áru, mennyiség, tel., email, ország
        Itt az ügyfél → tel. egy parciális függőség.
        Ügyfelek: ID (azonosító), név, tel., email, város, ország
Itt az ID → város → ország tranzitív függőség, a megoldás pedig új tábla kiemelése, pl:
        Városok: ID, név, ország

Táblák közötti kapcsolatok

A hivatkozások helyességének ellenőrzését szolgálják.

Típusok:

Külső kulcs (foreign key): olyan oszlop (vagy oszlopcsoport), melyben a mezők értékei egy másik tábla elsődleges kulcsának értékei kell legyenek. Ezek határozzák meg a kapcsolatokat különböző táblák oszlopai között.

Példa: egy kölcsönző adatbázisa

Táblák:

Kapcsolatok, megszorítások:

Példa: egy webáruház adatbázisa

Szeretnénk az ügyfelek és termékek adatai mellett rendeléseket is tárolni. Egy rendelés tartalmazhat több terméket, mindegyiket valamilyen mennyiségben.

Első ötlet:

Probléma: ez nincs 1NF-ban, mert a rendelésekben nem lehetne lista (a termékekkel vagy termék/mennyiség párokkal).

Javított ötlet (+ ID-k hozzáadása):

A „RendelésTermékei” táblázat kiemelésre került, ez tárol információkat arról, hogy melyik rendeléshez milyen termékek tartoznak. Így a séma már 1NF, 2NF és 3NF-ban is van.

Kapcsolatok, megszorítások:

Lekérdezések (Queries)

Feladatok:

  1. Jelenítsük meg az 5 egységnél drágább termékek nevét és árát!
  2. Jelenítsük meg az ügyfeleket fordított ABC-rendben!
  3. Jelentsük meg a termékek neveit és a kategóriák neveit, amikhez tartoznak! (többtáblás lekérdezés)
  4. Jelenítsük meg, hogy melyik kategóriához hány termék tartozik (kategória neve, termékek száma)!
  5. Rendeljünk a termékekhez egy-egy beszállítót (BeszállítóID oszlop hozzáadásával). Állítsuk be a külső kulcsos megszorítást!
  6. Adjunk hozzá adatokat a termékek táblához úgy, hogy két-három termék jusson egy-egy beszállítóra!
  7. Jelenítsük meg a beszállítókat az általuk szállított termékek átlagos ára szerinti csökkenő sorrendben!
  8. Jelenítsük meg, hogy melyik ügyfélnek hány rendelése van (ügyfél neve, rendelések száma)!
  9. Jelenítsük meg egy-egy rendelés összértékét! (Id, Dátum, Total)
  10. Minden beszállítóra számítsuk ki, hogy mennyit fizettünk neki eddig (a raktáron levő összmennyiségre)! Látszodjon a beszállító ID-ja, neve és az összeg.

Az SQL nyelv (Structured Query Language)

        SELECT attr1, attr2, attr3 ….
        FROM tábla
        WHERE feltétel
        ORDER BY attr (ami szerint rendezni akarunk)

Példa:

    SELECT Nev, Ar
    FROM Termekek
    WHERE Ar > 10
    ORDER BY Nev;

Többtáblás lekérdezés:

    SELECT Termekek.Nev, Kategoriak.Nev
    FROM Kategoriak
    INNER JOIN Termekek ON Kategoriak.ID = Termekek.KategoriaID;

Más példa:

    SELECT Termekek.Nev, Kategoriak.Nev
    FROM Kategoriak, Termekek
    WHERE Kategoriak.ID = Termekek.KategoriaID

Kimutatások / jelentések (Reports)

Feladatok:

  1. Készítsünk raportot a beszállítóink adatairól. Ne jelenjen meg az ID oszlop. Legyenek név szerinti ABC sorrendben. Formázzuk a feljécét (színek, igazítás stb.).
  2. Egy report-ban jelenítsük meg a rendeléseket a hozzájuk tartozó termékekkel együtt, illetve minden rendelés esetén lássuk a felhasználót is, aki rendelte!

Űrlapok (Forms)

Feladatok:

  1. Készítsünk űrlapot új ügyfél bevitelére vagy meglévő ügyfél módosítására. Ne jelenjen meg az ID mező. Csak az ügyfél adatait lehessen beállítani, a rendeléseit nem!
  2. Készítsünk menü jellegű űrlapot, amin olyan gombok vannak, amikkel az eddigi raport-okat és űrlapokat meg tudjuk jeleníteni, illetve egy kilépés gomb, ami bezárja az adatbázist. Állítsuk be az adatbázist, hogy megnyitáskor ez az űrlap jelenjen meg.