Datenbank Praxis - Exam.pdf

Datenbank Praxis - Exam
Datenbank Praxis - Exam Aufgabe 1) In einer Datenbank für ein E-Commerce-System gibt es die folgenden Tabellen: Kunden (kundenID, name, email) Bestellungen (bestellungsID, kundenID, bestellDatum) Bestellpositionen (positionID, bestellungsID, artikelID, menge, preis) Artikel (artikelID, name, kategorie, lagerbestand) . Du sollst komplexe SQL-Abfragen erstellen, die Joins und Sub-Abfragen verwenden,...

© StudySmarter 2024, all rights reserved.

Datenbank Praxis - Exam

Aufgabe 1)

In einer Datenbank für ein E-Commerce-System gibt es die folgenden Tabellen:

  • Kunden (kundenID, name, email)
  • Bestellungen (bestellungsID, kundenID, bestellDatum)
  • Bestellpositionen (positionID, bestellungsID, artikelID, menge, preis)
  • Artikel (artikelID, name, kategorie, lagerbestand)
. Du sollst komplexe SQL-Abfragen erstellen, die Joins und Sub-Abfragen verwenden, um verschiedene Arten von Informationen aus diesen Tabellen zu extrahieren.

a)

Erstelle eine SQL-Abfrage, die den Namen und die Email-Adresse aller Kunden zusammen mit der Anzahl ihrer Bestellungen ausgibt. Verwendet inner Joins zwischen den Tabellen Kunden und Bestellungen.

Lösung:

Um den Namen und die E-Mail-Adresse aller Kunden zusammen mit der Anzahl ihrer Bestellungen zu erhalten, kannst Du eine SQL-Abfrage mit einem INNER JOIN zwischen den Tabellen Kunden und Bestellungen verwenden. Die Anzahl der Bestellungen wird durch die Verwendung der Aggregatfunktion COUNT ermittelt.

Hier ist die SQL-Abfrage:

 SELECT k.name, k.email, COUNT(b.bestellungsID) AS anzahl_bestellungen FROM Kunden k INNER JOIN Bestellungen b ON k.kundenID = b.kundenID GROUP BY k.name, k.email; 

In dieser Abfrage wird:

  • Die Tabelle Kunden mit dem Alias k und die Tabelle Bestellungen mit dem Alias b verwendet.
  • Die Verknüpfung zwischen den Tabellen erfolgt über die Spalte kundenID.
  • Die Anzahl der Bestellungen wird mit der Funktion COUNT berechnet.
  • Die GROUP BY-Klausel gruppiert die Ergebnisse nach Name und Email, sodass die Anzahl der Bestellungen für jeden Kunden korrekt gezählt wird.

b)

Schreibe eine SQL-Abfrage, die den Artikelname, Kategorie, und die Summe der verkauften Menge für jeden Artikel ausgibt. Verwende hierfür Joins zwischen den Tabellen Bestellpositionen und Artikel sowie eine Aggregatfunktion.

Lösung:

Um den Artikelname, die Kategorie und die Summe der verkauften Menge für jeden Artikel zu erhalten, kannst Du eine SQL-Abfrage mit einem JOIN zwischen den Tabellen Bestellpositionen und Artikel verwenden. Die Summe der verkauften Menge wird mittels der Aggregatfunktion SUM ermittelt.

Hier ist die SQL-Abfrage:

 SELECT a.name, a.kategorie, SUM(bp.menge) AS gesamt_menge FROM Artikel a INNER JOIN Bestellpositionen bp ON a.artikelID = bp.artikelID GROUP BY a.name, a.kategorie; 

In dieser Abfrage wird:

  • Die Tabelle Artikel mit dem Alias a und die Tabelle Bestellpositionen mit dem Alias bp verwendet.
  • Die Verknüpfung zwischen den Tabellen erfolgt über die Spalte artikelID.
  • Die Summe der verkauften Menge wird mit der Funktion SUM berechnet.
  • Die GROUP BY-Klausel gruppiert die Ergebnisse nach Artikelname und Kategorie, sodass die Summe der verkauften Mengen für jeden Artikel korrekt berechnet wird.

c)

Erzeuge eine SQL-Abfrage, die die Namen der Kunden und die Gesamtpreise ihrer Bestellungen enthält. Nutze dabei eine verschachtelte Sub-Abfrage, um den Gesamtpreis jeder Bestellung zu berechnen.

