Datenverwaltung

Die vorliegenden Materialien wurden von Daniel Hoherz und André Tempel erstellt. Sollten andere Editoren die Materialien erstellt haben, werden diese explizit genannt.

Du kennst sicherlich soziale Netzwerk wie Instagram oder TikTok und dir ist sicherlich auch klar, dass diese die ganzen Nutzerdaten irgendwie speichern müssen. Doch wie machen die das?
Eine der gängisten Varianten in der Informatik große Datenmengen zu speichern und zu verwalten, sind Datenbanken.
Du wirst im Folgenden Datenbanken kennenlernen und sehen wie diese aufgebaut sind. Darüber hinaus wirst du lernen wie du Informationen aus den Datenbanken gewinnen kannst.
Schaue dir unten die zu erwerbenden Kompetenzen an, sowie die Checklisten, um eine Idee der Einheit zu erhalten und lade dir dann hier die Checkliste für die Einheit herunter, um deinen Fortschritt zu überprüfen.

Inhalt Mindeststandard Regelstandard Expertenstandard
Datenbanken
& ER-Modell
Ich kann die Bestandteile einer relationalen Datenbank und eines ER-Modells beschreiben und die Datenbank als relationales Schema angeben. Ich kann ein ER-Modell ins relationale Datenbankschema unter Berücksichtung der Kardinalitäten überführen sowie eine ER-Modell aus dem relationalen Schmema erstellen und Erweiterungen ergänzen. Ich kann ER-Modelle und relationale Schemata aus einem Sachkontext modellieren.
Anomalien Ich kann Redundanzen in Datenbanken benennen und die drei Formen der Anomalien benennen. Ich kann in einer Datenbank die drei Formen der Anomalien ermitteln, erklären und darstellen zu welchen Inkonsistenzen diese führen. Ich kann in einer Datenbank die drei Formen der Anomalien bestimmen und die Datenbank anpassen, um die Anomalien zu beseitigen.
SQL Ich kann einfache SQL-Abfragen formulieren, um Daten aus einer Tabelle auszuwählen (Projektion) und sie nach bestimmten Bedingungen (Selektion) mithilfe von Vergleichsoperatoren filtern. Ich kann logische Operatoren nutzen sowie meine Abfragen durch die Anwendung von Alias (AS), Sortierung (ORDER BY) und Entfernung von Duplikaten (DISTINCT) effektiv verändern, um komplexe Bedingungen und sinnvolle Ausgabe zu erzeugen. Ich kann Ergebnisse meiner Abfragen durch das Nutzen von Aggregatfunktionen erstellen, die einen Informationsgewinn darstellen und präsentieren sowie SQL-Abfragen kritisch analysieren und optimieren.

Stell dir vor du hast gerade auf deiner Lieblings-Social-Media-Plattform dein Profil bearbeitet, ein neues Bild hochgeladen, einen Post kommentiert oder eine neue Freundschaftsanfrage angenommen. Doch wie werden diese Informationen gespeichert?

  1. Woher „weiß“ die Plattform eigentlich jederzeit, wer du bist und was du gerade gemacht hast?
  2. Wie kann es sein, dass dein Post oder Kommentar direkt bei deinen freunden im Feed erscheint?
  3. Was denkst du, wie deine Profilinformationen, Posts, Freundeslisten und Kommentare überhaupot gespeichert werden?
  4. Wie werden mehrere Millionen Nutzerprofile, Posts und Freundschaften so abgesüeichert, dass man sie jederzeit wiederfinden oder verändern kann?
  5. Warum werden dir bei einer Suchanfrage (zum Beispiel nach einem Freund) sofort passende Vorschläge angezeigt?
  6. Was passiert im „Hintergrund“, wenn du eine Freundschaftsanfrage verschickst? Muss dafür irgendwo etwas miteinander verknüpft werden?
  7. Wie könnten doppelte Profile oder fehlende Verknüpfungen (zum Beispiel: ein Post ohne Autor) durch „gutes Speichern“ verhindert werden?

Was du am Ende können wirst:

  • Ich kann beschreiben, dass eine relationale Datenbank aus mehreren Tabellen besteht.
  • Ich kann beschreiben, dass relationale Datenbanken als ER-Modelle dargestellt werden.
  • Ich kann eine relationale Datenbank sowie ein ER-Modell als relationales Schema darstellen.
  • Ich kann den Aufbau einer relationalen Datenbank mit den Begriffen Tabellename, Attribut, Attributwert, Datensatz, Primär- und Fremdschlüssel beschreiben.
  • Ich kann beschreiben, was ein ER-Modell ist.
  • Ich kann in einem ER-Modell Entitäten und Attribute als Bestandteile beschreiben.
  • Ich kann in einem ER-Modell Relationen und Kardinalitäten beschreiben.
  1. Erstellt zu dritt oder viert (arbeitsteilig) in Goodnotes Karteikarten mit den Begriffen und ggf. Abbildungen und den korrekten Beschreibungen und Benennungen dazu, damit ihr diese für die Klassenarbeit nutzen könnt.
  2. Unten ist eine kleine Datenbank einer Social-Media-Plattform zu sehen. Momentan besteht diese nur aus den beiden Tabellen Nutzer und Posts, also anders formuliert: Es werden sich die Benutzer der Plattform und deren Posts in der Datenbank gespeichert.

    Nutzer

    Nutzer-ID Name E-Mail Registrierungsdatum Geburtsdatum Wohnort
    1 Max max.mustermann@mail.de 10.05.2023 15.03.2005 Berlin
    2 Lisa lisa.schmidt@mail.de 15.06.2023 22.07.2006 Hamburg
    3 Tom tom.weber@mail.de 20.07.2023 05.11.2005 München
    4 Anna anna.huber@mail.de 01.08.2023 30.04.2006 Köln
    5 Paul paul.neumann@mail.de 12.09.2023 18.09.2005 Frankfurt
    6 Sarah sarah.hoffmann@mail.de 25.10.2023 14.02.2006 Stuttgart
    7 David david.schulz@mail.de 05.11.2023 08.06.2005 Düsseldorf
    8 Lena lena.bauer@mail.de 30.12.2023 27.10.2006 Leipzig

    Posts

    Post-ID Nutzer-ID Inhalt Datum Uhrzeit Likes Kommentare
    101 1 Urlaub am Strand 🌊 20.07.2023 14:30 42 8
    102 2 Neues Buch gelesen! 📚 22.07.2023 16:45 28 5
    103 3 Gestern im Kino gewesen 🎬 23.07.2023 18:20 35 6
    104 4 Mein neues Fahrrad 🚴 25.07.2023 12:10 56 12
    105 5 Konzert war mega! 🎵 28.07.2023 20:15 89 15
    106 6 Selbstgemachte Pizza 🍕 30.07.2023 19:30 64 9
    107 7 Wanderung im Schwarzwald 🏞️ 02.08.2023 15:40 33 4
    108 8 Neues Handy ausgepackt 📱 05.08.2023 11:25 47 7
    109 1 Zoo-Besuch mit Freunden 🦁 08.08.2023 17:10 52 10
    110 3 Geburtstagsfeier war super! 🎉 10.08.2023 22:05 78 14
    111 5 Neuer Haarschnitt 💇 12.08.2023 13:30 29 3
    112 7 Erster Tag im neuen Job 💼 15.08.2023 09:15 61 8
  3. Lade dir hier das Bild der Tabellen herunter und beschrifte die Tabellen mit den passenden Fachbegriffen, wie du es in dem Video gesehen hast.

    Erstellen aus der Datenbank das relationale Schema.

    Beschreibe die Tabelle „Posts“ unter Verwendung der Fachbegriffe.


  4. Die Datenbank der Social-Media-Plattform ist hier als ER-Modell dargestellt und noch um Freundschaften ergänzt worden.

    Lade dir hier das Bild des ER-Modells herunter und beschrifte das ER-Modell mit den passenden Fachbegriffen aus dem Video.

    Erstellen aus dem ER-Modell das relationale Schema, soweit dir das möglich ist. Bei den Stellen, wo du es nicht kannst, notiere dir, was dich an einer Überführung hindert.

    Beschreibe die Entitäten „Nutzer“ und „Posts“ sowie die zugehörigen Beziehung unter Verwendung der Fachbegriffe.

    Eine 1:1-Beziehung ist bisher nicht in dem ER-Modell enthalten.
    Erweitere das ER-Modell mit einer passenden 1:1-Beziehung in dem Social-Media-Kontext.

