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.
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.
id | title | year |
---|---|---|
1 | Argo | 2012 |
2 | 12 Years a Slave | 2013 |
3 | Birdman | 2014 |
4 | Spotlight | 2015 |
5 | Moonlight | 2016 |
6 | The Shape of Water | 2017 |
- 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.- 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».
Umsetzung
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
movie_id | rank | votes |
---|---|---|
5 | 2 | 9310 |
3 | 232 | 3149 |
4 | 12 | 6702 |
2 | 74 | 2497 |
- 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, istmovie_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.
Umsetzung
Die Detail-Tabelle erhält eine zusätzliche Spalte, die als Fremdschlüssel den Primärschlüssel der Master-Tabelle aufnimmt.
Beispiel
id | movie_id | quotetext |
---|---|---|
1 | 5 | Little: My name is Chiron, people call me little. |
2 | 5 | Black: It is what it is. |
3 | 3 | Mike 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
id | name | sex |
---|---|---|
91 | Michael Keaton | m |
213 | Emma Stone | w |
1034 | Rachel McAdams | w |
- Schlüssel (keys)
id
ist der Primärschlüssel der Tabelle «actors»
In jedem Film spielen mehrere Schauspieler mit, aber jeder Schauspieler kann auch in mehreren Filmen mitspielen.
Umsetzung
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. Wenn nötig können zusätzliche Informationen zur Verknüpfung mit weiteren Attributen gespeichert werden.
Beispiel
movie_id | actor_id | as_character |
---|---|---|
4 | 91 | Walter ‹Robby› Robinson |
4 | 1034 | Sacha Pfeiffer |
3 | 91 | Riggan |
3 | 213 | Sam |
- Schlüssel (keys)
movie_id
ist der Fremdschlüssel der Tabelle «movies»actor_id
ist der Fremdschlüssel der Tabelle «actors»movie_id
undactor_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.- 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:
- In welchen Filmen hat Michael Keaton mitgespielt?
- Findest du ein Zitat aus dem Film mit der höchsten Bewertung (
ranking
so tief wie möglich)? - Welche Schauspieler haben im Film «Spotlight» mitgespielt?
- Wie müsste die Tabelle «movie2actors» angepasst werden damit ein Schauspieler im selben Film mehrere Rollen übernehmen kann?
Lösung
- 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 eineractor_id
mit diesem Wert. Man findet zwei Datensätze und merkt sich die beiden Werte fürmovie_id
. Damit können nun in der Tabelle «movies» in der Spalteid
die beiden Filme gefunden werden: «Spotlight» und «Birdman» - Man sortiert die Tabelle «ratings» nach
rank
und sucht den tiefsten Wert. Die dazugehörendemovie_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üsselmovie_id
gegeben ist.) - «Spotlight» hat die
id
4. Damit finden wir in der Tabelle «movies2actors» zwei Rollen, eine mitactor_id
91 und eine mitactor_id
1034. Dies führt uns über die Tabelle «actors» zu Michael Keaton und Rachel McAdams. - Übernähme ein Schauspieler mehrere Rollen im selben Film, so wären die Werte für
actor_id
undmovie_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 Spalteid
einführen und dort eine eindeutige Nummer setzen die jeweils automatisch erhöht wird.
id | movie_id | actor_id | as_character |
---|---|---|---|
1 | 4 | 91 | Walter ‹Robby› Robinson |
2 | 4 | 1034 | Sacha Pfeiffer |
3 | 3 | 91 | Riggan |
4 | 3 | 213 | Sam |
5 | 3 | 213 | Julie |
Entity-Relationship-Model
Das Entity-Relationship-Modell, kurz ER-Modell oder ERM (deutsch Gegenstands-Beziehungs-Modell) dient dazu, im Rahmen der Datenmodellierung einen Ausschnitt der realen Welt zu beschreiben. Das ER-Modell besteht aus einer Grafik (siehe unten) und einer Beschreibung der darin verwendeten Elemente, wobei Dateninhalte (d.h. die Bedeutung bzw. Semantik der Daten) und Datenstrukturen dargestellt werden.
Der Einsatz von ER-Modellen ist der De-facto-Standard für die Datenmodellierung, auch wenn es unterschiedliche grafische Darstellungsformen gibt. Das ER-Modell wurde 1976 von Peter Chen in seiner «The Entity-Relationship Model» vorgestellt. Aus diesem Grund werden wir uns auch vor allem mit der sogenannten Chen-Notation befassen.
ER-Diagramme in Chen-Notation
Die Chen-Notation besteht aus den unten abgebildeten drei Elementen (Knoten), die durch Linien (Kanten) miteinander verbunden werden. Sie bilden einen Graphen.
Entität
Die Entität (entity) stellt ein individuell identifizierbares Objekt der Wirklichkeit dar. (Zum Beispiel der Film «moonlight» oder die Schauspielerin «Rachel McAdams»)
Attribute
Eine Entität kann mehrere Attribute haben. Unterattribute sind auch zugelassen (z.B. könnte das Attribut «Name» in die Unterattribute «Vorname» und «Nachname» aufgeteilt werden). Die Entität «actor» hat die Attribute «name» und «sex» («id» ist ein Schlüssel und kein eigentliches Attribut weil der Wert nichts mit dem realen Objekt zu tun hat und nur für die Datenbank verwendet wird.)
Beziehung
Eine Beziehung (relationship) verbindet zwei Entitäten. Optional kann der Grad der Beziehung (die Kardinalität) bei den Verbindungslinien notiert werden. So werden die Verknüpfungen der Entität «movies» mit den Entitäten «ratings», «quotes» und «actors» jeweils durch eine Beziehung dargestellt.
Beispiel
Die Beziehung zwischen den Entitäten «Sortiment» und «Lagerbestand» wird durch die Beziehung «ist vorhanden» ausgedrückt. Man könnte sagen «ein Artikel des Sortimentes ist im Lager vorhanden». Die Kardinalität wird durch die beiden Einsen links und rechts von der Beziehung ausgedrückt. Bei komplexen Strukturen (mehr Entitäten und mehrere Beziehungen) werden oft die Attribute und ev. auch die Kardinalitäten ausgeblendet.
Aufgabe
Ein Pizza-Restaurant beauftragt Sie eine Datenbank zu entwerfen:
Jede Pizza hat einen Namen, einen Preis, verschiedene Zutaten und genau einen Pizzaiolo welcher für diese Pizza zuständig ist. Zutaten haben einen Namen und sind entweder vegetarisch oder nicht. Die Pizzeria beschäftigt mehrere Pizzaioli, welche für eine oder mehrere Pizzen zuständig sind. Die Pizzaioli haben einen Namen und ein Alter.
- Bestimmen und markieren Sie zuerst im Text die Entitäten, Attribute und Relationen
- Planen Sie dann die DB indem sie ein ER-Diagramm zeichnen
- Setzen Sie das ER-Diagramm um, indem sie in Excel die entsprechenden Tabellen erstellen
- Markieren Sie Primärschlüssel durch Unterstreichen, Fremdschlüssel durch gepunktetes Unterstreichen
- Füllen Sie einige Fantasie-Daten in die Tabellen ein
Lösung
Aus dem Text erhält man Entitäten (fett), Attribute (markiert) und Relationen (kursiv):
Jede Pizza hat einen Namen, einen Preis, verschiedene Zutaten und genau ein Pizzaiolo welcher für diese Pizza zuständig ist. Zutaten haben einen Namen und sind entweder vegetarisch oder nicht. Die Pizzeria beschäftigt mehrere Pizzaioli, welche für eine oder mehrere Pizzen zuständig sind. Die Pizzaioli haben einen Namen und ein Alter.
Dies ergibt das folgende ER-Diagramm:
Daraus lassen sich die folgenden Tabellen ableiten:
id | name | preis | pizzaiolo_id |
---|---|---|---|
1 | Margarita | 15 | 2 |
2 | Prosciutto e Funghi | 17 | 2 |
3 | Hawaii | 18 | 1 |
id | name | vegetarisch |
---|---|---|
1 | Tomaten | ja |
2 | Pilze | ja |
3 | Schinken | nein |
4 | Ananas | ja |
id | name | alter |
---|---|---|
1 | Mario | 34 |
2 | Luigi | 31 |
pizza_id | zutat_id |
---|---|
1 | 1 |
2 | 1 |
2 | 2 |
2 | 3 |
3 | 1 |
3 | 3 |
3 | 4 |
- Relationale Datenbanken
- Frank Murmann via Wikimedia Commons (CC0)
- https://commons.wikimedia.org/wiki/File:Begriffe_relationaler_Datenbanken.svg
- 1.5.2018