Lösung:

Um die Namen der Kunden und die Gesamtpreise ihrer Bestellungen zu erhalten, kannst Du eine verschachtelte Sub-Abfrage verwenden, um den Gesamtpreis jeder Bestellung zu berechnen. Anschließend verknüpfst Du diese Resultate mit den Kundendaten.

Hier ist die SQL-Abfrage:

 SELECT k.name, (SELECT SUM(bp.menge * bp.preis) FROM Bestellpositionen bp WHERE bp.bestellungsID = b.bestellungsID) AS gesamtpreis_bestellung FROM Kunden k INNER JOIN Bestellungen b ON k.kundenID = b.kundenID; 

In dieser Abfrage wird:

  • Die Tabelle Kunden mit dem Alias k und die Tabelle Bestellungen mit dem Alias b verwendet.
  • Die Verknüpfung zwischen den Tabellen erfolgt über die Spalte kundenID.
  • Die Sub-Abfrage wird verwendet, um den Gesamtpreis jeder Bestellung zu berechnen. Diese Sub-Abfrage summiert das Produkt von Menge und Preis aus der Tabelle Bestellpositionen, wobei nur die Einträge berücksichtigt werden, die zur spezifischen bestellungsID gehören.

d)

Formuliere eine SQL-Abfrage, die Artikel identifiziert, die nicht in Bestellungen enthalten sind. Verwende hierzu eine Sub-Abfrage, um alle Artikel zu finden, die keine Verknüpfung zu einer Bestellposition haben.

Lösung:

Um Artikel zu identifizieren, die nicht in Bestellungen enthalten sind, kannst Du eine Sub-Abfrage verwenden, um alle Artikel zu finden, die keine Verknüpfung zu einer Bestellposition haben. Dies kann mit der Verwendung von NOT IN oder LEFT JOIN und IS NULL erreicht werden. Hier zeige ich beide Ansätze.

Ansatz mit NOT IN:

 SELECT a.name, a.kategorie FROM Artikel a WHERE a.artikelID NOT IN (SELECT bp.artikelID FROM Bestellpositionen bp); 

In dieser Abfrage wird:

  • Die Tabelle Artikel mit dem Alias a verwendet.
  • Eine Sub-Abfrage genutzt, um alle artikelID aus der Tabelle Bestellpositionen zu ermitteln.
  • Die Hauptabfrage filtert alle Artikel, deren artikelID nicht in den Ergebnissen der Sub-Abfrage enthalten ist.

Ansatz mit LEFT JOIN und IS NULL:

 SELECT a.name, a.kategorie FROM Artikel a LEFT JOIN Bestellpositionen bp ON a.artikelID = bp.artikelID WHERE bp.artikelID IS NULL; 

In dieser Abfrage wird:

  • Die Tabelle Artikel mit dem Alias a und die Tabelle Bestellpositionen mit dem Alias bp verwendet.
  • Ein LEFT JOIN wird zwischen den beiden Tabellen über die Spalte artikelID durchgeführt.
  • Die WHERE-Klausel filtert alle Artikel, bei denen keine entsprechende artikelID in den Bestellpositionen gefunden wurde, indem sie auf IS NULL überprüft.

Aufgabe 2)

Erstellung und Verwaltung von Datenbankobjekten: Du arbeitest als Datenbankadministrator für ein Online-Shop-System. Das System benötigt verschiedene Datenbankobjekte wie Tabellen, Views, Indizes, Prozeduren und Trigger, um die Daten effizient zu speichern, zu verarbeiten und darauf zuzugreifen. Dabei sollst Du auch sicherstellen, dass nur autorisierte Benutzer Zugriff auf bestimmte Daten oder Aktionen haben. Entwickle zu diesem Kontext mehrere DDL- und DML-Anweisungen und zeige, wie Benutzerrechte verwaltet werden.

a)

Tabellen und Indizes:Erstelle eine Tabelle namens Produkte mit den folgenden Spalten:

  • ProduktID (Primärschlüssel, Ganzzahl, automatisch inkrementiert)
  • Name (Text, maximal 100 Zeichen)
  • Preis (Dezimal)
  • Lagerbestand (Ganzzahl)
