Dies ist eine alte Version des Dokuments!


Links

https://www.info.we-tea.ch/doku.php?id=wiki:datenbanken:01_datenbanken https://www.info.we-tea.ch/doku.php?id=wiki:datenbanken:02_datenbanken https://www.info.we-tea.ch/doku.php?id=wiki:datenbanken:lab_datenbanken https://www.info.we-tea.ch/doku.php?id=wiki:datenbanken:lab_datenbanken

Datenbanken 1 - Einführung

Eine Datenbank ist eine organisierte Sammlung von strukturierten Informationen oder Daten, die typischerweise elektronisch in einem Computersystem gespeichert sind. Dabei sind die Daten so strukturiert, dass man daraus möglichst einfach und effizient Informationen extrahieren und die Daten manipulieren kann. Mit „manipulieren“ ist gemeint, dass man die Daten gezielt verändern kann. Ausserdem sollen sogenannte Redundanzen vermieden werden und alle Daten zu jeder Zeit korrekt (konsistent) sein.

Ausgangslage

Nehmen wir einmal an, Sie betreiben ein eigenes soziales Netzwerk. D.h. Sie verwalten eine Internetseite (z.B. www.instahub.org), auf welche die Nutzerinnen Fotos hochladen, Fotos von anderen Nutzern kommentieren können und vieles mehr.

Die Daten, die den Inhalt ihrer Webseite bilden (Fotos, Kommentare, Informationen zu den Benutzern etc.) werden in Tabellen (ähnlich wie Excel-Tabellen) auf ihrem Server gespeichert.

Die untenstehende Tabelle zeigt einen Teil dieser Daten: Benutzer Ihres sozialen Netzwerkes (in der Titelzeile gelb markierte Spalten) haben Fotos gepostet (blau markiert) und diese wurden dann von anderen Benutzern kommentiert (grün markiert).

Diese Art der Speicherung ist bereits eine einfache Datenbank. Das unten abgebildete Element wird als Tabelle bezeichnet. Sie besteht aus Spalten und Zeilen. Die Spalten werden Felder genannt: sie stellen ein bestimmtes Merkmal dar, z. B. die Nutzernamen des Netzwerks. Die Zeilen sind die Einträge (auch Datensätze genannt): In diesem Fall entspricht jede Zeile einem Kommentar, der bei einem geposteten Bild gemacht wurde.



Studieren Sie die oben abgebildete Tabelle und beantworten Sie die folgenden Fragen:

  1. Wie viele Kommentare werden durch die Tabelle gespeichert?
  2. Wie viele gepostete Bilder sind in der Tabelle enthalten?
  3. Wer hat am meisten Kommentare erstellt? Wie viele?
  4. Wer hat am meisten Bilder gepostet und wie viele?
  5. Welches Bild hat am meisten Kommentare erhalten?
  6. Was muss in der Tabelle geändert werden, wenn ein Kommentar gelöscht wird?
  7. Was muss in der Tabelle geändert werden, wenn ein Bild gelöscht wird?
  8. Was muss in der Tabelle geändert werden, wenn ein Benutzer seine Mailadresse oder seinen Loginnamen ändert? Oder wenn er gelöscht wird?

Problem

Werden die Daten Ihres sozialen Netzwerks auf diese Weise gespeichert, dann verbraucht ihre Tabelle unnötigerweise viel zu viel Speicherplatz. Zudem ist es nicht ganz einfach, wenn z.B. ein Nutzer sein Profil löschen möchte oder Ähnliches. Viele Informationen werden durch diese gewählte Tabellenart doppelt gespeichert.

Redundanzen:
Redundanzen bedeutet also, dass Informationen unnötigerweise mehrmals abgespeichert werden. Das führt immer zu Speicherplatzverschwendung, Einbussen in der Zeit (wenn wir beispielsweise Daten suchen oder ändern wollen) und sollte in Datenbanken immer vermieden werden!

Die folgende Abbildung veranschaulicht diese Problematik sehr gut. In der Tabelle werden die Daten der Benutzer oder auch die Beschreibungen der Bilder oft mehrmals gespeichert. Beachten Sie beispielsweise, wie oft die Daten von Melina Aachen und ihrem Bild architecture.jpg in der Tabelle vorkommen.

Redundanzen gibt es auch bei den kommentierenden Nutzern und zwischen den kommentierenden Nutzern und den Nutzern, welche die Fotos gepostet haben.



Lösung: relationelle Datenbank

Eine effiziente und einfache Lösung des Problems ist die sogenannte relationale Datenbank. Dabei werden die Daten auf mehrere Tabellen verteilt, die miteinander in Verbindung stehen, also verknüpft sind.

Um dies zu erreichen, muss für jede Gruppe von Feldern, die redundante Elemente enthalten, eine neue Tabelle erstellt werden. Man achtet auch darauf, dass die entstehenden Tabellen inhaltlich zusammengehörende Daten enthalten.

