Forrás:
  • Digitális kultúra 11. (NAT2020) Adatbázis-kezelés - digitális tankönyv
  • Saját forrás
Ebből a főcsoportból megtudhatod:
  1. melyek az adatbázis-kezelés alapfogalmai
  2. hogyan kell egy adatbázist megtervezni
  3. hogyan lehet egy adatbázist létrehozni, az adatokat importálni
  4. milyen lehetőségek vannak az adatok kinyerésére
  5. mikor használunk logikai műveleteket a lekérdezésben
  6. milyen mezőtípusokat különböztetünk meg
  7. hogyan lehet az adatokat rendezni és több táblából kinyerni
  8. mik azok a számított értékek
  9. mire jók az aggregáló függvények
  10. mikor használunk segédlekérdezéseket
  11. hogyan készíthetünk jelentéseket és űrlapokat
Az adatbázis-kezelés fő feladatai
  1. Az adatok biztonságos tárolása
  2. A tárolt adatokból különféle információk kinyerése
Adatbázis-kezelés folyamatának fontosabb állomásai
  1. A feladat megfogalmazása
  2. Az adatbázis megtervezése, ésszerűsítése
  3. Az adatbázis létrehozása
  4. Lekérdezések segítségével információ kigyűjtése
A folyamat kidolgozása

1. A feladat megfogalmazása:
A mintapéldában diákokról szeretnénk a következő adatokat tárolni: a nevét, hány éves, hol született, milyen nyelvet tanul, melyik iskolába jár, illetve hány diák jár abba a suliba?
A feladat általános megfogalmazásban - három diákra kivetítve - valahogy így néz ki:

" Nóra 13 éves, Budapesten született, angolul és németül tanul, a Piros iskolába jár, amely Budapesten található, és 652 diákja van. Pista a neve annak az angol nyelvet tanuló, 11 éves diáknak, akinek születési helye Sopron, a Piros iskolába jár, amely Budapest városában található, és amelynek 652 diákja van. A Szolnokon született Bea 12 éves, a Kék iskolába jár, amely Szegeden található, és 541 diákja van. "

A feladatot olvasva magunk is érezzük, hogy ez rendben is lenne, de ezekből a mondatokból igen-igen nehezen lehetne gyorsan kigyűjteni az információkat például, hogy:
(A kérdések színei az oldal alján lévő következtetésekben szerepük lesz!)
  • hány diák született Budapesten,
  • kik vidékiek,
  • vagy azt, hogy az adott pillanatban melyik diák hány éves,
  • melyik iskolában tanítanak német nyelvet is, stb...
Pláne mindezt akkor, ha nem csupán három diákról, hanem több ezer, tízezer, százezer, stb... tanuló esetében, illetve nagyon sokféle mondatszerkezetben fogalmazhatjuk meg a dolgokat.
Nos, nézzük meg, hogyan oldjuk meg mindezt adatbázis-kezeléssel!

2. Az adatbázis megtervezése, ésszerűsítése:
Vegyük észre, hogy vannak olyan szavak, szópárok, esetleg létrehozhatunk olyan szókapcsolatokat, amelyek a feladat megoldása szempontjából kiemelkedően fontosak. Az átláthatóság érdekében először csak az egyik diák (Pista) esetében nézzük meg ezeket a szópárokat ill. szavakat:

" Pista a neve annak az angol nyelvet tanuló, 11 éves diáknak, akinek születési helye Sopron, a Piros iskolába jár, amely Budapest városában található, és amelynek 652 diákja van."

A szópárok tehát a következők:
Tulajdonság   Érték
név Pista
nyelv angol
év 11
születési hely Sopron
iskola Piros
város Budapest
diák(száma) 652
És ezek a szópárok, ha nem is szerepelnek látható módon, de mindegyik mondatra érvényesek! Azaz, a végleges megoldásunkhoz mindegyik mondatban ezekre kell koncentrálnunk.

