Aufgabe 3 - Datenbankmodellierung und Normalisier… · Abitur NRW Informatik LK · Haupttermin 2023
Thema: Datenbankmodellierung und Normalisierung · Aus der Prüfung LK · Haupttermin (2023)
Aufgabenstellung
Aufgabenstellung
Ein Informatikprojektkurs plant, einige Bahnlinien in einer Datenbank zu modellieren. In einer ersten Version sollen unter anderem die Bahnhöfe sowie die Streckenabschnitte abgelegt werden.
Ein Streckenabschnitt ist eine direkte Verbindung von dem einen Bahnhof zu dem anderen Bahnhof ohne Zwischenhalt. Aus Sicherheitsgründen kann ein Streckenabschnitt nur in einer Richtung und somit nicht für die Gegenrichtung genutzt werden.
Eine Bahnlinie besteht aus Streckenabschnitten, die die Folge der Bahnhöfe auf dieser Bahnlinie beschreiben. Dabei wird für jeden zugehörigen Streckenabschnitt die Fahrzeit in Minuten angegeben.
Für die Datenverwaltung will der Projektkurs eine relationale Datenbank erstellen, die auf der folgenden Teilmodellierung beruht:
Die weiteren Aufgaben beziehen sich auf das Datenbankschema aus Abbildung 3, das nur einen Teil der gesamten Datenbank wiedergibt. Beispieldaten zu diesem Schema stehen im Anhang.
Anlage: Ausschnitt aus den Beispieldaten zum Datenbankschema
Bahnhof
Name · barrierefrei
Glücksdorf · 1
Oberdorf · 0
Medeburg · 1
Zweierwalde · 1
Hintertupfingen · 1
Bahnlinie
ID · Name
L1 · Bergexpress
L2 · Burglinie
L3 · Hintertupfingenlinie
L4 · Glücksdorfexpress
Streckenabschnitt
ID · vonBahnhofName · zuBahnhofname
1 · Glücksdorf · Oberdorf
2 · Oberdorf · Medeburg
3 · Medeburg · Hintertupfingen
4 · Medeburg · Zweierwalde
5 · Zweierwalde · Hintertupfingen
6 · Hintertupfingen · Glücksdorf
gehoertZu
StreckenabschnittID · BahnlinieID · Abschnittsnummer · Fahrzeit
1 · L1 · 1 · 30
2 · L1 · 2 · 20
3 · L1 · 3 · 90
1 · L2 · 1 · 40
2 · L2 · 2 · 50
4 · L2 · 3 · 30
5 · L3 · 1 · 50
6 · L4 · 1 · 90
Anhang: Dokumentationen der verwendeten Klassen
Die Klasse Bahnlinientest
Ein Objekt der Klasse wird genutzt, um die Datenbankverbindung und die Datenbankabfragen zu testen.
Bahnlinientest()
Ein Objekt vom Typ DatabaseConnector wird initialisiert und stellt die Datenbankverbindung her.
List<String> ermittleEtwas(String pBName, int pHops)
Diese Methode ist Bestandteil der Teilaufgabe d.
Darüber hinaus verfügt die Klasse über folgende private Methode:
List<String> ermittleNachbarbahnhoefe(String pBName)
Die Methode liefert eine Liste mit den Namen der Nachbarbahnhöfe für den im Parameter übergebenen Bahnhof pBName zurück.
Nachbarbahnhöfe sind die Bahnhöfe, zu denen ein Streckenabschnitt ohne Zwischenhalt von diesem Bahnhof pBName führt.
Falls der Bahnhofsname pBName nicht existiert, wird eine leere Liste zurückgeliefert.
Die Klasse DatabaseConnector
Ein Objekt der Klasse DatabaseConnector ermöglicht die Abfrage und Manipulation einer MySQL-Datenbank.
Beim Erzeugen des Objekts wird eine Datenbankverbindung aufgebaut, sodass anschließend SQL-Anweisungen an diese Datenbank gerichtet werden können.
DatabaseConnector(String pIP, String pPort, String pDatabase, String pUsername, String pPassword)
Ein Objekt vom Typ DatabaseConnector wird erstellt, und eine Verbindung zur Datenbank wird aufgebaut. Mit den Parametern pIP und pPort werden die IP-Adresse und die Port-Nummer übergeben, unter denen die Datenbank mit Namen pDatabase zu erreichen ist. Mit den Parametern pUsername und pPassword werden Benutzername und Passwort für die Datenbank übergeben.
void executeStatement(String pSQLStatement)
Der Auftrag schickt den im Parameter pSQLStatement enthaltenen SQL-Befehl an die Datenbank ab.
Handelt es sich bei pSQLStatement um einen SQL-Befehl, der eine Ergebnismenge liefert, so kann dieses Ergebnis anschließend mit der Methode getCurrentQueryResult abgerufen werden.
QueryResult getCurrentQueryResult()
Die Anfrage liefert das Ergebnis des letzten mit der Methode executeStatement an die Datenbank geschickten SQL-Befehls als Objekt vom Typ QueryResult zurück.
Wurde bisher kein SQL-Befehl abgeschickt oder ergab der letzte Aufruf von executeStatement keine Ergebnismenge (z. B. bei einem INSERT-Befehl oder einem Syntaxfehler), so wird null geliefert.
String getErrorMessage()
Die Anfrage liefert null oder eine Fehlermeldung, die sich jeweils auf die letzte zuvor ausgeführte Datenbankoperation bezieht.
void close()
Die Datenbankverbindung wird geschlossen.
Die Klasse QueryResult
Ein Objekt der Klasse QueryResult stellt die Ergebnistabelle einer Datenbankanfrage mit Hilfe der Klasse DatabaseConnector dar. Objekte dieser Klasse werden nur von der Klasse DatabaseConnector erstellt. Die Klasse verfügt über keinen öffentlichen Konstruktor.
String[][] getData()
Die Anfrage liefert die Einträge der Ergebnistabelle als zweidimensionales Feld vom Typ String. Der erste Index des Feldes stellt die Zeile und der zweite die Spalte dar (d. h. String[zeile][spalte]).
String[] getColumnNames()
Die Anfrage liefert die Bezeichner der Spalten der Ergebnistabelle als Feld vom Typ String zurück.
String[] getColumnTypes()
Die Anfrage liefert die Typenbezeichnung der Spalten der Ergebnistabelle als Feld vom Typ String zurück. Die Bezeichnungen entsprechen den Angaben in der MySQL-Datenbank.
int getRowCount()
Die Anfrage liefert die Anzahl der Zeilen der Ergebnistabelle als int.
int getColumnCount()
Die Anfrage liefert die Anzahl der Spalten der Ergebnistabelle als int.
a)
Erläutern Sie, auf welche Weise die Bahnlinie L1 samt ihren zugehörigen Streckenabschnitten in der Datenbank abgelegt ist (vgl. Beispieldaten).
[3 Punkte]
Beschreiben Sie die Teilmodellierung des Entity-Relationship-Modells, die in Abbildung 2 dargestellt ist.
[5 Punkte]
Erläutern Sie für jeden im Entity-Relationship-Modell dargestellten Beziehungstyp unter Beachtung der Kardinalitäten, auf welche Weise er im Datenbankschema realisiert wurde.
[5 Punkte]
e)
Ein Schüler meint, der Entitätstyp Bahnhof könne ohne nennenswerte Nachteile entfallen. Die Bahnhofsnamen stehen ohnehin im Entitätstyp Streckenabschnitt als vonBahnhofName und zuBahnhofName. Die Barrierefreiheit jedes Bahnhofs lasse sich zudem in den Entitätstyp Streckenabschnitt verlagern und dort als Attribute barrierefreiVonBahnhof und barrierefreiZuBahnhof ergänzen.
Beurteilen Sie diesen Vorschlag des Schülers.
[5 Punkte]