In unserem Beispiel gibt es Redundanzen bei den Benutzern und bei den geposteten Bildern. D.h. zusätzlich zur Tabelle „Kommentare“ müssen wir zwei Tabellen „Benutzer“ und „Bilder“ erstellen, welche die Benutzer unseres Netzwrekes und die geposteten Bilder enthalten.

Die Tabelle „Benutzer“ sieht nun folgendermassen aus:

Diese Tabelle enthält nun jeden Benutzer unseres Netzwerkes genau ein Mal. Neben den bereits bekannten Feldern wurde ein neues Feld mit dem Namen „user_id“ hinzugefügt. Dieses Datenbankfeld nennen wir den Primärschlüssel der Tabelle. Dieser dient dazu, alle Benutzer unseres Netzwerkes eindeutig zu identifizieren. Jede Nummer im Feld „user_id“ muss daher absolut eindeutig sein, was bedeutet, sie darf nur ein einziges mal vorkommen!

Primärschlüssel:
Primärschlüssel sind Felder in Tabellen, die für jeden Datensatz (jede Zeile in der Tabelle) einen absolut eindeutigen Wert enthalten. Primärschlüssel dienen dazu, jeden Datensatz eindeutig identifizieren zu können. Man sollte stets versuchen, Namen von Menschen als Primärschlüssel zu vermeiden, da mehrere Menschen gleich heissen können. Das würde dann zu Problemen führen.

Die neue Tabelle „Bilder“ sieht wie folgt aus:

Auch bei der Tabelle der Bilder wurde ein Primärschlüssel photo_id hinzugefügt, damit man die Bilder eindeutig indentifizieren kann. Die gesamten Benutzerdaten werden nun aber nicht mehr in dieser Tabelle gespeichert. Stattdessen speichert man lediglich die user_id des Benutzers, der das Bild gepostet hat.

Und nun kommen wir schliesslich zur ursprünglichen Tabelle „Kommentare“, welche die Kommentare der geposteten Bilder speichert. Sie enthält nun viel weniger Felder, da die Informationen zu den Benutzern und zu den Bildern in den entsprechenden Tabellen gespeichert sind. Damit man aber weiss, um welche Benutzer oder um welches Bild es sich handelt, sind diese durch die Felder photo_user_id, photo_id und com_user_id verknüpft. Man spricht von sogenannten Fremdschlüsseln.

In dieser Tabelle verweist das Feld „photo_user_id“ auf die Tabelle „Benutzer“ und der Inhalt des Feldes entspricht der „user_id“. Der Verweis auf die Tabelle „Fotos“ funktioniert auf ähnliche Weise (über das Feld photo_id, welches in der Tabelle Fotos ebenfalls photo_id heisst). Schliesslich ist auch das Feld com_user_id eine Verknüpfung auf die Tabelle „Benutzer“. Dieser Fremdschlüssel gibt an, welcher Benutzer den Kommentar erstellt hat.

Fremdschlüssel:
Fremdschlüssel sind Datenbankfelder in einer Tabelle, die sich auf Datensätze anderer Tabellen beziehen. Normalerweise bezieht sich ein Fremdschlüssel immer auf den Primärschlüssel der anderen Tabelle.

Bei der Verwendung einer relationalen Datenbank wird der benötigte Speicherplatz geringer sein als beim ursprünglichen Beispiel (mit nur einer Tabelle) und somit das gewünschte Ziel, den Speicherplatz zu reduzieren, erreicht werden.

Relationale Datenbanken:
In Relationalen Datenbanken werden die Daten immer in Form von Tabellen abgespeichert. Dabei hat jede Tabelle einen eigenen Primärschlüssel. Fremdschlüssel werden hiebei benutzt, um verschiedene Tabellen so miteinander zu verbinden, dass Redundanzen möglichst vermieden werden.
Relationale Datenbanken gehören zu den Üblichsten und am meisten verwendeten der Welt und werden heutzutage in fast allen Bereichen eingesetzt.

Das hat aber noch weitere Vorteile: Wenn ein Benutzer beispielsweise seine Mailadresse ändert, genügt es, einen einzigen Eintrag (Datensatz) in der Tabelle „Benutzer“ zu ändern, anstatt mehrere Änderungen in der Tabelle „Kommentare“ zu tätigen. Die Aktualisierung wird also erleichtert. Das gilt auch für Änderungen in der Tabelle Bilder.

Aufgabe Betrachten Sie die unten abgebildeten drei zusätzlichen Zeilen in der Tabelle Kommentare . Was kannst du aus diesen drei Zeilen ablesen? Wer hat das Foto gepostet, wer hat kommentiert und um welches Foto handelte es sich?

In unserer Tabelle „Kommentare“ ist ein Feld immer noch redundant und kann weggelassen werden. Um welches handelt es sich? Erkläre kurz.

Datenbanken 2 - Entwurf und Modellierung