Nézzük ezeket táblázatba foglalva úgy, hogy a táblázat első sorába írjuk a tulajdonságok nevét, míg a többi sorban felsoroljuk a hozzájuk tartozó értékeket (a táblázatos kialakítás azért hasznos, mert az emberi agy könnyebben "emészti" ezt a megjelenítési formát!):

név éves nyelvek születési hely iskolanév város diák(száma)
Nóra 13 angol, német Budapest Piros Budapest 652
Pista 11 angol Sopron Piros Budapest 652
Bea 12 Szolnok Kék Szeged 541
... ... ... ... ... ... ...


A táblázatos forma logikus és áttekinthető. Azonban ebben a formában tartogathat számunkra néhány problémát.
Például:

  • Nórából és Pistából még a Piros iskolában is sok lehet, hát még az országban máshol. Segítene, de teljes mértékben még az sem oldaná meg a gondot, ha a vezetéknevüket ismernénk. (Gondoljunk bele, hány Kovács István lehet egy iskolában.)
    Megoldás: tároljuk le egy új oszlopban a diákigazolvány számot, mert az minden diáknak különböző. Így az azonos nevű diákokat is meg tudjuk különböztetni egymástól.

  • Az idő múlásával változik az életkor, így szinte napról-napra követnünk - és javítanunk! - kellene a táblázatot
    Megoldás: nem az életkort, hanem a születési dátumot tartjuk nyilván, így ebből az adatból bármely pillanatban ki tudjuk számítani az aktuális életkort

  • Az iskolaváltoztatások megváltoztatják a létszámot, ezért ha Pistáék Szegedre költöznek, és ő a budapesti Piros iskola helyett a szegedi Kék iskolában folytatja a tanulmányait, akkor a táblázatunk máris módosítást igényel.
    Megoldás: az egyes iskolákhoz tartozó diákok számát nem rögzítjük, mert a táblázatban meg tudjuk "számlálni", hányszor szerepel mondjuk a budapesti Piros iskola neve

A fentiek alapján a táblázatunk az alábbiak szerint módosul:

oktatási azonosító név nyelvek születési dátum születési hely iskolanév város
85697436581 Nóra angol, német 2008.05.01. Budapest Piros Budapest
65823478915 Pista angol 2010.03.16. Sopron Piros Budapest
34875651245 Bea 2009.06.12. Szolnok Kék Szeged
... ... ... ... ... ...


Három problémát is megoldottunk, de vajon tökéletes-e így?
Korántsem, hiszen ha például megváltoztatják az iskola nevét, akkor az összes diáknál meg kellene változatni ezt a tulajdonságot. (Máris érzékelhetjük, hogy ez a táblázat nem csk a diákokról, haenm az iskolákról is tartalmazhat információkat!)
Megoldás: az iskolák adatait emeljük ki a táblázatból és helyezzük át egy másik táblázatba úgy, hogy abban rögzítjük majd az adott iskola OM azonosítóját.
Így a diáktáblázatban az iskola neve helyett az OM azonosító fog szerepelni, tehát, ha az iskola táblában megváltoztatjuk az iskola nevét, az automatikusan azt jelenti, hogy a diák táblában is megváltozik majd az értéke.


Hasonló jellegű problémát érezhetünk még a nyelvek esetében, hiszen Nóra két nyelvet is tanul, Beánál meg egy sem szerepel. Ha a diákokat a tanult nyelvek alapján keresnénk, akkor az ilyen több értékű mező problémát okozhat, vagy ha az adott mező üres mező, akkor szintén. Ezért ezeket az adatokat szintén külön táblákba fogjuk letárolni.

Ezek után nézzük a javított táblázatokat:
Diák táblázat:
oktatási azonosító név születési dátum születési hely iskola OM azonosítója
85697436581 Nóra 2008.05.01. Budapest 789123
65823478915 Pista 2010.03.16. Sopron 789123
34875651245 Bea 2009.06.12. Szolnok 789125
... ... ... ... ...

