prev up next

Definition von Beziehungen


Ausprägung einer 1:1-Beziehung

Eine $1:1$-Beziehung wird symmetrisch in beiden beteiligten Objekt-Typen modelliert:

class Professoren {
  attribute long  PersNr;
  ...
  relationship Raeume residiertIn;
};

class Raeume {
  attribute long  RaumNr;
  attribute short Groesse;
  ...
  relationship Professoren beherbergt;
};

Abbildung 16.4 zeigt eine mögliche Ausprägung der Beziehungen residiertIn und beherbergt.

Allerdings wird durch die gegebene Klassenspezifikation weder die Symmetrie noch die 1:1-Einschränkung garantiert. Abbildung 16.5 zeigt einen inkonsistenten Zustand des Beziehungspaars residiertIn und beherbergt.


Inkonsistenter Zustand einer Beziehung

Um Inkonsistenzen dieser Art zu vermeiden, wurde im ODMG-Objektmodell das inverse-Konstrukt integriert:

class Professoren {
  attribute long  PersNr;
  ...
  relationship Raeume residiertIn inverse Raeume::beherbergt;
};

class Raeume {
  attribute long  RaumNr;
  attribute short Groesse;
  ...
  relationship Professoren beherbergt inverse Professoren::residiertIn;
};
Damit wird sichergestellt, daß immer gilt:

\begin{displaymath}p = r.beherbergt ~~~\Leftrightarrow ~~~r = p.residiertIn \end{displaymath}

Binäre 1:N - Beziehungen werden modelliert mit Hilfe des Mengenkonstruktors set, der im nächsten Beispiel einem Professor eine Menge von Referenzen auf Vorlesungen-Objekte zuordnet:

class Professoren {
  ...
  relationship set (Vorlesungen) liest inverse Vorlesungen::gelesenVon;
};

class Vorlesungen {
  ...
  relationship Professoren gelesenVon inverse Professoren::liest;
};
Man beachte, daß im relationalen Modell die Einführung eines Attributs liest im Entity-Typ Professoren die Verletzung der 3. Normalform verursacht hätte.

Binäre N:M - Beziehungen werden unter Verwendung von zwei set-Konstruktoren modelliert:

class Studenten {
  ...
  relationship set (Vorlesungen) hoert inverse Vorlesungen::Hoerer;
};

class Vorlesungen {
  ...
  relationship set (Studenten) Hoerer inverse Studenten::hoert;
};

Durch die inverse-Spezifikation wird sichergestellt, daß gilt:

\begin{displaymath}s \in v.Hoerer ~~~\Leftrightarrow ~~~ v \in s.hoert\end{displaymath}

Analog lassen sich rekursive $N:M$ - Beziehungen beschreiben:

class Vorlesungen {
  ...
  relationship set (Vorlesungen) Vorgaenger inverse Vorlesungen::Nachfolger;
  relationship set (Vorlesungen) Nachfolger inverse Vorlesungen::Vorgaenger;
};


Modellierungen von Beziehungen im Objektmodell

Ternäre oder $n \ge 3$ stellige Beziehungen benötigen einen eigenständigen Objekttyp, der die Beziehung repräsentiert. Zum Beispiel wird die ternäre Beziehung

pruefen : {[ MatrNr, VorlNr, PersNr, Note ]}
zwischen den Studenten, Vorlesungen und Professoren wie folgt modelliert:

class Pruefungen {
  attribute    float       Note;
  relationship Professoren Pruefer   inverse Professoren::hatgeprueft;
  relationship Studenten   Pruefling inverse Studenten::wurdegeprueft;
  relationship Vorlesungen Inhalt    inverse Vorlesungen::wurdeAbgeprueft;
};

class Professoren {
  attribute    long             PersNr;
  attribute    string           Name;
  attribute    string           Rang;
  relationship Raeume           residiertIn inverse Raeume::beherbergt; 
  relationship set<Vorlesungen> liest       inverse Vorlesungen::gelesenVon; 
  relationship set<Pruefungen>  hatgeprueft inverse Pruefungen::Pruefer;
};

class Vorlesungen {
  attribute    long             VorlNr;
  attribute    string           Titel;
  attribute    short            SWS; 
  relationship Professoren      gelesenVon inverse Professoren::liest; 
  relationship set<Studenten>   Hoerer     inverse Studenten::hoert;        
  relationship set<Vorlesungen> Nachfolger inverse Vorlesungen::Vorgaenger;
  relationship set<Vorlesungen> Vorgaenger inverse Vorlesungen::Nachfolger;
  relationship set<Pruefungen>  wurdeAbgeprueft inverse Pruefungen::Inhalt;
};

class Studenten {
  attribute    long             MatrNr;
  attribute    string           Name;
  attribute    short            Semester;
  relationship set<Pruefungen>  wurdeGeprueft inverse Pruefungen::Pruefling;
  relationship set<Vorlesungen> hoert         inverse Vorlesungen::Hoerer; 
};

Abbildung 16.6 visualisiert die bislang eingeführten Beziehungen. Die Anzahl der Pfeilspitzen gibt die Wertigkeit der Beziehung an:

$\leftrightarrow $ bezeichnet eine $1:1$-Beziehung $\leftrightarrow \hspace{-0.3cm}\rightarrow $ bezeichnet eine $1:N$-Beziehung
$\leftarrow \hspace{-0.3cm}\leftrightarrow $ bezeichnet eine $N:1$-Beziehung $\leftarrow \hspace{-0.3cm}\leftrightarrow \hspace{-0.3cm}\rightarrow$ bezeichnet eine $N:M$-Beziehung


prev up next