Erstelle anschließend einen Index auf der Spalte Name, um die Suche nach Produkten zu beschleunigen.
\rCREATE TABLE Produkte(\r   ProduktID INT AUTO_INCREMENT PRIMARY KEY,\r   Name VARCHAR(100),\r   Preis DECIMAL(10, 2),\r   Lagerbestand INT\r);\r\rCREATE INDEX idx_name ON Produkte(Name);\r

Lösung:

Erstellung und Verwaltung von Datenbankobjekten: Du arbeitest als Datenbankadministrator für ein Online-Shop-System. Das System benötigt verschiedene Datenbankobjekte wie Tabellen, Views, Indizes, Prozeduren und Trigger, um die Daten effizient zu speichern, zu verarbeiten und darauf zuzugreifen. Dabei sollst Du auch sicherstellen, dass nur autorisierte Benutzer Zugriff auf bestimmte Daten oder Aktionen haben. Entwickle zu diesem Kontext mehrere DDL- und DML-Anweisungen und zeige, wie Benutzerrechte verwaltet werden.Tabellen und Indizes:Erstelle eine Tabelle namens Produkte mit den folgenden Spalten:

  • ProduktID (Primärschlüssel, Ganzzahl, automatisch inkrementiert)
  • Name (Text, maximal 100 Zeichen)
  • Preis (Dezimal)
  • Lagerbestand (Ganzzahl)
Erstelle anschließend einen Index auf der Spalte Name, um die Suche nach Produkten zu beschleunigen.
CREATE TABLE Produkte(   ProduktID INT AUTO_INCREMENT PRIMARY KEY,   Name VARCHAR(100),   Preis DECIMAL(10, 2),   Lagerbestand INT);CREATE INDEX idx_name ON Produkte(Name);

b)

Views and Prozeduren:Erstelle eine View namens ProduktDetails, die alle Produkte mit einem Lagerbestand von weniger als 10 Zeilen anzeigt. Implementiere anschließend eine gespeicherte Prozedur VerkaufeProdukt, die den Lagerbestand eines Produkts um eine bestimmte Menge reduziert.

\rCREATE VIEW ProduktDetails AS\rSELECT * FROM Produkte WHERE Lagerbestand < 10;\r\rDELIMITER //\rCREATE PROCEDURE VerkaufeProdukt(\r   IN p_ProduktID INT,\r   IN p_Menge INT\r)\rBEGIN\r   UPDATE Produkte\r   SET Lagerbestand = Lagerbestand - p_Menge\r   WHERE ProduktID = p_ProduktID;\rEND;//\rDELIMITER ;\r

Lösung:

Erstellung und Verwaltung von Datenbankobjekten: Du arbeitest als Datenbankadministrator für ein Online-Shop-System. Das System benötigt verschiedene Datenbankobjekte wie Tabellen, Views, Indizes, Prozeduren und Trigger, um die Daten effizient zu speichern, zu verarbeiten und darauf zuzugreifen. Dabei sollst Du auch sicherstellen, dass nur autorisierte Benutzer Zugriff auf bestimmte Daten oder Aktionen haben. Entwickle zu diesem Kontext mehrere DDL- und DML-Anweisungen und zeige, wie Benutzerrechte verwaltet werden.Views und Prozeduren:Erstelle eine View namens ProduktDetails, die alle Produkte mit einem Lagerbestand von weniger als 10 Zeilen anzeigt. Implementiere anschließend eine gespeicherte Prozedur VerkaufeProdukt, die den Lagerbestand eines Produkts um eine bestimmte Menge reduziert.

CREATE VIEW ProduktDetails ASSELECT * FROM Produkte WHERE Lagerbestand < 10;DELIMITER //CREATE PROCEDURE VerkaufeProdukt(   IN p_ProduktID INT,   IN p_Menge INT)BEGIN   UPDATE Produkte   SET Lagerbestand = Lagerbestand - p_Menge   WHERE ProduktID = p_ProduktID;END//DELIMITER ;

c)

Trigger und Zugriffsrechte:Implementiere einen Trigger namens CheckLagerbestand, der ausgeführt wird, wenn ein Produkt verkauft wird, um sicherzustellen, dass der Lagerbestand nicht negativ wird. Setze dann Zugriffsrechte so, dass nur Benutzer mit dem Namen Manager die Prozedur VerkaufeProdukt ausführen dürfen.