Im Beispiel aus dem letzten Kapitel (Benutzer eines Sozialen Netzwerkes mit geposteten Fotos und Kommentaren) wurden einige grundlegende Konzepte für Datenbanken eingeführt. In der folgenden Liste werden sie noch einmal aufgeführt

  • Tabelle: Eine Datenbank besteht aus Tabellen. Diese werden visuell als Tabellen dargestellt, die Zeilen und Spalten enthalten.
  • Feld: Ein Feld (auch Datenfeld) kann als eine Spalte in einer Tabelle gesehen werden. Es entspricht einem Merkmal in dieser Tabelle. Zum Beispiel entspricht das Feld „comment_body“ in der Tabelle „Kommentare“ einem Kommentar, den ein Benutzer zu einem Foto hinterlassen hat.
  • Datensatz: Ein Datensatz wird durch eine Zeile in einer Tabelle repräsentiert. Beispielsweise enthält die Tabelle „Benutzer“ 12 Datensätze, die jeweils die Informationen eines Benutzers des sozialen Netzwerks enthalten.

Ein Schlüssel ist eine minimale Merkmalskombination, die alle „Zeilen“ (sog. Tupel) innerhalb einer Tabelle eindeutig identifiziert, genauer unterscheidet man zwischen Primärschlüssel und Fremdschlüssel.

Primärschlüssel

Ein übergeordnetes Konzept in relationalen Datenbanken ist das Konzept der Schlüssel. In diesem Modell hat jede Tabelle einen Primärschlüssel (engl. primary key). Der Primärschlüssel einer Tabelle ist ein Feld oder eine Gruppe von Feldern, mit denen ein Datensatz in der Tabelle eindeutig identifiziert werden kann.
Das bedeutet, dass der Inhalt der Datensätze des Primärschlüssels NIE zwischen zwei Zeilen der Tabelle identisch ist. Im Beispiel der Datenbank unseres Sozialen Netzwerkes wird der Primärschlüssel der Tabelle „Benutzer“ durch das Feld „user_id“ gebildet. Jede/r Benutzer/in unseres Netzwerks hat also eine eindeutige Benutzer-ID.Jeder Nutzer und jede Nutzerin kann also eindeutig anhand seiner Benutzer-ID (user_id) identifiziert werden.

Ähnlich kann in der Tabelle „Bilder“ jedes Foto mit dem Primärschlüsselfeld „photo_id“ identifiziert werden. Somit ist auch hier „photo_id“ ein Primärschlüssel. In der Tabelle „Kommentare“ gibt es den Primärschlüssel „comment_id“. Es wäre jedoch auch möglich gewesen, dieses Feld wegzulassen und stattessen einen Primärschlüssel als Gruppe von mehreren vorhandenen Feldern zu definieren. Dies wird Gegenstand einer zu lösenden Übung sein.

Fremdschlüssel

Fremdschlüssel (engl. foreign key) sind Bestandteile einer Tabelle. Dabei handelt es sich um ein Feld (Spalte), die auf einen Primärschlüssel einer anderen (oder aber derselben Tabelle) verweist. Das heisst, dass Fremdschlüssel quasi die Verbindung verschiedener Tabellen ermöglichen, was ein zentrales Konzept relationaler Datenbanken darstellt. In der abgebildeten Tabelle ist beispielsweise photo_user_id ein Fremdschlüssel.

Das Entity-Relationship-Model (kurz ERM) dient der konzeptionellen Darstellung der Elemente einer Datenbank und der Verbindungen zwischen ihnen.
Dieses Modell wurde in den 1970er Jahren von Peter Chen erfunden 1) und wird heute weithin verwendet. Es ermöglicht, die Struktur einer Datenbank auf einfache Weise zu visualisieren.
Um eine robuste Datenbank (robust bedeutetet in diesem Fall qualitativ hochwertig und aus Benutzersicht stabil) zu erstellen, wird ein Datenmodel entworfen . Es geht darum, durch eine Beschreibung der realen Welt (des Bedürfnisses für eine DAtenbank) zur Festlegung einer geeigneten Datenbankstruktur zu gelangen. Im ersten Schritt wird immer mit dem Entwurf des ERM (Entity-relationship-model) begonnen und die relationale Datenbank im zweiten Schritt anhand des ERMs abgeleitet und erstellt. In diesem Entitäten-Beziehungsmodell werden die Entitäten und deren Beziehungen dargestellt.

Entitäten und Beziehungen im Model

Eine Entität sind einzelnes, eindeutig identifizierbares Informationsobjekt, frei übersetzt als „Seiendes“ oder „Ding“. Entitäten werden als Rechtecke dargestellt.
Neben den Entitäten werden die gegenseitigen Beziehungen untereinander als Rauten dargestellt.