Bei der Aufgabe aus dem ER-Modell oben ein relationales Schema zu erstellen, sind einige Schwierigkeiten aufgekommen. Wie stellt man nämlich in relationalem Schema die Beziehungen dar? Bei der 1:n-Beziehung sieht das leicht aus. Da hat die Entität beim n den Primärschlüssel der anderen Entität als Fremdschlüssel(Nutzer-ID als Fremdschlüssel in der Tabelle Posts). Doch wie sieht das bei einer 1:1- und n:m-Relation aus?
Stellen Sie jeweils eine Vermutung auf, wie eine Lösung aussehen könnt.

Was du am Ende können wirst:

  • Ich kann ein ER-Modell um weitere Entitäten, Attribute, Relationen und Kardinalitäten aus Sachkontexten ergänzen.
  • Ich kann ein ER-Modell in ein relationales Schema überführen.
  • Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die 1:1-Relationen passend überführen.
  • Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die 1:n-Relationen passend überführen.
  • Ich kann bei der Überführung eines ER-Modells in das relationale Datenbankschema die n:m-Relationen passend überführen.
  • Ich kann aus einem relationalem Schema das ER-Modell erstellen.

Bei der Überführung des ER-Modells in eine konkrete Datenbank muss man bei den Relationen besonders aufpassen. Denn diese müssen bei der Überführung in das relationale Datenbankschema besonder berücksichtigt werden.

1:1-Beziehung
Bei einer 1:1 Beziehung nehmen wir den Primärschlüssel einer der beiden Relationen und setzen ihn bei der anderen Relation als Fremdschlüssel ein.
Beispiel: Jeder Nutzer hat für sich Einstellungen getätigt und die spezifischen Einstellungen gehören zu einem Nutzer.
1:1-Relation
Um das Modell nun in das relationale datenbankschema zu überführen, geben wir der Tabelle Einstellungen noch den Primärschlüssel von Nutzer als Fremdschlüssel und somit erhalten wir folgendes relationales Datenbankschema:
Nutzer(Nutzer-ID, Name, Wohnort, Geburtstdatum, E-Mail, Registrierungsdatum)
Einstellungen(Einstellung-ID, ⭡Nutzer-ID, Sprache, DarkMode, PushBenachrichtigungen)

1:n-Beziehung
Bei einer 1:n Beziehung nehmen wir den Primärschlüssel der 1-er Relation und setzen ihn als Fremdschlüssel in die n-Relation ein.
Beispiel: Nutzer können beliebig viele Posts verfassen, aber jeder Post gehört nur zu einer Person.
1:n-Relation
Wie in dem ER-Modell bereits berücksichtigt, erhält die Tabelle bei der Überführung zum relationalen Datenbankschema den Primärschlüssel der Tabelle Nutzer als Fremdschlüssel, da bei Posts die n-Relation ist:
Nutzer(Nutzer-ID, Name, Wohnort, Geburtstdatum, E-Mail, Registrierungsdatum)
Posts(Post-ID, ⭡Nutzer-ID, Inhalt, Datum, Uhrzeit, Likes, Kommentare)