Iskola táblázat:
iskola OM azonosítója iskolanév város
789123 Piros Budapest
789123 Piros Budapest
789125 Kék Szeged
... ... ...

Nyelv táblázat:
azonosító név
1 angol
2 francia
3 német
... ...
Nyelvtanulás táblázat:
azonosító diák oktatási azonosítója nyelv azonosító
1 65823478915 3
2 85697436581 1
3 85697436581 3
... ... ...
Végül az alábbi rajzos kapcsolat segítségével nézzük át, hogyan tudjuk értelmezni ezt a négy táblát együtt az eredeti kérdésekre vonatkoztatva:
  1. Hány diák született Budapesten?
  2. Ez egy remek példa arra nézve, hogy miért nem kell minden adatot tárolni egy táblázatban. A kérdésre az információt úgy kapjuk meg, hogy a Diák táblázat Születési hely oszlopában megszámláljuk, hányszor szerepel a "Budapest" szó!
  3. Kik vidékiek?
  4. Az előző válaszból logikus magyarázat: ha megszámláljuk, Diák táblázat Születési hely oszlopában hány helyen NEM szerepel a "Budapest" szó,akkor megkapjuk a vidéki tanulók számát!

  5. Melyik diák, hány éves?
  6. Ha az eredeti táblázati formátumot alkalmaztuk volna, akkor naponta át kellene írni azt annak megfelelően, hogy az adott tanuló hány éves azon az aktuális napon. Viszont a javított szerkezet alapján nincs más teendőnk, mint a kérdés feltételekori adott pillanatból kivonjuk a születési dátumot, így megkapjuk a diák éveinek számát!


  7. Melyik iskolában tanítanak német nyelvet?
  8. Itt már egy kicsit nehezebb dolgunk van, mivel látható, hogy a Nyelv táblázat és az Iskola táblázat között nincs közvetlen kapcsolati lehetőség. Azonban, ha követjük a nyíllal jelzett gondolatmenetet, akkor pillanatok alatt megtudjuk a kérdésre a választ:
    • Tudjuk a német nyelv azonosítóját a Nyelv táblázatból (3),
    • a Nyelvtanulás táblázatban megkeressük, melyik diák oktatási azonosítójához tartozik hozzá a 3-as érték,
    • a kapott oktatási azonosítókat megkeressük a Diák táblázat<,/span>ban
    • ahol is az adott diáknál megtudhatjuk, melyik iskolai OM azonosítóval rendelkezik,
    • és innen már csak egy ugrás, hogy az Iskola táblázatban megnézzük az iskola nevét.


Hogyan alakítsuk ki ezeket a táblázatokat?

