===== Spezielle Beziehungen ===== ==== Rekursive Beziehungen ==== Eine Beziehung zwischen Entitäten, die demselben Entitätstyp angehören, wird als **rekursiver Beziehungstyp** bezeichnet. Beispielsweise ist die Beziehung //ist-Vorgesetzter-von// zwischen den Mitarbeitern eines Betriebs rekursiv. {{IstVorgesetzterVon.gif}}\\ Rekursive Beziehung //ist-Vorgesetzter-von// Zur Abbildung der rekursiven ER-Beziehung in das Relationenmodell benutzen wir die [[Relationenmodell#Regel für obligatorische 1:n-Beziehungen|Regel für 1:n-Beziehungen]]. Demnach wird auf der n-Seite der Primärschlüssel der 1-Seite als Fremdschlüssel hinzugenommen, d. h. bei einem Mitarbeiter wird die Personalnummer des Vorgesetzten ergänzt. Mitarbeiter(__Personalnummer__, Name, Vorname, ↑Personalnummer) In dieser Relation kommt die Personalnummer zweimal als Attribut vor, es liegt also ein Namenskonflikt vor. Das geht natürlich nicht, weil nie klar ist, ob die Personalnummer des Mitarbeiters gemeint ist oder die des Vorgesetzten. Der Fremdschlüssel //Personalnummer// braucht also eine andere Bezeichnung. Würde man wie unter [[Relationenmodell#Namenskonflikte|Namenskonflikte]] vorgehen, also den Entitätsnamen voranstellen, so müsste Personalnummer in MitarbeiterPersonalnummer umbenannt werden. Dies passt aber nicht, weil bei einer rekursiven Beziehung die beiden in Beziehung stehenen Entitätstypen identisch sind. Man ergänzt daher sinnvollerweise den Beziehungsnamen, wodurch man eine leicht verständliche Relation erhält: Mitarbeiter(__Personalnummer__, Name, Vorname, ↑VorgesetztenPersonalnummer) ==== Parallele Beziehungen ==== Zwischen zwei Entitätstypen können mehrere Beziehungen bestehen. Beispielsweise //unterrichten// Lehrer Klassen, sie können aber auch //Klassenlehrer// einer Klasse sein. {{IstKlassenlehrerVon.gif}}\\ Parallele Beziehungen //ist-Klassenlehrer-von// und //unterrichtet// Zur Abbildung paralleler Beziehungen in das [[Relationenmodell]] bildet man alle Entitätstypen und Beziehungen für sich ab. Lehrer(__Kürzel__, Name)\\ Klasse(__Name__, Klassenraum)\\ unterrichtet(↑__Kürzel__, ↑__Name__, Fach)\\ ist_Klassenlehrer_von(↑__Kürzel__, ↑__Name__) Die 1:1-Beziehung //ist_Klassenlehrer_von// lässt sich optimieren: Lehrer(__Kürzel__, Name)\\ Klasse(__Name__, Klassenraum, ↑Kürzel)\\ unterrichtet(↑__Kürzel__, ↑__Name__, Fach) ====Ist-Beziehung (is-a)==== Die aus der objektorientierten Modellierung bekannten Spezialisierungs- bzw. Generalisierungsbeziehungen zwischen Ober- und Unterklasse gibt es in der ER-Modellierung als sogenannte Ist-Beziehung (is-a). Als Beispiel betrachten wir Mitarbeiter einer Universität, welche durch ihre Personalnummer identifiziert werden und einem Institut angehören. Einige dieser Mitarbeiter sind Prüfer für ein bestimmtes Fach. {{is-a.png}}\\ Jeder Prüfer ist genau ein Mitarbeiter, aber nicht jeder Mitarbeiter ist ein Prüfer. Die Kardinaliät dieser Beziehung ist also 1:1 und die Optionalität muss:kann. Zudem ist Prüfer ein schwacher Entitätstyp, weil er nur durch Hinzunahme des Fremdschlüssels Personalnummer identifiziert werden kann. Die Abbildung in das Relationenmodell ergibt die beiden Relationen: Mitarbeiter(__Personalnummer__, Institut)\\ Prüfer(↑__Personalnummer__, Fach) \\ **Aufgabe**\\ **Datenbank Fluggesellschaft**\\ In der Datenbank einer Fluggesellschaft werden von den erfassten Personen eine Identifikationsnummer, Vor- und Nachname, Geburtsdatum und die Adresse gespeichert. Bei Flugpassagieren werden zusätzlich das Geschlecht und Raucher/Nichtraucher gespeichert. Für die Angestellten der Fluggesellschaft müssen zusätzlich der Beruf, die Religionszugehörigkeit und die Gehaltsgruppe gespeichert werden. Die Beziehung Person – Flugpassagier bzw. Person – Angestellter nennt man eine is-a (engl., ist ein) Beziehung. Jeder Flugpassagier ist eine Person und jeder Angestellter ist eine Person. a) Modelliere ein ER-Diagramm mit Kardinalitäten und Optionalitäten. b) Bilde die drei Entitätstypen und die zwei is-a-Beziehungen in das Relationenmodell ab.