Dies ist eine alte Version des Dokuments!


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 (ein sogenanntes Attribut) dar, beispielsweise 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.



Aufgabe 1
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 sind dies?
  4. Wer hat am meisten Bilder gepostet und wie viele sind dies?
  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 (Usernamen) ändert? Oder wenn ein gesamtes Nutzerprofil 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:
Redundant bedeutet mehrfach (im Überfluss) vorhanden sein, beispielsweise in der Programmierung wenn oft die gleiche Programmzeile oder ein ganzes Stück eines Programms sich immer wieder im Code wiederholt (so wird ein Programm sehr viel länger) oder auch hier bei den Datenbanken ist die Redundanz ein Thema.
Redundanzen bedeutet hier, dass Informationen unnötigerweise mehrmals in der Datenbank 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 Netzwerks 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 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. Diese drei Felder sind Primärschlüssel von anderen Tabellen und man spricht hier 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 hierbei 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 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 2

  • Betrachten Sie die unten abgebildeten drei zusätzlichen Zeilen in der Tabelle Kommentare . Was können Sie 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 und warum? Erklären Sie kurz.

Nun werden Sie selbst Administrator/in deines eigenen Netzwerkes namens InstaHub. Dies beinhaltet Nutzer, Fotos, Kommentare und noch vieles mehr. Sie haben als Administrator alle Rechte über die Nutzer und kennen alle Daten der Nutzer.
Jeder und jede Lernende hat sein bzw. ihr eigenes Netzwerk, welche sich durch die Namen unterscheiden. Unter dem Link xyz.instahub.org, wobei xyz Ihr persönlicher Teil des Links ist (vgl. Lektion) erreichen Sie Ihre Seite und kann sich jeder mit dem Benutzernamen admin und dem Ihnen mitgeteilten persönlichen Passwort einloggen.

Klicken Sie zunächst auf das Datenbanksymbol oben rechts (das mittlere Symbol, siehe Abbildung) und wählen Sie „Suchen“.
Danach können Sie Ihre Social-Netzwerk-Datenbank durchsuchen. Standardmässig ist als einziges die Tabelle „Users“ gefüllt, d.h. Ihr Netzwerk besteht aus ca. 200 Benutzern, die jedoch noch nichts gepostet haben. 
Wählen Sie die Tabelle „users“ aus und bearbeiten Sie mithilfe der Hacken ✔ „Spalten filtern“ (welche Spalten sollten dargestellt werden) und ✔ „Ergebnisse Filtern“ (welche Zeilen sollen ausgewählt und herausgefiltert werden) die folgenden Aufträge:







Aufgabe 3
Filtern Sie die folgenden Daten aus der Tabelle „users“:

  1. Alle Benutzer, wobei nur der Name und die Email-Adresse angezeigt weden.
  2. Nur die weiblichen oder nur die männlichen Benutzer/innen. Welches Geschlecht kommt in deinem Netzwerk häufiger vor?
  3. Die Benutzer/innen, welche das Wort „Johan“ im Benutzernamen haben.
  4. Die Benutzer/innen, die noch nicht 18 Jahre alt sind.
  5. Die Benutzer/innen, die zwischen 17 und 22 Jahre alt sind.
  6. Die Benutzer, die kleiner als 1.65m und die Benutzerinnen, die grösser als 175 sind.
  • gf2/datenbanken/einleitung.1684694981.txt.gz
  • Zuletzt geändert: 2023/05/21 20:49
  • von marroc