A fenti példából általános szabályként az alábbiakat tudjuk ajánlani:
  1. Minden táblában legyen egy olyan oszlop, melynek segítségével minden sort külön-külön egyértelműen azonosítani tudunk. Ezt nevezik kulcsnak. (Az ábrán ezt az oszlopnevet jelölik "sárga színű kulccal")
    Például egy iskolában sok Kovács János járhat, mivel ez egy igen gyakori név. Amennyiben nem azonosítjuk valamilyen egyedi kulcsazonosítóval, akkor hogyan tudjuk eldönteni, melyik Kovács János adatát gyűjtjük ki a táblázatból? Ilyen kulcsazonosító bármi lehet, akár diákigazolvány szám, szem.ig. szám,...de lehet ez akár egy sorszám is.

  2. Az adattáblák között a kulcsok segítségével teremtjük meg a kapcsolatot. Az alábbi rajzban a mintapélda adatbázis-kapcsolatát mutatja be.
    Egy adattáblában azonban nem csak a saját kulcsa látható, hanem a másik tábla kulcsmezője is. Ennek segítségével teremtjük meg a kapcsolatot a két tábla között. (Az Iskola tábla iskola OM azonositója bekerül a Diáktáblába is. Ekkor azonban a neve: idegen kulcs. Azt, hogy mi a szerepe ilyenkor, az ábra alatt tisztázzuk!



  3. Vegyük észre, hogy az adattáblák kapcsolatának meghatározásánál azt kell eldöntenünk, hogy melyik azonosítóját kell beírnunk a másik táblába tulajdonságként.

    Iskola-diák: Egy iskolába járhat-e több diák? Egy diák járhat-e több iskolába? Az első kérdésre "igen" a válasz, a másodikra "nem". Ezért a Diák táblába kell felvennünk tulajdonságként az iskola tábla azonosítóját (iskola OM azonositó).
    Az 1-es és a magyarázata: 1 iskolába járhat több (∞), de "visszafelé" már nem igaz: egy diák nem járhat több iskolába.

    Diák-Nyelv: Egy diák tanulhat-e több nyelvet? Egy nyelvet tanulhat-e több diák? Mindkét kérdésre "igen"-nel válaszolunk. Ilyen, "több a többhöz kapcsolat" a relációs adatbázisban nem szerepelhet, ezért egy új táblát kell készítenünk (Nyelvtanulás), amelybe a két másik tábla azonosítóiból alkotott párokat írjuk be. Az ilyen típusú táblákat nevezzük kapcsoló táblának.
Relációs adatbázis és normalizálás

Ha valaki a fenti gondolatmenet szerint alakítja át a táblázatát, akkor egy több táblából álló, jól használható szerkezethez jut, amelyet relációs adatmodellnek neveznek.
Azt a folyamatot pedig, amíg az "egy táblából" eljutunk a kapcsolatokkal kialakított "több tábláig", normalizálásnak nevezünk.
A normalizálás folyamatában arra kell törekednünk, hogy
  1. Minden adattáblában legyen olyan adat, amely azonosító tulajdonsággal rendelkezik (pld.: oktatási azonosító, személyi igazolványszám, adóigazolvány szám, vagy akár egy sorszám, stb...)
  2. Ne tároljunk olyan értéket, amely a többi adat alapján meghatározható! (pld.: diákok száma)
  3. Ne tároljunk olyan értéket, amely minden beavatkozás nélkül, automatikusan változik! (pld.: diákok életkora -> cseréljük át olyanra, ami állandó, és ebből számítás útján megkaphatjuk a kívánt eredményt
  4. Ne legyen olyan oszlop, ahol egy cellában több érték is szerepelhet! (pld.: nyelv)

Gyakorló feladatok

Tartsd be a normalizálásra vonatkozó utasításokat!
  1. Közösen alakítsuk ki annak az adatbázisnak a relációs adatmodelljét, amiben személyeknek a nevét és email-címét tároljuk! Rajzoljuk le! Ne feledkezzünk meg a táblák közötti kapcsolatok kiépítéséről!

  2. Készítsük el közösen annak az adatbázisnak a relációs adatmodelljét (kapcsolatokkal együtt), amiben egy könyvtár könyveit tároljuk le. Az adatbázisban a következő elemeket szeretnénk tárolni:
    • szerző neve (családi és utónév külön)
    • könyv címe
    • témakör (pl. szépirodalom, ismeretterjesztő, gyerekirodalom, stb...)

  3. Önálló feladat: készítsd el és töltsd is fel azt az adatbázist, amelyik a magyarországi királyok és egyenesági leszármazottaik nevét tárolja 1000 és 1500 között. Tárolandó adatok:
    • uralkodó neve
    • mettől meddig volt a trónon
    • fiú gyemek neve
    • leány gyermek neve

  4. Önállóan alakítsd ki azt a relációs adatmodellt, amelyben egy borpincészet termékeit tárolod. Tárolandó adatok:
    • bor neve
    • évjárat
    • hány éves a bor?
    • ára (külön literre és hektoliterre)
    • típus: vörös, fehér, rosé
    • a szőlészet melyik sorából származik a szőlő?

PHP Code Snippets Powered By : XYZScripts.com