n:m-Beziehung
Bei einer n:m Beziehung wird eine zusätzliche Relation (Zuordnungstabelle) gebildet, die jeweils die Primärschlüssel der n-Relation und m-Relation als Fremdschlüssel enthält.
Beispiel: In diesem Beispiel können mehrere Nutzer miteinander befreundet sein. Wir müssen hier ein neue Tabelle erzeugen, die die Relation befreundet widerspiegelt – nennen wir sie Freundschaften. Damit nun abgebildet werden kann, dass ein Nutzer mit einem anderen Nutzer befreundet ist, erhält die Tabelle zwei Mal den Primärschlüssel von Nutzer als Fremdschlüssel (Attributsnamen dürfen nciht identisch sein).
n:m-Relation
Nutzer(Nutzer-ID, Name, Wohnort, Geburtstdatum, E-Mail, Registrierungsdatum)
Freundschaften(Freundschaft-ID, ⭡Nutzer1-ID, ⭡Nutzer2-ID)
  1. Gib das relationale Datenbankschema des folgende ER-Modells an.
    ER-Modell: Social-Media
  2. Erweitere das folgende ER-Modell, um die beschriebenen Sachverhalte.
    ER-Modell: Social-Media
    Du kannst das ER-Modell hierüber öffnen.

    Beiträgen können gegen Urheberrecht verstoßen (s. Aufgabe 1) und genauso können auch Kommentare dagegen verstoßen.
    Ergänze entsprechend die Entität und die Beziehung.

    Die Social-Media-Plattform muss natürlich auch Freundschaftsanfrage verwalten. Jede Freundschaftsanfrage ist durch eine ID, den Absender und Empfänger der Anfrage, einem Status und einem Datum gekennzeichnet.
    Erweitere das ER-Modell um die Entität und die Beziehung.

    Natürlich arbeitet unsere Social-Media-Plattform auch mit Hashtags, diese haben eine ID und einen Namen. Wie man sich vorstellen kann, können Beiträge mit Hashtags versehen werden.
    Erweitere das ER-Modell entsprechend.

    In Beiträgen können Nutzer markiert werden.
    Erweitere das ER-Modell entsprechend.

    Aus unklaren Gründen möchte Nutzer auf mal ihr Profil löschen. Dazu wurde die Löschanfrage erstellt, die sich Datum, Grund und Status der Anfrage speichert und mit dem Nutzer verbunden ist.
    Erweitere das ER-Modell um die Entität und die Beziehung.

    Manchmal müssen Nutzer ihre Beiträge nachträglich bearbeiten. Dabei kann es ein, dass sie mehrmals ihren Beitrag verändern. Um dieses zu protokollieren, gibt es eine Beitragshistorie. Dabei wird sich jedes Mal nur der letzte alte Inhalt gemerkt und wann der Beitrag geändert wurde.
    Erweitere das ER-Modell um die Entität und die Beziehung.

    Gib das relationale Datenbankschema für dein ER-Modell an.

In der vorherigen Aufgabe 2 hast du bereits einzelnen Sachverhalten in ein bestehendes ER-Modell ergänzt und somit dieses erweitert. Nun soll es darum gehen, ein solches ER-Modell komplett selbstständig aus einem Sachkontext zu entwerfen.
Überlege zunächst, welche Schritte dafür notwendig sein könnten.

Was du am Ende können wirst:

  • Ich kann aus einem Sachkontext die Entitäten bestimmen.
  • Ich kann aus einem Sachkontext die Attribute bestimmen.
  • Ich kann aus einem Sachkontext die Relationen bestimmen.
  • Ich kann aus einem Sachkontext die Kardinalitäten bestimmen.
  • Ich kann die gewonnen Informationen über Entitäten, Attribute, Relationen und Kardinalitäten als ER-Modell darstellen.

Damit Datenbanken gut und reibungslosen arbeiten können und Millionen von Daten verarbeiten können, müssen sie gut aufgebaut sein. Das ist ähnlich wie mit dem Fundament eines Hauses. Ist dieses nicht gut, trägt es das restliche Haus nicht, was da darauf gesetzt wird.
Um ER-Modelle (das Fundament) gut zu modellieren, bietet sich die folgenden Herangehensweise an:

Mit dieser Anleitung könnt ihr aus jedem Sachkontext ein korrektes ER-Diagramm mit Entitäten, Attributen, Relationen und Kardinalitäten erstellen.

Schritt 1: Text markieren & Entitäten identifizieren
Frage: Welche Hauptbegriffe (Nomen) werden im Text genannt, die als Objekte gespeichert werden müssen?
→ Diese werden zu Entitäten (Rechtecke im ER-Diagramm).
Beispieltext: „Eine Schule verwaltet Lehrer und Klassen. Jeder Lehrer unterrichtet in einer oder mehreren Klassen und hat ein Fach, das er primär unterrichtet. Eine Klasse besteht aus Schülern, die Noten in verschiedenen Fächern erhalten.“
Markierte Entitäten (fett): Lehrer, Klassen, Fach, Schüler

Schritt 2: Attribute den Entitäten zuordnen
Frage: Welche Eigenschaften hat jede Entität?
→ Diese werden als Attribute (Ovale) an die Entitäten gehängt.
Beispiel:
Entität Attribute Primärschlüssel (unterstrichen)
Lehrer Name, Fachbereich, Einstellungsdatum Personalnummer
Klasse Raum, Jahrgangsstufe Klassenname
Fach Fachleitung Fachname
Schüler Name, Geburtsdatum Schüler-ID
Tipp:
  • Eindeutige Identifikation: Jede Entität braucht ein Primärattribut (z. B. Personalnummer bei Lehrern).
  • Keine Redundanz: Attribute, die sich aus anderen ergeben (z. B. Alter aus Geburtsdatum), weglassen!
