3.4. Kapcsolattípusok, kapcsolathalmazok, szerepkörök és strukturális megszorítások

A 3.8. ábrán számos implicit kapcsolatot láthatunk különböző egyedtípusok között. Valójában valahányszor egy egyedtípus egy attribútuma egy másik egyedtípusra hivatkozik, valamilyen kapcsolat áll fenn. Az OSZTÁLY Osztályvezető attribútuma például egy olyan dolgozóra hivatkozik, aki vezeti az osztályt; a PROJEKT Irányító_osztály attribútuma arra az osztályra hivatkozik, amelyik irányítja a projektet; a DOLGOZÓ Főnöke attribútuma egy másik dolgozóra hivatkozik (arra, aki ennek a dolgozónak a főnöke); a DOLGOZÓ Osztály attribútuma arra az osztályra hivatkozik, ahol a dolgozó dolgozik; és így tovább. Az ER modellben ezeket a hivatkozásokat nem attribútumokként, hanem kapcsolatokként érdemes reprezentálni, amelyekről ebben a fejezetben lesz szó. A VÁLLALAT adatbázissémát finomítani fogjuk a 3.6. alfejezetben úgy, hogy a kapcsolatokat explicit módon ábrázoljuk. Az egyedtípusok kezdeti tervében a kapcsolatokat tipikusan attribútumok formájában jelenítjük meg. Ahogy a tervet finomítjuk, ezeket az attribútumokat átalakítjuk az egyedtípusok közötti kapcsolatokká.

Ez az alfejezet a következőképpen épül föl: a 3.4.1. alfejezet bevezeti a kapcsolattípus, kapcsolathalmaz és kapcsolat-előfordulás fogalmait. A 3.4.2. alfejezetben definiáljuk a kapcsolat foka, a szerepkörnév és a rekurzív kapcsolat fogalmát, majd a 3.4.3. alfejezetben a kapcsolatok strukturális megszorításairól — például a számosságról és a létezésfüggőségről — tárgyalunk. A 3.4.4. alfejezet azt mutatja be, hogy hogyan lehetnek a kapcsolattípusoknak is attribútumaik.

3.4.1. Kapcsolattípusok, -halmazok és -előfordulások

Az E 1, E 2, …hellip;, En -nel jelölt n darab egyedtípus közötti R kapcsolattípus egy megfeleltetés-halmazt — más szóval egy kapcsolathalmazt — definiál az ezen egyedtípusokból származó egyedek között. Mint az egyedtípusok és az egyedhalmazok esetén, egy kapcsolattípusra és a neki megfelelő kapcsolathalmazra ugyanazzal a névvel, R-rel szokás hivatkozni. Matematikailag az R kapcsolathalmaz ri kapcsolatelőfordulások egy halmaza, ahol minden ri n darab egyedet (e 1, e 2, …, en -et) kapcsol össze, és minden ri -beli ej egyed az Ej egyedtípus eleme, 1 < j < n. Ennélfogva egy kapcsolattípus értelmezhető E 1, E 2, …, En fölötti matematikai relációként; azaz definiálható az E 1 × E 2 × … × En Descartes-szorzat egy részhalmazaként. Az E 1, E 2, …, En egyedtípusokról azt mondjuk, hogy részt vesznek az R kapcsolattípusban; és hasonlóan, az e 1, e 2, …, en egyedekről azt mondjuk, hogy részt vesznek az ri = (e 1, e 2, …, en ) kapcsolatelőfordulásban.

