Skip to content

Relationale Datenbanken

Datenbanken

Eines der weitest verbreiteten Datenbanksysteme ist das sogenannte relationale Datenbanksystem. Es basiert auf dem mathematischen Begriff der Relation, erarbeitet zwischen 1960 und 1970 vom britischen Mathematiker Edgar F. Codd.

Relationale Datenbanken[1]

Die Relation beschreibt durch Attribute und Tupel eine Tabelle mit Spaltennamen und zeilenweisen Einträgen.

Konzepte

Eine relationale Datenbank kann man sich als Sammlung von Tabellen vorstellen, in denen Datensätze abgespeichert sind. Jede Zeile ist ein Datensatz. Jeder Datensatz setzt sich aus Attributwerten zusammen. Das Relationsschema legt die Anzahl und den Typ der Attribute fest. Dabei muss jeder Datensatz eindeutig identifizierbar sein. Das geschieht über einen oder mehrere Schlüssel (engl. key).

Beispiel

Die Tabelle «movies» einer fiktiven Film-Datenbank.

Tabelle der Relation «movies»
idtitleyear
1Argo2012
212 Years a Slave2013
3Birdman2014
4Spotlight2015
5Moonlight2016
6The Shape of Water2017
Datensatz
Jede Zeile enthält einen Datensatz, also einen Film. Dieser wird durch die Attribute und ihre Werte beschrieben. Je nach Konfiguration können einzelne Werte auch null sein. Jeder Film muss einen Titel haben, das Erscheinungsjahr könnte aber offen bleiben (Wenn man dieses nicht kennt oder der Film nächstes oder übernächstes Jahr erscheinen soll).
Schlüssel (keys)
id ist ein sogenannter Primärschlüssel (primary key). Jeder Film erhält hier eine eindeutige Zahl.
man könnte auch den Titel als Primärschlüssel nehmen. Dann dürfte es aber nicht mehrere Filme mit dem selben Namen geben.
Attribute
title – Jeder Datensatz speichert hier den Titel des Filmes (Text)
year – Jeder Datensatz speichert hier das Erscheinungsjahr des Filmes (Zahl)

Verknüpfungen zwischen Tabellen

Verknüpfungen werden benutzt um Beziehungen zwischen Relationen auszudrücken; denn meistens bestehen Datenbanken nicht nur aus einer einzigen Relation.

Im Beispiel möchte man zu den Filmen noch weitere Angaben wissen: Wer hat mitgespielt? Wie wurde der Film bewertet? Welches sind die besten Zitate im Film?

Dazu führen wir nun weitere Relationen ein und verknüpfen diese mit der Relation «movies».

Kardinalität

Mit der Kardinalität beschreibt man den Grad einer Beziehung zwischen zwei Relationen. Die Angabe der Kardinalität erfolgt durch eine Zahl bzw. einen Buchstaben oder einer Buchstabenkombination, die man im Diagramm an die Verbindungslinie der beiden Rechtecke schreibt, welche für die Tabellen stehen. Die drei gebräuchlichsten Kardinalitätstypen sind:

1:1-Beziehung

Wir möchten zu jedem Film eine Bewertung haben. Dazu führen wir die Relation «ratings» ein.
Jeder Datensatz von «ratings» gehört genau zu einem Datensatz von «movies».

1:1-Beziehung

Irgendwie müssen wir zu jedem Film den korrekten Eintrag in der Tabelle «ratings» finden. Da jeder Film durch seinen Primärschlüssel eindeutig identifiziert werden kann, fügen wir diesen in der neuen Tabelle «ratings» ein.

Beispiel

Tabelle der Relation «ratings»
movie_idrankvotes
529310
32323149
4126702
2742497
Schlüssel (keys)
movie_id ist ein sogenannter Fremdschlüssel (foreign key). Er beschreibt zu welchem Film die Bewertung gehört. Da es pro Film maximal eine Bewertung geben kann, ist movie_id gleichzeitig der Primärschlüssel der Tabelle «ratings»

1:n-Beziehung

Wenn wir jedem Film Zitate zuweisen möchten, dann kann ein Film mehrere Zitate haben – jedoch macht es wenig Sinn wenn ein Zitat zu mehr als einem Film gehören soll.

1:n-Beziehung

Die Detail-Tabelle erhält eine zusätzliche Spalte, die als Fremdschlüssel den Primärschlüssel der Master-Tabelle aufnimmt.

Beispiel

Tabelle der Relation «quotes»
idmovie_idquotetext
15Little: My name is Chiron, people call me little.
25Black: It is what it is.
33Mike Shiner: Popularity is the slutty little cousin of prestige.
Schlüssel (keys)
id ist der Primärschlüssel der Relation «quotes». Er identifiziert eindeutig ein Zitat, also einen Datensatz in der Tabelle «quotes»
movie_id ist ein Fremdschlüssel der Relation «movies». Mit ihm kann man dem Zitat einen Film zuweisen.