Schritt 3: Relationen zwischen Entitäten erkennen
Frage: Wie hängen Entitäten zusammen?
→ Verben im Text helfen (z. B. „unterrichtet“, „besteht aus“, „erhält“).
Beispiel:
Relation Beteiligte Entitäten Beschreibung
unterrichtet Lehrer → Klasse Ein Lehrer unterrichtet in Klassen.
hat_Primärfach Lehrer → Fach Ein Lehrer hat ein Hauptfach.
gehört_zu Schüler → Klasse Ein Schüler gehört zu einer Klasse.
erhält_Note Schüler → Fach Ein Schüler erhält Noten in Fächern.
Schritt 4: Kardinalitäten bestimmen
Frage: Wie viele Entitäten der einen Art gehören zu wie vielen der anderen?
→ Minimal- und Maximalanzahl pro Beziehung klären (z. B. „mindestens 1, höchstens n“).
Beispiel:
Relation Beteiligte Entitäten Kardinalität Erklärung Beispiel
unterrichtet Lehrer → Klasse N:M Ein Lehrer kann viele Klassen unterrichten, eine Klasse hat viele Lehrer. Herr Müller (Lehrer) unterrichtet 5a und 6b; Klasse 5a hat mehrere Lehrer (Müller, Schmidt).
hat_Primärfach Lehrer → Fach 1:N Ein Lehrer hat ein Primärfach, ein Fach kann von vielen Lehrern unterrichtet werden. Herr Müller (Lehrer) hat Mathe als Primärfach; Mathe wird von 5 Lehrern unterrichtet.
gehört_zu Schüler → Klasse N:1 Viele Schüler gehören zu einer Klasse. 25 Schüler (N) sind in einer Klasse (1) (z. B. 10a).
erhält_Note Schüler → Fach N:M Ein Schüler hat Noten in vielen Fächern, ein Fach wird von vielen Schülern belegt. Max (Schüler) hat Noten in Mathe und Deutsch; Mathe wird von 30 Schülern belegt.
Schritt 5: ER-Diagramm zeichnen
Zeichne nun das ER-Modell entweder per Hand mithilfe vom yEd-Graph Editor (am PC ist das besser zu machen).
  1. Modelliere in Einzelarbeit aus dem Sachkontext das ER-Modell. Folge dabei den Schritten.
    Die Plattform BuchLeseWelt verbindet Menschen mit Büchern und Gleichgesinnten:
    Auf der Plattform können sich Nutzer:innen registrieren, die Bücher entdecken und sich in Lesegruppen über Lektüren austauschen möchten. Jede dieser Nutzer:innen wird durch einen einzigartigen Benutzernamen und eine E-Mail-Adresse identifiziert, unter der sie angemeldet ist. Zudem werden ihr vollständiger Name sowie ihr bevorzugtes Buchgenre gespeichert. Besonders wichtig ist jedem Nutzer bzw. jeder Nutzerin ein bestimmtes Buch, das als ihr absolutes Lieblingswerk gilt – wobei dasselbe Buch durchaus von mehreren Personen als Favorit ausgewählt sein kann.
    Die Bücher selbst werden über eine eindeutige ISBN identifiziert und enthalten weitere Informationen wie Titel, Erscheinungsjahr und Genre.
    Jedes Buch entsteht durch die kreative Arbeit von mindestens einer Autor:in, die durch ihren Namen und ihr Geburtsjahr beschrieben wird.
    Um den Austausch zu fördern, können sich Nutzer:innen in Lesegruppen zusammenschließen. Diese Lesegruppen tragen einen Namen, haben ein Gründungsdatum und legen eine maximale Anzahl an Mitgliedern fest, die sie aufnehmen möchten.

    Identifiziere die Entitäten aus dem Sachkontext.

    Ermittle die Attribute zu den Entitäten

    Bestimme die Beziehungen zwischen den Entitäten.

    Definiere die Kardinalitäten der Relationen.

    Zeichne das ER-Modell per Hand oder im yEd Graph Editor.

    Die Plattform BuchLeseWelt verbindet Menschen mit Büchern und Gleichgesinnten:

    Auf der Plattform können sich Nutzer:innen registrieren, die Bücher entdecken und sich in Lesegruppen über Lektüren austauschen möchten. Jede dieser Nutzer:innen wird durch einen einzigartigen Benutzernamen und eine E-Mail-Adresse identifiziert, unter der sie angemeldet ist. Zudem werden ihr vollständiger Name sowie ihr bevorzugtes Buchgenre gespeichert. Besonders wichtig ist jeder Nutzer:in ein bestimmtes Buch, das als ihr absolutes Lieblingswerk gilt – wobei dasselbe Buch von mehreren Nutzer:innen als Favorit ausgewählt sein kann.

    Die Bücher selbst werden über eine eindeutige ISBN identifiziert und enthalten weitere Informationen wie Titel, Erscheinungsjahr und Genre.

    Jedes Buch wird von mindestens einer Autor:in geschrieben, die durch ihren Namen und ihr Geburtsjahr beschrieben wird.

    Um den Austausch zu fördern, können sich Nutzer:innen in Lesegruppen zusammenschließen. Diese Lesegruppen tragen einen Namen, haben ein Gründungsdatum und legen eine maximale Mitgliederanzahl fest.

Schauen wir uns nochmal eine andere Variante für das Verwalten der Klassenfahrt an.

Klassenfahrt
UNName Adresse Kapazität Kosten Name Rolle Telefon
Berghütte Alpenblick Bergstraße 8, 87561 Oberstdorf 30 35 Max Müller Schüler 0176 12345678
Berghütte Alpenblick Bergstraße 8, 87561 Oberstdorf 30 35 Lisa Schmidt Schüler 0176 87654321
Herberge Alpenveilchen Bergstraße 5, 87561 Oberstdorf 20 40 Frau Meier Begleitung 0176 11223344
Berghütte Alpenblick Bergstraße 8, 87561 Oberstdorf 30 35 Tom Becker Schüler 0176 22334455
Herberge Alpenveilchen Bergstraße 5, 87561 Oberstdorf 20 45 Herr Schmidt Begleitung 0176 22114433

Diskutiert miteinander, ob die folgenden Situationen mögliche Probleme in der Datenbank verursachen können:

  1. Nachträglich wird Frau Demir als eine weitere Begleitperson hinzugenommen. Sie soll in die Datenbank aufgenommen werden, hat aber noch keine Unterkunft zugewiesen bekommen.
  2. Die Klasse 10b entdeckt zu einem späteren Zeitpunkt noch eine weitere Unterkunft, die sehr schön zu sein scheint. Die Unterkunft soll in die Datenbank aufgenommen werden. Allerdings fehlen noch die finalen Informationen zur Kapazität und zu den Kosten.
  3. Leider wurden beim Anlegen der Datensätze die Kosten für die Unterkunft „Berghütte Alpenblick“ falsch eingetragen.
  4. Die Unterkunft „Berghütte Alpenblick“ muss aufgrund eines Brandschadens von Renovierungsarbeiten so lange schließen, dass es auch den Zeitraum der Fahrt betrifft. Alle Datensätze, die sich auf diese Unterkunft beziehen, sollen demnach aus der Datenbank gelöscht werden.

Ich kann Redundanzen in Datenbanken benennen, die drei Formen der Anomalien erklären sowie die damit verbundenen Inkonsistenzen und die Datenbank anpassen, um die Anomalien zu beseitigen.

In der obigen Tabelle sind viele Daten mehrfach vorhanden. Zum Beispiel sind die Informationen zu den verschiedenen Unterkünften mehrfach in der Tabelle.

Man möchte gerne, dass jede Information möglichst wenig, am besten nur einmal, in der Datenbank ist. Vollständig wird dies allerdings nie funktionieren.

Dass es die Berghütte Alpenblick gibt, weiß man bereits, wenn man nur einen der Datensätze betrachtet, in dem diese Unterkunft auftaucht. Jede weitere Nennung ist eine Redundanz. Diese können unerwünschte Nebenwirkungen, bei Veränderungen der Datenbank, verursachen.