In unserem Beispiel vom Sozalen Netzwerk Instahub hat es mindestens zwei Entitäten, je nach dem, was alles beachtet wird. Das sind einerseits die Nutzer und Nutzerinnen des sozialen Netzwerks, andererseits die Fotos. Durch das Posten eigener Bilder oder auch das Kommentieren von Fotos anderer Nutzer stehen die Nutzer, und die Fotos in Beziehung zueinander.

Assoziationen oder auch Kardinalität der Beziehung

Die Assoziationen (teilweise auch Kardinalität genannt) gibt es verschiedene Typen.

  • Einfache Assoziation: jeder Entität wird wieder „genau eine“ Entität zugeordnen, gewissermassen eine 1:1 Beziehung.
    Beispiel 1:Ein Land hat genau eine Hauptstadt. Eine Hauptstadt kann genau einem Land zugeordent werden.
    Beispiel 2: Jeder Schüler hat einen Wiki-Login-Name. Ein Wiki-Login-Name kann einem Schüler zugeornet werden.
  • Konditionelle Assoziation: jeder Entität wird höchstens eine Entität zugeordnet, eine keins-oder-eins Beziehung.
    Beispiel 1: Ein (schweizer) Staatsangehöriger hat genau einen oder keinen (schweizer) Reisepass. Jeder Reisepass gehört einem Staatsangehörigen
    Beispiel 2: Jedes Englischbuch im Klassenzimmer gehört einem Lernenden bzw. einer Lernenden. Nicht unbedingt jeder Lernende muss sein Englischbuch im Klassenzimmer dabei haben.
  • Mehrfache Assoziation: jeder Entität werden „mehrere“ Entitäten zugeordnet. Diese Beziehung ist eine mehr-zu-mehr-Beziehung und wird oft als komplex bezeichnet. Oft spricht man hier auch von einer m:n Beziehung.
    Beispiel 1 einer n:m Beziehung: Im Sozalen Netzwerk können mehrer User mehrere Bilder kommentieren.
    Beispiel 2 einer 1:n Bezieung: Ein bestimmtes Kunstwerk (Bild) kann nur in einem Museum gleichzeitig ausgestellt werden, jedoch hat ein Museum mehrere Kunstwerke ausgestellt.
  • Mehrfach-konditionelle Assoziation: jeder Entität werden „keine, eine oder mehrere“ Entitäten zugeordnet. Im Gegensatz zu der mehrfachen Assoziation ist hier zu nennen, dass nicht zu jeder Entität eine Beziehung zu einer Entität der Zielmenge bestehen muss.

Die Beziehungen lassen sich immer in beide Richtungen lesen. In unserem Beispiel vom Nutzer zum Foto oder vom Foto zum Nutzer.

Nun haben wir in unserem Beispiel die Entitäten ('User' und 'Fotos') und deren Beziehungen ('Posten' und 'Kommentieren') inklusive der Assozationen im ERM-Model gezeichnet. Was noch fehlt, um danach eine Datenbankentwurf umsetzen zu können, sind die Merkmale von Entitäten oder auch jene von Beziehungen.

Einfach ausgedrückt entsprechen Sie den Feldern (als Gedankenstütze man sich könnte dies hier auch als „Tabellenspalten“ oder „Überschriften“ vorstellen), die wir über jede Tabelle abspeichern wollen.

Dabei werden Attribute oval umrahmt abgebildet.
Primärschlüssel werden dabei standardmässig unterstrichen und Fremdschlüssel kursiv geschrieben.

Für unser Beispiel vom Sozialen Netzwerk könnten folgende Attribute dem ERM zugefügt werden.

Kurzer Auftrag 1:
Identifizieren Sie im obigen Model die Primär- und die Fremdschlüssel und bestimmen Sie die restlichen nicht abgebildeten Attribute. Ihr Instahub oder die früheren Tabellen können helfen.

ERM - Aufgabe
  Erstellen Sie ein ERM zum folgenden Szenario. Dies wird sicher am einfachsten auf Papier erstellt. Achtung, vermutlich braucht dies auch etwas Platz!

Szenario:
Sie entwickeln für einen Zoo eine kleine Datenbank. Es geht darum, Tiere, Gehege und Pflegerinnen und Pfleger in die Datenbank aufzunehmen. dabei gelten die folgenden Beziehungen.

Tiere:
Jedes Tier lebt in einem bestimmten Gehege und kann von mehreren Pflegerinnen oder Pflegern gepflegt werden.Über jedes Tier sollen die verschiedenen Attribute abgespeichert werden: Chipnummer, Name des Tiers, Tierart, Fütterungsinformationen (entweder Fleisch, pflanzlich oder gemischt), Alter, Grösse, Gewicht, Geschlecht
Gehege:
Jedes Tier gehört wie schon erwähnt zu genau einem Gehege. In einem Gehege können aber mehrere Tiere gleichzeitig leben! Für jedes Gehege trägt genau ein Tierpfleger oder -pflegerin die Hauptverantwortung. Über jedes Gehege wollen wir die folgenden Attribute abspeichern:Gehegename, Grösse, Gehegetyp (Wüste, Wald, Tropisch, Wasser oder Aquarium)
Tierpfleger oder -pflegerin
Ein Pfleger oder Pflegerin pflegt mehrere verschiedene Tiere. Die / der PflegerIn kann für mehrere Gehege hauptverantwortlich sein. Über jede Pflegerin und jeden Pfleger sollen die folgenden Attribute abgespeichert werden: Personal_ID, Vornamen, Nachnamen, Geburtsdatum, Telefonnummer

