Home - Datenbank Theorie - Datenbank Design www.sqldocu.com
zurück vor



Beziehungen abspeichern (1:1, 1:n, n:m)





Beschreibung
top
Durch Normalisierung werden im Allgemeinen Informationen auf verschiedene Relationen aufgeteilt. Oft exististiern nach der Normalisierung zwischen diesen Relationen Abhängigkeiten.
Ein Beispiel: In Tabelle captain sind alle Captains der Föderation abgespeichert, in Tabelle raumschiff alle Raumschiffe der Föderation.
Name der Relation: captain
DienstNr captain
1 James T. Kirk
2 Jean-Luc Picard
3 Kathryn Janeway
Name der Relation: raumschiff
RaumschiffNr RaumschiffName
NCC-2893 U.S.S. Stargazer
NCC-74656 U.S.S. Voyager
NCC-1701 U.S.S. Enterprise



Mit diesen Tabellen wissen wir welche Captains in der Föderation arbeiten und welche Raumschiffe die Föderation besitzt. Was wir nicht wissen:
Welcher Captain befehligt welches Raumschiff! Es besteht somit eine Beziehung zwischen diesen Tabellen. Da jeder Captain genau ein Raumschiff befehligt und jedes Raumschiff von genau einem Captain befehligt wird ist dies eine 1:1 Beziehung. Eine Lösung ist z.B. den Primärschlüssel der Relation captain als Attribut der Relation raumschiff hinzu zufügen:

Name der Relation: captain
DienstNr captain
1 James T. Kirk
2 Jean-Luc Picard
3 Kathryn Janeway
Name der Relation: raumschiff
DienstNr RaumschiffNr RaumschiffName
2 NCC-2893 U.S.S. Stargazer
3 NCC-74656 U.S.S. Voyager
1 NCC-1701 U.S.S. Enterprise



Man erkennt: James T. Kirk ist Captain des Raumschiffs NCC-1701, U.S.S. Enterprise.




1:1 Beziehung
top
Definition: Entität A steht mit genau einer Entität B in Beziehung. Entität B steht nur mit Entität A in Beziehung.

Als Bespiel: Jeder Captain der Föderation hat genau ein Raumschiff, und jedes Raumschiff hat genau einen Captain.
Eine 1:1 Beziehung kann in einer Relation abgespeichert werden:
DienstNr Name RaumschiffNr RaumschiffName
1 James T. Kirk NCC-1701 U.S.S. Enterprise
2 Jean-Luc Picard NCC-2893 U.S.S. Stargazer
3 Kathryn Janeway NCC-74656 U.S.S. Voyager

Jeder Datenbank Designer vermeidet es, 2 Entitäten in einer Zeile einer Tabelle abzuspeichern. Als Primärschlüssel bietet sich DienstNr an. Fällt aus einem Grund ein Capitain aus, besitzt unsere Relation keinen Primären Schlüssel mehr. Es macht also Sinn, jede Entität (Raumschiff, Captain) in einer eigenen Relation abzuspeichern. Damit die Beziehung Captain-Raumschiff nicht verloren geht, wird der Primär Schlüssel einer Entität in der Relation der anderen Entität gespeichert.
Name der Relation: captain
DienstNr Name
1 James T. Kirk
2 Jean-Luc Picard
3 Kathryn Janeway
Name der Relation: raumschiff
RaumschiffNr RaumschiffName DienstNr
NCC-2893 U.S.S. Stargazer 2
NCC-74656 U.S.S. Voyager 3
NCC-1701 U.S.S. Enterprise 1

Beachte:
  Primärschlüssel von Relation captain: DienstNr
  Primärschlüssel von Relation raumschiff: RaumschiffNr