Lösung
Nach den offiziellen Korrekturhinweisen
a) Erläutern Sie, auf welche Weise die Bahnlinie L1 samt ihren zugehörigen Streckenabschnitten in der Datenbank abgelegt ist (vgl. Beispieldaten).
Lösung: Die Bahnlinie mit der ID L1 und ihrer Bezeichnung Bergexpress ist in der Relation Bahnlinie gespeichert. In der Relation gehoertZu befinden sich die drei Streckenabschnitte der Bahnlinie mit der ID L1 mit der jeweiligen Abschnittsnummer und der jeweiligen Fahrtzeit. Diese drei Streckenabschnitte mit der Angabe, von welchem Bahnhof sie jeweils zu einem anderen Bahnhof führen, befinden sich in der Relation Streckenabschnitt.
a) Beschreiben Sie die Teilmodellierung des Entity-Relationship-Modells, die in Abbildung 2 dargestellt ist.
Lösung: Die in Abbildung 2 gegebene Teilmodellierung besteht aus drei Entitätstypen und drei Beziehungstypen. Im Entitätstyp Bahnhof wird als Primärschlüssel das Attribut Name verwendet. Im Entitätstyp Bahnlinie wird als Primärschlüssel das Attribut ID verwendet. Im Entitätstyp Streckenabschnitt wird als Primärschlüssel das Attribut ID verwendet. Entitäten des Typs Bahnhof haben das weitere Attribut barrierefrei. Entitäten des Typs Bahnlinie haben das weitere Attribut Name. Der Beziehungstyp gehoertZu modelliert, welcher Streckenabschnitt zu welcher Bahnlinie gehört. Zusätzlich hat der Beziehungstyp die Attribute Abschnittsnummer und Fahrtzeit. 1:n-Beziehungstyp fuehrtVon: Ein Bahnhof kann für mehrere Streckenabschnitte der Ausgangsbahnhof sein. Ein Streckenabschnitt besitzt genau einen Ausgangsbahnhof. 1:n-Beziehungstyp fuehrtZu: Ein Bahnhof kann für mehrere Streckenabschnitte der Zielbahnhof sein. Ein Streckenabschnitt besitzt genau einen Zielbahnhof. n:m-Beziehungstyp gehoertZu: Ein Streckenabschnitt kann zu mehreren Bahnlinien gehören. Eine Bahnlinie kann aus mehreren Streckenabschnitten bestehen.
a) Erläutern Sie für jeden im Entity-Relationship-Modell dargestellten Beziehungstyp unter Beachtung der Kardinalitäten, auf welche Weise er im Datenbankschema realisiert wurde.
Lösung: Die 1:n-Beziehungstypen fuehrtVon und fuehrtZu wurden so umgesetzt, dass in der Relation Streckenabschnitt zusätzlich die Fremdschlüsselattribute vonBahnhofName und zuBahnhofName verwaltet werden, welche jeweils den Primärschlüssel aus der Relation Bahnhof abbilden. Der n:m-Beziehungstyp gehoertZu wurde mit dem Relationenschema gehoertZu umgesetzt. In dieser Relation werden die zwei Fremdschlüsselattribute StreckenabschnittID und BahnlinieID verwaltet, welche jeweils die Primärschlüssel einmal in der Relation Streckenabschnitt und einmal in der Relation Bahnlinie darstellen.
e) Ein Schüler meint, der Entitätstyp Bahnhof könne ohne nennenswerte Nachteile entfallen... Beurteilen Sie diesen Vorschlag des Schülers.
Lösung: Der Vorschlag des Schülers ist abzulehnen, weil eine Datenkonsistenz wie im bisherigen Modell nicht mehr sichergestellt werden kann. Im bisherigen Modell hängt das Nichtschlüsselattribut barrierefrei eindeutig vom Primärschlüssel Name im Entitätstyp Bahnhof ab. Es wurde somit für jeden Bahnhof eindeutig ein Wert für die Barrierefreiheit zugeordnet. Im von dem Schüler vorgeschlagenen Modell wäre es möglich, dass für den gleichen Bahnhof unterschiedliche Werte für die Barrierefreiheit eingetragen werden.
Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium
Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.
‹ Aufgabe 3 - Datenbankmodellierung · GK · Nachtermin 2023 · Aufgabe 3 - Datenbankmodellierung und Normalisier… · LK · Haupttermin · Weiterbildungskolleg 2023 ›
Mehr Aufgaben zu Datenbankmodellierung und Normalisierung
- Aufgabe 3 - Datenbankmodellierung und Normalisier… · GK · Haupttermin 2023
- Aufgabe 3 - Datenbankmodellierung und Normalisier… · GK · Haupttermin · Weiterbildungskolleg 2023
- Aufgabe 3 - Datenbankmodellierung · GK · Nachtermin 2023
- Aufgabe 3 - Datenbankmodellierung und Normalisier… · LK · Haupttermin · Weiterbildungskolleg 2023
- Aufgabe 3 - Datenbankmodellierung und Normalisier… · LK · Nachtermin 2023
- Aufgabe 3 - Datenbankmodellierung und Normalisier… · GK · Haupttermin 2022
- Aufgabe 3 - Datenbankmodellierung · GK · Nachtermin 2022
- Aufgabe 3 - Datenbankmodellierung und Normalisier… · LK · Haupttermin 2022
- Aufgabe 3 - Datenbankmodellierung · LK · Nachtermin 2022
- Aufgabe 3 - Datenbankmodellierung und Normalisier… · GK · Haupttermin 2021