\rDELIMITER //\rCREATE TRIGGER CheckLagerbestand\rBEFORE UPDATE ON Produkte\rFOR EACH ROW\rBEGIN\r   IF NEW.Lagerbestand < 0 THEN\r      SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Lagerbestand darf nicht negativ sein';\r   END IF;\rEND;//\rDELIMITER ;\r\rGRANT EXECUTE ON PROCEDURE VerkaufeProdukt TO 'Manager';\rREVOKE EXECUTE ON PROCEDURE VerkaufeProdukt FROM PUBLIC;\r

Lösung:

Erstellung und Verwaltung von Datenbankobjekten: Du arbeitest als Datenbankadministrator für ein Online-Shop-System. Das System benötigt verschiedene Datenbankobjekte wie Tabellen, Views, Indizes, Prozeduren und Trigger, um die Daten effizient zu speichern, zu verarbeiten und darauf zuzugreifen. Dabei sollst Du auch sicherstellen, dass nur autorisierte Benutzer Zugriff auf bestimmte Daten oder Aktionen haben. Entwickle zu diesem Kontext mehrere DDL- und DML-Anweisungen und zeige, wie Benutzerrechte verwaltet werden.Trigger und Zugriffsrechte:Implementiere einen Trigger namens CheckLagerbestand, der ausgeführt wird, wenn ein Produkt verkauft wird, um sicherzustellen, dass der Lagerbestand nicht negativ wird. Setze dann Zugriffsrechte so, dass nur Benutzer mit dem Namen Manager die Prozedur VerkaufeProdukt ausführen dürfen.

\rDELIMITER //CREATE TRIGGER CheckLagerbestandBEFORE UPDATE ON ProdukteFOR EACH ROWBEGIN   IF NEW.Lagerbestand < 0 THEN      SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Lagerbestand darf nicht negativ sein';   END IF;END//DELIMITER ;GRANT EXECUTE ON PROCEDURE VerkaufeProdukt TO 'Manager';REVOKE EXECUTE ON PROCEDURE VerkaufeProdukt FROM PUBLIC;

Aufgabe 3)

Gegeben sei folgendes ER-Diagramm einer Universität, das die Beziehung zwischen Professoren, Studenten und Kursen beschreibt. Ein Professor kann mehrere Kurse unterrichten, und ein Kurs kann von mehreren Professoren unterrichtet werden (N:M Beziehung). Studenten können an mehreren Kursen teilnehmen und ein Kurs hat viele Studenten (N:M Beziehung). Die Entitäten Professor, Student und Kurs haben jeweils die Attribute Name, Matrikelnummer und Kursnummer als Primärschlüssel. Das ER-Diagramm sieht wie folgt aus:

  • Entität 'Professor' mit Attribut 'Name' (Primärschlüssel)
  • Entität 'Student' mit Attribut 'Matrikelnummer' (Primärschlüssel)
  • Entität 'Kurs' mit Attribut 'Kursnummer' (Primärschlüssel)
  • Beziehung 'Unterrichtet' zwischen 'Professor' und 'Kurs' (N:M)
  • Beziehung 'Teilnimmt' zwischen 'Student' und 'Kurs' (N:M)

a)

Erstelle ein relationales Modell basierend auf dem gegebenen ER-Diagramm. Definiere die Tabellenstrukturen, indem Du alle Primärschlüssel, Fremdschlüssel und Attribute angibst. Nutze folgende Darstellungsform:

 'Tabelle (Attribut1, Attribut2, ...)' 

Lösung:

Um das gegebene ER-Diagramm der Universität in ein relationales Modell zu überführen, müssen wir die Tabellenstrukturen definieren, die alle Primärschlüssel, Fremdschlüssel und Attribute beinhalten. Folgende Tabellen sind notwendig:

  • Die Tabelle 'Professor' enthält das Attribut 'Name' als Primärschlüssel.
  • Die Tabelle 'Student' enthält das Attribut 'Matrikelnummer' als Primärschlüssel.
  • Die Tabelle 'Kurs' enthält das Attribut 'Kursnummer' als Primärschlüssel.
  • Die Beziehung 'Unterrichtet' zwischen 'Professor' und 'Kurs' benötigt eine separate Tabelle, da es eine N:M-Beziehung ist.
  • Die Beziehung 'Teilnimmt' zwischen 'Student' und 'Kurs' benötigt ebenfalls eine separate Tabelle, da es eine N:M-Beziehung ist.