Die KANN-Regel bedeutet, dass man bei einer einfach-zu-einfach Beziehung 2 Tabellen erstellen kann, aber nicht miss. Man kann also 2 Tabellen erstellen, wobei es keine Rolle spielt, ob man (in diesem Beispiel Land bei Hauptstadt als Fremdschlüssel definiert oder umgekehrt Hauptstadt bei Land als Fremdschlüssel definiert).

Alternativ ist es hier aber auch möglich, nur 1 Tabelle zu erstellen, die alle Länder und Hauptstädte enthält. In diesem Fall braucht man keinen Fremdschlüssel für diese Beziehung!

Entsprechend ergeben sich beim Beispiel er 1:1 Beziehung (von oben, Land-Hauptstadt) drei mögliche Lösungen:

Lösung 1

Lösung 2

Lösung 3

Abbildungsregel - MUSS-Regel für einfach-mehrfache Beziehungen

Die MUSS-Regel für einfach-mehrfache Beziehungen bedeutet, dass man bei einer einfach-mehrfachen Beziehung immer zwei Tabellen benötigt und auch die Position des Fremdschlüssels klar definiert ist. Im obigen Beispiel muss Der/die RegisseurIn in der Tabelle Filme definiert werden (und nicht umgekehrt), weil jeder Film genau einen oder eine RegisseurIn hat und umgekehrt jeder/jede RegisseurIn in mehreren Filmen Regie führen kann. Würde man also Film bei der Tabelle RegisseurIn als Fremdschlüssel hinzufügen, müsste man jeden/jede RegisseurIn unter Umständen mehrmals in die Tabelle eintragen (je 1 mal pro Film, bei dem er/sie Regie geführt hat). Das wäre jedoch nicht erlaubt, weil wir dadurch Redundanzen hätten und schlussendlich auch mehrere Primärschlüssel derselbigen / demselbigen RegisseurIn zuordnen müssten.

Entsprechend ergibt sich bei beim Beispiel der Beziehung Film-Regisseur(in) die folgende Lösung für die Tabellen:

Lösung

Weiteres Beispiel einer einfach-zu-mehrfachen-Beziehung

  • Jeder Auftrag (zum Beispiel Bestellung) gehört zu genau 1 Kunden, während jeder Kunde mehrere Aufträge tätigen kann

Abbildungsregeln - MUSS-Regel für komplexe Beziehungen

Die MUSS-Regel für komplexe Beziehungen bedeutet, dass man bei komplexen (mehrfach-zu-mehrfach, also n:m) Beziehungen für jede der beiden Entitäten eine Tabelle braucht und zusätzlich für die Beziehung selber eine eigene / weitere / dritte Tabelle erstellen muss. In der dritten Tabelle müssen beide Fremdschlüssel (für beide Entitäten) enthalten sein. Der Primärschlüssel der dritten Tabelle wird aus den beiden Fremdschlüsseln der anderen Tabellen zusammengesetzt.

Entsprechend ergibt sich zum Beispiel (Regie-Film-Schauspieler) die folgende Lösung

Lösung


Beachten Sie die letzte Tabelle, die einen aus 2 Fremdschlüsseln (F_ID & S_ID) zusammengesetzten Primärschlüssel hat. Hier wird lediglich eingetragen, welcher Schauspieler / welche Schauspielerin bei welchem Film mitspielt.

Aufgabe 3) Tabellen Abbilden

  • Sie sollen nun zu zu Ihrem in Aufgabe 2 ertsellten ERM:
    1. Die entsprechenden Tabellen mit Hilfe der Abbildungsregeln ableiten und aufzeichnen / skizzieren
    2. Tragen Sie am Ende einige der folgenden Daten als Beispiele in Ihren Tabellen ein!
    3. Die Tabellen können Sie in Word oder Excel erstellen

Hier finden Sie die Musterlösung des ERM aus Aufgabe 2:

ERM für Zoo einblenden

Szenario:
Sie entwickeln für einen Zoo eine kleine Datenbank. Es geht darum, Tiere, Gehege und Pflegerinnen und Pfleger in die Datenbank aufzunehmen. dabei gelten die folgenden Beziehungen.

  • Tiere:

Jedes Tier lebt in einem bestimmten Gehege und kann von mehreren Pflegerinnen oder Pflegern gepflegt werden. Über jedes Tier sollen die verschiedenen Attribute abgespeichert werden:

  • Tier-Art
  • Name des Tiers
  • Ernährung (entweder Fleisch, pflanzlich oder gemischt)
  • Geburtsdatum
  • Grösse
  • Gewicht
  • Geschlecht
  • Gehege:

Jedes Tier gehört wie schon erwähnt zu genau einem Gehege. In einem Gehege können aber mehrere Tiere gleichzeitig leben! Für jedes Gehege ist genau 1 Pfleger oder Pflegerin Hauptverantwortlich. Über jedes Gehege wollen wir die folgenden Attribute abspeichern:

  • Gehegename (Primärschlüssel)
  • Grösse
  • Gehegetyp (Wüste, Wald, Tropisch, Wasser oder Aquarium)
  • PflegerIn:

Ein Pfleger oder Pflegerin pflegt mehrere verschiedene Tiere. Die / der PflegerIn kann für mehrere Gehege hauptverantwortlich sein. Über jede Pflegerin und jeden Pfleger sollen die folgenden Attribute abgespeichert werden:

  • P_ID (Primärschlüssel)
  • Vornamen
  • Nachnamen
  • Geburtsdatum
  • Telefonnummer

Daten:
Pflegerinnen und Pfleger:

  • Mathilda Schnell, 12.1.2001 pflegt alle Tiger und Löwen und ist für das Gehege Savanna hauptverantwortlich
  • Kurt Dotale, 13.9.1997 pflegt alle Pandabären und ist für das Gehege Exotik 1 und Exotik 2 hauptverantwortlich
  • Micheline Maire, 1.7.1989 pflegt alle Fische und ist für das Gehege Aquarium und Aussengehege verantwortlich
  • Claire Nussbaumer, 1.7.1999, pflegt auch alle Tiger und Löwen und ist für kein Gehege hauptverantwortlich
  • Donald Braun, 1.9.1982 pflegt alle Vögel und ist für für die Tropen und den Nordwald hauptverantwortlich

Tiere:

  • Panda Xiang, hat ein Gewicht von 130 kg und eine Grösse von 125 cm, ist weiblich und lebt im Gehege Tropen. Xiang wurde am 13.1.2009 geboren.
  • Panda Meng, hat ein Gewicht von 145 kg, eine Grösse von 130 cm, ist männlich und lebt im Gehege der Tropen. Meng wurde am 23.2.2011 geboren.
  • Löwe Sama, hat ein Gewicht von 190 kg und eine Grösse von 190 cm, ist männlich und lebt im Gehege der Savanna. Sama ist am 1.1.2001 zur Welt gekommen
  • Löwin Bela, hat ein Gewicht von 155 kg und eine Grösse von 182 cm, ist weiblichund lebt im Gehege der Savanna. Bela ist am 14.4.2007 zur Welt gekommen
  • Ara Kurt, hat ein Gewicht von 1.3 kg und eine Grösse von 35 cm. Der Papagei lebt im Gehege Exotik 1

Gehege:

  • Exotik 1 hat eine Grösse von 400 m^2 und hat den Gehegetypen tropisch
  • Exotik 2 hat eine Grösse von 350 m^2 und hat den Gehegetypen tropisch
  • Tropen hat eine Grösse von 750m^2 und hat den Gehegetypen tropisch
  • Savanna hat eine Grösse von 700 m^2 und ist vom Gehegetypen Savanna
  • Aquarium hat eine Grösse von 30 m^3 und ist vom Gehegetypen Aquarium
  • Nordwald hat eine Grösse von 750 m^2 und ist vom Gehegetypen Wald

Musterlösung:

Tabellen für Zoo-Datenbank einblenden

Lab Datenbanken: Einführung in SQL

Stuctured Quere Language (SQL) ist eine standardisierte Abfrage-Sprache um Daten in Datenbanken zu speichern, zu manipulieren und herauszufiltern (zu erhalten).
In diesem Kapitel lernen Sie ein paar Grundzüge dieser Abfragesprache kennen, die sie für verschiedenste Datenbanksysteme (wie MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres, u.v.m.) verwenden können.

SQL-Klausel Zweck Erklärung
SELECT Gibt die Felder mit den gewünschten Daten an Hiermit lässt sich entscheiden, welche Felder (Spalten) wir anzeigen wollen
FROM Enthält die Tabellen mit den Feldern, die in der SELECT-Klausel angegeben sind In welchen Tabellen liegen die Felder (Spalten), die wir erhalten wollen?
WHERE Gibt Feldkriterien an, die jeder Datensatz erfüllen muss, um in die Ergebnisse einbezogen zu werdenHier lassen sich Datensätze herausfiltern (z.B. wenn wir nur gewisse Daten einer Tabelle anzeigen wollen).