Änderungsanomalie/Update-Anomalie

Die Straßen in Oberstdorf erhalten eine neue Einteilung in Postleitzahlen. In allen Datensätzen, in denen eine Unterkunft in Oberstdorf vorkommt, muss die Adresse geändert werden. Hierbei kann es passieren, dass zu ändernde Attribute übersehen werden. Dies hat zur Folge, dass es anschließend Unterkünfte in Oberstdorf gibt, die die gleichen Namen aber eine andere Postleitzahl haben. Dies ist eine Inkonsistenz der Datenbank.

Löschanomalie

Nach der Klassenfahrt schließt die Unterkunft Herberge Alpenveilchen für immer. Alle Datensätze, in denen diese Unterkunft auftaucht, müssen nun entfernt werden. Möchte man im Nachhinein aus Abrechnungsgründen noch die Personen wissen, welche in dieser Unterkunft übernachtet haben, sind diese Daten verschwunden. Auch dies ist eine Inkonsistenz der Datenbank.

Einfügeanomalie

Eine neue Schülerin kommt plötzlich in die Klasse, hat aber noch keine Unterkunft zugewiesen bekommen. Die Daten der Schülerinnen könnten zwar eingefügt werden, aber das Schlüsselattribut UNName ist nun schwer zu identifizieren. Dies ist ebenfalls eine Inkonsistenz der Datenbank.

Anomalien verursachen Inkonsistenzen in Datenbanken. Aufgrund von Redundanzen können diese Anomalien entstehen. Je weniger Redundanz in einer Datenbank sind, desto weniger Anomalien können bei Änderungen der Daten und damit Inkonsistenzen in der Datenbank auftreten. Die drei Anomalietypen sind:
Änderungsanomalie/Update-Anomalie Löschanomalie Einfügeanomalie
Bei Veränderungen von Attributwerten, müssen alle Datensätze, in denen diese verändert werden sollen, geändert werden, damit die Datenbank konsistent bleibt. Durch das Entfernen von Datensätzen, die nicht mehr benötigt werden, kann es passieren, dass Schlüsselattributwerte verloren gehen, die zu einem späteren Zeitpunkt noch benötigt werden. Durch das Einfügen von unvollständigen Daten, kann es passieren, dass Schlüsselattribute nicht mehr eindeutig identifiziert werden können.
  1. Wir betrachten eine Beispieldatenbank für einen Onlinebuchhandel.
    Online-Buchhandel
    BName Name Vorname Adresse Email ISBN Titel Autor Preis
    pMueller Müller Peter Hauptstr. 8… 987-3-6… Der Herr der Ringe J.R.R. Tolkien 32,90
    Susi Sorglos Susanne Wiesenweg 14… 987-3-5… Der Zauberberg Thomas Mann 12,95
    Susi Sorglos Susanne Wiesenweg 14… 987-1-4… Watchmen Alan Moore 13,95
    Susi Sorglos Susanne Wiesenweg 14… 987-3-6… Der Herr der Ringe J.R.R. Tolkien 32,90
    KleinUdo Klein Udo Bruchstr. 37… 987-1-4… Watchmen Alan Moore 13,95

    Gebt einen geeigneten Primärschlüssel für die Tabelle Online-Buchhandel an.

    Erläutert je ein konkretes Beispiel für eine Anomalie, die bei dieser Variante der Datenbank auftreten kann.

    Verändert die Datenbank so, dass es weniger Redundanzen gibt.

  1. Eine Fahrschule hat für die Verwaltung ihrer Daten eine Datenbank in Form einer Tabelle angelegt.
    Fahrschule
    Name Vorname GDatum Anzahl Studenten Theorie bestanden Praxis bestanden FLehrer VName FLehrer NName Flehrer Nummer
    Lampe Luis 03.05.2004 12 ja nein René Renner 0171-1234567
    Käfer Kara 12.09.2004 4 nein nein Leonie Lustig 0151-7654321
    Mai Mara 30.01.2003 22 ja ja Tom Tonne 0171-9876543

    Gebt einen geeigneten Primärschlüssel für die Tabelle an. Untersucht hierbei zwei Fälle:

    1. Der Primärschlüssel soll aus einer Kombination mehrerer Attribute bestehen.
    2. Es wird ein neues Attribut „ID“ eingeführt und die Datensätze erhalten eine fortlaufende Nummer.

    Erläutert anhand der Tabelle, was man unter Redundanzen und Anomalien versteht. Bezieht euch bei den Anomalien auf mindestens zwei verschiedene konkrete Beispiele der Tabelle und beschreibt mögliche Inkonsistenzen.

Stell dir vor, du scrollst durch deine sozialen Medien und siehst ständig neue Trends, die von Influencern und Freunden geteilt werden. Vielleicht bist du neugierig, welche Filme gerade im Trend sind oder welche Musik die Charts stürmt. In einer Welt, die von Daten geprägt ist, ist es entscheidend zu verstehen, wie man diese Informationen analysiert und interpretiert. Hier kommt SQL (Structured Query Language) ins Spiel – eine leistungsstarke Abfragesprache, die dir hilft, mit Datenbanken zu interagieren und wertvolle Informationen zu extrahieren.

Die Abfragesprache SQL (Structured Query Language) ist ein Standard für die hier betrachteten relationalen Datenbanksysteme.

Eine Abfragesprache wie SQL ist eine deklarative Sprache. Im Gegensatz zu prozeduralen Sprachen, wie z. B. Java, Python oder C++ wird hier nicht schrittweise im Code angegeben, wie der Computer das gewüchste Ziel erreichen soll. Man gibt nur das Ziel an und das Datenbankmanagementsystem entscheidet, wie es dieses erreicht.

In unserem Beispiel oben haben wir gesehen, wie eine solche SQL-Abfrage formuliert wird:

Gib diejenigen Bezeichnung von der Tabelle Aktivitätg aus, für welche die Kosten kleiner als 15 € sind.

SELECT Bezeichnung
FROM Aktivität
WHERE Kosten < 15;

Umgangssprachlich kann man folgende Fragen stellen:

  • Was soll ausgegeben werden?
  • Aus welcher Tabelle/welchen Tabellen sollen die Dtaen genommen werden?
  • Welche zusätzliche Bedingung/zusätzlichen Bedingungen gelten?

