Praktische Einführung und Programmierung
Stefan Bosse
Universität Koblenz - FB Informatik
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken ::
Datenstrukturen
Algorithmen
Anwendungen
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Motivation
Datenbanken sind eine wichtige "Anwendung" für Algorithmen und Datenstrukturen.
Eine Datenbank zentralisiert Datenspeicherung und Datenorganisation (wenn auch DBs selbst verteilt sein können)!
Links: Mehrere Anwendungen verwalten ihre Daten selbst in Dateien. Rechts: Die Daten aller Anwendungen werden in einer gemeinsamen Datenbank von einem Datenbankmanagement-System verwaltet.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Motivation
Die wichtigsten Vorteile von Datenbankmanagement-Systemen im Vergleich zu einer dateiorientierten Strategie sind:
Die Daten werden in der Regel unabhängig von den Anwendungen gespeichert, die diese verwenden.
Die Daten werden in der Regel nur einmal zentral verwaltet und nicht redundant an mehreren unabhängigen Stellen. Damit sinkt das Risiko von Inkonsistenzen (mehrere unterschiedlich geänderte Kopien derselben Daten). Zusätzlich wird dadurch weniger Speicherplatz benötigt.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Motivation
Die Daten werden nicht nur persistent gespeichert, das Datenbankmanagement-System (DBMS) sorgt für die Konsistenz der Daten, auch wenn die Anwendung mitten in einer Operation abstürzt. Auch wenn die Datenbank zerstört ist, kann sie mithilfe von Backup und Recovery wieder hergestellt werden.
Das DBMS ermöglicht, dass viele Anwendungen bzw. Benutzer quasi gleichzeitig lesend und auch schreibend zugreifen können. Hierzu werden Konzepte wie Transaktionen angeboten.
DBMS: Datenbankmanagement-System, die Softwareschnittstelle und das Ausführungsprogramm
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Motivation
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Daten und Datenstrukturen
je nach Datenbankmodell können verschiedene Daten und Datenstrukturen gespeichert und verarbeitet werden:
Name / Wert-Paare dienen dazu Daten wiederzufinden. Dazu müssen diese eindeutig identifizierbar sein. Im einfachsten Fall ist das ein eindeutiger Name (wie die Pfad- und Dateinamen in einem Dateisystem). Das kann auch ein aus den Daten selbst berechneter Hash-Wert sein. Damit wäre jede Entität bzw. jedes Objekt jeweils ein Wert. Als identifizierender Name kann eventuell eines der Attribute verwendet werden.
Die Tabelle ist eine sehr häufige Darstellungsform von Daten, besonders im Bereich betriebswirtschaftlicher Anwendungen. Aus einem Entitätstyp bzw. einer Klasse wird im einfachsten Fall eine Tabelle. Aus jedem Attribut wird eine Spalte. Objekte bzw. Entitäten sind jeweils die Zeilen. Tabellen sind die Grundlage der relationalen Datenbankmanagement-Systeme.
Die Baumstruktur: Von einer Wurzel aus sind die anderen Knoten erreichbar. Aus einem Entitätstyp bzw. einer Klasse wird eine Menge von Bäumen. Ein Objekt bzw. eine Entität wird als Baum dargestellt werden: Jedes Attribut ist ein innerer Knoten oder ein Blatt. Baumstrukturen bieten verbesserte Sucheigenschaften.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Daten und Datenstrukturen
Ein Gerichteter Graph: Wenn die Objekte bzw. Entitäten sich untereinander häufig referenzieren, kann dies gut als gerichteter Graph dargestellt werden mit den Objekten bzw. Entitäten als Knoten und den jeweiligen Referenzen als (annotierte) Kanten.
Zeitreihe und zeitabhängige Daten: Ein Sensor misst eine physikalische Größe, zu speichern sind Zeitpunkt und Messwert. Das wäre ein Objekt bzw. eine Entität. Eventuell kommen noch Metadaten dazu wie die Geoposition und die physikalische Einheit in der der Sensor misst. Regelmäßiges Messen erzeugt so eine Zeitreihe.
(Text) Dokumente: (Internet-) Anwendungen erzeugen teilweise große Mengen von mehr oder weniger strukturierten Textdokumenten, auch die Log-Ausgaben zählen dazu. Damit wäre ein Textdokument, z. B. ein Text über einen Mitarbeiter ein Objekt bzw. die Entität. Möglicherweise gibt es dazu eine Klasse, die Strukturvorgaben an das Dokument macht.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Daten und Datenstrukturen
Überblick über verschiedene Möglichkeiten Daten darzustellen. a) als Menge von Name-Wert Paaren, b) als Tabelle oder in mehreren Tabellen, c) als Zeitreihe, d) als Menge von Bäumen, e) als ungerichteten oder gerichteten annotierten Graphen oder f) als Menge von (Text-) Dokumenten
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Zugriffsmuster auf gespeicherte Daten
Was sind nun Kriterien zur Wahl einer bestimmten Repräsentation der Daten als Baum, Graph oder Tabelle?
Ein Entitätstype besteht aus einer Klasse mit Attributen
Im einfachsten Fall wird aus jedem Entitätstyp eine Tabelle modelliert
Die Attribute werden jeweils zu Spalten. Ein identifizierendes Attribut ist dabei der Primärschlüssel der Tabelle.
Entity-Relationship-Modell der Relationen Mitarbeiter und Abteilung
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Zugriffsmuster auf gespeicherte Daten
Die Beziehung zwischen Mitarbeiter und Abteilung ist 1 zu N,
Dies wird über einen Fremdschlüssel dargestellt, die Tabelle Mitarbeiter hat eine Spalte mit Abt. Nr. Werten, diese sind Primärschlüssel in der Abteilung-Tabelle.
Dies war ein Beispiel für die Übersetzung eine logischen Datenmodells in Form eine ER-Modells bzw. Klassenmodells auf ein physisches Datenmodell in Form von Tabellen.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Zugriffsmuster auf gespeicherte Daten
kap16db Abbildung des ER-Modells auf Tabellen und auf eine Baumstruktur
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Datenbankmanagement-Systeme
Das relationale Datenbankmodell und darauf aufbauende relationale Datenbankmanagement-Systeme (RDBMS) gehen auf eine in 1970 veröffentlichte Arbeit von E. F. Codd zurück.
Unter einer Relation versteht man im Zusammenhang mit dem relationalen Datenmodell eine logische Zusammenfassung von Informationen in einer Form, die in etwa einer Tabelle vergleichbar ist.
Zur eindeutigen Identifikation aller Zeilen der Relation sollte diese einen Primärschlüssel (Pri-mary Key) besitzen (vorhandenes Attribut oder erzeugte Nummer ID).
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Datenbankmanagement-Systeme
Die Relation Mitarbeiter hat vier Attribute (Namen PersonalNr , Name , Gehalt und AbteilungsNr) drei Zeilen (also insgesamt drei 4-Tupel). Die Relation Abteilung hat drei Attribute (AbteilungsNr , Name und Standort) sowie vier Zeilen (also insgesamt fünf 3-Tupel). Die (Primär)Schlüssel der beiden Tabellen sind jeweils für jede Zeile eindeutig: PersonalNr ist Schlüssel der Relation Mitarbeiter und AbteilungsNr ist Schlüssel von Abteilung.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Beziehungen (Relationships)
Relationen und ihre Tupel bzw. Tabellen und ihre Zeilen können nicht isoliert betrachtet werden.
Relationen können also in Beziehung zu einander stehen, wie dies schon in den ER-Modellen in Form der Beziehungen (Relationships) zwischen den Entitäten zum Ausdruck kommt. Abhängig von den Kardinalitäten unterscheidet man:
1:1 Beziehungen ⇒ Zu einem Tupel gehört genau ein anderes Tupel.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
Eine Algebra besteht aus einer Grundmenge und einer Menge von Operationen, die auf dieser Grundmenge definiert sind und deren Ergebnisse wieder in der Grundmenge liegen.
In unserem Fall ist die Grundmenge die Menge aller Relationen (Tabellen), die Operationen bilden eine oder mehrere Relationen wieder auf Relationen ab und können flexibel miteinander verknüpft werden.
Die relationale Algebra legt ein mathematisches Fundament für relationale DBMS.
Eine Datenbank-anfrage kann mathematisch vergleichsweise einfach modelliert werden.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
Anwendung der Selektion auf die Relation Mitarbeiter
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
Anwendung der Projektion auf die Relation Mitarbeiter
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
Aus den Relationen Rel 1 und Rel 2 entsteht durch Rel 1 × Rel 2 eine neue Relation
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
Aus den Relationen Abteilungen A und Abteilungen B entsteht die rechts abgebildete Relation durch Abteilungen A ∪ Abteilungen B
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
Aus den Relationen Abteilungen A und Abteilungen B entsteht die rechts abgebildete Relation durch Abteilungen A ∩ Abteilungen B
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
Aus den Relationen Abteilungen A und Abteilungen B entsteht durch Abteilungen A − Abteilungen B die rechts abgebildete Relation
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
In der Relation Rel 1 gibt es nur einen Wert für Attribut 1.1, der mit allen Werten von Attribut 2.1 aus Rel 2 vorkommt: Tupel sind (2, A) und (2, B), der Wert ist damit 2. Dieser Wert findet sich in der Ergebnisrelation
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Relationale Algebra
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
Mit SQL (Structured Query Language) steht eine Sprache zur Verfügung, mit der alle Funktionen auf relationalen Datenbanken ausgeführt werden können. Eine Basis von SQL ist die im vorangegangenen Abschnitt eingeführte Relationenalgebra.
Der wesentliche Unterschied zwischen Sprachen wie Java oder C und SQL liegt in der Art und Weise wie Anweisungen formuliert werden. In SQL-Anweisungen wird nicht beschrieben wie ein Datenbankzugriff zu erfolgen hat (algorithmisch, prozedural), es wird vielmehr beschrieben, was der Anwender beabsichtigt (deklarativ).
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
Wenn ein DBMS eine SQL-Anweisung ausführt, muss daher eine Umsetzung in prozedurale Anweisungen erfolgen, da nur solche durch einen Computer ausführbar sind.
Dies kann geschehen durch Umwandlung von SQL-Ausdrücken in Ausdrücke der relationalen Algebra, die dann ihrerseits in einer Sprache wie C unter Verwendung von Konzepten wie B-Bäumen oder Hashing ausgeführt werden können.
SQL basiert zwar auf der relationalen Algebra, besteht aber keineswegs nur aus einfachen Zuordnungen von SQL-Anweisungen zu den Operationen der relationalen Algebra.
Auch wurden die mathematisch geprägten Ausdrücke der relationalen Algebra durch eher umgangssprachliche Formulierungen ersetzt und die Operationen durch Schlüsselworte der Sprache SQL:
Relation → Tabelle, Tupel → Satz oder Zeile und Attribut → Spalte.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
Zusammenstellung der wichtigsten SQL-Anweisungen der DDL
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
Zusammenstellung der wichtigsten SQL-Datentypen
Zusammenstellung der DML Anweisungen in SQL
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
Es muss ein Schema angegeben werden dass die Spalten definiert (Name, Typ, weitere Attribute)
Zu jeder Spalte der Datenbank wird ein Name und ein Wertebereich (Datentyp) angegeben. SQL gibt ein eigenes Typsystem vor.
CREATE TABLE Mitarbeiter ( PersonalNr int primary key, Name varchar(100) not null, Gehalt int, AbteilungsNr int, foreign key (AbteilungsNr) references Abteilungen (AbteilungsNr));
Erzeugung einer nicht existierenden Tabelle "Mitarbeiter"
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
Um Daten in eine Tabelle einzufügen, zu ändern oder zu löschen bietet SQL die drei Anweisungen INSERT , UPDATE und DELETE an. Diese Anweisungen zählen wie das Suchen zur Data Manipulation Language (DML) innerhalb von SQL.
INSERT INTO Mitarbeiter VALUES (104, ’Beneken’, 38000, 5);INSERT INTO Mitarbeiter (PersonalNr, Name, Abteilung) VALUES (106, ’Schmidt’, 5);
Einfügen von Zeilen in die Tabelle "Mitarbeiter"
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
SELECT <Liste von Spalten evtl. mit Berechnungen> FROM <Liste mit Tabellen und Sichten> [WHERE <Bedingung>]
SELECT -Anweisung oder auch SELECT-FROM-WHERE -Anweisung (SFW).
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
Nach dem Schlüsselwort FROM folgt ein Tabellenname oder eine Liste von Tabellennamen. Wenn keine weiteren Bedingungen hinter WHERE spezifiziert sind, wird das kartesische Produkt (×) aller angegebenen Tabellen gebildet.
Die Zeilen in der Ergebnistabelle werden mit WHERE eingeschränkt: Eine Bedingung liefert für die Zeilen, die in das Ergebnis übernommen werden sollen true und für alle anderen false . In der relationalen Algebra ist dies die Selektion σ Bedingung .
SELECT Name, Gehalt FROM Mitarbeiter WHERE AbteilungsNr = 3 AND Gehalt > 80000
Beispiel einer selektiven und konditionalen Suchanweisung
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Die Datenbanksprache SQL
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Ein Datenbank Dateisystem
Ein Dateisystem ist i.A. ein hierarchischer Baum (oder Graph)
/
getrenntEin Pfad beginnend beim Wurzelknoten /
ist eine Referenz zu einem Verzeichnis oder einer Datei.
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Ein Datenbank Dateisystem
CREATE TABLE FolderNNN ( Name char, Type int, Site int, Date datetime, Content char);
Type=1: Verzeichnis, Type=2 (Text): Datei, NNN = Fortlaufende Nummerierung 001, 002, ..
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Ein Datenbank Dateisystem
CREATE TABLE Folder000 (Name char, Type int, Size int, Date datetime, Content char);INSERT INTO Folder000 values ("foo", 2 , 11 , "Today" , "Hello World"), ("foo2", 2 , 3 , "Yesterday" , "Joe"), ("dir1", 1 , 0 , "1.1.1970" , "Folder001");CREATE TABLE Folder001 (Name char, Type int, Size int, Date datetime, Content char);INSERT INTO Folder001 values ("foo", 2 , 4 , "Today" , "End."),
Ein einfaches Dateisystem
Wie kann man nun aber Pfade auflösen und an die Inhalte von Dateien gelangen oder tiefere Verzeichnisse lesen (listen)?
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Rekursive SQL Queries
Man kann einen solchen Dateisystempfad nur rekursiv mit Variablen über mehrere Tabellen hinweg auflösen und das Ergebnis ermitteln.
Beispiel Stammbaum
CREATE TABLE family( name TEXT PRIMARY KEY, mom TEXT REFERENCES family, dad TEXT REFERENCES family, born DATETIME, died DATETIME -- NULL if still alive -- other content);
Beispiel Stammbaum
Stefan Bosse - Algorithmen und Datenstrukturen - Modul DB Datenbanken :: Rekursive SQL Queries
WITH RECURSIVE parent_of(name, parent) AS (SELECT name, mom FROM family UNION SELECT name, dad FROM family), ancestor_of_alice(name) AS (SELECT parent FROM parent_of WHERE name='Alice' UNION ALL SELECT parent FROM parent_of JOIN ancestor_of_alice USING(name))SELECT family.name FROM ancestor_of_alice, family WHERE ancestor_of_alice.name=family.name AND died IS NULL ORDER BY born;
Rekursive Stammbaumiteration