Vezérlőpult
3. Az EER-diagram szerkesztése · Tervezés és modellezés

1. blokk · Tervezés és modellezés · 3. témakör

Az EER-diagram szerkesztése

A MySQL Workbench egyik legerősebb eszköze a vizuális adatmodellező. Ebben a fejezetben megtanuljuk, hogyan rajzoljuk meg és szerkesszük a webshop EER-diagramját: megismerjük a szerkesztő ikonjait, a tábla- és oszlopszerkesztést, valamint a kapcsolatok típusait — különös tekintettel az azonosító és nem-azonosító kapcsolatra.

3 interaktív demó10 kvízkérdés6 feladatWebshop-példa

Tanulási célok

1Mit takar az EER-diagram?

Az EER az Enhanced Entity-Relationship (kibővített egyed–kapcsolat) rövidítése. Ez egy szabványos diagramfajta, amely táblákat (egyedeket), azok oszlopait és a köztük lévő kapcsolatokat ábrázolja. A Workbench EER-szerkesztőjében egérrel rajzolunk — táblákat húzunk a vászonra, oszlopokat veszünk fel, és vonalakkal kötjük össze őket.

A nagy előny: a diagramból a Workbench automatikusan SQL-kódot tud generálni (Forward Engineering), így a rajz nem csak dokumentáció, hanem a valódi adatbázis terve is.

ℹ️ JELÖLÉSMÓD