Formale Fragen sind:

  • Welche Attribute sind auszugeben?
  • Welche Tabelle/Tabellen werden genutzt?
  • Welche zusätzliche Bedingung/zusätzlichen Bedingungen gelten?

Daraus ergibt sich das folgende Grundgerüst jeder SQL-Abfrage ist:

SELECT Spalte(n)
FROM Tabelle(n)
WHERE Bedingun(en);

← Projektion

← Selektion (optional)

Die Groß-/Kleinschreibung der Schlüsselworte dient nur zur besseren Lesbarkeit. Sie ist in SQL nicht notwendig.

Mit einer Projektion werden gewünschte Spalten herausgefiltert. Die übrigen werden nicht angezeigt.

Beispiel:

Buch
ISBN Titel Autor Preis (€)
978-3-608-93800-5 Der Hobbit J.R.R. Tolkien 24,00
978-3-453-52842-0 Ich, der Roboter Isaac Asimov 10,00
978-0-785-83983-5 A Tale of Two Cities Charles Dickens 11,99

Um aus der Tabelle nun nur die Autoren zu erhalten, formuliert man folgenden SQL-Abfrage:

SELECT Autor
FROM Buch;

Autor
J.R.R. Tolkien
Isaac Asimov
Charles Dickens

Bei der Ausgabe werden die gewünschten Attributswerte und der Name der Spalten angezeigt. Dieser kann, wie wir später noch sehen werden, angepasst werden.
Möchte man sich eine komplette Tabelle anzeigen lassen, schreibt man hinter SELECT ein *.

SELECT *
FROM Buch;

ISBN Titel Autor Preis (€)
978-3-608-93800-5 Der Hobbit J.R.R. Tolkien 24,00
978-3-453-52842-0 Ich, der Roboter Isaac Asimov 10,00
978-0-785-83983-5 A Tale of Two Cities Charles Dickens 11,99

Probiere es hier selbst aus, indem du dir selbst mal die einzelnen Spalten und/oder die Tabelle ausgeben lässt.

  1. Lasse dir die gesamte Tabelle ausgeben.
  2. Lasse dir nur die Spalten ISBN und Preis ausgeben.
  3. Lasse dir die Spalte Autor ausgeben.

Mit einer Selektion können Datensätze herausgefiltert werden, die bestimmten Bedingungen genügen.
So sollen aus der folgenden Tabelle alle Datensätzer ermittelt werden, wo der Titel „Der Hobbit‘ ist.

Buch
ISBN Titel Autor Preis (€)
978-3-608-93800-5 Der Hobbit J.R.R. Tolkien 24,00
978-3-453-52842-0 Ich, der Roboter Isaac Asimov 10,00
978-0-785-83983-5 A Tale of Two Cities Charles Dickens 11,99
SELECT *
FROM Buch
WHERE Titel = 'Der Hobbit';

ISBN Titel Autor Preis (€)
978-3-608-93800-5 Der Hobbit J.R.R. Tolkien 24,00

Mithilfe einer Kombination von Projektion und Selektion kann man Datensätze nach Attributswerten durchsuchen, die bestimmten Bedingungen genügen.
Soll nun bspw. ermittelt werden, welcher Autor den Hobbit geschrieben hat, dann lautet die SQL-Abfrage:

SELECT Autor
FROM Buch
WHERE Titel = 'Der Hobbit';

Autor
J.R.R. Tolkien

Komplexe Suchanfragen sind mit einfachen Projektionen und Selektionen nicht umzusetzen. Oft möchte man Daten sortiert ausgeben oder Berechnungen innerhalb der Attributswerte durchführen.
Hinter der WHERE-Klausel wurde bisher mit dem Gleichheitszeichen jeweils ein einzelner Attributswert verglichen. Es sind jedoch weitaus mehr Operationen möglich, von denen die wichtigsten nun gezeigt werden.

Operator Erläuterung
< kleiner
> größer
<= kleiner oder gleich
>= größer oder gleich
<> ungleich
BETWEEN Ist der Wert innerhalb eines bestimmten Wertebereichs?
LIKE Enthalten die durchsuchten Attributswerte einen vorgegebenen Teil? Das Zeichen % meint beliebig viele und _ genau ein Zeichen.
IN Alle Attributswerte werden mit einer vorgegebenen Liste überprüft.
IS NULL Ist der Attributswert mit einem Wert gefüllt oder leer?

Betrachten wir einige der Operatoren an unseren Beispieltabellen Buch und Film:

Buch
ISBN Titel Autor Preis (€)
978-3-608-93800-5 Der Hobbit J.R.R. Tolkien 24,00
978-3-453-52842-0 Ich, der Roboter Isaac Asimov 10,00
978-0-785-83983-5 A Tale of Two Cities Charles Dickens 11,99

Film
EAN Titel FSK Preis (€) Buch
5051890300027 Der Hobbit 12 44,99 978-3-608-93800-5
4045167015739 James Bond – Spectre 12 29,99
4020628814274 Great Barrier Reef 0 13,29

Zeige alle Autoren an, deren Bücher mit einem Buchstaben von A bis D beginnen.

SELECT Autor
FROM Buch
WHERE Titel < 'E';

Autor
J.R.R. Tolkien
Charles Dickensn

Zeige alle Filme an, die zwischen 25 und 50 Euro kosten.

SELECT Titel
FROM Film
WHERE Preis BETWEEN 25 AND 50;

Titel
Der Hobbit
James Bond - Spectre

Zeige alle Bücher an, deren Titel 'er' beinhaltet.

SELECT Titel
FROM Buch
WHERE Titel LIKE '%er%';

Titel
Der Hobbit
Ich, der Roboter

Schreibt man %er, werden alle Titel ausgegeben, welche am Ende er haben, also nur Ich, der Roboter. Schreibt man er%, werden alle ausgegeben, die er am Anfang haben, also keine. Schreibt man %er%, werden alle Titel ausgegeben, die irgendwo die Zeichenkette er beinhalten.

Zeige alle Filme an, die 13,29 oder 29,99 kosten.

SELECT Titel
FROM Film
WHERE Preis IN (13.29, 29.99);

Titel
James Bond - Spectre
Great Barrier Reef

Zeige alle Filme an, deren Attributswerte von Buch leer sind.

SELECT Titel
FROM Film
WHERE Buch IS NULL;

Titel
James Bond - Spectre
Great Barrier Reef