Übung 1: Tutorial durcharbeiten
Öffnen Sie diesen SQL-Playground in einem neuen Browserfenster und gehen Sie Schritt für Schritt durch das folgende SQL Tutorial. Es geht um eine ganz einfache Datenbank über Studentinnen und Studenten.
Probieren Sie bitte alle Abfragen selber aus und studieren Sie die Erklärungen dazu!

Tutorial

Nehmen wir einmal an, wir hätten eine Datenbank mit einer Tabelle namens Students, in der wir verschiedene Informationen über Studentinnen und Studenten abgespeichert haben. Studieren Sie hierzu die folgende Tabelle:

Zunächst mal würden wir gerne herausfinden, welche Tabellen in unserer Datenbank „STUDENTS“ überhaupt enthalten sind und wie diese heissen.
Tippen Sie hierfür den folgenden Befehl ein und klicken Sie auf „RUN“!

SHOW TABLES;


Resultat

Wir sehen nun, dass diese Datenbank aus nur 1 Tabelle besteht, die sich „Students“ nennt.

Wir würden nun gerne eine Tabelle erhalten, bei der wir nur die Nachnamen und Vornamen aller Studentinnen und Studenten haben, also ohne die anderen Felder (wie S_ID, Geburtsdatum, Nationalität, …). Wenn wir das Deutsch ansprechen würde, dann würden wir sagen „NIMM die Vornamen und Nachnamen VON der Tabelle Students!
Im folgenden Beispiel machen wir genau das, aber mit der Sprache SQL ausgedrückt. Also SELECT Nachname, Vorname FROM Students.
Beachten Sie, dass jedes SQL-Statement mit einem Semikolon ; abgeschlossen werden muss!

Abfrage

SELECT Nachname, Vorname 
FROM Students;


Resultat

Beim obigen Beispiel sehen wir schön, wie wir mit Hilfe der SELECT-Klausel die anzuzeigenden Felder anwählen können. Wir können also die Tabelle sozusagen vertikal (von oben nach unten) filtern.
Wenn wir nun jedoch die Tabelle stattdessen horizontal (von links nach rechts) filtern wollen, also nur gewisse Datensätze erhalten wollen, macht man dies mit Hilfe der WHERE-Klausel. Studieren Sie hierzu das folgende Beispiel!

Probieren Sie die folgenden beiden Abfragen. Inwiefern unterscheiden sich diese?

SELECT Nationalität
FROM Students;


SELECT DISTINCT Nationalität
FROM Students;


Probieren Sie das folgende Beispiel aus:

SELECT Nachname, Vorname, Nationalität
FROM Students
WHERE Nationalität="Schweiz";

Vergleichsoperatoren

Zeichen Bedeutung
= Gleich wie
> Grösser als
>= Grösser oder gleich gross wie
< Kleiner als
<= Kleiner oder gleich gross wie
<> Ungleich wie (unterschiedlich)
BETWEEN a AND b Zwischen a und b

Wenn wir nun zum Beispiel wissen wollen, wer alles vor dem Jahr 2000 geboren ist, könnten wir das in der WHERE-Klausel mit dem folgenden Query realisieren:

SELECT Nachname, Vorname, Nationalität, Geburtsdatum
FROM Students
WHERE Geburtsdatum<"2000-01-01";

Die WHERE-Klausel lässt sich beliebig mit den Ausrücken AND und OR erweitern. Falls wir zum Beispiel alle Studentinnen und Studenten finden wolle, die entweder aus der Schweiz oder (OR) aus Deutschland stammen, würden wir das folgende Query eingeben:
Probieren Sie es aus!

SELECT Nachname, Vorname, Nationalität
FROM Students
WHERE Nationalität="Schweiz" OR Nationalität="Deutschland";

Um Beipsielsweise alle Studenten zu finden, die aus Deutschland stammen und (AND) als Vornamen Sven heissen, würden wir das mit folgendem Query bewerkstelligen:
Probieren Sie es aus!

SELECT Nachname, Vorname, Nationalität
FROM Students
WHERE Nationalität="Deutschland" AND Vorname="Sven";

Möchte man alle Spalten einer Tabelle auswählen, dann braucht man nicht zwingend alle Felder der Tabelle nach der SELECT-Klausel manuell anzugeben. Man kann hierfür auch das Asterikszeichen * verwenden. SELECT * bedeutet also, dass alle Spalten einer Tabelle angewählt werden. Siehe folgendes Beispiel:

SELECT *
FROM Students
WHERE Nationalität="Deutschland";

Versuchen Sie nun sich selbst in die Tabelle der Datenbank einzufügen. Dazu können Sie den Befehl INSERT INTO verwenden.
Sie dürfen alternativ auch einen Namen erfinden, falls Sie selbst nicht in die Datenbankeingetragen werden wollen!
Passen Sie auf, dass sie eine noch freie „S_ID“ verwenden. Diese muss ja eindeutig sein!
Ersetzen Sie also im folgenden Query jeweils die Punkte …