The relational model can be represented as follows:
 Professor (Name) 
 Student (Matrikelnummer) 
 Kurs (Kursnummer) 
 Unterrichtet (Name, Kursnummer) 
 Teilnimmt (Matrikelnummer, Kursnummer) 

Hierbei sind:

  • In der Tabelle 'Unterrichtet' sind die Attribute 'Name' und 'Kursnummer' Fremdschlüssel, die auf 'Professor (Name)' und 'Kurs (Kursnummer)' verweisen. Zusammen bilden sie den zusammengesetzten Primärschlüssel der Tabelle.
  • In der Tabelle 'Teilnimmt' sind die Attribute 'Matrikelnummer' und 'Kursnummer' Fremdschlüssel, die auf 'Student (Matrikelnummer)' und 'Kurs (Kursnummer)' verweisen. Auch hier bilden sie zusammen den zusammengesetzten Primärschlüssel der Tabelle.

b)

Angenommen, ein neuer Kurs wird eingeführt und dieser Kurs wird von zwei neuen Professoren unterrichtet. Zudem melden sich fünf Studenten für diesen Kurs an. Erstelle zu diesem Szenario eine SQL-Anweisung, die die entsprechenden Datensätze in die relationalen Tabellen einfügt. Gehe davon aus, dass alle neuen Einträge gültige Werte und passende Primär- und Fremdschlüssel besitzen. Nutze folgende Darstellungsform für die SQL-Befehle:

 'INSERT INTO ... VALUES ...;' 

Lösung:

Um die angegebenen Daten in die relationalen Tabellen einzufügen, nutzen wir SQL INSERT-Anweisungen. Dabei gehen wir davon aus, dass die notwendigen Primär- und Fremdschlüssel korrekt gesetzt sind.

Hier sind die SQL-Befehle für das beschriebene Szenario:

  • Einfügen der neuen Professoren.
 INSERT INTO Professor (Name) VALUES ('Prof. Dr. Müller'); 
 INSERT INTO Professor (Name) VALUES ('Prof. Dr. Schmidt'); 
  • Einfügen des neuen Kurses.
 INSERT INTO Kurs (Kursnummer) VALUES ('KURS1001'); 
  • Verknüpfung der Professoren mit dem neuen Kurs.
 INSERT INTO Unterrichtet (Name, Kursnummer) VALUES ('Prof. Dr. Müller', 'KURS1001'); 
 INSERT INTO Unterrichtet (Name, Kursnummer) VALUES ('Prof. Dr. Schmidt', 'KURS1001'); 
  • Einfügen der fünf Studenten.
 INSERT INTO Student (Matrikelnummer) VALUES ('S1234'); 
 INSERT INTO Student (Matrikelnummer) VALUES ('S1235'); 
 INSERT INTO Student (Matrikelnummer) VALUES ('S1236'); 
 INSERT INTO Student (Matrikelnummer) VALUES ('S1237'); 
 INSERT INTO Student (Matrikelnummer) VALUES ('S1238'); 
  • Verknüpfung der fünf Studenten mit dem neuen Kurs.
 INSERT INTO Teilnimmt (Matrikelnummer, Kursnummer) VALUES ('S1234', 'KURS1001'); 
 INSERT INTO Teilnimmt (Matrikelnummer, Kursnummer) VALUES ('S1235', 'KURS1001'); 
 INSERT INTO Teilnimmt (Matrikelnummer, Kursnummer) VALUES ('S1236', 'KURS1001'); 
 INSERT INTO Teilnimmt (Matrikelnummer, Kursnummer) VALUES ('S1237', 'KURS1001'); 
 INSERT INTO Teilnimmt (Matrikelnummer, Kursnummer) VALUES ('S1238', 'KURS1001'); 

Aufgabe 4)

Für eine Universitätsdatenbank müssen wir eine Struktur entwerfen, um Informationen über Studenten (Student), Kurse (Kurs) und Einschreibungen (Einschreibung) zu verwalten.

  • Student: Enthält Informationen über die Studenten, einschließlich Matrikelnummer, Name und Geburtsdatum.
  • Kurs: Enthält Informationen über die Kurse, einschließlich Kursnummer, Kursname und Dozent.
  • Einschreibung: Verknüpft Studenten und Kurse und speichert das Einschreibungsdatum.