n:m-Beziehung

Für die Schauspieler haben wir eine eigene Relation. Diese beinhaltet einen Primärschlüssel, den Namen und das Geschlecht des Schauspielers.

Beispiel

Tabelle der Relation «actors»
idnamesex
91Michael Keatonm
213Emma Stonew
1034Rachel McAdamsw
Schlüssel (keys)
id ist der Primärschlüssel der Tabelle «actors»

In jedem Film spielen mehrere Schauspieler mit, aber ein Schauspieler kann auch in mehreren Filmen mitspielen.

n:m-Beziehung

m:n-Beziehungen können in den meisten relationalen Datenbanken nicht direkt umgesetzt werden. Zur Realisierung wird eine zusätzliche Tabelle erstellt, welche die Primärschlüssel beider Tabellen als Fremdschlüssel enthält. Die m:n-Beziehung wird also aufgelöst, und man erhält eine weitere Datenbanktabelle, die zwei 1:n-Beziehungen realisiert. Oft werden für die Bezeichnung der zusätzlichen Tabelle die Bezeichnungen der zwei daran beteiligten Tabellen aneinandergehängt.

Beispiel

Verknüpfungstabelle «movies2actors»
movie_idactor_id
491
41034
391
3213
Schlüssel (keys)
movie_id ist der Fremdschlüssel der Tabelle «movies»
actor_id ist der Fremdschlüssel der Tabelle «actors»
movie_id und actor_id ist ein zusammengesetzter Primärschlüssel. Somit braucht die Tabelle «movies2actors» nicht eine weitere Spalte «id». Dies hat aber zur Folge, dass jeder Schauspieler pro Film nur 1x mitspielen kann.

Wenn nötig können zusätzliche Informationen zur Verknüpfung mit weiteren Attributen gespeichert werden.

Beispiel

erweiterte Verknüpfungstabelle «movies2actors»
movie_idactor_idas_character
491Walter ‹Robby› Robinson
41034Sacha Pfeiffer
391Riggan
3213Sam
Attribute
as_character – Jede Zuordnung eines Schauspielers zu einem Film merkt sich hier welche Rolle der Schauspieler in diesem Film gespielt hat.

Aufgabe

Beantworte die folgenden Fragen an Hand der im Beispiel verwendeten Tabellen:

  1. In welchen Filmen hat Michael Keaton mitgespielt?
  2. Findest du ein Zitat aus dem Film mit der höchsten Bewertung (ranking so tief wie möglich)?
  3. Welche Schauspieler haben im Film «Spotlight» mitgespielt?
  4. Wie müsste die Tabelle «movie2actors» angepasst werden damit ein Schauspieler im selben Film mehrere Rollen übernehmen kann?
Lösung
  1. Aus der Tabelle «actors» findet man die id von Michael Keaton, nämlich 91. Danach sucht man in der Verknüpfungstabelle «movies2actors» nach Einträgen mit einer actor_id mit diesem Wert. Man findet zwei Datensätze und merkt sich die beiden Werte für movie_id. Damit können nun in der Tabelle «movies» in der Spalte id die beiden Filme gefunden werden: «Spotlight» und «Birdman»
  2. Man sortiert die Tabelle «ratings» nach rank und sucht den tiefsten Wert. Die dazugehörende movie_id kann verwendet werden um in der Tabelle «quotes» nach dem entsprechenden Film zu suchen: Wir finden zwei Zitate: «Little: My name is Chiron, people call me little.» und «Black: It is what it is.» (Wir mussten dazu die Tabelle «movies» gar nicht verwenden, da der Film durch den Fremdschlüssel movie_id gegeben ist.)
  3. «Spotlight» hat die id 4. Damit finden wir in der Tabelle «movies2actors» zwei Rollen, eine mit actor_id 91 und eine mit actor_id 1034. Dies führt uns über die Tabelle «actors» zu Michael Keaton und Rachel McAdams.
  4. Übernähme ein Schauspieler mehrere Rollen im selben Film, so wären die Werte für actor_id und movie_id nicht mehr eindeutig. Die beiden Fremdschlüssel könnten also nicht mehr als Primärschlüssel eingesetzt werden. Man müsste für den Primärschlüssel eine Spalte id einführen und dort eine eindeutige Nummer setzen die jeweils automatisch erhöht wird.
verbesserte Verknüpfungstabelle «movies2actors»
idmovie_idactor_idas_character
1491Walter ‹Robby› Robinson
241034Sacha Pfeiffer
3391Riggan
43213Sam
53213Julie


  1. Frank Murmann via Wikimedia Commons, abgerufen am 1.5.2018, CC0 ↩︎

Gymnasium Kirchenfeld, fts & lem