Probiere hier einige der Sachen zu den Vergleichsoperationen aus dem obigen Beispielen aus und schaue, ob die folgende Übungen umsetzen kannst.

  1. Lasse dir zunächst beiden Datenbanken ancheinader ausgeben, damit du weißt, was darin ist.
  2. Lasse dir dann alle Filem ausgeben, dessen FSK gleich 16 ist.
  3. Formuliere eine SQL-Abfrage, die dir nur den Titel der Filme ausgibt, dessen FSK unter 16 liegt.
  1. Die untenstehende Datenbank soll gegeben sein. Dokumentiere deine Ergebnisse.
  2. Lasse dir zunächst die gesamte Datenbank nacheinander ausgeben.

    Gib eine detaillierte Beschreibung des Zwecks und der Struktur der Datenbank an.

    Formuliere eine Abfrage, um die Benutzernamen und die Geburtsjahreder Tabelle Benutzer zu ermitteln.

    Es sollen alle Informationen über den Benutzer mit der benutzer_id 3 aus der Tabelle Benutzer ermittelt werden.

    Ermittle alle Beiträge, die mehr als 15 Likes haben.

    Ermittle alle Beiträge, die mehr als 15 Likes haben.

  1. Analysiere die folgenden SQL-Abfragen, indem du beschreibst, was diese machen und notiere die Ausgaben. Prüfe erst danach, was die SQL-Abfrage macht. Dokumentiere deine Ergebnisse.
  2. SELECT inhalt
    FROM Beiträge
    WHERE likes >=20 ;

    SELECT benutzername, geburtsjahr
    FROM Benutzer
    WHERE geburtsjahr <= 1999;

Wie auch in Programmiersprachen wie JAVA können auch in SQL logische Operatoren (AND, OR, NOT) genutzt werden. Damit lassen sich verschiedene Bedingungen hinter der WHERE-Klausel verbinden.

Zeige alle Buchtitel der Datenbank an, die von Isaac Asimov oder Charles Dickens geschrieben wurden.

SELECT Titel
FROM Buch
WHERE Autor = 'Isaac Asimov' OR Autor = 'Charles Dickens';

Titel
Ich, der Roboter
A Tale of Two Cities

Zeige alle Buchtitel der Datenbank an, die nicht von Isaac Asimov geschrieben wurden.

SELECT Titel
FROM Buch
WHERE NOT Autor = 'Isaac Asimov';

Titel
A Tale of Two Cities

Zeige alle Buchtitel der Datenbank an, die von Charles Dickens geschrieben wurden und die 11,99€ kosten.

SELECT Titel
FROM Buch
WHERE Autor = 'Charles Dickens' AND Preis = 1.99;

Titel
Der Hobbit
A Tale of Two Cities

Mit SQL kann man die Ausgabe der Daten auf verschiedenste Weisen anpassen. Soll ein Spaltenname geändert werden, nutzt man den Operator 'AS'. Möchte man die Daten sortieren, ist dieses mit 'ORDER BY' möglich. Mit 'DISTINCT' verhindert man Doppelnennungen.

Zeige alle Bücher an und gib deren Titel als "Buchname" an, wo der Autor "J.R.R. Tolkien" ist.

SELECT Titel AS Buchname
FROM Buch
WHERE Autor = 'J.R.R. Tolkien';

Buchname
Der Hobbit

Zeige die Buchtitel und Autoren an, aber nach den Autoren sortiert.

SELECT Titel, Autor
FROM Buch
ORDER BY Autor;

Titel Autor
A Tale of Two Cities Charles Dickens
Ich, der Roboter Isaac Asimov
Der Hobbit J.R.R. Tolkien

Zeige alle verschiedenen FSK Einstufungen an.

SELECT DISTINCT FSK
FROM Film;

FSK
12
0

Probiere hier einige der Sachen zu den logischen Operatoren und der Verfeinerung der Ausgabe aus. Folgende Übungen könnten hier einen guten Einstieg ermöglichen.

  1. Lasse dir alle Filmtitel als "Filmtitel" ausgeben.
  2. Lasse dir alle Filmtitel als "Filmtitel" ausgeben, bei denen der FSK = 12 ist und der Preis 19,99€ beträgt.
  3. Gib die verschiedenen Preise der Filme aus.
  4. Gib die verschiedenen Preise der Filme aus und ordne sie.
  5. Gib die Filmtitel und den Preis aus, die entweder mehr als 40€ oder weniger als 18€ kosten.
  6. Gib die Filmtitel und den Preis aus, die entweder mehr als 40€ oder weniger als 18€ kosten und ordne sie nach dem Preis.
  1. Wir bleiben bei der Social Media Datenbank. Dokumentiere deine Ergebnisse.
  2. Es sollen alle Benutzer ausgegeben werden, die im Jahr 1995 geboren wurden und deren Registrierungsdatum nach dem 1. januar 2020 liegt.

    Formuliere eine SQL-Abfrage, um alle Beiträge auszuwählen, die weniger als 10 Likes haben oder von Benutzern mit der benutzer_id 2 stammen.

    Schreibe eine SQL-Abfrage, um alle Benutzer auszuwählen, deren geburtsjahr nicht 2000 ist.

    Formuliere eine SQL-Abfrage, um die benutzername und geburtsjahr aus der Tabelle Benutzer auszuwählen und benenne die Spalte geburtsjahr in JahrGeburt um.

    Es sollen alle Beiträge entsprechend ihrer Anzahl der Likes sortiert ausgegeben werden.

    Es sollen alle Geburtsjahre sortiert ausgegeben werden, wo der Benutzer sich nach dem 01.01.2020 registriert hat.

    Formuliere eine SQL-Abfrage, um zu ermitteln, aus welchen Geburtsjahren (keine Dopplung) die Benutzer sind.

    Schreibe eine SQL-Abfrage, um die Benutzername der Benutzer auszuwählen, die im Jahr 1990 oder 1995 geboren sind, und benenne die Spalte Benutzername in Name um.

    Formuliere eine SQL-Abfrage, um die einzigartigen likes-Werte aus der Tabelle Beiträge auszuwählen und diese in aufsteigender Reihenfolge zu sortieren.

    Schreibe eine SQL-Abfrage, um die benutzername und likes aller Beiträge anzuzeigen, die mehr als 10 Likes haben, und benenne die Spalte likes in AnzahlLikes um. Sortiere die Ergebnisse nach AnzahlLikes.

  1. Analysiere die folgenden SQL-Abfragen, indem du beschreibst, was diese machen und notiere die Ausgaben. Prüfe erst danach, was die SQL-Abfrage macht. Dokumentiere deine Ergebnisse.
  2. SELECT DISTINCT benutzername AS Name
        FROM Benutzer WHERE geburtsjahr < 1995 
        ORDER BY Name;

    SELECT DISTINCT inhalt 
        FROM Beiträge 
        WHERE inhalt LIKE '%Reise%';

    SELECT benutzername, geburtsjahr 
        FROM Benutzer 
        WHERE geburtsjahr BETWEEN 1985 AND 1995 
        ORDER BY geburtsjahr;