Informálisan az R-beli ri kapcsolat-előfordulások egyedek olyan asszociációi, amelyek minden részt vevő egyedtípusból pontosan egy egyedet tartalmaznak. Minden ilyen ri kapcsolatelőfordulás azt a tényt fejezi ki, hogy az ri -ben részt vevő egyedek valamilyen módon kapcsolatban állnak egymással a megfelelő minivilágbeli szituációban. Tekintsük például a DOLGOZÓ és az OSZTÁLY egyedtípusok között értelmezett MUNKAHELYE kapcsolattípust, amely minden dolgozóhoz hozzárendeli azt az osztályt, ahol az illető dolgozik. A MUNKAHELYE kapcsolathalmazbeli minden egyes kapcsolat-előfordulás egy DOLGOZÓ egyedet és egy OSZTÁLY egyedet rendel egymáshoz. A 3.9. ábra illusztrálja ezt a példát, amelyen az ri kapcsolat-előfordulások láthatók, összekötve az ri -ben részt vevő DOLGOZÓ és OSZTÁLY egyedekkel. A 3.9. ábra által reprezentált minivilágban az e 1, e 3 és e 6 dolgozók a d 1 osztályon dolgoznak; az e 2 és e 4 dolgozók a d 2 osztályon dolgoznak; az e 5 és e 7 dolgozók pedig a d 3 osztályon dolgoznak.

3.9. ábra - Néhány előfordulás a MUNKAHELYE kapcsolathalmazból, amelyek egy MUNKAHELYE kapcsolattípust reprezentál a DOLGOZÓ és az OSZTÁLY között.

Néhány előfordulás a MUNKAHELYE kapcsolathalmazból, amelyek egy MUNKAHELYE kapcsolattípust reprezentál a DOLGOZÓ és az OSZTÁLY között.

Az ER sémákban a kapcsolattípusokat rombusz alakú dobozokkal ábrázolják, amelyek folytonos egyenes vonalakkal kapcsolódnak a kapcsolatban résztvevő egyedtípusokat reprezentáló téglalap alakú dobozokhoz. A kapcsolat nevét a rombusz alakú dobozba írják (lásd 3.2. ábra).

3.4.2. A kapcsolat foka, szerepkörnevek és rekurzív kapcsolatok

Kapcsolattípus foka.  Egy kapcsolattípus foka a kapcsolatban részt vevő egyedtípusok száma. Így például a MUNKAHELYE kapcsolat foka kettő. A másodfokú kapcsolatot bináris, a harmadfokút ternáris kapcsolatnak hívjuk. A 3.10. ábrán bemutatott SZÁLLÍTÁS kapcsolat például egy ternáris kapcsolat, ahol minden egyes ri kapcsolatelőfordulás három egyedet — egy s szállítót, egy p alkatrészt és egy j projektet — kapcsol össze, valahányszor egy s szállító egy p alkatrészt szállít egy j projekthez. A kapcsolatok általában bármilyen fokúak lehetnek, de a leggyakoribbak a bináris kapcsolatok. A magasabb fokú kapcsolatok általában komplexebbek, mint a bináris kapcsolatok; a 3.8. alfejezetben fogjuk őket tovább tárgyalni.

3.10. ábra - Néhány kapcsolat-előfordulás a SZÁLLÍTÁS ternáris kapcsolathalmazból.

Néhány kapcsolat-előfordulás a SZÁLLÍTÁS ternáris kapcsolathalmazból.

Kapcsolatok mint attribútumok.  Néha az a kényelmes, ha a kapcsolattípusokra mint attribútumokra gondolunk, ahogy azt a 3.3.3. alfejezetben is tettük. Tekintsük a 3.9. ábrán látható MUNKAHELYE kapcsolattípust. Elképzelhetünk egy attribútumot a DOLGOZÓ egyedtípusban, amelyet Osztálynak hívunk, és amelynek értéke minden egyes alkalmazott egyed esetén az az OSZTÁLY egyed (vagy egy hivatkozás rá), ahol az alkalmazott dolgozik. Így ennek az Osztály attribútumnak az értékhalmaza az összes OSZTÁLY egyed halmaza, amely azonos az OSZTÁLY egyedhalmazzal. Ezt tettük a 3.8. ábrán, amikor a VÁLLALAT adatbázis DOLGOZÓ egyedtípusának kiinduló tervét adtuk meg. Ha azonban egy bináris kapcsolatra attribútumként gondolunk, mindig két lehetőségünk van. Ebben a példában a másik lehetőség az, hogy az OSZTÁLY egyedtípusban képzelünk el egy Alkalmazottak többértékű attribútumot, amelynek az értéke minden egyes OSZTÁLY egyed esetén azon DOLGOZÓ egyedek halmaza, akik az adott osztályon dolgoznak. Ennek az Alkalmazottak attribútumnak az értékhalmaza a DOLGOZÓ egyedhalmazának hatványhalmaza. Az említett két attribútum — a DOLGOZÓ Osztály attribútuma vagy az OSZTÁLY Alkalmazottak attribútuma — egyaránt alkalmas a MUNKAHELYE kapcsolattípus reprezentálására. Ha mindkettőt reprezentáljuk, akkor egymás inverzeinek kell lenniük.[6]

