Im Rahmen des Trainee-Programms haben wir bei Marco Lehmann (Fachhochschule OST) einen Workshop zum Thema Datenbanken besucht. Die wichtigsten Erkenntnisse aus dem ersten Teil haben wir für euch hier zusammengefasst.

 

Relationale Datenbankmanagementsysteme

Relationale Datenbankmanagementsysteme (RDBMS) sind Datenbankserver, die Tabellen und die darin gespeicherten Daten verwalten. Eine Datenbank kann aus mehreren Tabellen (Relationen) bestehen, die wiederum mehrere Spalten (Columns/Attribute) und Zeilen (Rows/Tupel) haben kann. Dabei bezeichnet man eine Auswahl von Spalten als Projektion. Ausserdem unterscheidet man zwischen den beiden Begriffen „Daten“ und „Datenbankstruktur“. Während sich Ersterer auf den Inhalt einer Tabelle bezieht, bezeichnet Letzterer den Aufbau der gesamten Datenbank und die Relationen der unterschiedlichen Tabellen zueinander. Zur Veranschaulichung sehen wir unten zwei Bilder, die die Tabelle „authors“ mit Daten von verschiedenen Buchautoren (links) und die Datenbankstruktur der gesamten Datenbank (rechts) zeigen. Auf diese Datenbank wird nachfolgend in einigen Beispielen zurückgegriffen.

Daten Datenbankstruktur

 

Die Abfragesprache SQL

Die Abfragesprache SQL (Structured Query Language) ist seit vielen Jahren das „Arbeitspferd“ im Umgang mit Daten. Sie wurde speziell für Datenbanken entwickelt, ist (mehr oder weniger) standardisiert und ermöglicht das Arbeiten mit einem Datenbankserver. Es folgt eine Übersicht über die wichtigsten Operationen und dazugehörigen Befehle in SQL. Die Beispiele beziehen sich auf die Datenbank, die im Bild zur Datenstruktur dargestellt ist.

 

Normalformen

Gute, saubere Daten sind eine Voraussetzung für fehlerfreie Anwendungen, gute Wartbarkeit und effiziente Analysen. Um eine Datenbank so zu modellieren, dass keine Redundanzen auftreten, können wir sie in die sogenannte Normalform bringen. Um die Definition der ersten, zweiten und dritten Normalform zu verstehen, müssen wir zuerst folgende Definitionen betrachten:

Erste Normalform

Eine Tabelle ist in erster Normalform (1NF), wenn alle Attributwerte atomar sind, d. h. nicht mehr weiter aufteilbar sind.

Beispiel: Ein Attribut namens „Adresse“ mit Werten der Form XXXX Ort (z. B. 8001 Zürich) kann aufgeteilt werden in zwei Attribute „PLZ“ und „Ort“.

Tabelle vor 1 NF

Folgende Tabelle ist dann in 1NF.

Tabelle in 1NF

Zweite Normalform

Eine Tabelle ist in zweiter Normalform (2NF), wenn sie in 1NF ist und folgendes zutrifft:

Beispiel: Bank hängt nicht vom ganzen Schlüssel {Konto_Nr, BankID} ab, sondern nur vom Teilschlüssel {BankID}.

Tabelle vor 2NF

Die zweite Normalform wird erreicht, indem die Tabelle in diese Entitäten zerlegt wird.

Tabelle in 2NF

Redundanz wurde entfernt: Raiffeisen kommt nur noch einmal vor.

Dritte Normalform

Die dritte Normalform ist genau dann erreicht, wenn sich das Relationsschema in der 2NF befindet und kein Nichtschlüsselattribut von einem Schlüsselkandidaten transitiv abhängt. Anders ausgedrückt: ein Nichtschlüsselattribut darf nicht von einer Menge aus Nichtschlüsselattributen abhängig sein. Ein Nichtschlüsselattribut darf also nur direkt von einem Primärschlüssel (bzw. einem Schlüsselkandidaten) abhängig sein.

Beispiel: Das Nichtschlüsselattribut „Inhaber_PLZ“ hängt vom PK (primary key) ab, das Nichtschlüsselattribut „Inhaber_Ort“ hängt vom Nichtschlüsselattribut „Inhaber_PLZ“ ab und „Inhaber_Ort“ hängt somit transitiv (indirekt) vom PK ab.

Tabelle vor 3NF

Die 3NF wird erreicht, indem die Relation aufgeteilt wird, wobei die voneinander abhängigen Daten in eine eigene Tabelle ausgelagert werden. Der Schlüssel der neuen Tabelle muss als Fremdschlüssel in der alten Tabelle erhalten bleiben.

Tabelle in 3NF

Jede der drei Tabellen ist in 1NF, 2NF und 3NF.

Praxistipps zu Normalformen

 

ERM: Entity-Relationship-Model

Der Entwurf der Datenbank spielt bei der Entwicklung von Informationssystemen eine zentrale Rolle. Der erste Analyseschritt beinhaltet die Modellierung der Information. Das sogenannte Entity-Relationship-Model (ERM) ist eine Darstellung, mit der Daten semantisch beschrieben werden können. Diese Beschreibung ist unabhängig von der eingesetzten Technologie; das ERM wird erst in einem nächsten Schritt auf das relationale Modell (RM) abgebildet (siehe nächstes Kapitel).