Annahmen:

  • Eine Matrikelnummer identifiziert einen Studenten eindeutig.
  • Eine Kursnummer identifiziert einen Kurs eindeutig.
  • Ein Student kann sich in mehrere Kurse einschreiben, und ein Kurs kann mehrere Studenten haben.

a)

(a) Entwerfe ein relationales Schema für die Universitätsdatenbank einschließlich aller relevanten Tabellen und ihrer Attribute. Bestimme und kennzeichne die Primärschlüssel, Fremdschlüssel und weitere Constraints (wie \texttt{NOT NULL}, \texttt{UNIQUE} und \texttt{DEFAULT}).

'CREATE TABLE Student ( Matrikelnummer INT PRIMARY KEY, Name VARCHAR(50) NOT NULL, Geburtsdatum DATE NOT NULL);CREATE TABLE Kurs ( Kursnummer INT PRIMARY KEY, Kursname VARCHAR(50) NOT NULL, Dozent VARCHAR(50) NOT NULL);CREATE TABLE Einschreibung ( Matrikelnummer INT, Kursnummer INT, Einschreibungsdatum DATE DEFAULT CURRENT_DATE, PRIMARY KEY (Matrikelnummer, Kursnummer), FOREIGN KEY (Matrikelnummer) REFERENCES Student(Matrikelnummer), FOREIGN KEY (Kursnummer) REFERENCES Kurs(Kursnummer));'

Lösung:

Für die Gestaltung des relationalen Schemas der Universitätsdatenbank können wir folgende Tabellen und Attribute verwenden:

  • Student: Enthält Informationen über die Studenten, einschließlich Matrikelnummer, Name und Geburtsdatum.
  • Kurs: Enthält Informationen über die Kurse, einschließlich Kursnummer, Kursname und Dozent.
  • Einschreibung: Verknüpft Studenten und Kurse und speichert das Einschreibungsdatum.

Hier ist das entwerfene relationale Schema:

'CREATE TABLE Student ( Matrikelnummer INT PRIMARY KEY, Name VARCHAR(50) NOT NULL, Geburtsdatum DATE NOT NULL);CREATE TABLE Kurs ( Kursnummer INT PRIMARY KEY, Kursname VARCHAR(50) NOT NULL, Dozent VARCHAR(50) NOT NULL);CREATE TABLE Einschreibung ( Matrikelnummer INT, Kursnummer INT, Einschreibungsdatum DATE DEFAULT CURRENT_DATE, PRIMARY KEY (Matrikelnummer, Kursnummer), FOREIGN KEY (Matrikelnummer) REFERENCES Student(Matrikelnummer), FOREIGN KEY (Kursnummer) REFERENCES Kurs(Kursnummer));'

Hier sind die Details zu den Primärschlüsseln, Fremdschlüsseln und weiteren Constraints:

  • Student:
    • Matrikelnummer ist der Primärschlüssel und identifiziert einen Studenten eindeutig.
    • Name und Geburtsdatum sind Pflichtfelder (NOT NULL).
  • Kurs:
    • Kursnummer ist der Primärschlüssel und identifiziert einen Kurs eindeutig.
    • Kursname und Dozent sind Pflichtfelder (NOT NULL).
  • Einschreibung:
    • Matrikelnummer und Kursnummer zusammen bilden den zusammengesetzten Primärschlüssel.
    • Matrikelnummer ist ein Fremdschlüssel, der auf Student(Matrikelnummer) verweist.
    • Kursnummer ist ein Fremdschlüssel, der auf Kurs(Kursnummer) verweist.
    • Einschreibungsdatum hat einen Standardwert, der das aktuelle Datum (DEFAULT CURRENT_DATE) ist.

b)

(b) Prüfe, ob das von Dir entworfene Schema in der dritten Normalform (3NF) ist. Begründe Deine Antwort.

Lösung:

Die dritte Normalform (3NF) besagt, dass eine Relation in der zweiten Normalform (2NF) sein muss und zusätzlich keinerlei transitive Abhängigkeiten zwischen Nicht-Schlüsselattributen bestehen dürfen. Damit eine Relation in der zweiten Normalform (2NF) ist, muss sie zunächst in der ersten Normalform (1NF) sein, d.h., alle Attribute müssen atomar sein, und sie darf keine Einfüge-, Lösch- oder Änderungsanomalien aufweisen.