INSERT INTO Students (S_ID, Nachname, Vorname, Geburtsdatum, Nationalität)
VALUES (..., "...", "...", "...","...");

Überprüfen Sie nun mit einer Abfrage, ob Sie in der Datenbank vorhanden sind!

Beispiel count

In SQL lassen sich auch gewisse Funktionen auf Tabellenfelder anwenden. Studieren Sie hierzu das folgende Beispiel:
Es werden alle S_ID in der Tabelle Students ausgewählt und gezählt, wie viele dies sind. Mit anderen Worten wird also gezählt, wie viele Studentinnen und Studenten in der Tabelle vorhanden sind:

SELECT COUNT(S_ID)
FROM Students;
  • Überprüfen Sie nun die folgenden zwei Abfragen. Inwiefern unterscheiden sich diese? Was macht „distinct“ in der zweiten Abfrage genau?
SELECT COUNT(Nationalität)
FROM Students;
SELECT COUNT(DISTINCT Nationalität)
FROM Students;

Beispiel min / max, avg, sum

Ähnlich wie die Funktion count, lassen sich auch weitere Funktionen, wie min (den kleinsten Wert), max (den grössten Wert), sum (die Summe) und avg (den Mittelwert) einsetzen. Neben zum Beispiel im folgenden Query wird die älteste Studentin in der Tabelle ermittelt. Dazu wird die Funktion min auf das Geburtsdatum angewendet:

SELECT MIN(Geburtsdatum)
FROM Students;

Funktionen können auch auf verschiedene Gruppen angewendet werden. In der folgenden Abfrage werden die Studentinnen und Studenten nach Nationalität gruppiert und für jede Gruppe (also jede Nation) die Anzahl Studentinnen und Studenten gezählt:
Testen Sie es:

SELECT Nationalität, COUNT(S_ID)
FROM Students
GROUP BY Nationalität;

Mit der Klausel ORDER BY können resultierende Tabellen aufsteigend nach einem Kriterium (z.B. Geburtsdatum) sortiert werden.

SELECT *
FROM Students
ORDER BY Geburtsdatum;

Möchte man die Sortierung umdrehen, also absteigend sortieren, braucht man nur den Begriff DESC noch hinzuzufügen:

SELECT *
FROM Students
ORDER BY Geburtsdatum DESC;

Manchmal ist es notwendig, SQL-Abfragen zu verschachteln. Nehmen wir einmal an, wir wollen den Nachnamen, Vornamen und Geburtsdatum der jüngsten Studentin / des jüngsten Studenten herausfinden. Dazu müssen wir zunächst mit dem folgenden Query das „grösste“ Geburtsdatum herausfinden:

SELECT MAX(Geburtsdatum)
FROM Students;

In einem zweiten Schritt müssen wir nun herausfinden, welcher Student / welche Studentin genau zu diesem Geburtsdatum gehört. Dazu brauchen wir das vorherige Query in normale Klammern gesetzt in der WHERE-Klausel. Das würde dann wie folgt aussehen:

SELECT Nachname, Vorname, Geburtsdatum 
FROM Students
WHERE Geburtsdatum =
    (SELECT MAX(Geburtsdatum)
    FROM Students);

Beachten Sie, dass die Klammern für das „innere“ Query zwingend notwendig sind!

Terra-Datenbank

Bei der Terra-Datenbank handelt es sich um eine Datenbank über die Erde und eine Vielzahl von geografischen Objekten (wie Städte, Berge, Seen, Länder, etc.). Die Datenbank enthält also eine relativ grosse Menge an Daten.
(Die Datenbank erhebt keinen Anspruch an Vollständigkeit)

Übung 2: Terra-Datenbank
Öffnen Sie wiederum diesen SQL-Playground in einem neuen Browserfenster. Wählen Sie oben rechts im Dropdown-Menü die Datenbank „Terra“ aus!
Bei dieser Datenbank können Sie nur Lese-Operationen durchführen.

Lösen Sie alle geforderten Aufgaben (Abfragen von a) bis p) ) direkt im angehängten Word-Dokument. Kopieren Sie also jeweils ihre gefundenen SQL-Abfragen direkt ins Dokument und speichern Sie dieses!

Speichern Sie bitte das Dokument in Ihrem Informatik-Ordner ab!

Lösungen:

Spiel SQL Island

Freiwillige Übung 3: Flucht von SQL Island
Nach einem Flugzeugabsturz Sind Sie auf der SQL Island gelandet. Ziel ist es, mit Hilfe von SQL-Befehlen wieder von der Insel weg zu kommen. Schaffen Sie es?
Öffnen Sie diese Seite und versuchen Sie es. Sie brauchen dafür einiges an SQL-Statements. Aber keine Angst, das Spiel ist für Anfänger gemacht ;-)


1)
Wikipedia, Freie Enzyklopädie, 2020
  • planung/datenbanken.1684783428.txt.gz
  • Zuletzt geändert: 2023/05/22 21:23
  • von marroc