Aufgabe 3 - Datenbankmodellierung · Abitur NRW Informatik GK · Nachtermin 2023

Thema: Datenbankmodellierung und Normalisierung · Aus der Prüfung GK · Nachtermin (2023)

Aufgabenstellung

Aufgabenstellung: App zur Verwaltung von E-Auto-Ladesäulen

Fahrzeuge mit Verbrennungsmotor setzen CO2\text{CO}_2 frei, das wesentlich zum Klimawandel beiträgt. Aus diesem Grund strebt Deutschland an, den Verkehr auf Fahrzeuge mit Elektroantrieb (E-Autos) umzustellen. Hierfür entstehen bundesweit an zahlreichen Standorten Ladesäulen, an denen E-Autos aufgeladen werden können.

Die Ladesäulen werden von unterschiedlichen Betreibergesellschaften betrieben. Wer unterwegs sein E-Auto laden möchte, muss sich dafür jeweils bei der Betreibergesellschaft der betreffenden Ladesäule registrieren.

Eine Firma stellt eine App bereit, mit der man E-Autos an Ladesäulen verschiedener Betreibergesellschaften laden kann. Dazu hinterlegt die Fahrerin oder der Fahrer eine Kreditkarte in der App und scannt vor dem Ladevorgang den QR-Code an der Ladesäule. Anschließend leitet die Firma die Bezahlung des Ladevorgangs an die zuständige Betreibergesellschaft weiter.

Die Daten der Firma liegen in einer relationalen Datenbank. Abbildung 1 zeigt eine Teilmodellierung.

Hinweis: Das Attribut Menge gibt die bei dem Ladevorgang übertragene Energiemenge in kWh an.

Das in Abbildung 2 angegebene Datenbankschema setzt die Teilmodellierung um und liegt den folgenden Aufgaben zugrunde. Beispieldaten zu diesem Schema finden sich im Anhang.

Anlage: Ausschnitt aus den Beispieldaten zum Datenbankschema aus Abbildung 2

Kunde ID · Name · Emailadresse · Kreditkartennummer

1 · Albert Anger · a@anger.de · 1234-5678-9000-4321

2 · Birte Bolweg · b@bolweg.de · 1212-3434-5656-7878

3 · Christa Ciunta · c@ciunta.de · 1111-2222-3333-4444

Betreiber Name · Adresse · Bank · Kontonummer

E-Werke Sauerland · Industrieweg 9, 59755 Arnsberg · Voltbank · 987654321

Pottpower · Werkstraße 3, 45219 Essen · Amperekasse · 232323232

Rheinstrom · An der Fabrik 7, 40597 Düsseldorf · Wattsparkasse · 123456789

Westfalenkraft · Gewerbegasse 8, 48143 Münster · Amperekasse · 100000001

Ladesaeule ID · BetreiberName · Standort · Steckertyp · maximaleLadeleistung

1 · Rheinstrom · Sonnenhang · Typ 2 · 22

2 · Pottpower · Sonnenhang · CCS · 150

3 · Westfalenkraft · Stausee · CCS · 300

4 · Pottpower · Windwinkel · CHAdeMO · 50

5 · Rheinstrom · Windwinkel · Typ 1 · 7

6 · Pottpower · Windwinkel · CCS · 150

7 · Rheinstrom · Windwinkel · CCS · 150

8 · Westfalenkraft · Grüner Strom · Typ 2 · 11

9 · Westfalenkraft · Grüner Strom · Typ 2 · 11

hatGeladen KundeID · LadesaeuleID · Zeitstempel · Menge

1 · 3 · 2023-03-21-14-27 · 35

1 · 2 · 2023-03-28-07-02 · 21

3 · 8 · 2023-03-30-22-54 · 47

1 · 6 · 2023-04-02-18-43 · 29

3 · 1 · 2023-04-06-09-00 · 38

Anhang: Dokumentationen der verwendeten Klassen

Die Klasse LadeApp

Ein Objekt der Klasse LadeApp stellt der Benutzerin bzw. dem Benutzer auf einem mobilen Endgerät die Funktionen des Ladesystems zur Verfügung.

LadeApp()

Ein Objekt der Klasse LadeApp wird initialisiert.

String liefereEtwas()

Diese Anfrage wird in Aufgabenteil e) analysiert.

Die Klasse DatabaseConnector

Ein Objekt der Klasse DatabaseConnector ermöglicht die Abfrage und Manipulation einer relationalen Datenbank. Beim Erzeugen des Objekts wird eine Datenbankverbindung aufgebaut, sodass anschließend SQL-Anweisungen an diese Datenbank gerichtet werden können.

DatabaseConnector(String pIP, int 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 mithilfe 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 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.

Teilaufgabe a)

Beschreiben Sie die beiden Entitätstypen Kunde und Ladesaeule anhand des Entity-Relationship-Diagramms in Abbildung 1.

Erläutern Sie die im Entity-Relationship-Diagramm enthaltenen Beziehungstypen hatGeladen und betreibt einschließlich ihrer Kardinalitäten im Sachzusammenhang.

Erläutern Sie, auf welche Weise die Beziehungstypen hatGeladen und betreibt des Entity-Relationship-Diagramms im Datenbankschema abgebildet wurden. [3 + 4 + 4 Punkte]

a.1)

a.2)

a.3)

Teilaufgabe d)

Das Unternehmen plant, die App auszubauen. Kundinnen und Kunden sollen damit Reiserouten inklusive Ladestopps planen und sich unterwegs bei Bedarf zu einem Standort mit verfügbaren Ladesäulen leiten lassen können. Dafür soll die Datenbank um folgende Aspekte ergänzt werden:

(i) Für jede Ladesäule soll festgehalten werden können, ob sie gerade belegt ist.

(ii) Kundinnen und Kunden sollen Ladesäulen für bestimmte Zeiträume reservieren können, wozu sie einen Zeitpunkt und die vorgesehene Ladedauer angeben müssen.

Modellieren Sie das Entity-Relationship-Diagramm aus Abbildung 1 so weiter, dass der neue Datenbankentwurf beide Aspekte abdeckt.

Erläutern Sie, wie Ihr Modell die Anforderungen realisiert, und begründen Sie für gegebenenfalls nötige neue Beziehungstypen die gewählten Kardinalitäten. [4 + 5 Punkte]

Hinweis: Entitäts- und Beziehungstypen sowie Attribute ohne Bedeutung für die Erweiterung brauchen nicht gezeichnet zu werden.

d.1)

d.2)

Aufgabenstellung: Aufgabe 3 - Datenbankmodellierung · Abitur NRW Informatik GK · Nachtermin 2023

Lösung

Nach den offiziellen Korrekturhinweisen

a) Beschreiben Sie die beiden Entitätstypen Kunde und Ladesaeule anhand des Entity-Relationship-Diagramms in Abbildung 1.

Lösung: Der Entitätstyp Kunde hat das Attribut ID als Primärschlüssel und zudem die Attribute Name, Emailadresse und Kreditkartennummer. Der Entitätstyp Ladesaeule hat das Primärschlüsselattribut ID und außerdem die Attribute Standort, Steckertyp und maximaleLadeleistung.

a) Erläutern Sie die im Entity-Relationship-Diagramm enthaltenen Beziehungstypen hatGeladen und betreibt einschließlich ihrer Kardinalitäten im Sachzusammenhang.

Lösung: Der Beziehungstyp hatGeladen modelliert, welche Kundin oder welcher Kunde an welcher Ladesäule geladen hat. Dieser Beziehungstyp hat ein Primärschlüsselattribut Zeitstempel und ein weiteres Attribut Menge. Dieser Beziehungstyp ist ein n:m-Beziehungstyp, da eine Kundin bzw. ein Kunde an mehreren Ladesäulen laden kann und umgekehrt an jeder Ladesäule mehrere Kundinnen bzw. Kunden nacheinander laden können. Der Beziehungstyp betreibt modelliert, von welcher Betreibergesellschaft eine Ladesäule betrieben wird. Dieser Beziehungstyp ist vom Typ 1:n, da jede Betreibergesellschaft mehrere Ladesäulen betreiben kann, aber jede Ladesäule von genau einer Betreibergesellschaft betrieben wird.

a) Erläutern Sie, auf welche Weise die Beziehungstypen hatGeladen und betreibt des Entity-Relationship-Diagramms im Datenbankschema abgebildet wurden.

Lösung: Der Beziehungstyp hatGeladen wurde mit dem Relationenschema hatGeladen umgesetzt. Dieses hat einen kombinierten Primärschlüssel, der sich aus den beiden Fremdschlüsselattributen KundeID und LadesaeuleID sowie zusätzlich dem Attribut Zeitstempel zusammensetzt. Die Fremdschlüsselattribute beziehen sich jeweils auf die Primärschlüssel der Relation Kunde und der Relation Ladesaeule. Für den Beziehungstyp betreibt wurde in dem Relationenschema Ladesaeule das Fremdschlüsselattribut BetreiberName aufgenommen. Dieses bezieht sich auf den Primärschlüssel in der Relation Betreiber.

d) Modellieren Sie das Entity-Relationship-Diagramm aus Abbildung 1 so weiter, dass der neue Datenbankentwurf beide Aspekte abdeckt.

Lösung: Der Entitätstyp Ladesaeule wird um das Attribut belegt erweitert. Zudem wird zwischen Kunde und Ladesaeule ein n:m-Beziehungstyp reserviert mit den Attributen Zeitpunkt (unterstrichen) und Ladedauer modelliert.

d) Erläutern Sie, wie Ihr Modell die Anforderungen realisiert, und begründen Sie für gegebenenfalls nötige neue Beziehungstypen die gewählten Kardinalitäten.

Lösung: Der Entitätstyp Ladesaeule wird um das Attribut belegt erweitert. Darin kann mittels eines Wahrheitswertes gespeichert werden, ob die Ladesäule gerade belegt ist oder nicht. Zwischen den Entitätstypen Kunde und Ladesaeule wird durch den Beziehungstyp reserviert mit den Attributen Zeitpunkt und Ladedauer eine weitere Beziehung modelliert. Diese ist vom Typ n:m, da jede Kundin und jeder Kunde Reservierungen für beliebig viele Ladesäulen vornehmen kann und jede Ladesäule von verschiedenen Kundinnen bzw. Kunden reserviert werden kann. Indem das Attribut Zeitpunkt auch ein Primärschlüsselattribut ist, wird gewährleistet, dass eine bestimmte Kundin oder ein bestimmter Kunde eine bestimmte Ladesäule auch mehrfach reservieren kann, allerdings zu unterschiedlichen Zeitpunkten.

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 und Normalisier… · GK · Haupttermin · Weiterbildungskolleg 2023 · Aufgabe 3 - Datenbankmodellierung und Normalisier… · LK · Haupttermin 2023 ›

Mehr Aufgaben zu Datenbankmodellierung und Normalisierung