01 · ER-modell
Miért készítünk ER-modellt?
Egy adatbázis tervezésekor először azt kell megértenünk, milyen tényeket akarunk nyilvántartani és mely tények tartoznak egymáshoz. Ha rögtön táblákat és idegen kulcsokat rajzolunk, könnyen belekeverjük a megoldás technikai részleteit egy még tisztázatlan feladatba. Az egyed–kapcsolat modell (ER-modell) a megvalósítás előtti, fogalmi szintű térkép: az adatok csoportjait, tulajdonságait, összefüggéseit és fontos korlátozásait mutatja meg.
Képzeljünk el egy oktatási portált. A tanuló kurzusra jelentkezik, a kurzust oktató vezeti, a kurzus alkalmakból áll, és meghatározott idősávban termet foglalnak hozzá. A „tanuló”, „kurzus” és „oktató” nem egyszerű oszlopnevek: mindegyik önállóan előforduló dolgok csoportját jelöli. A „jelentkezik” ezzel szemben egy olyan tény, amely két csoport tagjait rendeli egymáshoz.
Az ábra a típusokat és a rájuk vonatkozó szabályt ábrázolja, nem a portál minden aktuális rekordját. Ha ma nincs még tanuló egy kurzuson, a KURZUS egyedtípus akkor is része a modellnek. A tényleges tanulók és kurzusok később egyedelőfordulások lesznek.
02 · ER-modell
Egyedtípus és egyedelőfordulás
A KURZUS egyedtípusnak egy előfordulása például a „SQL alapok – 2026 ősz” konkrét kurzuskiírás. Ugyanígy az OKTATÓ egyedtípus egy előfordulása egy meghatározott tanár. A konkrét előfordulás nem keverhető össze a típus nevével: a KURZUS dobozba a csoport nevét írjuk, a kurzusok adatait pedig az egyedeknél adjuk meg.
A rendszerben azonosítót és önálló adatokat szeretnénk tárolni a TANULÓ, KURZUS, OKTATÓ és TEREM előfordulásairól. A kurzuscím a KURZUS tulajdonsága, így nem külön egyedtípus. Az órakezdés az IDŐSÁV jellemzője lehet; ha viszont önállóan akarunk termeket több kurzushoz időrésenként beosztani, az IDŐSÁV már önállóan nyilvántartott egyedtípus is lehet.
Az egyedtípus neve legyen egyes számú, jól értelmezhető főnév: KURZUS, nem „kurzusok és tanulók”. Nem az dönti el az egyedtípus létjogosultságát, hogy a leendő adatbázisban biztosan lesz-e külön tábla. Azt kérdezzük: van-e önálló azonossága, jellemzője és szerepe a feladatban? Az ER-modellből a relációs modellre történő leképezés csak később következik.
| Kifejezés | A modellben | Indok |
|---|---|---|
| KURZUS | Egyedtípus | Több konkrét kurzuskiírás létezik, saját azonosítóval és címmel. |
| „SQL alapok – 2026 ősz” | Egyedelőfordulás | Egy konkrét KURZUS-rekord, nem új típus. |
| cím | Attribútum | A kurzust jellemzi, önmagában nem külön dolog. |
| jelentkezik | Kapcsolattípus | A TANULÓ és a KURZUS konkrét előfordulásait rendeli egymáshoz. |
03 · ER-modell
Attribútumok: egyszerű, összetett, többértékű és számított adatok
A KURZUS attribútuma lehet a kurzus_id, a cím vagy a férőhely. A férőhely például nem lehet negatív szám. Egy „közepes” nehézségi szint csak akkor érvényes, ha előre meghatároztuk a választható szinteket. A tartomány tisztázása megelőzi a hibás adatbevitel jelentős részét.
| Attribútum jellege | Önálló példa | Mit érdemes tisztázni? |
|---|---|---|
| Egyszerű | A KURZUS címe a választott modellben egyetlen érték. | Kell-e a címből részeket önállóan keresni? Ha igen, más bontás indokolt. |
| Összetett | A kurzus időtartama óra és perc részből áll. | A felhasználó külön is keresi-e az órát és a percet? A tárolási terv később választhat más fizikai formát. |
| Egyértékű | Egy konkrét kurzuskiírásnak egy férőhelyszáma van. | Pontosan melyik kiírásra és mely időpontban értjük az értéket? |
| Többértékű | Egy kurzushoz több keresési kulcsszó tartozhat. | A kulcsszavak száma változhat; több értéket nem érdemes egyetlen, vesszőkkel tagolt mezőnek tekinteni. |
| Származtatott | A szabad helyek száma a férőhely és az érvényes jelentkezések alapján számítható. | Milyen jelentkezési állapotok számítanak foglaltnak? A számított érték ne mondjon ellent a forrásadatoknak. |
Az egyszerű attribútum a feladat szempontjából tovább már nem bontandó. Az összetett attribútum belső részekre bontható; ezek tovább is tagolhatók. Ez a fogalmi bontás nem írja elő, hogy az adatbázisban szó szerint „időtartam” nevű fizikai oszlop legyen. Ha a két összetevőt sosem használjuk külön, az összetett alak csak fölösleges bonyolítás lehet; ha külön is szűrünk rájuk, segíthet az igények megértésében.
Az egyértékű attribútum egy előforduláshoz egy értéket rendel. A többértékű attribútum ugyanahhoz az előforduláshoz több értéket is rendelhet: például egy kurzus keresési kulcsszavai lehetnek „SQL”, „JOIN” és „lekérdezés”. A forrásattribútum értékét tároljuk vagy rögzítjük; a származtatott attribútumot más értékekből számítjuk. A szabad helyek számításánál különösen fontos, hogy a törölt jelentkezés ne foglaljon helyet.
04 · ER-modell
Azonosítás: kulcsattribútum és összetett kulcs
A KURZUS címe nem biztos kulcs: lehet két külön évben két „SQL alapok” kurzus. A kurzus_id alkalmas azonosító, ha minden kurzuskiíráshoz külön, nem újrahasznosított értéket rendelünk. A TANULÓ neve sem feltétlenül egyedi; egy belső tanuló_id egyértelműbb és későbbi névváltozáskor is állandó marad.
Két kurzus címe egyaránt „Adatbázis-kezelés”, de az egyik az őszi, a másik a tavaszi félév konkrét kiírása. A (cím, félév) pár akkor lehetne összetett kulcs, ha garantált, hogy ugyanabban a félévben azonos című kurzust csak egyszer hirdetnek meg. Ha több csoportot is indítanak, ez a feltevés sérül. Egy önálló kurzus_id kevesebb üzleti feltételezésre épül.
A kulcs kiválasztásához három kérdés segít. Biztosan egyedi? Ne csak a jelenlegi néhány sorban legyen egyedi. Mindig rendelkezésre áll? Üres azonosítóval nem lehet megbízhatóan hivatkozni. Stabil? Olyan értéket válassz, amelyet nem kell gyakran módosítani. Az ER-ábrán a kulcsattribútum nevét aláhúzással jelöljük.
Egy kapcsolathoz tartozó adatot sem szabad tévesen valamelyik fél azonosítójává tenni. A FELVESZ kapcsolatban a jelentkezés dátuma ugyanannak a tanulónak kurzusonként eltérhet. A kurzus és a tanuló azonosítója együtt azonosíthatja a jelentkezést, ha rögzítjük, hogy ugyanaz a tanuló ugyanarra a konkrét kurzuskiírásra legfeljebb egyszer jelentkezhet.
05 · ER-modell
Gyenge egyedtípus és azonosító kapcsolat
Egy kurzus több tanórából, azaz ALKALOM előfordulásból áll: 1. alkalom, 2. alkalom, 3. alkalom. A sorszám egy kurzuson belül egyedi, de több különböző kurzusnak is van „1. alkalma”. Így a sorszám csak részleges kulcs. Az alkalom teljes azonosítója a szülő kurzus_id értéke és a saját sorszáma együtt: (kurzus_id, sorszám).
Ha az 1. alkalomról azt mondjuk, hogy „normalizálás”, még nem tudjuk, melyik kurzushoz tartozik. A „K48 kurzus 1. alkalma” már egyértelmű. Az ALKALOM a kurzus nélkül a választott nyilvántartásban nem értelmezhető, ezért teljesen részt vesz a RÉSZE azonosító kapcsolatban. A kurzus viszont a kihirdetés pillanatában még létezhet rögzített alkalmak nélkül; a KURZUS részvétele ebben az állapotban részleges.
06 · ER-modell
Kapcsolattípus, kapcsolat attribútuma és fokszám
A TANULÓ FELVESZ KURZUS bináris kapcsolat egy előfordulása például: „T17 tanuló felveszi a K48 kurzust”. Ugyanennek a kapcsolatnak egy attribútuma a jelentkezési dátum. A tanulóhoz önmagában nem rendelhetjük: ha T17 két kurzusra különböző napokon jelentkezett, két külön dátumról beszélünk. A KURZUS RÉSZE ALKALOM szintén bináris, de egészen más jelentésű: azt rögzíti, mely alkalmak tartoznak a kurzushoz.
Az „oktat” szó az OKTATÓ és a KURZUS közötti viszonyt nevezi meg. Ha az egyes kurzusoknál az oktatás kezdete különbözik, a kezdés dátuma ehhez a viszonyhoz tartozhat. Az OKTATÓ születési éve ellenben az oktató attribútuma, mert nem változik kurzusonként.
Előfordulhat, hogy ugyanaz a két egyedtípus több különböző jelentésű kapcsolatban áll: például egy OKTATÓ VEZETI és egy másik OKTATÓ ELLENŐRZI ugyanazt a KURZUS-t. Ezt nem érdemes azonos név nélküli vonallal összemosni. A kapcsolatnak olyan igés nevet adj, amelyből mondat olvasható: „Az oktató vezeti a kurzust.”
Az egyedtípus saját magával is kapcsolatban állhat. Egy KURZUS ELŐFELTÉTELE egy másik KURZUS-nak; a két előfordulás szerepét meg kell különböztetni: előfeltétel és ráépülő kurzus. Ilyen önhivatkozó kapcsolat esetén különösen könnyű összekeverni az irányt.
07 · ER-modell
Részvétel és számosság: két külön kérdés
Részvétel: minden előfordulásnak részt kell-e vennie a kapcsolatban? Számosság: legfeljebb hány másik előforduláshoz kapcsolódhat egy előfordulás? Ezeket egymástól függetlenül kell tisztázni. Az „egy” jelölés az ábrán a legfeljebb egyet rögzíti; az, hogy legalább egy szükséges-e, a teljes részvételből következik.
| Kapcsolat | Számosság | Részvétel és konkrét szabály |
|---|---|---|
| TANULÓ – FELVESZ – KURZUS | M:N | Egy tanuló több kurzust is felvehet; egy kurzusnak több tanulója lehet. Mindkét oldal részleges, mert új tanuló és frissen meghirdetett kurzus létezhet jelentkezés nélkül. |
| OKTATÓ – OKTAT – KURZUS | 1:N | Egy oktató több kurzust vezethet, de minden kurzusnak pontosan egy felelős oktatója van. KURZUS: teljes; OKTATÓ: részleges, mert lehet még be nem osztott oktató. |
| TANULÓ – BELÉP – FIÓK | 1:1 | A példa szabályai szerint egy tanuló legfeljebb egy fiókkal, egy tanulói fiók pontosan egy tanulóval áll kapcsolatban. TANULÓ: részleges (még nem regisztrált); tanulói FIÓK: teljes. |
| KURZUS – RÉSZE – ALKALOM | 1:N | Egy kurzusnak több alkalma lehet, egy alkalom egyetlen kurzushoz tartozik. ALKALOM: teljes; KURZUS: részleges, amíg az órarend készül. |
Az 1:N szabály irányát mindig szóban is mondd el. Az „egy oktató több kurzust vezethet” állításban az oktató oldalához az 1, a kurzus oldalához az N érték kapcsolódik, ha azt jelöljük, hogy egy oktató hány kurzushoz, illetve egy kurzus hány oktatóhoz rendelhető. A kurzus felelős oktatójának kötelezősége ettől külön szabály.
T17 tanuló felveszi K48-at és K52-t. K48-at T17 mellett T21 is felveszi. Ebből látszik, hogy ugyanaz a tanuló több kurzushoz, és ugyanaz a kurzus több tanulóhoz is kapcsolódik. A kétféle többség együtt indokolja az M:N jelölést.
08 · ER-modell
Háromrésztvevős kapcsolat és az információvesztés veszélye
A portál heti órarendjében azt rögzítjük, melyik kurzus melyik termet melyik idősávban használja. Ezt a három tényt együttesen kell ismernünk: csak „kurzus–terem”, „kurzus–idősáv” és „terem–idősáv” párokból még nem feltétlenül derül ki az eredeti beosztás. A BEOSZTÁS ezért ebben a feladatban háromszerepű kapcsolat KURZUS, TEREM és IDŐSÁV között.
| Kurzus | Terem | Idősáv |
|---|---|---|
| SQL labor | 101-es terem | hétfő 9:00 |
| SQL labor | 102-es terem | szerda 11:00 |
| Excel gyakorlat | 101-es terem | szerda 11:00 |
Ha csak a három páronkénti kapcsolathalmaz maradna meg, tévesen összeállhatna az (SQL labor, 101-es terem, szerda 11:00) hármas: van SQL–101 pár, van SQL–szerda pár és van 101–szerda pár is, ám a fenti beosztásban ilyen közös hármas nincs. A 101-es termet abban az idősávban az Excel gyakorlat használja. Ez mutatja, hogy a három párkapcsolat összekapcsolása hamis találatot hozhat létre.
Egy ternáris kapcsolat számossága nem olvasható le három önálló 1:N vagy M:N címkéből. A szabályt a másik két résztvevő rögzítése mellett kell pontosan kimondani. Ha egy (terem, idősáv) párhoz legfeljebb egy kurzust engedünk, az egy terem adott idősávbeli kizárólagos használatát fejezi ki. A mostani három sor teljesíti ezt a feltételt. A megadott üzleti szabály után lehet helyesen jelölni a ternáris számosságot.
Később finomíthatjuk a modellt: a konkrét, sorszámozott ALKALOM is részt vehet a beosztásban a KURZUS helyett. Ebben az esetben azt kell külön megmondani, hogy egy alkalom hányszor, hány teremben és hány idősávban tartható meg. Egy ilyen finomítás nem jogosít fel arra, hogy az eredeti háromrésztvevős tényt gondolkodás nélkül három bináris kapcsolatra cseréljük.
09 · ER-modell
Az ER-ábra jelöléseinek következetes használata
| Ábraelem | Jelölés ezen az oldalon | Jelentés |
|---|---|---|
| Egyedtípus | Folytonos szélű téglalap | Az előfordulások típusa; belsejében egyes számú név. |
| Gyenge egyedtípus | Szaggatott szélű téglalap | Szülője nélkül nem azonosítható típus. |
| Kapcsolat | Rombusz, benne igés név | A részt vevő típusok előfordulásait rendeli egymáshoz. |
| Azonosító kapcsolat | Szaggatott szélű rombusz | A gyenge egyed és szülője közötti azonosító viszony. |
| Attribútum | Ellipszis, benne a tulajdonság neve | Egyedtípushoz vagy kapcsolathoz kötött tulajdonság. |
| Többértékű attribútum | Kettős ellipszis | Egy előfordulásnál egyszerre több érték lehet. |
| Kulcsattribútum | Az ellipszisben aláhúzott név | A saját típusán belül egyedi azonosító. |
| Összetett attribútum | Ellipszis, amelyhez további ellipszisek csatlakoznak | Az összetett érték felbontása. |
| Teljes / részleges részvétel | Vastag / vékony összekötő vonal | Minden előfordulásnak kötelező-e kapcsolatban állnia? |
| Számosság | 1, N vagy M a kapcsolatvonal mellett | Hány másik előforduláshoz rendelhető egy előfordulás? |
A gyenge egyedtípusnak létezik más, szintén elfogadott ER-jelölése is; itt azonban végig a szaggatott téglalapot és szaggatott azonosító rombuszt használjuk. A teljes részvételt vastag vonal, a részlegeset vékony vonal jelöli. Az 1, N és M betűket a kapcsolathoz vezető élek mellé írjuk. A származtatott attribútumot itt szövegben jelezzük; hozzá nem vezetünk be olyan új rajzjelet, amely összekeverhető volna a gyenge egyedtípus szaggatott jelölésével.
10 · ER-modell
A teljes modell felépítése lépésről lépésre
Összerakjuk az eddigi döntéseket egyetlen áttekintő ábrába. A modell szándékosan egy konkrét oktatási portál szabályait írja le; egy másik intézmény jogosan választhat más számosságot vagy más egyedtípusokat.
- Határ kijelölése: a portál tanulókat, kurzuskiírásokat, felelős oktatókat, sorszámozott alkalmakat és a heti órarend termeit, idősávjait tartja nyilván. A tananyagfájlok tárolása most kívül esik ezen a modellen.
- Egyedtípusok: TANULÓ, KURZUS, OKTATÓ, ALKALOM, TEREM és IDŐSÁV. ALKALOM gyenge típus, mert a sorszám csak kurzuson belül egyedi.
- Azonosítók:
tanuló_id,kurzus_id,oktató_id,terem_idésidősáv_id. Egy konkrét ALKALOM azonosítója(kurzus_id, sorszám). - Kapcsolatok: a TANULÓ FELVESZ KURZUS-t (M:N), az OKTATÓ OKTAT KURZUS-t (1:N), az ALKALOM RÉSZE a KURZUS-nak (azonosító 1:N), a KURZUS, a TEREM és az IDŐSÁV pedig a BEOSZTÁS kapcsolatban szerepel.
- Korlátozások: egy kurzusnak pontosan egy felelős oktatója van; minden rögzített alkalomnak pontosan egy szülő kurzusa van. A tanuló és a kurzus létezhet jelentkezés nélkül. Az órarend egy (terem, idősáv) párjához legfeljebb egy kurzust engedünk.
Az áttekintő ábrán az ALKALOM a kurzus sorszámozott tanóráját jelöli, míg a BEOSZTÁS a kurzus heti terem- és idősávhasználatát rögzíti. A kétféle tény külön kérdésre válaszol: „Mi a kurzus harmadik órája?” és „Hol, mikor tartjuk a kurzust?” A TEREM és IDŐSÁV attribútumait az ábra áttekinthetősége érdekében nem rajzoltuk ki; mindkettőnek saját azonosítót tervezünk. Ha egyes alkalmak helyszíne vagy időpontja eltér a rendszeres órarendtől, külön szabályként kell rögzítenünk az eltéréseket, vagy az alkalmakhoz tartozó beosztást kell modelleznünk.
A terv ellenőrzésekor konkrét kérdéseket teszünk fel: Létezhet-e kurzus jelentkező nélkül? Igen. Létezhet-e ALKALOM KURZUS nélkül? Nem. Jelentkezhet-e ugyanaz a tanuló egy kurzusra kétszer? A fenti FELVESZ kapcsolatnál nem, ezért ha ismételt vagy visszavont jelentkezéseket is meg akarunk őrizni, további attribútumokra vagy önálló jelentkezési előfordulásokra lesz szükség. Kaphat-e két kurzus azonos címet? Igen, ezért a cím nem kulcs.
11 · ER-modell
Önellenőrzés és modellalkotási gyakorlat
Próbáld meg először saját szavakkal megfogalmazni a választ; a mintamegoldás a kérdés megnyitásakor jelenik meg.
1. Miért nem azonos a KURZUS egyedtípus a „SQL alapok – 2026 ősz” kurzussal?
A KURZUS az előfordulások közös típusa; a megnevezett őszi kurzus ennek egy konkrét előfordulása. Az ER-diagram a típusok és szabályok szerkezetét mutatja.
2. Hová kerül a jelentkezés dátuma, és miért?
A TANULÓ és KURZUS közötti FELVESZ kapcsolathoz. Ugyanaz a tanuló különböző kurzusokra különböző időpontban jelentkezhet.
3. Hogyan azonosítjuk az 1. alkalmat?
Az 1 önmagában nem egyedi, mert több kurzusnak is van első alkalma. A teljes azonosító a kurzus_id és az alkalom sorszáma együtt.
4. Lehet-e 1:N egy kapcsolat, ha az egyik oldalon nem minden egyed vesz részt benne?
Igen. Az 1:N számosság a megengedett kapcsolatok számáról, a részleges részvétel a kapcsolat hiányának lehetőségéről szól. Az oktatónak lehet nulla kurzusa, miközben egy kurzusnak pontosan egy felelős oktatója van.
5. Miért nem elegendő a heti beosztás három páronkénti kapcsolata?
Mert a párok közös kombinációja olyan (kurzus, terem, idősáv) hármast is előállíthat, amely sosem szerepelt a valódi beosztásban.
6. Mit jelent az aláhúzott név és a szaggatott téglalap?
Az aláhúzás a kulcsattribútumot jelöli. A szaggatott téglalap gyenge egyedtípust jelöl, amelyet a szülőjével együtt azonosítunk.
7. A „szabad helyek száma” milyen attribútum, és miből számítható?
Származtatott attribútum. A kurzus férőhelyéből és az érvényes, helyet foglaló jelentkezések számából számítható, a jelentkezések állapotának figyelembevételével.
8. Miért nem jó kulcs önmagában a kurzus címe?
Azonos című kurzus több félévben vagy akár egy félév több csoportjában is létezhet. A cím egyedisége ezért nem garantálható.
Egy új igény szerint a kurzushoz több FELADAT tartozik. Minden feladatnak saját, globálisan egyedi azonosítója van; egy feladat jelenleg pontosan egy kurzushoz tartozik. Egy kurzus akkor is létrehozható, ha még nincs hozzá feladat. Rajzold fel a két egyedtípust, a kapcsolatot, a számosságot és a részvételt!
Lehetséges megoldás
KURZUS és FELADAT folytonos téglalap, köztük TARTALMAZ rombusz. KURZUS oldalán 1, FELADAT oldalán N. A FELADAT részvétele teljes, a KURZUS-é részleges. Mindkét típusnak saját, aláhúzott azonosítóattribútuma van; a FELADAT ezért a megadott feltételekkel nem gyenge egyedtípus. Ha később ugyanazt a feladatot több kurzusban is felhasználjuk, módosítani kell a szabályt és a számosságot.
Ha az egyedeket, azonosítókat, részvételt és kapcsolati számosságokat önállóan meg tudod indokolni, készen állsz arra, hogy az ER-modellből később relációs sémát alakíts ki.