Hinweis:
In der Literatur wird zusätzlich die Beziehung 1:0 erwähnt. Diese Beziehung würde vorliegen, wenn wir zulassen würden, dass ein Captain kein Raumschiff besitzt (z.B Raumschiff wurde gerade zerstört).
Der einzige Unterschied zur 1:1 Beziehuhg: Der Primärschlüssel der Relation captain könnte nicht mehr als Primärschlüssel der Relation raumschiff herangezogen werden.
In unserem Bespiel ist das völlig irrelevant da das Attribute RaumschiffNr als Primärschlüssel fungiert.



1:n Beziehung
top
Definition: Jede Entität der Relatin A steht mit n Entiäten der Relation B in Beziehung. Jede Entität der Relation B steht mit genau einer Entität der der Relation A in Beziehung.

Als Bespiel: Unter jedem Captain arbeiten n CrewMitglieder. Jedes Crewmitglied besitzt genau einen Captain
Eine 1:n Beziehung wird in 2 Relationen abgespeichert (durch Definition bereits impliziert)
Name der Relation: captain
NrCaptain Name
1 James T. Kirk
2 Jean-Luc Picard
3 Kathryn Janeway
Name der Relation: crewMitglied
NrCaptain NrCrewMitglied Name
1 1 Mr. Spock
1 2 Dr. Mc Coy
2 1 1. Offizier

Beachte:
  Primärschlüssel von Relation captain: NrCaptain
  Primärschlüssel von Relation crewMitglied: NrCaptain und NrCrewMitglied (
  zusammengesetzter Primärer Schlüssel)

Hinweis:
In der Relation crewMitglied ist ein zusammengesetzter Primärer Schlüssel nicht zwingend. Das Attribut NrCrewMitglied könnte z.B als Primärer Schlüssel dienen, wenn alle CrewMitglieder mit einer fortlaufenden Nummer abgespeicher werden würden (Mr. Spock->NrCrewMitglied=1, Dr. Mc Coy->NrCrewMitglied=2, 1.Offizier->NrCrewMitglied=3, usw.)



m:n Beziehung
top
Definition: Jede Entität der Relatin A steht mit m Entiäten der Relation B in Beziehung. Jede Entität der Relation B steht mit n Entität der der Relation A in Beziehung.

Als Bespiel: Jedes CrewMitglied kann m Shuttles eines Raumschiffes benutzen. Jedes Shuttle kann von n CrewMitgliedern eines Raumschiffes benutzt werden.
Das klingt noch immer etwas theoretisch.
Nehmen wir an das Raumschiff NCC-1701, U.S.S. Enterprise unter Kommando von James T. Kirk besitzt 3 Shuttles.
  Kirk hat Shuttle 1 und Shuttle 2 benutzt.
  Shuttle 1 wurde von Kirk, Mr. Spock, Dr. Mc Coy benutzt.
Dies ist eine m:n Beziehung:
  Kirk hat m mal Shuttle 1 benutzt.
  Shuttle 1 wurde von n CrewMitgliedern benutzt.

Um eine n:m Beziehung zwischen Entitäten in einem relationalen Datenbanksystem zu speichern, muss eine HilfsTabelle bebildet werden.

In unserem Beispiel erhalten wir 3 Relationen:

Name der 1. Relation: CrewMitglied (Hier wird die Entität CrewMitglied gespeichert)
Name der 2. Relation: Shuttle (Hier wird die Entität Shuttle gespeichert)
Name der 3. Relation: RS_CrewMitglied_Shuttle (Hier wird die m:n Beziehung der Entitäten CrewMitglied und Shuttle gespeichert)
Relation: CrewMitglied
NrCrewMitglied Name
1 James T. Kirk
2 Mr. Spock
3 Dr. Mc Coy
Relation: Shuttle
NrShuttle Name
1 ShuttleNrEins
2 ShuttleNrZwei


Relation: RS_CrewMitglied_Shuttle
NrCrewMitglied NrShuttle
1 1
1 2
2 1
3 1

 
   
-> James Kirk benutzt Shuttle 1
-> James Kirk benutzt Shuttle 2
-> Mr. Spock benutzt Shuttle 1
-> Dr. Mc Coy benutzt Shuttle 1



top