Ebben az alfejezetben először bemutatunk egy példát egy EER modellbeli adatbázissémára, amely az ebben és a 3. fejezetben tárgyalt különféle fogalmak használatát illusztrálja. Ezután koncepcionális sémák tervezési lehetőségeiről tárgyalunk, majd végül összegezzük az EER modell fogalmait, és definiáljuk őket formálisan ugyanúgy, ahogyan az alap ER modell fogalmait definiáltuk a 3. fejezetben.
A példa adatbázis alkalmazásunkhoz tekintsük az EGYETEM adatbázist, amely nyilvántartja a hallgatókat, azok szakjait, teljesítéseit és kurzusfelvételeit, valamint az egyetem által meghirdetett kurzusokat. Az adabázis az oktatók és a végzős hallgatók szponzorált kutatási projektjeit is nyilvántartja. A séma a 4.9. ábrán látható. A következőkben azokat a követelményeket tárgyaljuk, amelyek ezt a sémát eredményezték.
Az adatbázis minden személyről nyilvántartja a személy nevét (Név), személyi számát (Szsz), címét (Lakcím), nemét (Nem) és születési dátumát (Szdátum). A SZEMÉLY egyedtípusnak két alosztályát különböztetjük meg: OKTATÓ és HALLGATÓ. Az OKTATÓ saját attribútumai a fokozata (Fokozat) (tanársegéd, adjunktus, docens, kutató, vendégoktató stb.), a szobája (Oszoba), az irodai telefonja (Otelefon) és a fizetése (Fizetés). Minden oktató kapcsolatban áll azzal a karral, amelynek dolgozik (DOLGOZIK) (egy oktató több karhoz is tartozhat, a kapcsolattípus ezért M:N számosságú. A HALLGATÓ saját attribútuma az évfolyama (Évfolyam) (1-től 5-ig). Minden hallgató kapcsolatban áll a főszakját és a minorját gondozó karral is, ha azok ismertek (FŐSZAK és MINOR), az aktuális félévben felvett kurzusokkal (FELVETTE), valamint a már teljesített kurzusokkal (TELJESÍTETTE). A TELJESÍTETTE kapcsolattípus minden előfordulása tartalmazza azt az érdemjegyet, amit a hallgató az adott kurzusra kapott (Jegy).
A VÉGZŐS_HALLGATÓ a HALLGATÓ alosztálya, amelyet az Évfolyam = 5 predikátum definiál. Minden végzős hallgató esetén nyilvántartjuk a korábbi diplomáinak a listáját egy összetett többértékű attribútumban (Diplomák). A végzős hallgatók egy témavezető oktatóval (TÉMAVEZETŐ) és egy záróvizsga-bizottsággal (BIZOTTSÁG) is kapcsolatban állnak, ha léteznek ilyenek.
Egy kar név (Knév), telefon (Ktelefon) és iroda (Iroda) attribútumokkal rendelkezik, és kapcsolatban áll azzal az oktatóval, aki a vezetője (VEZETI), valamint azzal az intézménnyel, amelyikhez tartozik (IK). Egy intézménynek név (Inév), iroda (Iiroda) és rektor (Rektor) attribútumai vannak.
Egy tantárgynak tantárgykód (Tkód), tantárgynév (Tnév) és tantárgyleírás (Tleírás) attribútumai vannak. Az egyes tantárgyaknak számos kurzusát hirdetik meg, és minden kurzus esetén tároljuk a kurzuskódot (Kurzuskód), illetve azt a tanévet (Tanév) és félévet (Félév)[21], amelyben a kurzust meghirdették. A kurzuskódok egyértelműen azonosítják az egyes kurzusokat. Az aktuális félévben meghirdetett kurzusok a KURZUS AKTUÁLIS_KURZUS alosztályában vannak, amelyet a „Félév = Aktuális_félév és Tanév = Aktuális_tanév” predikátum definiál. Minden kurzus kapcsolódik ahhoz az előadóhoz, aki tanította vagy tanítja azt (OKTAT), ha az az előadó benne van az adatbázisban.
Az ELŐADÓ_KUTATÓ kategória az OKTATÓ és a VÉGZŐS_HALLGATÓ uniójának részhalmaza, és tartalmazza mindazon oktatókat és végzős hallgatókat, akiket támogatnak a tanításban vagy a kutatásban. Végezetül az ÖSZTÖNDÍJ egyedtípus az egyetem által elnyert kutatási ösztöndíjakat és szerződéseket tartja nyilván. Egy ösztöndíj elnevezés (Név), sorszám (Szám), felajánló szervezet (Szervezet) és kezdő dátum (Kezdő_dátum) attribútumokkal rendelkezik. Az ösztöndíjak egy koordinátorhoz (KOORD) és az általa támogatott összes kutatóhoz kapcsolódnak (TÁMOGAT). A TÁMOGAT minden előfordulása tartalmazza a támogatás kezdő dátumát (Kezdet), lejáratának dátumát (Vég) (ha ismert), valamint a támogatott kutató által a projektre fordított idő százalékát (Idő).
Nem mindig könnyű megtalálni egy adatbázis alkalmazás legmegfelelőbb koncepcionális tervét. A 3.7.3. alfejezetben bemutattunk néhány olyan tipikus problémát, amelyekkel az adatbázis-tervező találkozik, amikor az egyedtípusok, kapcsolattípusok és attribútumok közül választ, miközben egy konkrét minivilágbeli szituációt ER sémával reprezentál. Ebben az alfejezetben a specializáció/generalizáció és a kategória (unió típus) EER fogalmakhoz tartozó tervezési irányelveket és lehetőségeket mutatunk be.
Ahogy a 3.7.3. alfejezetben említettük, a koncepcionális adatbázis-tervezést egy iteratívan finomító folyamatnak kell tekinteni, amely addig tart, amíg a számunkra legalkalmasabb tervet el nem érjük. A következő irányelvek segíthetnek az EER fogalmakhoz kötődő tervezési folyamat végrehajtásában:
Általában sok specializációt tudunk definiálni, hogy a koncepcionális modellünk pontosabb legyen. Ennek hátránya azonban, hogy a terv túl zsúfolt lesz.
Ha egy alosztálynak csak kevés saját (lokális) attribútuma van, és nincs saját kapcsolata, akkor beleolvaszthatjuk a szuperosztályba. A saját attribútumok NULL értékeket fognak tartalmazni azon egyedekben, amelyek nem tagjai az alosztálynak. Egy típus attribútum mondhatja meg, hogy egy egyed tagja-e az alosztálynak.
Hasonlóan, ha egy specializáció/generalizáció összes alosztályának kevés saját attribútuma van, és nincs saját kapcsolatuk, akkor beleolvaszthatjuk őket a szuperosztályba, és helyettesíthetjük őket egy vagy több típus attribútummal, amelyek megadják azt az alosztályt vagy alosztályokat, amely(ek)hez az egyes egyedek tartoznak.
Az unió típusokat és a kategóriákat általában célszerű elkerülni, hacsak a szituáció ezt a konstrukciótípust nem indokolja határozottan, ami bizonyos gyakorlati helyzetekben előfordul. Ha lehetséges, próbáljunk meg specializáció/generalizáció használatával modellezni, ahogy a 4.4. alfejezet végén is írtuk.
A specializációra/generalizációra vonatkozó kizáró/átfedő, illetve totális/részleges megszorítások választása a modellezett minivilágban létező szabályok alapján történik. Ha a követelmények nem jeleznek semmilyen konkrét megszorítást, akkor az alapértelmezés általában az átfedő és részleges, mivel ez nem ad semmilyen megkötést az alosztályokhoz való tartozásra vonatkozóan.
Ezen irányelvek alkalmazására példaként tekintsük a 4.6. ábrán látható sémát, ahol semmilyen saját (lokális) attribútum nincs. Az összes alosztályt beolvaszthatjuk a DOLGOZÓ egyedtípusba, és a következő attribútumokkal egészíthetjük ki azt:
Egy Munkakör attribútummal, amelynek a {'Titkár(nő)', 'Mérnök', 'Technikus'} értékhalmaza jelzi, hogy az első specializációban az egyes dolgozók melyik alosztályba tartoznak.
Egy Fizetési_mód attribútummal, amelynek a {'Fix fizetésű', 'Órabéres'} értékhalmaza jelzi, hogy a második specializációban az egyes dolgozók melyik alosztályba tartoznak.
Egy Vezető_e attribútummal, amelynek az {'Igen', 'Nem'} értékhalmaza jelzi, hogy egy konkrét alkalmazott egyed vezető-e vagy sem.
Most összefoglaljuk az EER modell fogalmait, és megadjuk formális definícióikat. Az osztály [22] egyedeknek egy halmaza vagy kollekciója; ez magában foglal minden olyan EER sémabeli konstrukciót, amely egyedeket csoportosít, mint például az egyedtípusok, az alosztályok, a szuperosztályok és a kategóriák. Az S alosztály egy olyan osztály, amelynek az egyedei mindig egy másik osztály részhalmazát alkotják, amely osztályt a szuperosztály/alosztály (vagy „IS-A ”) kapcsolat C szuperosztályának nevezünk. Az ilyen kapcsolatokat C/S-sel jelöljük. Az ilyen szuperosztály/alosztály kapcsolatokra mindig teljesül, hogy
| S ⊆ C. |
A Z = {S 1, S 2, …, Sn } specializáció olyan alosztályok halmaza, amelyek ugyanazzal a G szuperosztállyal rendelkeznek; azaz a G/Si egy szuperosztály/alosztály kapcsolat minden i = 1, 2, …, n esetén. G-t generalizált egyedtípusnak (vagy a specializáció szuperosztályának, vagy az {S 1, S 2, …, Sn } alosztályok generalizációjának ) nevezzük.
Z-t totálisnak mondjuk, ha mindig (minden pillanatban) teljesül, hogy
. |
Egyébként Z-t részlegesnek nevezzük. Z kizáró , ha mindig teljesül, hogy
| Si ∩ Sj = ∅ (üres halmaz) bármely i ≠ j esetén. |
Egyébként Z-t átfedőnek nevezzük.
A C S alosztályát predikátumdefiniáltnak nevezzük, ha egy, a C attribútumain felírt p predikátum segítségével adjuk meg, hogy C mely egyedei elemei S-nek is; azaz S = C[p], ahol C[p] C azon egyedeinek halmaza, amelyek kielégítik p-t. Azokat az alosztályokat, amelyeket nem predikátummal definiálunk, felhasználó által definiáltnak nevezzük.
A Z specializációt (vagy G generalizációt) attribútumdefiniáltnak nevezzük, ha egy (A = ci ) predikátummal definiáljuk, hogy Z mely egyedei elemei Si -nek is, ahol A G egy attribútuma, ci pedig egy konstans érték A tartományából. Vegyük észre, hogy ha i ≠ j esetén ci ≠ cj , és A egyértékű attribútum, akkor a specializáció kizáró lesz.
A T kategória egy olyan osztály, amely n definiáló szuperosztály (D 1, D 2, …, Dn , n ≥ 1) uniójának részhalmaza, és formálisan a következőképpen definiáljuk:
| T ⊆ (D 1 ∪ D 2 ∪ … ∪ Dn ). |
A Di attribútumaira felírt pi predikátum használható az egyes Di -k azon elemeinek megadására, amelyek T-nek is elemei. Ha minden Di -re megadunk egy ilyen predikátumot, akkor a következőt kapjuk:
| T = (D 1[p 1] ∪ D 2[p 2] ∪ … ∪ Dn [pn ]). |
Ezek után kibővítjük a kapcsolattípus 3. fejezetben megadott definícióját azzal, hogy megengedjük, hogy bármilyen osztály — nemcsak bármilyen egyedtípus — részt vehessen a kapcsolatban. Ki kell tehát cserélnünk abban a definícióban az egyedtípus szó minden előfordulását az osztály szóra. Az EER grafikus jelölése konzisztens az ER-ével, mert minden osztályt téglalappal jelölünk.
[21] Feltételezzük, hogy ezen az egyetemen féléves rendszert használunk, nem pedig trimeszteres vagy negyedéves rendszert.
[22] Az osztály szó használata itt eltér az olyan objektumorientált programozási nyelvekben használt jelentésétől, mint például a C++. A C++-ban az osztály egy strukturálttípus-definíció a rá alkalmazható függvényekkel (műveletekkel) együtt.