Szerepkörnevek és rekurzív kapcsolatok.  Minden egyedtípus, amely részt vesz egy kapcsolattípusban, egy konkrét szerepet játszik a kapcsolatban. A szerepkörnév jelöli azt a szerepet, amelyet az egyedtípusnak a kapcsolatban részt vevő egyedei játszanak az egyes kapcsolatelőfordulásokban, és segít megérteni, mit is jelent a kapcsolat. Például a MUNKAHELYE kapcsolattípusban a DOLGOZÓ az alkalmazott vagy dolgozó szerepét, az OSZTÁLY pedig az osztály vagy munkáltató szerepét játssza.

A szerepkörnevek technikailag nem szükségesek azokban a kapcsolattípusokban, ahol az összes részt vevő egyedtípus különböző, mivel minden részt vevő egyedtípus neve használható szerepkörnévként. Bizonyos esetekben azonban ugyanazon egyedtípus egynél többször vesz részt egy kapcsolattípusban különböző szerepekben. Ezekben az esetekben szükségessé válik a szerepkörnév, hogy megkülönböztessük az egyes részvételek jelentéseit. Az ilyen kapcsolattípusokat rekurzív kapcsolatoknak nevezzük. A 3.11. ábra mutat erre egy példát. A FŐNÖKE kapcsolattípus összeköt egy dolgozót egy főnökkel, ahol mind az alkalmazott, mind a főnök egyedek ugyanazon DOLGOZÓ egyedtípusból valók. Így a DOLGOZÓ egyedtípus kétszer vesz részt a FŐNÖKE kapcsolatban: egyrészt a főnök, másrészt a beosztott (vagy alárendelt) szerepében. A FŐNÖKE minden ri kapcsolatelőfordulása két dolgozó egyedet kapcsol össze (ej -t és ek -t), amelyek közül az egyik játssza a főnök szerepét, a másik pedig a beosztottét. A 3.11. ábrán az 1-essel jelölt vonalak jelölik a főnök szerepkört, a 2-essel jelöltek pedig a beosztott szerepkört; így e 1 főnöke e 2-nek és e 3-nak, e 4 főnöke e 6-nak és e 7-nek, e 5 főnöke e 1-nek és e 4-nek. Ebben a példában minden kapcsolat-előfordulásnak két vonallal kell rendelkeznie, egy 1-essel jelöltnek (főnök) és egy 2-essel jelöltnek (beosztott).

3.11. ábra - A FŐNÖKE rekurzív kapcsolat a főnök szerepkörű DOLGOZÓ (1) és a beosztott szerepkörű DOLGOZÓ (2) között.

A FŐNÖKE rekurzív kapcsolat a főnök szerepkörű DOLGOZÓ (1) és a beosztott szerepkörű DOLGOZÓ (2) között.

3.4.3. A kapcsolattípusok megszorításai