Gehen wir unser entworfenes Schema durch, um zu prüfen, ob es die Anforderungen der dritten Normalform erfüllt:

  • Student:
    • Entspricht der 1NF, da alle Attribute atomar sind.
    • Entspricht der 2NF, da es nur einen Kandidatenschlüssel (Matrikelnummer) gibt und keine partiellen Abhängigkeiten vorliegen.
    • Entspricht der 3NF, da alle Nicht-Schlüsselattribute (Name, Geburtsdatum) direkt vom Primärschlüssel Matrikelnummer abhängen und es keine transitiven Abhängigkeiten gibt.
  • Kurs:
    • Entspricht der 1NF, da alle Attribute atomar sind.
    • Entspricht der 2NF, da es nur einen Kandidatenschlüssel (Kursnummer) gibt und keine partiellen Abhängigkeiten vorliegen.
    • Entspricht der 3NF, da alle Nicht-Schlüsselattribute (Kursname, Dozent) direkt vom Primärschlüssel Kursnummer abhängen und es keine transitiven Abhängigkeiten gibt.
  • Einschreibung:
    • Entspricht der 1NF, da alle Attribute atomar sind.
    • Entspricht der 2NF, da der zusammengesetzte Primärschlüssel (Matrikelnummer, Kursnummer) existiert und sämtliche anderen Attribute vom gesamten Primärschlüssel abhängen.
    • Entspricht der 3NF, da das einzige Nicht-Schlüsselattribut (Einschreibungsdatum) direkt von den Primärschlüsseln (Matrikelnummer, Kursnummer) abhängt und es keine transitiven Abhängigkeiten gibt.

Daher ist das entworfene Schema in der dritten Normalform (3NF).

c)

(c) Betrachte das Attribut 'Einschreibungsdatum' in der Tabelle Einschreibung. Welche Rolle spielt der \texttt{DEFAULT}-Constraint in Bezug auf dieses Attribut und wie könnte dies in einem praktischen Anwendungsfall nützlich sein? Erläutere Dein Beispiel in einem Szenario.

Lösung:

Der DEFAULT-Constraint in der Datenbank wird verwendet, um einen Standardwert für ein Attribut festzulegen, wenn kein Wert angegeben wird. In unserem Fall wurde für das Attribut Einschreibungsdatum in der Tabelle Einschreibung der Standardwert CURRENT_DATE gesetzt. Dies bedeutet, dass wenn ein neuer Datensatz in die Tabelle Einschreibung eingefügt wird und kein Wert für Einschreibungsdatum angegeben wird, das heutige Datum standardmäßig als Wert verwendet wird.

Praktisches Beispiel zur Veranschaulichung:

Angenommen, ein Student, Max Mustermann, meldet sich am 12. Oktober 2023 für den Kurs „Datenbanken“ an. Der Eintrag in die Tabelle Einschreibung erfolgt durch die Verwaltungssoftware, die folgenden SQL-Befehl ausführt:

INSERT INTO Einschreibung (Matrikelnummer, Kursnummer) VALUES (12345, 101);

Dank des DEFAULT-Constraints wird das Einschreibungsdatum automatisch auf das heutige Datum gesetzt, also den 12. Oktober 2023, ohne dass dieses spezifisch angegeben werden muss.

Der Vorteil dieses Ansatzes ist:

  • Reduzierter manueller Aufwand: Administratoren und Softwareentwickler müssen das Datum nicht extra eingeben.
  • Konsistenz: Jeder Eintrag ohne explizites Datum erhält automatisch das aktuelle Datum, wodurch die Datenkonsistenz gewährleistet wird.
  • Fehlerminimierung: Es reduziert das Risiko menschlicher Fehler, da das aktuelle Datum standardmäßig gesetzt wird.

Zusammenfassung

Der DEFAULT-Constraint für das Attribut Einschreibungsdatum stellt sicher, dass Eingaben, die ohne ein explizit angegebenes Einschreibungsdatum erfolgen, dennoch mit dem aktuellen Datum versehen werden. Dies ist besonders nützlich in Szenarien wie automatischen Einschreibungsprozessen, bei denen eine sofortige und korrekte Datenspeicherung entscheidend ist.

Sign Up

Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

Kostenloses Konto erstellen

Du hast bereits ein Konto? Anmelden