Möchte man alle Datensätze einer Tabelle auswerten, werden sogenannte Aggregatfunktionen genutzt. Diese werden hinter die SELECT-Klausel geschrieben.

Aggregatfunktion Erläuterung
COUNT Ermittelt die Anzahl der Datensätze
SUM Liefert die Summe aller Werte
MAX, MIN Liefert den grüßten bzw. kleinsten Wert der Datenreihe
AVG Berechnet das arithmetische Mittel der Datenreihe
+, -, *, / Grundrechenarten

Die folgenden Beispiele beziehen sich immer auf die untenstehende Tabelle.

Buch
ISBN Titel Autor Preis
978-3-608-93800-5 Der Hobbit J.R.R. Tolkien 24.00
978-3-453-52842-0 Ich, der Roboter Isaac Asimov 10.00
978-0-785-83983-5 A Tale of Two Cities Charles Dickens 11.99
978-3-423-21413-1 Der Hobbit J.R.R. Tolkien 9.95
978-3-518-10001-1 Eine Weihnachtsgeschichte Charles Dickens 12.00
978-0-358-65303-5 The Lord of the Rings J.R.R. Tolkien 57.99

Anzahl der Bücher von J.R.R. Tolkien

SELECT COUNT(*) AS Anzahl_Tolkien
FROM Buch
WHERE Autor = 'J.R.R. Tolkien';

Anzahl_Tolkien
3

Anzahl der Autoren

SELECT COUNT(DISTINCT Autor) AS Anzahl_Autoren
FROM Buch;

Anzahl_Autoren
3

Preis des günstigsten Buches von J.R.R. Tolkien.

SELECT MIN(Preis) AS günstigstes_Tolkien
FROM Buch
WHERE Autor = 'J.R.R. Tolkien';

günstigstes_Tolkien
9,95

Durchschnittspreis aller Bücher.

SELECT AVG(Preis) AS Durchschnitt
FROM Buch;

Durchschnitt
20,49

Preise der Bücher ohne Mehrwertsteuer.

SELECT Titel, Preis, Preis*100/119 AS ohne_Steuer
FROM Buch;

Titel Preis ohne_Steuer
Der Hobbit 24,00 20,17
Ich, der Roboter 10,00 8,40
A Tale of Two Cities 11,99 10,08
Der Hobbit 9,95 8,36
Eine Weihnachtsgeschichte 12,00 10,08
The Lord of the Rings 57,99 48,73

Probiere hier einige der Sachen zu den Aggregatfunktionen aus. Folgenden Übungen könnten hier einen guten Einstieg ermöglichen.

  1. Ermittle wie teuer es wäre, wenn man sich alle Bücher von "J.R.R. Tolkien" kaufen möchte.
  2. Ermittle die Anzahl an Datensätzen, bei denen der Titel ein "der" beinhaltet.
  3. Ermittle den durchschnittlichen Preis von Charles Dickens Büchern
  4. Lass dir das teuerste und günstigste Buch ausgeben.
  5. Ich möchte wissen, wie teuer "Die Weihnachtsgeschichte" und "1984" zusammen sind.
  1. Wir bleiben bei der Social Media Datenbank, aber erweitern diese um die Tabelle Bewertungen. Das vollständige relationale Schema der Datenbank sieht dann wie folgt aus:
    Benutzer (benutzer_id, benutzername, geburtsjhar, registrierumgsdatum, account_bestätigt)
    Beiträge (beitrag_id, ⭡benutzer_id, inhalt, datum, likes)
    Kommentare (kommentar_id, ⭡benutzer_id, ⭡beitrag_id, inhalt, datum)
    Bewertungen (bewertung_id, ⭡benutzer_id, ⭡beitrag_id, sterne, datum)
    Dokumentiere deine Ergebnisse.
  2. Schreibe eine SQL-Abfrage, um die Gesamtanzahl der Likes aller Beiträge zu berechnen. Die ausgegebene Tabelle soll "GesamtLikes" heißen.

    Formuliere eine SQL-Abfrage, um den durchschnittlichen likes-Wert aller Beiträge zu berechnen und gebe der Tabelle einen passenden Namen.

    Formuliere eine SQL-Abfrage, um das Minimum und Maximum der Likes aus der Tabelle Beiträge zu ermitteln. Benenne die Ergebnisrelation passend.

    Formuliere eine Abfrage, um das Alter der Benutzer zu ermitteln. Der Begriff "Alter" für einen Tabellennamen wird nicht gehen, nimm Age.

    Ermittle die Differenz zwischen dem Beitrag mit den meisten und wenigsten Likes.

    Ermittle die Anzahl an Likes, die der Benutzer mit der ID 2 insgesamt erhalten hat.

    Ermittle wie viele Bewertungen der Benutzer mit der ID 1 erhalten hat.

    Ermittle die höchste und geringste Bewertung, die der Benutzer mit der ID 5 erhalten hat.

    Ermittle die durchschnittliche Berwertung des mit der ID 10.

    Ermittle die Differenz zwischen der höchsten und niedrigsten Bewertung des Beitrags mit der ID 7.

    Ermittle (die Anzahl) alle Benutzer, die ihren Account (nicht) bestätigt haben.

  1. Analysiere die folgenden SQL-Abfragen, indem du beschreibst, was diese machen und notiere die Ausgaben. Prüfe erst danach, was die SQL-Abfrage macht. Dokumentiere deine Ergebnisse.
  2. SELECT MIN(likes) AS NiedrigsteLikes
        FROM Beiträge 
        WHERE NOT (benutzer_id = 3);

    SELECT inhalt, likes 
        FROM Beiträge 
        WHERE likes = (
            SELECT MAX(likes) 
            FROM Beiträge);