Relationales Datenmodell: Unterschied zwischen den Versionen
| Zeile 27: | Zeile 27: | ||
* Deswegen erhält jede Entitätsmenge ein neues Attribut <u>id</u> als Primärschlüssel.  | * Deswegen erhält jede Entitätsmenge ein neues Attribut <u>id</u> als Primärschlüssel.  | ||
Zwischenergebnis:  | '''Zwischenergebnis:'''  | ||
* schueler('''<u>id</u>''', name, vorname, geburtsdatum, adresse, geschlecht)  | * schueler('''<u>id</u>''', name, vorname, geburtsdatum, adresse, geschlecht)  | ||
| Zeile 41: | Zeile 41: | ||
* in ''kurs'' wird als Fremdschlüssel '''↑lehrer_id''' eingetragen.  | * in ''kurs'' wird als Fremdschlüssel '''↑lehrer_id''' eingetragen.  | ||
Zwischenergebnis:  | '''Zwischenergebnis:'''  | ||
* schueler(<u>id</u>, name, vorname, geburtsdatum, adresse, geschlecht)  | * schueler(<u>id</u>, name, vorname, geburtsdatum, adresse, geschlecht)  | ||
| Zeile 52: | Zeile 52: | ||
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.  | ||
* sie enthält als Attribute die beiden Fremdschlüssel ''schueler_id'' und ''kurs_id'' - und zusätzlich das Attribut ''note''.  | * 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.  | * die beiden Fremdschlüssel können '''zusammen''' als Primärschlüssel genutzt werden, denn jeder Schüler kann jeden Kurs nur einmal belegen.  | ||
'''Endergebnis:'''  | |||
* 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)  | |||
=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.  | |||
Version vom 22. April 2013, 15:45 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.
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 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
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
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.
 
Endergebnis:
- 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)
 
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.