A kapcsolattípusok általában rendelkeznek bizonyos megszorításokkal, amelyek korlátozzák azokat a lehetséges egyedkombinációkat, amelyek részt vehetnek a megfelelő kapcsolathalmazban. Ezeket a megszorításokat a kapcsolatok által reprezentált minivilágbeli szituáció alapján határozzuk meg. Ha például a 3.9. ábrán a vállalatnak van egy olyan szabálya, hogy minden dolgozónak pontosan egy osztályon kell dolgoznia, akkor ezt a megszorítást szeretnénk a sémán is megjeleníteni. A kapcsolatokra vonatkozó megszorításoknak két fő típusát különböztetjük meg: számosság és részvétel.

A bináris kapcsolatok számossága.  A bináros kapcsolatok számossága meghatározza azon kapcsolat-előfordulások maximális számát, amelyekben egy egyed részt vehet. A MUNKAHELYE bináris kapcsolattípus esetén például az OSZTÁLY:DOLGOZÓ 1:N számosságú, ami azt jelenti, hogy minden osztály akárhány dolgozóhoz kapcsolódhat (azaz tetszőleges számú dolgozót alkalmazhat),[7] viszont egy dolgozó csak egy osztályhoz kapcsolódhat (azaz csak egy osztályon dolgozhat). A bináris kapcsolattípusok lehetséges számosságai: 1:1, 1:N, N:1 és M:N.

3.12. ábra - Az 1:1 számosságú VEZETI kapcsolat.

Az 1:1 számosságú VEZETI kapcsolat.

1:1 számosságú bináris kapcsolatra példa a VEZETI (3.12. ábra), amely az egyes osztály egyedeket összekapcsolja azzal a dolgozóval, aki az adott osztályt vezeti. Ez azokat a minivilágbeli megszorításokat reprezentálja, hogy — bármely időpillanatban — egy dolgozó csak egy osztályt vezethet, és egy osztálynak csak egy vezetője lehet. A DOLGOZIK_RAJTA kapcsolattípus (3.13. ábra) M:N számosságú, mert a minivilág szabálya szerint egy dolgozó akárhány projekten dolgozhat, és egy projekthez akárhány dolgozó tartozhat.

3.13. ábra - Az M:N számosságú DOLGOZIK_RAJTA kapcsolat.

Az M:N számosságú DOLGOZIK_RAJTA kapcsolat.

A bináris kapcsolatok számosságát az ER diagramokon úgy reprezentáljuk, hogy 1-est, M-et vagy N-et írunk a rombuszok mellé, ahogy a 3.2. ábrán látható.

Részvételi megszorítások és létezésfüggőség.  A részvételi megszorítás megadja, hogy egy egyed létezése függ-e attól, hogy kapcsolatban áll-e egy másik, a kapcsolattípuson keresztül elérhető egyeddel. Ez a megszorítás meghatározza azon kapcsolat-előfordulások minimális számát, amelyekben az egyes egyedek részt vehetnek, ezért néha minimum számossági megszorításnak is nevezzük. A részvételi megszorításoknak két típusa létezik (totális és részleges), amelyeket példákkal illusztrálunk. Ha egy vállalat előírásai kimondják, hogy minden dolgozót hozzá kell rendelni egy osztályhoz, akkor egy dolgozó egyed csak akkor létezhet, ha legalább egy MUNKAHELYE kapcsolat-előfordulásban részt vesz (3.9. ábra). A MUNKAHELYE kapcsolatban a DOLGOZÓ részvételét tehát totális részvételnek nevezzük, ami azt jelenti, hogy a dolgozó egyedek teljes halmazában minden egyednek kapcsolódnia kell egy osztály egyedhez a MUNKAHELYE kapcsolaton keresztül. A totális részvételt létezésfüggőségnek is nevezzük. A 3.12. ábrán nem várjuk el, hogy minden dolgozó vezessen egy osztályt, így a DOLGOZÓ részvétele a VEZETI kapcsolattípusban részleges, ami azt jelenti, hogy a dolgozó egyedek halmazának csak egy része kapcsolódik valamely osztály egyedhez a VEZETI kapcsolaton keresztül, de nem feltétlenül az összes. A számosságra és a részvételi megszorításokra együttesen a kapcsolattípusok strukturális megszorításaiként fogunk hivatkozni.

