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ám | Vezetéknév | Keresztnév | Telefon | CNP | Munkakör | |
|---|---|---|---|---|---|---|
| 1 | Kiss | János | 0123456789 | a.b@c.d | 0123 | HR |
| 2 | Móricz | Ka | 0789045601 | a.c@c.d | 0456 | Munkás |
| 3 | Nagy | Éva | 1234567890 | a.d@c.d | 0789 | Takarí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:
- inkonzisztens típusok
- ismétlődő adat (akár különbözőképpen leírva)
- változtatások nehézsége az ismétlődő adatban
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ágNormalizáció a relációs adatmodellben
Meghatározunk úgynevezett „normálformákat”:
1NF: minden attribútum értéke skalár (nem felsorolás), minden sor egyedi, létezik(-nek) kulcs attribútum(-ok)
2NF: 1NF + minden nem kulcs attribútum a teljes kulcstól függ és nem csak annak egy részétől (nincsenek parciális függőségek). Például:
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.- 3NF: 2NF + nincsenek tranzitív függőségek, vagyis egyetlen attribútumot sem határoz meg a kulcstól eltérő attribútum értéke (tehát csak a kulcstól függ). Példa:
Ügyfelek: ID (azonosító), név, tel.,
email, város, ország Városok: ID, név, országTáblák közötti kapcsolatok
A hivatkozások helyességének ellenőrzését szolgálják.
Típusok:
- egy a többhöz: Rendelés – Ügyfél
- több a többhöz: Rendelés – Termék (ehhez bevezetünk általában új táblát, ld. Kolcsonzesek ill. RendelésTermékei lejjebb)
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:
- Ugyfelek(ID, Nev, Telefonszam, SzulDat, Email, Lakcim)
- Targyak(ID, Nev, Leiras, Allapot)
- Kolcsonzesek(ID, UgyfelID, TargyID)
Kapcsolatok, megszorítások:
- a Kolcsonzesek tábla UgyfelID oszlopa egy létező ügyfél ID-ja kell legyen
- a Kolcsonzesek tábla TargyID oszlopa egy létező tárgy ID-ja kell legyen
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:
- Termékek (Név, Ár, Leírás, Kép, MennyiségRaktáron)
- Beszállítók (Tel, Email)
- Ügyfelek (Vezetéknév, Keresztnév, Tel, Email, Lakcím)
- Rendelések (Termékek+Mennyiségek?, Ügyfél?, Dátum)
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):
- Termékek (ID, Név, Ár, Leírás, Kép, MennyiségRaktáron)
- Beszállítók (ID, Név, Tel, Email)
- Ügyfelek (ID, Vezetéknév, Keresztnév, Tel, Email, Lakcím)
- Rendelések (ID, ÜgyfélID, Dátum)
- RendelésTermékei (RendelésID, TermékID, Mennyiség)
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:
- a rendelésbeli ÜgyfélID egy létező ügyfél ID-ja legyen
- a RendelésTermékei-beli RendelésID egy létező rendelés ID-ja legyen
- a RendelésTermékei-beli TermékID egy létező termék ID-ja legyen
Lekérdezések (Queries)
- Lehetőséget adnak adatok szűrésére és rendezésére.
- Lekérdezhetünk egyszerre több táblából is adatokat, kihasználva az ezek közötti kapcsolatokat.
- A lekérdezések eredményeit lehet csoportosítani (pl. adott felhasználóhoz tartozó rendelések átlag értéke).
- Léteznek:
- projekciók (az összes mezőből kiválasztunk néhányat / az oszlopokat szűri)
- szelekciók (a rekordokat szűri valamilyen feltétel szerint)
- rendezések (valamilyen attribútum/-ok szerint)
- csoportosítások (pl. összeg, átlag)
- A gyakorlatban a lekérdezéseket SQL nyelvben szokás megadni (Structured Query Language).
Feladatok:
- Jelenítsük meg az 5 egységnél drágább termékek nevét és árát!
- Jelenítsük meg az ügyfeleket fordított ABC-rendben!
- Jelentsük meg a termékek neveit és a kategóriák neveit, amikhez tartoznak! (többtáblás lekérdezés)
- Jelenítsük meg, hogy melyik kategóriához hány termék tartozik (kategória neve, termékek száma)!
- 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!
- Adjunk hozzá adatokat a termékek táblához úgy, hogy két-három termék jusson egy-egy beszállítóra!
- Jelenítsük meg a beszállítókat az általuk szállított termékek átlagos ára szerinti csökkenő sorrendben!
- Jelenítsük meg, hogy melyik ügyfélnek hány rendelése van (ügyfél neve, rendelések száma)!
- Jelenítsük meg egy-egy rendelés összértékét! (Id, Dátum, Total)
- 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)
- programozási nyelv, arra használjuk, hogy utasításokat adjunk az ABKR-nek (lekérdezés, adatmódosítás, séma módosítása)
- a SELECT utasítás segítségével lehet adatokat lekérni (ld. lekérdezések Access-ben); általában:
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)
- Access adatbázisok egyik objektumtípusa
- adatmegjelenítés a célja, lehet formázni és megjeleníteni / elrejteni dolgokat
- készülhet egyenesen táblán vagy egy lekérdezés eredményéből
- lehet a mezők méreteit állítani, rendezni valamely oszlop szerint
Feladatok:
- 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.).
- 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)
- szintén Access-ben létrehozható objektumok, adatbeviteli céllal készülnek
- testre szabható, hogy hogy nézzen ki, milyen mezők legyenek elérhetők
- gyárthatók menü jellegű űrlapok is (gombokkal, amik más adatbáziselemeket nyitnak meg)
Feladatok:
- 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!
- 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.