Ein ERM beantwortet folgende Fragen:

An folgendem Diagramm können die Grundbegriffe des ERMs veranschaulicht werden.

ERM

Beachte jeweils die spezifische Form des Objekts. Wir können Folgendes definieren:

 

Vom ERM zum RM

Im Folgenden wird es darum gehen, wie man nach der Informationsmodellierung mit dem ERM, letzteres in eine relationale Datenbank (RM) implementiert. Während die Informationsmodellierung, also das Erstellen des ERMs, anspruchsvoll und nicht immer eindeutig ist, ist die Abbildung desselben in ein relationales Datenbankmodell einfach und kann kochbuchartig erfolgen. Es gelten folgende Regeln:

 

DB-Programmierung

Datenbanken können nicht nur Daten speichern und SQL ausführen, sondern es kann auch datenbankseitig programmiert werden, beispielsweise um Regeln zu implementieren oder Daten zu normalisieren. Nachfolgend werden einige DB-Objekte erklärt.

Sequenzen (SEQUENCE)

Sequenzen sind Zähler, die bei jedem Aufruf garantiert einen eindeutigen Wert zurückgeben. Beispielsweise wird bei einem INSERT in eine Tabelle mit einem künstlichen Schlüssel der neue Schlüssel aus einer Sequenz eingelesen, wie in folgendem Beispiel dargestellt.

Erstellen eines SEQUENCE

CREATE SEQUENCE SEQ_PK_Club START WITH 1
 
SELECT NEXT VALUE FOR SEQ_PK_Club
SELECT NEXT VALUE FOR SEQ_PK_Club
 
-- DROP SEQUENCE SEQ_PK_Club
 
INSERT INTO Club (id, name, logo) VALUES (NEXT VALUE FOR SEQ_PK_Club, 'Olympique Lyonnais', 'some link')

Views

Eine View ist eine gespeicherte Abfrage (SELECT Statement), welche das Abspeichern und einfaches Wiederverwenden häufig verwendeter Abfragen oder komplizierter JSONs ermöglicht.

Betrachte folgendes SELECT-Statement:

Beispiel eines SELECT-Statements

SELECT s.id, s.name, c.club_name
FROM Spieler AS s INNER JOIN Club AS c ON s.club_id = c.id

Diese kann wie folgt als View gespeichert werden:

Erstellen einer VIEW

CREATE VIEW V_SpielerClub
AS
SELECT s.id, s.name, c.club_name
FROM Spieler AS s INNER JOIN Club AS c ON s.club_id = c.id

Und dann wie ein TABLE angewendet werden:

Verwenden der VIEW

SELECT *
FROM V_SpielerClub
WHERE club_name = 'Olympique Lyonnais'

Beachte, dass Abfragen auf eine View langsam sein können, je nach Komplexität der Abfrage, die sich hinter ihr verbirgt. Beispielsweise kann ein komplexer Join zu einer langsamen Abfrage führen.

Materialized View

Die «materialized» View ermöglicht effizienteres Abfragen als die normale View. Im Gegensatz zur Letzteren, wo nur die Abfrage selbst gespeichert wird, nicht aber die Resultate der Abfrage, speichert die «materialized» View auch die Resultate.

Weitere Datenbank-Objekte

Weitere DB-Objekte sind:

 

NoSQL

In vielen Situationen sind RDBMS die richtige Lösung und es braucht keinen NoSQL-Ansatz. Aber:

OR-Mapper werden verwendet, um Objekte einer in einer objektorientierten Sprache geschriebene Anwendung in eine relationale Datenbank zu speichern. Das zugrundeliegende Problem, das beim Verbinden der zwei Welten (OOP und RM) auftritt wird als „object-relational impedance mismatch“ bezeichnet. Bezüglich der Probleme mit verteilten Systemen (Konsistenz, Verfügbarkeit) betrachten wir nachfolgend das CAP-Theorem.

 

CAP-Theorem

CAP steht für

Das CAP-Theorem besagt nun, dass es in einem verteilten System nicht möglich ist, alle drei Eigenschaften gleichzeitig zu garantieren – nur zwei dieser drei Eigenschaften können jeweils gleichzeitig garantiert werden. Es können also beispielsweise folgende Kombinationen auftreten:

Laut CAP-Theorem muss man also in jedem verteilten System davon ausgehen, dass Nachrichten verloren gehen oder Netzwerkverbindungen ausfallen. Eine verteilte Anwendung muss immer Partition-tolerant gebaut sein, was einem, wie oben erwähnt, die Wahl zwischen CP und AP lässt.

Entscheidet man sich dabei für AP, kann man die ACID-Eigenschaften von Transaktionen nicht mehr einhalten. Das heisst aber nicht, dass man gar keine Konsistenz mehr hat. So orientieren sich verteilte NoSQL-Systeme an den sogenannten BASE-Eigenschaften. Diese stehen für:

 

Nützliche Links und Ressourcen