Az ER diagramokon a totális részvételt (vagy létezésfüggőséget) egy olyan dupla vonallal jelöljük, amely a részt vevő egyedtípust köti össze a kapcsolattal, míg a részleges részvételt szimpla vonallal reprezentáljuk (lásd a 3.2. ábrát).

3.4.4. A kapcsolattípusok attribútumai

A kapcsolattípusoknak is lehetnek attribútumaik, amelyek hasonlóak az egyedtípusokéihoz. Ha például szeretnénk feljegyezni, hogy egy dolgozó hetente hány órát dolgozik egy konkrét projekten, felvehetünk egy Órák attribútumot a 3.13. ábra DOLGOZIK_RAJTA kapcsolattípusához. Egy másik példa lehet, hogy felvesszük azt a dátumot, amikor egy osztályvezető megkezdte egy osztály vezetését, a 3.12. ábra VEZETI kapcsolattípusának egy Kezdő_dátum elnevezésű attribútumaként.

Vegyük észre, hogy az 1:1 és az 1:N számosságú kapcsolattípusok attribútumait hozzácsatolhatjuk a részt vevő egyedtípusok egyikéhez. A VEZETI kapcsolat Kezdő_dátum attribútuma akár a DOLGOZÓ, akár az OSZTÁLY attribútuma is lehet, bár koncepcionálisan a VEZETI kapcsolathoz tartozik. Ez azért van, mert a VEZETI egy 1:1 számosságú kapcsolat, ezért minden osztály és minden dolgozó egyed legfeljebb egy kapcsolat-előfordulásban vesz részt. Emiatt a Kezdő_dátum attribútum értéke külön is meghatározható vagy a részt vevő osztály egyeden, vagy a részt vevő dolgozó (osztályvezető) egyeden keresztül.

Egy 1:N számosságú kapcsolattípus esetén a kapcsolat attribútuma csak a kapcsolat N oldali egyedtípusához csatolható. Ha például a 3.9. ábrán a MUNKAHELYE kapcsolat szintén rendelkezne egy Kezdő_dátum attribútummal, amely azt jelezné, hogy egy dolgozó mikor kezdett az adott osztályon dolgozni, akkor ezt az attribútumot a DOLGOZÓ egy attribútumaként is felvehetnénk. Ez azért van, mert minden dolgozó csak egy osztályon dolgozik, így a MUNKAHELYE kapcsolat legfeljebb egy előfordulásában vesz részt. Mind az 1:1, mind az 1:N kapcsolattípusok esetén az a döntés, hogy egy kapcsolat egy attribútumát hová helyezzük (azaz hogy a kapcsolattípushoz vagy az egyik részt vevő egyedtípushoz csatoljuk-e), a sématervező szubjektív döntése.

Az M:N kapcsolattípusok esetén bizonyos attribútumok csak a kapcsolat-előfordulásokban részt vevő egyedek kombinációja segítségével határozhatók meg, egyetlen egyed segítségével azonban nem. Az ilyen attribútumokat a kapcsolat attribútumaiként kell definiálni. Példa erre az M:N számosságú DOLGOZIK_RAJTA kapcsolat Órák attribútuma (3.13. ábra); az egy dolgozó által egy projektre fordított heti munkaórák számát egy dolgozó-projekt kombináció alapján tudjuk csak meghatározni, külön ezen egyedek egyikével azonban nem.



[6] A kapcsolattípusok attribútumként való reprezentálása a funkcionális adatmodellek osztályában használatos. Az objektumorientált adatbázisokban a kapcsolatok referencia attribútumokként reprezentálhatók, vagy csak egy irányban, vagy mindkét irányban, egymás inverzeként. Relációs adatbázisokban (lásd 5. fejezet) a külső kulcs a referencia attribútumok egy fajtája, amelyet a kapcsolatok reprezentálására használunk.

[7] Az N azt jelenti, hogy tetszőleges számú (0 vagy több) kapcsolódó egyed létezhet.