Relationales Datenmodell: Unterschied zwischen den Versionen
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Datenbanken]] | |||
[[Kategorie:Informatik]] | [[Kategorie:Informatik]] | ||
[[Kategorie:Informatik-Q1]] | |||
[[Kategorie:Informatik-Abitur]] | [[Kategorie:Informatik-Abitur]] | ||
Zeile 6: | Zeile 8: | ||
Realität -> Anforderungsermittlung -> [[Entity-Relationship-Modell]] -> '''Relationales Datenmodell''' -> Datenbanksystem | Realität -> Anforderungsermittlung -> [[Entity-Relationship-Modell]] -> '''Relationales Datenmodell''' -> Datenbanksystem | ||
Um ein relationales Datenmodell zu erstellen, muss erst ein Entity-Relationship-Modell vorliegen. | Um ein relationales Datenmodell zu erstellen, muss erst ein [[Entity-Relationship-Modell]] vorliegen. | ||
Das Entity-Relationship-Modell kann mithilfe von technischen Schritten in ein relationales Datenmodell übersetzt werden. | Das Entity-Relationship-Modell kann mithilfe von technischen Schritten in ein relationales Datenmodell übersetzt werden. | ||
=Begriffe= | =Erklärvideos= | ||
* '''Primärschlüssel''': Der Primärschlüssel (Primary Key; abgekürzt: '''PK''') ist ein Attribut (oder eine Kombination aus 2 Attributen), das '''einen Datensatz eindeutig identifiziert'''. | # [https://youtu.be/0_3Dyf-7_Bg Relationales Datenmodell - Was ist das?] | ||
# [https://youtu.be/JEyv8hh_Q5I aus einem Entity-Relationship-Modell ein relationales Datenmodell erstellen] | |||
# [https://youtu.be/MSe4uxcxTHg Mit MySQL-Workbench und XAMPP aus dem ER-Modell eine "echte" Datenbank erzeugen] | |||
=Fachbegriffe= | |||
Primärschlüssel, Primärschlüssel kombiniert aus zwei Fremdschlüsseln, Fremdschlüssel, Attribut, Tabelle, 1:n-Beziehung, n:m-Beziehung | |||
<font color='red'> | |||
Das Zentralabitur verwendet folgende Fachbegriffe, die hier kurz übersetzt werden: | |||
</font> | |||
* <font color='red'>'''Datenbankschema'''</font> = das ganze relationale Datenmodell | |||
* <font color='red'>'''Relationenschema'''</font> = eine Zeile im relationalen Datenmodell, z.B. kurs(<u>id</u>, name, kuerzel, halbjahr, ↑lehrer_id)<br/>''Hier wird das "Tabelle" genannt, weil es in der Datenbank eine Tabelle wird.'' | |||
=Erläuterung der Begriffe= | |||
* '''Primärschlüssel''': Der Primärschlüssel (Primary Key; abgekürzt: '''PK''') ist ein Attribut (oder eine Kombination aus 2 Attributen), das '''einen Datensatz (d.h. eine Zeile in einer Datenbank-Tabelle) eindeutig identifiziert'''. | |||
** Primärschlüssel werden unterstrichen, z.B. '''<u>id</u>''' | ** Primärschlüssel werden unterstrichen, z.B. '''<u>id</u>''' | ||
* '''Fremdschlüssel''': Der Fremdschlüssel (Foreign Key; abgekürzt: '''FK''') stellt die Verbindung zwischen Tabellen her: Ein Fremdschlüssel verweist auf den Primärschlüssel einer anderen Tabelle. | * '''Fremdschlüssel''': Der Fremdschlüssel (Foreign Key; abgekürzt: '''FK''') stellt die Verbindung zwischen Tabellen her: '''Ein Fremdschlüssel verweist auf den Primärschlüssel einer anderen Tabelle.''' | ||
** Fremdschlüssel werden durch einen Pfeil nach oben (↑) markiert, z.B.: '''↑kunde_id''' | ** Fremdschlüssel werden durch einen Pfeil nach oben (↑) markiert, z.B.: '''↑kunde_id''' | ||
=Vom ER-Modell zum relationalen Datenmodell= | =Vom ER-Modell zum relationalen Datenmodell= | ||
Zeile 35: | Zeile 52: | ||
Man sieht, dass die Beziehungen zwischen den Entitätsmengen noch nicht in das relationale Datenmodell übersetzt wurden; dementsprechend fehlt auch das Attribut ''note''. | Man sieht, dass die Beziehungen zwischen den Entitätsmengen noch nicht in das relationale Datenmodell übersetzt wurden; dementsprechend fehlt auch das Attribut ''note''. | ||
== 1:n-Beziehungen == | == 1:n-Beziehungen übertragen== | ||
1:n-Beziehungen werden in das relationale Datenmodell übersetzt, indem '''auf der n-Seite''' der Beziehung ein Fremdschlüssel eingetragen wird, der auf den Primärschlüssel der anderen beteiligten Tabelle verweist. | 1:n-Beziehungen werden in das relationale Datenmodell übersetzt, indem '''auf der n-Seite''' der Beziehung ein Fremdschlüssel eingetragen wird, der auf den Primärschlüssel der anderen beteiligten Tabelle verweist. | ||
* ''lehrer'' - ''kurs'' ist eine 1:n-Beziehung. | * ''lehrer'' - ''kurs'' ist eine 1:n-Beziehung. | ||
Zeile 49: | Zeile 66: | ||
Jetzt kann man bei jedem einzelen Kurs sehen, welcher Lehrer ihn unterrichtet. | Jetzt kann man bei jedem einzelen Kurs sehen, welcher Lehrer ihn unterrichtet. | ||
== n:m-Beziehungen == | == n:m-Beziehungen übertragen== | ||
n:m-Beziehungen werden in das relationale Datenmodell übersetzt, indem man eine '''Zwischentabelle''' einfügt: die Zwischentabelle enthält zwei Fremdschlüssel auf die beiden Tabellen der Beziehung. Meistens kann die ''Kombination'' der beiden Fremdschlüssel als Primärschlüssel der Zwischentabelle genutzt werden. | n:m-Beziehungen werden in das relationale Datenmodell übersetzt, indem man eine '''Zwischentabelle''' einfügt: die Zwischentabelle enthält zwei Fremdschlüssel auf die beiden Tabellen der Beziehung. Meistens kann die ''Kombination'' der beiden Fremdschlüssel als Primärschlüssel der Zwischentabelle genutzt werden. | ||
* Eine Tabelle ''belegt'' wird eingeführt. | * Eine Tabelle ''belegt'' wird eingeführt. | ||
Zeile 55: | Zeile 72: | ||
* die beiden Fremdschlüssel können '''zusammen''' als Primärschlüssel genutzt werden, denn jeder Schüler kann jeden Kurs nur einmal belegen. | * die beiden Fremdschlüssel können '''zusammen''' als Primärschlüssel genutzt werden, denn jeder Schüler kann jeden Kurs nur einmal belegen. | ||
''' | '''Man erhält also:''' | ||
* schueler(<u>id</u>, name, vorname, geburtsdatum, adresse, geschlecht) | * schueler(<u>id</u>, name, vorname, geburtsdatum, adresse, geschlecht) | ||
Zeile 61: | Zeile 78: | ||
* kurs(<u>id</u>, name, kuerzel, halbjahr, ↑lehrer_id) | * kurs(<u>id</u>, name, kuerzel, halbjahr, ↑lehrer_id) | ||
* lehrer(<u>id</u>, name, vorname, kuerzel) | * lehrer(<u>id</u>, name, vorname, kuerzel) | ||
==Endergebnis und Zusammenfassung== | |||
'''Endergebnis für das relationale Datenmodell:''' | |||
* schueler(<u>id</u>, name, vorname, geburtsdatum, adresse, geschlecht) | |||
* belegt(<u>↑schueler_id</u>, <u>↑kurs_id</u>, note) | |||
* kurs(<u>id</u>, name, kuerzel, halbjahr, ↑lehrer_id) | |||
* lehrer(<u>id</u>, name, vorname, kuerzel) | |||
'''Zusammenfassung:''' | |||
* Jede Entitätsmenge bekommt einen '''Primärschlüssel''' | |||
* '''1:n-Beziehungen''' werden durch einen '''Fremdschlüssel auf der n-Seite der Beziehung''' modelliert. | |||
* '''n:m-Beziehungen''' werden durch eine eigene Tabelle modelliert: | |||
** die Tabelle enthält '''zwei Fremdschlüssel''', für jede beteiligte Entitätsmenge einen. | |||
** die Tabelle kann weitere Attribute enthalten. | |||
=Praxis= | =Praxis= |
Aktuelle Version vom 16. Januar 2024, 15:01 Uhr
Mithilfe von Relationalen Datenmodellen kann man relationale Datenbanken planen:
Realität -> Anforderungsermittlung -> Entity-Relationship-Modell -> Relationales Datenmodell -> Datenbanksystem
Um ein relationales Datenmodell zu erstellen, muss erst ein Entity-Relationship-Modell vorliegen. Das Entity-Relationship-Modell kann mithilfe von technischen Schritten in ein relationales Datenmodell übersetzt werden.
Erklärvideos
- Relationales Datenmodell - Was ist das?
- aus einem Entity-Relationship-Modell ein relationales Datenmodell erstellen
- Mit MySQL-Workbench und XAMPP aus dem ER-Modell eine "echte" Datenbank erzeugen
Fachbegriffe
Primärschlüssel, Primärschlüssel kombiniert aus zwei Fremdschlüsseln, Fremdschlüssel, Attribut, Tabelle, 1:n-Beziehung, n:m-Beziehung
Das Zentralabitur verwendet folgende Fachbegriffe, die hier kurz übersetzt werden:
- Datenbankschema = das ganze relationale Datenmodell
- Relationenschema = eine Zeile im relationalen Datenmodell, z.B. kurs(id, name, kuerzel, halbjahr, ↑lehrer_id)
Hier wird das "Tabelle" genannt, weil es in der Datenbank eine Tabelle wird.
Erläuterung der Begriffe
- Primärschlüssel: Der Primärschlüssel (Primary Key; abgekürzt: PK) ist ein Attribut (oder eine Kombination aus 2 Attributen), das einen Datensatz (d.h. eine Zeile in einer Datenbank-Tabelle) eindeutig identifiziert.
- Primärschlüssel werden unterstrichen, z.B. id
- Fremdschlüssel: Der Fremdschlüssel (Foreign Key; abgekürzt: FK) stellt die Verbindung zwischen Tabellen her: Ein Fremdschlüssel verweist auf den Primärschlüssel einer anderen Tabelle.
- Fremdschlüssel werden durch einen Pfeil nach oben (↑) markiert, z.B.: ↑kunde_id
Vom ER-Modell zum relationalen Datenmodell
Der Weg vom ER-Modell zum relationalen Datenmodell wird beispielhaft am ER-Modell Kurssystem (s. rechts) dargestellt.
Primärschlüssel festlegen
Für die Entitätsmengen schueler, kurs und lehrer müssen Primärschlüssel festgelegt werden:
- Keine der drei Tabellen hat ein Attribut, das einen Datensatz eindeutig identifiziert.
- Deswegen erhält jede Entitätsmenge ein neues Attribut id als Primärschlüssel.
Zwischenergebnis:
- schueler(id, name, vorname, geburtsdatum, adresse, geschlecht)
- kurs(id, name, kuerzel, halbjahr)
- lehrer(id, name, vorname, kuerzel)
Man sieht, dass die Beziehungen zwischen den Entitätsmengen noch nicht in das relationale Datenmodell übersetzt wurden; dementsprechend fehlt auch das Attribut note.
1:n-Beziehungen übertragen
1:n-Beziehungen werden in das relationale Datenmodell übersetzt, indem auf der n-Seite der Beziehung ein Fremdschlüssel eingetragen wird, der auf den Primärschlüssel der anderen beteiligten Tabelle verweist.
- lehrer - kurs ist eine 1:n-Beziehung.
- kurs ist auf der n-Seite der Beziehung.
- in kurs wird als Fremdschlüssel ↑lehrer_id eingetragen.
Zwischenergebnis:
- schueler(id, name, vorname, geburtsdatum, adresse, geschlecht)
- kurs(id, name, kuerzel, halbjahr, ↑lehrer_id)
- lehrer(id, name, vorname, kuerzel)
Jetzt kann man bei jedem einzelen Kurs sehen, welcher Lehrer ihn unterrichtet.
n:m-Beziehungen übertragen
n:m-Beziehungen werden in das relationale Datenmodell übersetzt, indem man eine Zwischentabelle einfügt: die Zwischentabelle enthält zwei Fremdschlüssel auf die beiden Tabellen der Beziehung. Meistens kann die Kombination der beiden Fremdschlüssel als Primärschlüssel der Zwischentabelle genutzt werden.
- Eine Tabelle belegt wird eingeführt.
- sie enthält als Attribute die beiden Fremdschlüssel ↑schueler_id und ↑kurs_id - und zusätzlich das Attribut note.
- die beiden Fremdschlüssel können zusammen als Primärschlüssel genutzt werden, denn jeder Schüler kann jeden Kurs nur einmal belegen.
Man erhält also:
- schueler(id, name, vorname, geburtsdatum, adresse, geschlecht)
- belegt(↑schueler_id, ↑kurs_id, note)
- kurs(id, name, kuerzel, halbjahr, ↑lehrer_id)
- lehrer(id, name, vorname, kuerzel)
Endergebnis und Zusammenfassung
Endergebnis für das relationale Datenmodell:
- schueler(id, name, vorname, geburtsdatum, adresse, geschlecht)
- belegt(↑schueler_id, ↑kurs_id, note)
- kurs(id, name, kuerzel, halbjahr, ↑lehrer_id)
- lehrer(id, name, vorname, kuerzel)
Zusammenfassung:
- Jede Entitätsmenge bekommt einen Primärschlüssel
- 1:n-Beziehungen werden durch einen Fremdschlüssel auf der n-Seite der Beziehung modelliert.
- n:m-Beziehungen werden durch eine eigene Tabelle modelliert:
- die Tabelle enthält zwei Fremdschlüssel, für jede beteiligte Entitätsmenge einen.
- die Tabelle kann weitere Attribute enthalten.
Praxis
In der Praxis nimmt man zur Erstellung des relationalen Datenmodells ein Tool, z.B. MySQL-Workbench.
Vorteil: Man kann das fertige relationale Datenmodell sofort in die Datenbank exportieren.