A Workbench a varjúláb-jelölést (crow's foot) használja: a vonal végén lévő „villa” (⪜) a „sok” oldalt, az egyetlen rövid vonás (|) az „egy” oldalt jelöli. A vonal stílusa (folytonos vagy szaggatott) a kapcsolat típusát mutatja — erről a 7. pontban lesz szó.

2Modell és diagram létrehozása

A modellezés nem igényel élő szerverkapcsolatot — egy önálló modellfájlban (.mwb) dolgozunk.

✅ KÉT IRÁNY

Új adatbázist nulláról tervezel? Rajzold meg a diagramot, majd Forward Engineering. Egy meglévő adatbázist szeretnél diagramon látni? Használj Reverse Engineeringet — a Workbench megrajzolja helyetted.

3A szerkesztő eszköztára

A rajzvászon bal szélén egy függőleges eszköztár található. Minden ikon egy eszközt aktivál: kiválasztod, majd a vászonra kattintva használod. Kattints az ikonokra lent, és megtudod, melyik mire való!

Interaktív modellező-eszköztár

Kattints egy ikonra a bal oldali sávban ↓

Kattints egy eszközre a magyarázatért…

ℹ️ VISSZA A KIJELÖLŐHÖZ

Miután használtál egy eszközt, az gyakran aktív marad. Az Esc billentyűvel mindig visszaválthatsz a sima kijelölő (Pointer) eszközre — ez a leggyakoribb hiba forrása kezdőknél (véletlenül még a tábla-eszköz aktív, és új táblákat kattintgatnak a vászonra).

4Tábla és oszlopok szerkesztése

Miután a tábla-eszközzel letettél egy táblát a vászonra, dupla kattintással nyílik meg a tábla-szerkesztő alul. Itt fülek között válthatsz:

FülMit állítasz be
ColumnsAz oszlopok neve, adattípusa és jelölői (PK, NN, AI…). Itt töltöd ki a tábla szerkezetét.
IndexesIndexek létrehozása a gyorsabb kereséshez (erről a CREATE témakörben részletesen).
Foreign KeysIdegen kulcsok beállítása — bár ezt a kapcsolat-rajzolás többnyire automatikusan megteszi.
Triggers / Partitioning / OptionsHaladó beállítások: triggerek, motor (InnoDB), karakterkészlet (utf8mb4).

Új oszlop felvétele: a Columns fülön egy üres sorba kattintasz, beírod a nevet, és a legördülőből kiválasztod a típust (pl. INT, VARCHAR(100), DECIMAL(10,2)).

5Oszlop-jelölők (flag-ek)

A Columns fülön minden oszlop mellett rövidített jelölők (checkbox-ok) sorakoznak. Ezek mondják meg, milyen tulajdonsága van az oszlopnak. Kattints az egyes jelölőkre a mock oszlopsorban, hogy megtudd, mit jelentenek!

Oszlop-jelölő dekódoló

Egy oszlopsor a tábla-szerkesztőből. Kattints a jelölőkre ↓

idINT

Kattints egy jelölőre a magyarázatért…

✅ TIPIKUS ELSŐDLEGES KULCS

Egy id oszlopnál általában a PK (elsődleges kulcs), NN (nem lehet üres) és AI (automatikus növelés) jelölők vannak bepipálva együtt. Ez a klasszikus „auto-increment id” beállítás.

Melyik jelölő?

Döntsd el a leírásról, melyik oszlop-jelölőre illik!

1 / 8Pontszám: 0
…

6Kapcsolatok rajzolása

Két tábla összekötéséhez kiválasztod az eszköztár megfelelő kapcsolat-eszközét, majd rákattintasz előbb az egyik, aztán a másik táblára. A Workbench automatikusan létrehozza az idegen kulcsot a megfelelő táblában.

A sorrend számít! A legtöbb kapcsolat-eszköznél először a „sok” (gyermek) oldali táblára kattints, majd az „egy” (szülő) oldalira — az idegen kulcs a gyermek táblába kerül. (A pontos sorrendet az eszköz tooltipje is jelzi.)

⚠️ FIGYELEM A SORRENDRE

Ha fordítva kötöd össze őket, az idegen kulcs rossz táblába kerül. Ilyenkor töröld a kapcsolatot (jelöld ki a vonalat, Delete), és rajzold újra a helyes sorrendben.

7Azonosító vs nem-azonosító kapcsolat

Ez a témakör legfontosabb fogalma. A döntő kérdés: mi azonosítja a gyermek rekordot? Ha a gyermeknek saját azonossága van (saját id-ja), és a szülőre csak hivatkozik — akár kötelezően —, a kapcsolat nem-azonosító. Ha viszont a gyermek azonosításához a szülő is kell — a gyermek a szülő nélkül nem értelmezhető önálló egyedként —, a kapcsolat azonosító. Technikailag: azonosító kapcsolatnál az idegen kulcs a gyermek elsődleges kulcsa, vagy annak része. Nézd meg a kétféle esetet — válts a gombokkal!

Hasonlítsd össze a két kapcsolattípust

Nem-azonosító (non-identifying)Azonosító (identifying)
VonalSzaggatottFolytonos
Idegen kulcsSima oszlop a gyermekbenA gyermek elsődleges kulcsa, vagy annak része
ÖnállóságA gyermeknek saját azonossága van — a szülőre csak hivatkozik (akár kötelezően)A gyermeket (részben) a szülő azonosítja — gyenge egyed
Tipikus esetvásárló → rendeléskapcsolótáblák (rendelés_tétel); szülőtől függő táblák (user → user_permission)
ℹ️ NEM CSAK ÖSSZETETT KULCSNÁL

Az azonosító kapcsolathoz nem feltétel az összetett kulcs. Klasszikus példa a user → user_permission páros: egy jogosultság-bejegyzésnek nincs saját, felhasználótól független azonossága — a user (is) azonosítja —, ezért azonosító kapcsolatot határozunk meg: a user_id a gyermek kulcsa vagy kulcsrésze lesz akkor is, ha nem klasszikus kapcsolótábláról van szó. A döntő szempont mindig az, hogy mi azonosítja a gyermeket — az összetett kulcs csak ennek egyik gyakori következménye.

✅ EGYSZERŰ DÖNTÉS

Kérdezd meg: „Mi azonosítja a gyermeket?” Egy rendelésnek saját rendelésszáma (id) van — vásárló nélkül ugyan nem jöhet létre, de nem a vásárló azonosítja → nem-azonosító. Egy rendelés-tételt viszont épp a rendelése (és a terméke) azonosítja → azonosító. Ugyanígy: a jogosultság-bejegyzést a felhasználója azonosítja → azonosító. Vigyázat: a kötelező (NOT NULL) idegen kulcs önmagában még nem tesz egy kapcsolatot azonosítóvá!

8A webshop kapcsolatai a gyakorlatban

Alkalmazzuk a tanultakat a webshop sémájára. Így néz ki, melyik kapcsolat milyen típusú:

KapcsolatTípus (számosság)Azonosító?Miért
vasarlo → rendeles1:NNem-azonosító (szaggatott)A rendelésnek saját id-ja van; a vasarlo_id kötelező, de csak hivatkozás — vásárló nélkül nem jöhet létre rendelés, mégsem a vásárló azonosítja.
kategoria → termek1:NNem-azonosítóA termék saját id-val azonosított, a kategoria_id csak hivatkozás.
rendeles → rendeles_tetel1:NAzonosító (folytonos)A rendeles_id a tétel összetett kulcsának része.
termek → rendeles_tetel1:NAzonosítóA termek_id szintén a tétel kulcsának része.
kategoria → kategoria1:N (önhivatkozó)Nem-azonosítóA szulo_id ugyanannak a táblának az id-jára mutat, nem kulcsrész.
ℹ️ KAPCSOLÓTÁBLA = KÉT AZONOSÍTÓ KAPCSOLAT

A rendeles_tetel egy kapcsolótábla az N:M feloldásához. Mindkét „beérkező” kapcsolata azonosító, mert a két idegen kulcs együtt alkotja a tétel azonosítóját. A diagramon ezért két folytonos vonal fut bele.

9Forward / Reverse Engineering

Amikor a diagram kész, a Database menüből:

-- A Forward Engineering által generált kód részlete (előzetes):
CREATE TABLE rendeles_tetel (
  rendeles_id INT NOT NULL,
  termek_id   INT NOT NULL,
  mennyiseg   INT NOT NULL,
  PRIMARY KEY (rendeles_id, termek_id)   -- azonosító kapcsolat: összetett kulcs
);
✅ ELŐRETEKINTÉS

Figyeld meg: az azonosító kapcsolatból összetett PRIMARY KEY lett. A következő témakörben (CREATE utasítások) ezeket a kódokat fogjuk saját kézzel is megírni.

10Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás — ahol lehet, nyisd meg a Workbenchet, és próbáld ki élőben!

3.1⭐

Párosítsd az eszközöket a funkciójukkal: Kéz (Hand) · Tábla (Table) · Radír (Eraser) · Szöveg (Note) — elem törlése · a nézet mozgatása · szöveges jegyzet · új tábla létrehozása.

3.2⭐

Fogalmazd meg egyetlen mondatban, mi dönti el, hogy egy kapcsolat azonosító vagy nem-azonosító!

3.3⭐

Milyen három jelölő van tipikusan bekapcsolva egy auto-increment id oszlopnál?

3.4⭐⭐

Egy diagramon a kategoria táblához önhivatkozó (al-kategória) kapcsolatot szeretnél. Hogyan csinálod, és milyen típusú lesz a kapcsolat?

3.5⭐⭐

Véletlenül a tábla-eszköz maradt aktív, és kattintgatás közben felesleges üres táblák kerültek a vászonra. Mi a teendő?

3.6⭐⭐⭐

Két folytonos vonal fut bele a rendeles_tetel táblába (a rendeles és a termek felől). Magyarázd el, miért, és írd le, milyen elsődleges kulcsot generál belőle a Forward Engineering!

11Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

12Fogalomtár

FogalomJelentés
EER-diagramEnhanced Entity-Relationship — kibővített egyed–kapcsolat diagram
.mwb modellfájla Workbench önálló modellje — szerverkapcsolat nélkül is szerkeszthető
varjúláb-jelölésa vonalvégek jelölése: villa = „sok”, rövid vonás = „egy”
oszlop-jelölőkPK · NN · UQ · BIN · UN · ZF · AI · G — az oszlop tulajdonságai a tábla-szerkesztőben
azonosító kapcsolata gyermeket (részben) a szülő azonosítja; az FK a gyermek kulcsa vagy kulcsrésze — folytonos vonal
nem-azonosító kapcsolata gyermeknek saját azonossága van; az FK sima (akár kötelező) hivatkozás — szaggatott vonal
gyenge egyeda szülő nélkül nem létező egyed (pl. rendelés-tétel)
Forward Engineeringdiagramból generált és lefuttatott SQL-kód
Reverse Engineeringmeglévő adatbázisból visszarajzolt diagram
Synchronize Modela diagram és az élő adatbázis kétirányú összehangolása

13Összegzés

  1. Az EER-diagram a séma vizuális terve — a .mwb modellfájlban szerverkapcsolat nélkül is szerkeszthető.
  2. Az eszköztárból dolgozunk: tábla, nézet, kapcsolat-eszközök — az Esc mindig visszavált a kijelölőre.
  3. Az oszlopok tulajdonságait jelölők adják meg: a klasszikus id = PK + NN + AI.
  4. Kapcsolat rajzolásánál először a gyermek (sok) oldalra kattints — oda kerül az idegen kulcs.
  5. Azonosító kapcsolat (folytonos): a gyermeket (részben) a szülő azonosítja — az FK a gyermek kulcsa vagy kulcsrésze. Nem-azonosító (szaggatott): a gyermeknek saját azonossága van, az FK csak (akár kötelező) hivatkozás.
  6. A kész diagramból a Forward Engineering generálja a CREATE kódot — a kapcsolótábla összetett kulcsot kap.