A

Wie kommt man zu einer Datenbankumgebung?

Früher waren Datenbankprogramme oft kostspielig oder nur in älteren Programmversionen günstig erhältlich. Heute sieht das etwas anders aus. Neben lokalen Installationen werden in den meisten Fällen gleich Datenbank-Server eingerichtet.

Die verschiedenen SQL-Datenbanksysteme

So ziemlich jeder Rechner ab etwa Windows 2000 war leistungsfähig genug, um für die Einrichtung von Datenbanksystemen genutzt werden zu können, die aus den vier Komponenten Betriebssystem, Webserver, MySQL und PHP bestehen. Diese sind für die allermeisten Rechnerplattformen erhältlich, wobei die Kürzel LAMP für die Linux-Variante und WAMP für die Windows-Variante verwendet werden.

Daneben wird im Unternehmensumfeld häufig Windows Server zusammen mit IIS (Microsoft Internet Information Services) und Microsoft SQL Server eingesetzt. Unter der Bezeichnung Microsoft SQL Server Express ist auch eine kostenlose Variante für weniger aufwändige Websites und Desktopanwendungen erhältlich.

Weit verbreitet ist neben den Datenbanklösungen von Oracle insbesondere noch Microsoft Access aus dem Office-Paket von Microsoft.

LAMP unter Linux

Der erste Buchstabe des Kürzels LAMP steht für Linux, also das jeweils verwendete Betriebssystem, wie beispielsweise Linux Mint oder Ubuntu.

Das A steht für Apache und damit für einen weit verbreiteten und gut öffentlich unterstützten Webserver, der für alle wichtigen Plattformen kostenlos bereitgestellt wird. Bei NAS-Laufwerken mit entsprechenden Funktionen verbirgt sich Apache möglicherweise hinter anderen Paketnamen, wie beispielsweise Web Station bei Synology.

Das M steht für MySQL und damit die eigentliche Datenbankebene. Auch hier verbirgt sich MySQL möglicherweise wieder hinter einem anderen Namen. Bei Ubuntu lautet der beispielsweise MariaDB.

Das P steht schließlich für PHP (Hypertext Preprocessor) und damit für eine Skriptsprache, die in die vom Webserver bereitgestellte Seitenbeschreibungssprache HTML (Hypertext Markup Language) eingebettet werden kann, um mit SQL-Abfragen dynamische Webseiten oder Webanwendungen erstellen zu können.

Drei oder (mit Linux-Distributionen) alle vier dieser Komponenten sind kostenlos erhältlich und können lokal installiert, eingerichtet und für eigene Experimente genutzt werden.

Vielleicht noch ein klein wenig einfacher sind teilweise die vorkonfigurierten Pakete für die Serverfunktionen für NAS-Laufwerke. Dann können Sie sich die gewünschten Pakete einfach nur zusammenklicken und müssen sich bei der Installation keine großen Sorgen machen.

WAMP unter Windows

Unter Windows spricht man von WAMP-Servern, wobei das W am Anfang des Kürzels für Windows steht. Das Windows-Betriebssystem ist kostenpflichtig. Mit ein wenig Mühe finden Sie im Internet Quellen, die Ihnen die Installation des Pakets sehr erleichtern, wie zum Beispiel https://sourceforge.net/projects/wampserver/.

Weitere nützliche Programme

Unter Linux finden Sie die Komponenten Apache, MySQL und PHP in den offiziellen Paketquellen wohl jeder Distribution, die etwas auf sich hält. Zudem erhalten Sie dort aber auch oft vorgefertigte Dokumentationen und Installationspakete, wie beispielsweise für Ubuntu in dem zugehörigen Wiki unter https://wiki.ubuntuusers.de/LAMP/.

Wirklich empfehlenswert ist dabei noch, das Paket phpMyAdmin gleich mit zu installieren. Es wurde zur Verwaltung von MySQL-Datenbanken entwickelt und kann Ihnen viele diesbezügliche Aufgaben erleichtern. Insbesondere finden Sie hier eine Konsole, in die Sie SQL-Befehle zum Testen und Ausprobieren direkt eingeben können.

Teilweise wurde als Kennwort für den Benutzer root (MySQL-Administratorkonto) einfach leer vorgegeben, was Sie in phpMyAdmin ändern könnten. Mittlerweile wird üblicherweise während der Installation ein Kennwort für den Datenbank-Administrator abgefragt, das Sie sorgfältig wählen und sich gut merken oder verwahren sollten. Möglicherweise werden bei der Installation noch weitere Benutzernamen und/oder Kennwörter angefordert.

Wurde ein Befehl erfolgreich ausgeführt, wird eine anfangs vielleicht befremdliche Meldung wie in der Abbildung angezeigt. Ansonsten bekommen Sie teils mehr, teils weniger aussagekräftige Meldungen zu sehen.

image

1 Der größte Vorteil der Nutzung derartiger Eingabefelder und Konsolen besteht aber darin, dass Sie Abfragen nicht abtippen müssen, sondern sie über die Zwischenablage in das Eingabefeld kopieren können. Zudem finden Sie im Programm weitere Hilfestellungen, Referenzen und Funktionen zur automatischen Vervollständigung von Abfragen.

Hinweise

So bequem sich die Einrichtung über vorgefertigte Pakete anhört, so birgt sie doch öfter ihre Tücken. Da wird vielleicht eine Kleinigkeit an den beteiligten Paketkomponenten geändert und schon funktioniert etwas nicht. Bei der Aktualisierung dieses Buches war davon nicht nur die Linux-, sondern auch die Windows-Version betroffen, weil sich an MySQL etwas geändert hatte. Und wenn intern für den root-Anwender ein Kennwort vergeben wird, das der nicht kennt, ist guter Rat auch in den Weiten des Webs oft teuer. Ich wurde zuletzt in einer eigentlich temporären Datei im Verzeichnis /etc/mysql fündig.

1 Arbeiten Sie in einer bereits eingerichteten Datenbankumgebung, müssen Sie naturgemäß die vergebenen Benutzernamen und Kennwörter beim Administrator erfragen.

1 Verwechseln Sie unter Linux die verschiedenen root-Konten nicht. Bei einem handelt es sich um den Administrator des Linux-Systems und bei dem zweiten um den Administrator des MySQL-Datenbanksystems. Dass das root-Konto zunehmend deaktiviert oder anderweitig nicht mehr genutzt wird, trägt dann eher zur Verwirrung bei, als dass es wirklich hilft.

Damit müssen Sie sich begnügen. Ausführlichere Beschreibungen zu den verschiedenen Datenbanksystemen würden hier jeden Rahmen sprengen und wären leider schneller veraltet als erstellt.

Die MySQL-Konsole

Wenn Sie vor einem Rechner sitzen und beispielsweise das kostenlos erhältliche und daher weit verbreitete MySQL oder eine seiner Varianten, wie beispielsweise MariaDB installiert haben, müssen Sie es schon fast als schlimmste Folter empfinden, wenn Sie selbst keine Anweisungen eingeben können. Bei der etwas zähen und theoretischen Vorstellung der Datentypen mag das noch zu verschmerzen sein, wenn es aber um Datenbanken mit Tabellen und darin enthaltenen Tabellen geht, sieht das schon anders aus.

Um SQL-Anweisungen einzugeben, können Sie Dienstprogramme, wie beispielsweise phpMyAdmin in einer Browserumgebung, Büroprogramme wie Microsoft Access oder auch speziell programmierte Lösungen verwenden. Auf die vielfältigen Alternativen werde ich hier nicht gesondert näher eingehen.

Darüber hinaus gibt es aber die Möglichkeit, SQL-Anweisungen oder auch Skripte über Terminalfenster und Eingabeaufforderung einzugeben. Auch wenn das ein wenig unkomfortabel klingt, lassen sich auf diesem Weg Anweisungen und Abfragen in Dateien speichern und/oder über die Zwischenablage kopieren und benutzen.

Um die dafür zuständige Konsole starten zu können, müssen Sie über einen gültigen Benutzernamen und das zugehörige Kennwort verfügen. Dann können Sie beispielsweise die MySQL-Konsole als SQL-Benutzer root mit dem Kennwort geheim mit diesem Kommando starten:

Dabei müssen Sie root und geheim natürlich durch gültige Zugangsdaten für das installierte SQL-System ersetzen.

Gelingt die Anmeldung, wird Ihnen eine ähnliche Begrüßung wie in der Abbildung angezeigt.

image

Diese scheinbar einfache Möglichkeit, die hier auf einem Computer unter Ubuntu-Linux läuft, besitzt durchaus Potenzial und ist bereits für Nutzer, die die gebotenen Möglichkeiten der Zwischenablage zu nutzen wissen, für Testzwecke und kleinere Aufgabenstellungen praktisch nutzbar.

1 Denken Sie daran, dass Sie insbesondere auf Systemen unter Linux meist auf die korrekte Groß-/Kleinschreibung achten müssen.

Das soll hier für den Kurzeinstieg bereits reichen. Unter Windows oder auf einem Mac lässt sich die SQL-Konsole ebenfalls auf ähnliche Weise nutzen.

Eine Datenbank via Konsole erstellen und benutzen

Wenn Sie sich bei dem SQL-Datenbanksystem anmelden können und dürfen, um sich durch praktische Übungen damit vertraut zu machen, sollten Sie diese Möglichkeit auch nutzen. Legen Sie dann eine Datenbank an, um anschließend damit zu experimentieren. Recht praktisch ist es, wenn Sie der Datenbank einen Namen wie JWGTest geben, wobei JWG ein drei Buchstaben langes Namenskürzel darstellen soll, wie hier beispielsweise für den IT-Crack »Johann Wolfgang von Goethe«. Wenn Sie auf das »von« Wert legen, können Sie natürlich auch JWVGTest als Datenbanknamen verwenden. Nur zwei Buchstaben können aber in Schulungsumgebungen allzu schnell problematisch werden.

Um nun die gewünschte Datenbank für Johann zu erstellen, geben Sie hinter dem Prompt (für Windows-Anwender: der Eingabeaufforderung) mysql> diesen Befehl ein:

Existiert die Datenbank bereits, können Sie vielleicht mit der angezeigten Fehlermeldung leben. Spätestens in Skripten ist sie aber meist unerwünscht, weshalb dann diese Variante verwendet wird:

Dieser Befehl wird nur ausgeführt, wenn es eine Datenbank namens JWGTest noch nicht gibt.

Nun müssen Sie nur noch zu der eben angelegten Datenbank wechseln. Geben Sie dazu diese Anweisung ein und ersetzen Sie JWGTest durch den von Ihnen verwendeten Namen:

Die MySQL-Konsole können Sie mit dieser Anweisung verlassen:

1 Wenn Sie am Ende von SQL-Befehlszeilen das Semikolon vergessen, wird kein Befehl ausgeführt. Das hat den Vorteil, dass Sie Anweisungen über mehrere Zeilen verteilen können. Werfen Sie dazu einen Blick auf die Abbildung.

image

1 Sollten Sie ein paar Datenbanken zu viel erstellt haben, können Sie sich ihrer mit DROP DATABASE wieder entledigen. Aber bitte nicht, wenn sich darin noch benötigte Daten befinden.

Mit SHOW DATABASES und SHOW TABLES können Sie sich bei Bedarf darüber informieren, welche Datenbanken und/oder Tabellen Sie bereits erstellt haben.

Mit einer korrekt eingerichteten SQL-Umgebung sollten Sie sich nach diesen kurzen Erläuterungen frohgemut an eigene Experimente wagen können.

B

SQL:2011 Reservierte Wörter

ABS

ALL

ALLOCATE

ALTER

AND

ANY

ARE

ARRAY

ARRAY_AGG

AS

ASENSITIVE

ASYMMETRIC

AT

ATOMIC

AUTHORIZATION

AVG

BEGIN

BETWEEN

BIGINT

BINARY

BLOB

BOOLEAN

BOTH

BY

CALL

CALLED

CARDINALITY

CASCADED

CASE

CAST

CEIL

CEILING

CHAR

CHAR_LENGTH

CHARACTER

CHARACTER_LENGTH

CHECK

CLOB

CLOSE

COALESCE

COLLATE

COLLECT

COLUMN

COMMIT

CONDITION

CONNECT

CONSTRAINT

CONVERT

CORR

CORRESPONDING

COUNT

COVAR_POP

COVAR_SAMP

CREATE

CROSS

CUBE

CUME_DIST

CURRENT

CURRENT_CATALOG

CURRENT_DATE

CURRENT_DEFAULT_TRANSFORM_GROUP

CURRENT_PATH

CURRENT_ROLE

CURRENT_SCHEMA

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_TRANSFORM_GROUP_FOR_TYPE

CURRENT_USER

CURSOR

CYCLE

DATE

DAY

DAYS

DEALLOCATE

DEC

DECIMAL

DECLARE

DEFAULT

DELETE

DENSE_RANK

DEREF

DESCRIBE

DETERMINISTIC

DISCONNECT

DISTINCT

DOUBLE

DROP

DYNAMIC

EACH

ELEMENT

ELSE

END

END-EXEC

ESCAPE

EVERY

EXCEPT

EXEC

EXECUTE

EXISTS

EXP

EXTERNAL

EXTRACT

FALSE

FETCH

FILTER

FLOAT

FLOOR

FOR

FOREVER

FOREIGN

FREE

FROM

FULL

FUNCTION

FUSION

GET

GLOBAL

GRANT

GROUP

GROUPING

HAVING

HOLD

HOUR

HOURS

IDENTITY

IN

INDICATOR

INNER

INOUT

INSENSITIVE

INSERT

INT

INTEGER

INTERSECT

INTERSECTION

INTERVAL

INTO

IS

JOIN

KEEP

LAG

LANGUAGE

LARGE

LAST_VALUE

LATERAL

LEAD

LEADING

LEFT

LIKE

LIKE_REGEX

LN

LOCAL

LOCALTIME

LOCALTIMESTAMP

LOWER

MATCH

MAX

MAX_CARDINALITY

MEMBER

MERGE

METHOD

MIN

MINUTE

MINUTES

MOD

MODIFIES

MODULE

MONTH

MULTISET

NATIONAL

NATURAL

NCHAR

NCLOB

NEW

NIL

NO

NONE

NORMALIZE

NOT

NTH_VALUE

NTILE

NULL

NULLIF

NUMERIC

OCCURRENCES_REGEX

OCTET_LENGTH

OF

OFFSET

OLD

ON

ONLY

OPEN

OR

ORDER

OUT

OUTER

OVER

OVERLAPS

OVERLAY

PARAMETER

PARTITION

PERCENT_RANK

PERCENTILE_CONT

PERCENTILE_DISC

POSITION

POSITION_REGEX

POWER

PRECISION

PREPARE

PRIMARY

PROCEDURE

RANGE

RANK

READS

REAL

RECURSIVE

REF

REFERENCES

REFERENCING

REGR_AVGX

REGR_AVGY

REGR_COUNT

REGR_INTERCEPT

REGR_R2

REGR_SLOPE

REGR_SXX

REGR_SXY

REGR_SYY

RELEASE

RESULT

RETURN

RETURNS

REVOKE

RIGHT

ROLLBACK

ROLLUP

ROW

ROW_NUMBER

ROWS

SAVEPOINT

SCOPE

SCROLL

SEARCH

SECOND

SECONDS

SELECT

SENSITIVE

SESSION_USER

SET

SIMILAR

SMALLINT

SOME

SPECIFIC

SPECIFICTYPE

SQL

SQLEXCEPTION

SQLSTATE

SQLWARNING

SQRT

START

STATIC

STDDEV_POP

STDDEV_SAMP

SUBMULTISET

SUBSTRING

SUBSTRING_

REGEX

SUM

SYMMETRIC

SYSTEM

SYSTEM_USER

TABLE

TABLESAMPLE

THEN

TIME

TIMESTAMP

TIMEZONE_HOUR

TIMEZONE_MINUTE

TO

TRAILING

TRANSLATE

TRANSLATE_REGEX

TRANSLATION

TREAT

TRIGGER

TRUNCATE

TRIM

TRIM_ARRAY

TRUE

UESCAPE

UNION

UNIQUE

UNKNOWN

UNNEST

UPDATE

UPPER

USER

USING

VALUE

VALUES

VAR_POP

VAR_SAMP

VARBINARY

VARCHAR

VARYING

VERSION

VERSIONING

VERSIONS

WHEN

WHENEVER

WHERE

WIDTH_BUCKET

WINDOW

WITH

WITHIN

WITHOUT

YEAR

YEARS

Stichwortverzeichnis

= 1

1NF 1, 2

2NF 1

3NF 1

4GL 1

4NF 1

5NF 1

/etc/mysql 1

> 1

>= 1

< 1

<= 1

<> 1

A

Abfrage

Definition 1

rekursive 1

Unterabfrage 1, 2, 3

verschachtelte 1, 2, 3

Abfrageausdruck 1

Abhängigkeit

funktionelle 1

transitive 1

Ablaufsteuerung 1

ABS 1

ABSOLUTE 1

Access 1, 2

Access SQL 1

ACID 1

ActiveX 1

Ad-hoc-Abfrage 1

ADT 1

Aggregatfunktion 1, 2, 3, 4

Aggregation 1

Ahnenbaum 1

Aktuelle Systemzeile 1

Alias 1

ALL 1, 2, 3

ALTER 1

TABLE 1, 2, 3

AND 1, 2, 3

Änderungsanomalie 1, 2, 3

Anomalie

Änderungsanomalie 1

Einfügeanomalie 1

Löschanomalie 1

Anweisung, zusammen­gesetzte 1

Anwendungszeitperiode 1

ANY 1, 2, 3

API 1

Applet 1

Application Programming Interface 1

ARRAY 1, 2, 3, 4

ARRAY_MAX_­CARDINALITY 1

Assertion 1, 2

Atomarer Wert 1

Atomarität 1, 2

ATOMIC 1

Attribut 1, 2, 3

Auflistungen 1

Auflistungsausdruck 1

Ausdruck 1, 2, 3

Auflistung 1

benutzerdefiniert 1

boolesch 1

Datum 1

Intervall 1

numerisch 1

Referenzausdruck 1

Zeichenfolge 1

Zeilenausdruck 1

Zeit 1

Ausnahme-Handler 1

Auswahlbedingung 1

Autorisierungsbezeichner 1

AutoWert 1

AVG 1, 2, 3

B

Backup 1

Basistabelle 1

BCNF 1

BEGIN 1

TRAN 1

Benutzername 1

Benutzerverwaltung 1

Beobachter 1

BETWEEN 1

Beziehung

Eins-zu-viele 1

Viele-zu-viele 1

BIGINT 1

Binäre Datentypen 1

BINARY 1

BINARY LARGE OBJECT 1

BINARY VARYING 1

Bitemporale Tabelle 1

Blatt-Typ 1

BLOB 1

BLOB Locator 1

BOOLEAN 1

Boolesche Werte 1

Bucket 1

C

CALL 1, 2

CARDINALITY 1, 2

CASE 1, 2

COALESCE 1

NULLIF 1

Suchbedingungen 1

CAST 1, 2

Datentypumwandlung 1

CEIL 1

CEILING 1

CHARACTER 1

CHARACTER LARGE OBJECT 1

CHARACTER_LENGTH 1

CHARACTER VARYING 1

Client 1

Client-Erweiterung 1

Client/Server-System 1, 2

CLOB 1

CLOB-Locator 1

Cloud 1

Cluster 1, 2

COLLATE BY 1

Collation 1

Collections 1

COMMIT 1, 2

WORK 1

Condition 1

Constraint 1, 2 , 3, 4

Containment-Hierarchie 1

CONTAINS 1

CONTENT 1, 2, 3

COUNT 1, 2

CREATE 1

ASSERTION 1

CHARACTER SET 1

COLLATION 1

DATABASE 1

DOMAIN 1

INDEX 1

SCHEMA 1

TABLE 1, 2

TRANSLATION 1

VIEW 1, 2

CURRENT_DATE 1

CURRENT_TIME 1

CURRENT_TIMESTAMP 1

CURRENT_USER 1

Cursor 1, 2

deklarieren 1

öffnen 1

schließen 1

D

Database Management System 1

Data Dictionary 1

Data Control Language siehe DCL

Data Definition Language siehe DDL

Data Manipulation ­Language siehe DML

Datenbearbeitungssprache siehe DML

Datendefinitionssprache siehe DDL

Datenkontrollsprache siehe DCL

DATE 1, 2

Datei, flache 1

Daten

abfragen 1

aktualisieren 1

hinzufügen 1

löschen 1

übertragen 1

temporale 1

Datenbank

Administrator 1

Arbeitsgruppe 1

Definition 1

entwerfen 1

Hybridmodell 1

integriert 1

mit RAD-Werkzeug erstellen 1

normalisieren 1

Objektmodell 1

persönlich 1

relational 1

Schema 1

selbstbeschreibend 1

unternehmensweit 1

via Konsole 1

Datenbankadministrator 1

Datenbankcluster 1

Datenbankentwurf 1

Datenbankobjekt

sperren 1

Datenbank-Server 1

Datenbanktabelle

mit Access erstellen 1

Datenbankumgebung

einrichten 1

Datenbankverwalter 1

Datenbearbeitung 1

Datenbearbeitungssprache 1

Datendefinition 1

Datendefinitionsabfrage 1

Datendefinitionssprache 1

Datenelement 1

Datenfeld 1

Datenintegrität 1

Gefahren 1

Datenkontrolle 1

Datenkontrollsprache 1

Datenmenge 1

Datenredundanz 1

Datensatz 1

Definition 1

Datensatzwertausdruck 1

Datensicherung 1

Datentyp 1

abstrakt 1

ADT 1

ARRAY 1

Auflistungen 1

benutzerdefiniert 1

BIGINT 1

binär 1

BINARY 1

BINARY LARGE OBJECT 1

BINARY VARYING 1

BLOB Locator 1

BLOB 1

BOOLEAN 1

CHARACTER 1

CHARACTER LARGE OBJECT 1

CLOB 1

CHARACTER VARYING 1

Collections 1

DATE 1

Datetime 1

Datum und Zeit 1

DECIMAL 1

DISTINCT 1

DOUBLE PRECISION 1

FLOAT 1

genaue Zahl 1

Inkompatibilität 1

INTEGER 1

Intervall 1

MULTISET 1

näherungsweise genaue Zahl 1

NATIONAL CHARACTER 1

NATIONAL CHARACTER LARGE OBJECT 1

NATIONAL CHARACTER VARYING 1

NUMERIC 1

REAL 1

REF 1

ROW 1

SMALLINT 1

strukturiert 1

TIME 1

TIMESTAMP WITHOUT TIME ZONE 1

TIMESTAMP WITH TIME ZONE 1

TIME WITHOUT TIME ZONE 1

TIME WITH TIME ZONE 1

Übersicht 1

UDT 1

umwandeln 1, 2

VARBINARY 1

VARCHAR 1

XML 1, 2

Zeichenkette 1

Datenuntersprache 1

Datenverzeichnis 1

Datetime 1

Datum 1

Day-time (Intervalltyp) 1

DBA (Data Base Adminis­trator) 1, 2

DBMS 1

DCL 1, 2, 3

DDL 1, 2, 3, 4

Anweisung 1

DECIMAL 1

DECLARE CURSOR 1

DEFERRABLE 1

NOT 1

DELETE 1, 2, 3, 4

Recht 1

Deltatabelle 1

Detailbereich (Diagnose­bereich) 1, 2

Dezimalkomma 1

Dezimaltrennzeichen 1

Diagnosebereich 1

Dirty-Read 1

DISTINCT 1, 2, 3

DK/NF 1, 2

DLL 1

DML 1, 2

pipelined 1

DOCUMENT 1, 2

Domain-Key-Normalform 1

Domäne 1, 2, 3 4, 5

Domänenintegrität 1

DOUBLE PRECISION 1

DROP 1

DATABASE 1

INDEX 1

TABLE 1, 2, 3

Durchschnitt 1

Dynamic Link Library 1

E

Eclipse 1

Einfügeanomalie 1

Einschränkung 1, 2, 3, 4, 5

Assertion 1, 2

Spalteneinschränkung 1

Tabelleneinschränkung 1–2

Eltern/Kind-Beziehung 1, 2

Entitätenintegrität 1

EQUALS 1

ESCAPE 1

Escape-Zeichen 1, 2

EXCEPT 1

DISTINCT 1

EXEC SQL 1

EXECUTE Recht 1

EXISTS 1, 2, 3

EXP 1

Exponentialausdruck 1

eXtensible Markup Language 1

EXTRACT 1

F

Fehlerbehandlung 1

Feld 1

Fenster 1

Fensterfunktionen ­verschachteln 1

FIRST_VALUE-Funktion 1

LAG-Funktion 1

LAST_VALUE-Funktion 1

LEAD-Funktion 1

navigieren 1

NTH_VALUE-Funktion 1

NTILE-Funktion 1

Fensterfunktion 1

verschachteln 1

Fensterrahmen 1

FETCH 1, 2

Parameter 1

FIRST 1

FIRST_VALUE 1

Flache Datei 1

Fließkommazahl 1

FLOAT 1

FLOOR 1

Fluchtzeichen 1

Folge von Triggern 1

FOR 1

FOREIGN KEY 1

FOR UPDATE 1

Fremdschlüssel 1, 2, 3, 4

FROM 1, 2

Funktion 1, 2, 3, 4

ABS 1

Aggregat 1

Aggregatfunktion 1

ARRAY_MAX_CARDINALITY 1

AVG 1, 2

Beobachter 1

CARDINALITY 1

CEIL 1

CEILING 1

CHARACTER_LENGTH 1

CONVERT 1

COUNT 1, 2

CURRENT_DATE 1

CURRENT_TIME 1

CURRENT_TIMESTAMP 1

Datum 1

EXP 1

EXTRACT 1

FLOOR 1

gespeicherte 1

Konstruktor 1

LN 1

LOWER 1

MAX 1, 2

Mengenfunktion 1, 2, 3

MIN 1, 2

MOD 1

numerisch 1

OCTET_LENGTH 1

POSITION 1

POWER 1

SQRT 1

Stringfunktion 1

SUBSTRING 1

SUM 1, 2

summieren 1

TRANSLATE 1

TRIM 1

TRIM_ARRAY 1

UPPER 1

Wandler 1

Wertfunktion 1

WIDTH_BUCKET 1

Zeit 1

G

Genauigkeit 1

Geräteausfall 1

Gespeicherte Funktion 1

Gespeicherte Prozedur 1

Gespeicherte Routine 1

Gespeichertes Modul 1

GET DIAGNOSTICS 1

Gleich 1

Gleitkommazahl 1

GMT 1

GRANT 1, 2

DELETE 1

INSERT 1

OPTION FOR 1

Recht 1

REFERENCES 1, 1

SELECT 1

UPDATE 1

USAGE 1, 2

WITH GRANT OPTION 1

Greenwich Mean Time (GMT) 1

Größer

als 1

als oder gleich 1

GROUP BY 1, 2

GROUPS-Option 1

Gruppe, Partition 1

H

Handler

Ausnahme 1

CONTINUE 1

EXIT 1

UNDO 1

HAVING 1, 2, 3

Hierarchie 1

Historische Systemzeile 1

Historische Zeile 1

Host-Sprache 1

Host-Variable 1, 2, 3

HTML (Hypertext Markup Language) 1

HTTP 1

I

IDE (Integrated Development ­Environment) 1

IEC 1

IF 1, 2

IMMEDIATELY PRECEDES 1

IMMEDIATELY SUCCEEDS 1

Implementierung 1

IN 1, 2, 3

Index 1, 2

Definition 1

erstellen 1

löschen 1

verwalten 1

Indexed Sequential Access Method 1

Informationsschema 1

INSERT 1, 2

Recht 1

INTEGER 1

Integrität

Domänen 1

Entitäten 1

referenzielle 1, 2, 3

Integritätseinschränkung

referenzielle 1

International Electrotechnical Commission 1

International Standards Organization 1

Internet 1

INTERSECT 1

ALL 1

CORRESPONDING 1

DISTINCT 1

INTERVAL 1

Intervall 1

day-time 1

year-month 1

Intranet 1

ISAM 1

ISO (International Standards Organization) 1

Isolierung 1

Isolierungsebene 1, 2

ITERATE 1

Iteration 1

J

JDBC 1

JOIN 1

CROSS 1

Equi 1

FULL 1

FULL OUTER 1

INNER 1

LEFT 1

LEFT OUTER 1

Natural 1

ON 1

OUTER 1

RIGHT 1

RIGHT OUTER 1

Union 1

K

Kardinalität 1

Kartesisches Produkt 1, 2, 3

Katalog 1

Klassenwert 1

Klausel 1

modifizierende 1

Kleiner

als 1

als oder gleich 1

Konsole 1

Konstante 1

Konstruktor 1

Koordinierte Weltzeit 1

Kopf (Diagnosebereich) 1

Kreuzprodukt 1

Kreuzverknüpfung 1

L

LAG 1

LAMP 1

LAST 1

LAST_VALUE 1

Layer 1

LEAD 1

Leaf-Typ 1

LEAVE 1

LibreOffice Base 1

LIKE 1

Linux 1

Literal 1

numerisch 1

Übersicht 1

LN 1

LOOP 1

Löschanomalie 1

LOWER 1

M

Mantisse 1

MariaDB 1, 2

Maskieren 1

MATCH 1

MAX 1, 2

MediaWiki 1

Mehrtabellensicht 1

Mengenfunktion 1, 2, 3

MERGE 1

Metadaten 1, 2

Methode 1

Microsoft Access 1, 2

Microsoft Visual Studio 1, 2

MIN 1, 2

MOD 1

Modul

deklarieren 1

gespeichertes 1

MODULE 1

Modulprozedur 1

Multiset 1

MULTISET 1

Mutator 1

MySQL 1, 2

mysql (Kommando) 1

MySQL-Konsole 1

N

NATIONAL CHARACTER 1

NATIONAL CHARACTER LARGE OBJECT 1

NATIONAL CHARACTER VARYING 1

NEXT 1

Normalform 1, 2

Boyce-Codd 1

Domain-Key 1, 2

dritte 1

erste 1

zweite 1

Normalisierung 1, 2 3, 4

NoSQL-Datenbank 1

NOT 1, 2

NOT EXISTS 1, 2

NOT IN 1, 2

NOT LIKE 1

NOT NULL 1

NTH_VALUE 1

NTILE 1

NULL 1, 2

Nullwert 1

NUMERIC 1

O

Objektmodell 1

relationales 1

Observer 1

OCTET_LENGTH 1

ODBC 1

Komponenten 1

Schnittstelle 1

ON 1

OPEN 1

Open DataBase ­Connectivity 1

Operator

mathematisch 1

relational 1

Verkettung 1, 2

OR 1, 2

Oracle 1

Oracle Corporation 1

ORDER BY 1, 2, 3

Overhead 1

OVERLAPS 1, 2

P

Parameter 1

Parent-child ­relationship 1

Partition, Gruppen 1

PERIOD (Datentyp) 1

Periodendefinition 1

Persistent Stored Module 1

PHP (Hypertext ­Preprocessor) 1

phpMyAdmin 1

Pipelined DML 1

Plattforminstabilität 1

POSITION 1

POWER 1

Prädikat 1, 2, 3, 4

temporaler Daten 1

Vergleichsprädikat 1, 2

Präprozessor 1

PRECEDES 1

Primärschlüssel 1, 2

PRIMARY KEY 1, 2, 3

PRIOR 1

private 1

Produkt, kartesisches 1, 2

protected 1

Prozedur 1, 2

gespeicherte 1

Prozedurale Sprache 1

PSM 1

public 1

Q

QBE 1

Quantor 1

Query by Example 1

R

RAD (Rapid Application Development) 1, 2

RDBMS 1

REAL 1

Recht 1

entziehen 1

übertragen 1

vergeben 1

Rechteverwaltung 1

Redundanz 1, 2

REF 1

REFERENCES

Recht 1

Referenz 1

Referenzausdruck 1

Referenzielle ­Integrität 1, 2

Referenzielle Integritätseinschränkung 1

Register 1

Rekursion 1

Relation 1

Relationaler Operator 1

Relationales Modell 1, 2

Relational Software Inc. 1

RELATIVE 1

REPEAT 1

Repeating Group 1

Reserviertes Wort 1

RESIGNAL 1

REVOKE 1, 2, 3

RESTRICT 1

ROLLBACK 1, 2, 3

Rolle 1

Rollenname 1

Routine, gespeicherte 1

ROW 1, 2

S

Sandbox 1

SAVEPOINT 1

Schema 1

logisches 1

physisches 1

XML 1

Schlüssel 1, 2

Definition 1

eindeutiger 1

Fremdschlüssel 1–2

Primärschlüssel 1

zusammengesetzter 1, 2

Schnittmenge 1

SELECT 1, 2, 3

Recht 1

Sensitivität 1

SEQUEL 1

SEQUENCE 1

Serialisierung 1

Server 1

Server-Erweiterung 1

Session 1

SESSION_USER 1

SET 1

CONSTRAINTS ALL IMMEDIATE 1

CONSTRAINTS DEFERRED 1

TRANSACTION 1, 2

TRANSACTION

DIAGNOSTICS SIZE 1

SHOW DATABASES 1

SHOW TABLES 1

Sicherungsgeneration 1

Sicherungstabelle 1

Sicht 1, 2, 3

aktualisieren 1

Auswahlbedingung 1

erstellen 1

konzeptionelle 1

Mehrtabellensicht 1

SIMILAR 1

Sitzung 1

Skalierbarkeit 1

Skalierung 1

Skript 1

SkyDrive 1

SMALLINT 1

Social Engineering 1

SOME 1, 2, 3

Sortierreihenfolge 1, 2

Spalteneinschränkung 1

Spaltenreferenz 1

Speicherpunkt 1

SQL 1

eingebettet 1

eingebetteter Code 1

Modulsprache 1

SQL:2011 1

SQL-86 1

SQL-89 1

SQL-92 1

SQL/DS 1

SQLite 1

SQLSTATE 1, 2 , 3

Fehlerbehandlung 1

SQRT 1

Standardwert 1

Statusparameter 1

Stored Function 1

Stored Module 1

Stored Procedure 1

String 1

Stringfunktion 1

SUBSTRING 1

SUCCEEDS 1

SUM 1, 2

Syntaxunterschiede 1

Systemtabelle 1

SYSTEM_TIME AS OF 1

SYSTEM_USER 1

Systemversionierte ­Tabelle 1, 2

Systemzeile

aktuelle 1

historische 1

T

Tabelle 1

ändern 1

Basistabelle 1

Beziehungen 1

bitemporale 1

Deltatabelle 1

Einschränkung 1

erstellen 1, 2

Index erstellen 1

indizieren 1

kombinieren 1

löschen 1, 2

mit Access erstellen 1

Spalte hinzufügen 1

Spalte löschen 1

Struktur ändern 1

systemversionier­te 1, 2

Übersetzungstabelle 1

virtuelle 1, 2, 3

Tabelleneinschränkung 1

Temporale Daten 1

Prädikate 1

TEXT 1

TIME 1, 2

TIMESTAMP 1

TIMESTAMP WITHOUT TIME ZONE 1

TIMESTAMP WITH TIME ZONE 1

TIME WITHOUT TIME ZONE 1

TIME WITH TIME ZONE 1

Transaktion 1, 2, 3

COMMIT 1

Einschränkung 1

READ COMMITTED 1, 2

READ-ONLY 1

READ UNCOMMITTED 1, 2

READ-WRITE 1

REPEATABLE 1

REPEATABLE READ 1

ROLLBACK 1

SERIALIZABLE 1, 2

Standardtransaktion 1

Untertransaktion 1

Transaktionsverarbeitung 1

TRANSLATE 1

Translation 1

Treiber 1

Trigger 1, 2

Atomarität 1

Folge auslösen 1

Schwellenwert 1

Trigger-Aktion 1

Trigger-Aktionszeit 1

Trigger-Ausführungskontext 1

Trigger-Ereignis 1

TRIGGER Recht 1

TRIM 1

TRIM_ARRAY 1, 2

Tupel 1

Typ

Blatt-Typ 1

Leaf-Typ 1

U

Übersetzungstabelle 1, 2

UDT 1, 2

UNDER Recht 1

Ungleich 1

UNION 1, 2

ALL 1

ALL CORRESPONDING 1

CORRESPONDING 1

DISTINCT 1

kompatibel 1

UNIQUE 1

Universal Time Coordinated 1

Unterabfrage 1, 2

korrelierte 1

Untersprache 1

Untertransaktion 1

UPDATE 1, 2, 3

Recht 1

UPPER 1

UTC 1

V

VALID 1

Value Expression siehe Ausdruck

VARBINARY 1

Variable 1, 2, 3

Host-Variable 1, 2

spezielle 1

Vergleichsoperator 1, 2

quantifizierender 1

Vergleichsprädikat 1, 2

Verkettungsoperator 1, 2

Verknüpfung 1

AND 1

äußere 1

bedingte 1

Cross-Join 1

einfache 1

Gleichheitsverknüpfung 1

innere 1

Kreuzverknüpfung 1

linke äußere 1

logische 1, 2

natürliche 1

NOT 1

OR 1

rechte äußere 1

Spaltennamen 1

Vereinigungsverknüpfung 1

vollständige äußere 1

Verschachtelte Abfrage 1, 2

View siehe Sicht

Virtuelle Tabelle 1, 2

W

WAMP 1

Wandler 1

Weltzeit 1

Wert 1

atomarer 1

Literal 1

Standardwert 1

Variable 1

Zeilenwert 1

Wertausdruck 1

Bedingung 1

Datensatz 1

Datum und Zeit 1

Intervall 1

numerisch 1

Zeichenfolgen 1

Wertebereichsprüfung 1

Wertfunktion 1

WHENEVER 1, 2

WHERE 1–2, 3

WHILE 1

WIDTH BUCKET 1

Wiederholungsgruppe 1

Wikipedia 1

WITH GRANT OPTION 1

WITHOUT OVERLAPS 1

WITH RECURSIVE 1

Wohlgeformtheit 1

Wort, reserviertes 1

X

XML 1, 2

konvertieren 1

XMLAGG 1

XMLCAST 1

XMLCOMMENT 1

XMLCONCAT 1

XMLDOCUMENT 1

XMLELEMENT 1

XMLEXISTS 1

XMLFOREST 1

XMLPARSE 1

XMLPI 1

XMLQUERY 1

XML-Schema 1

XMLTABLE 1

XQuery 1, 2

XQuery-Sequenz 1

Y

Year-month (Intervalltyp) 1

Z

Zeichenkette 1

Zeichensatz 1

Zeile, historische 1

Zeilenwert 1

Zeit 1

Zeitperiode 1

Zugriffsebene 1

Zusicherung 1

Zustand 1

Zuweisung 1

Kapitel 1

Grundlagen relationaler Datenbanken

SQL (Structured Query Language) ist eine Abfragesprache, (die ess-ku-el und nicht si-quel ausgesprochen wird und) die speziell für das Arbeiten mit Datenbanken entwickelt wurde. Mit ihr kann man Datenbanken erstellen, neue Daten in Datenbanken einfügen und ausgewählte Teilmengen der Daten abrufen. SQL wurde 1970 eingeführt und im Laufe der Jahre weiterentwickelt. Heute ist sie längst zu einem wichtigen Branchenstandard geworden. SQL wird durch einen formellen Standard definiert, der von der International Standards Organization (ISO) betreut wird.

Es gibt verschiedene Datenbankarten, die unterschiedliche konzeptionelle Modelle für die Organisation von Daten widerspiegeln.

SQL wurde ursprünglich zu dem Zweck entwickelt, Daten zu verwalten, die in Datenbanken enthalten sind, deren Aufbau dem relationalen Modell entspricht. Der internationale SQL-Standard wurde kürzlich um einen Teil des Objektmodells erweitert, was zu hybriden Strukturen führt, die als objektrelationale Datenbanken bezeichnet werden. In diesem Kapitel beschreibe ich verschiedene Formen der Datenspeicherung, vergleiche das relationale mit anderen wichtigen Datenbankmodellen und gehe dann auf die wichtigen Merkmale relationaler Datenbanken ein.

Doch bevor ich näher auf SQL eingehe, will ich den Begriff der Datenbank klar definieren. Seine Bedeutung änderte sich mit der Art und Weise, in der Computer Informationen speicherten und verwalteten.

Die Übersicht über die Dinge bewahren

Heute werden Computer für viele Aufgaben benutzt, für die früher andere Werkzeuge benutzt wurden. Mechanische und elektrische Schreibmaschinen wurden von Computern beispielsweise längst weitestgehend verdrängt, wenn es darum geht, Dokumente zu erstellen und zu bearbeiten. Sie haben elektronische und mechanische Rechenmaschinen verdrängt. Millionen auf Papier ausgedruckte Seiten, Ordner und Archivschränke wurden als Hauptmedium zur Aufbewahrung wichtiger Daten abgelöst. Computer sind normalerweise sehr viel schneller und effizienter als diese alten Werkzeuge. Diese Vorteile haben aber auch einen Nachteil, denn Computerbenutzer haben keinen direkten physischen Zugang zu ihren Daten mehr.

Bei Computerausfällen fragen sich Benutzer zuweilen, ob die Computerisierung wirklich Fortschritte gebracht hat. Früher konnten Ordner nicht »abstürzen«, sondern höchstens mit lautem Krach auf dem Boden landen. Dann wurden die Blätter einfach wieder aufgesammelt und wieder in den Aktenordner geheftet. Außer bei Erdbeben können Aktenschränke kaum »abstürzen«. Fehlermeldungen zeigen sie Ihnen auch nie an. Festplattenabstürze sind hingegen etwas ganz anderes: Verloren gegangene Bits und Bytes lassen sich nicht einfach vom Boden »aufheben«. Mechanische, elektronische und menschliche Fehlfunktionen können dazu führen, dass Ihre Daten ins »Nirwana« verschwinden und für immer verloren sind.

Wenn Sie sich aber mit den gebotenen Vorsichtsmaßnahmen gegen zufällige Datenverluste schützen, können Sie die Vorteile nutzen, die Ihnen Computer mit ihrer höheren Geschwindigkeit und Präzision bieten.

1 Im modernen Arbeitsumfeld müssen Sie gerade bei wichtigen Datenbanken darauf aufpassen, dass sie möglichst gut geschützt werden. Externe Zugriffe von außen sollten nur möglich sein, wenn es wirklich erforderlich ist.

Wenn Sie wichtige Daten speichern, müssen Sie Ihr Augenmerk folgenden vier Bereichen widmen:

image Die Daten müssen schnell und einfach gespeichert werden, weil dieser Vorgang sehr häufig notwendig ist.

image Die Speichermedien müssen zuverlässig arbeiten. Sie wollen schließlich später keine böse Überraschung erleben und feststellen, dass Ihre Daten ganz oder teilweise verschwunden sind.

image Die Daten müssen schnell und einfach abgerufen werden können, und zwar unabhängig von der Menge der gespeicherten Daten.

image Sie benötigen einfache Möglichkeiten, um genau die gewünschten Daten aus der Masse der gespeicherten Daten herauszufiltern.

Moderne Computer-Datenbanken, die sich auf dem Stand moderner Technik befinden, erfüllen diese vier Kriterien. Wenn Sie mehr als einige Dutzend Datenelemente speichern müssen, sollten Sie dafür Datenbanken verwenden.

Was ist eine Datenbank?

Mit der Entwicklung der Computer hat der Begriff Datenbank seine ursprüngliche Bedeutung recht weitgehend verloren. Einige betrachten jede Sammlung von Datenelementen (Telefonbücher, Einkaufszettel, Schriftrollen und so weiter) als Datenbank. Andere definieren den Begriff präziser.

In diesem Buch wird eine Datenbank als selbstbeschreibende Sammlung integrierter Datensätze beschrieben. Und diese Definition setzt neben Computertechnologien Programmiersprachen wie SQL voraus.

1 Bei einem Datensatz handelt es sich um die Repräsentation eines physischen oder konzeptionellen Objekts. Wenn Sie beispielsweise Kunden einer Firma verwalten wollen, legen Sie für jeden Kunden einen Datensatz an. Jeder Datensatz enthält ein oder mehrere Attribute, wie beispielsweise den Namen, die Adresse oder die Telefonnummer. Einzelne Namen, Adressen und so weiter bilden die eigentlichen Daten oder Datenelemente.

Eine Datenbank besteht aus Daten und Metadaten. Metadaten beschreiben dabei die Struktur der Daten innerhalb der Datenbank. Wenn Sie wissen, wie Ihre Daten strukturiert sind, können Sie sie abrufen. Eine Datenbank ist selbstbeschreibend, weil sie eine Beschreibung ihrer eigenen Struktur enthält. Die Datenbank ist integriert, weil sie neben den Datenelementen auch Beziehungen zwischen den Datenelementen enthält.

Die Datenbanken speichern Metadaten in einem Bereich, der Datenverzeichnis (englisch Data Dictionary) genannt wird und der die Tabellen, Spalten, Indizes, Einschränkungen (Bedingungen) und andere Elemente beschreibt, aus denen die Datenbank besteht.

Weil flache Dateisysteme (die später in diesem Kapitel beschrieben werden) keine Metadaten enthalten, müssen mit flachen Dateien arbeitende Anwendungen die den Metadaten entsprechenden Angaben im Programm enthalten. Anders ausgedrückt, muss dann das Programm selbst die Struktur der Daten kennen.

Datenbankgröße und -komplexität

Datenbanken gibt es mit allen möglichen Datenmengen, angefangen bei einfachen Sammlungen mit wenigen Datensätzen bis hin zu Millionen Datensätzen und mehr. Die meisten Datenbanken lassen sich in eine von drei Kategorien einordnen, die von der Größe der Datenbank selbst, der relativen Kapazität der Computer, auf denen sie laufen, und der Größe der Organisationen abhängen, von denen sie betrieben werden:

image Eine persönliche Datenbank ist für die Benutzung durch eine einzige Person auf einem einzigen Computer bestimmt. Derartige Datenbanken sind meist recht einfach strukturiert und relativ klein.

image Eine Abteilungs- oder Arbeitsgruppendatenbank ist für die Benutzung durch die Mitglieder einer einzelnen Abteilung oder Arbeitsgruppe innerhalb eines Unternehmens vorgesehen. Diese Art Datenbank ist meist umfangreicher als eine persönliche Datenbank und demgemäß auch komplexer, weil sie mehrere Benutzer verwalten muss, die gemeinsam auf dieselben Daten zugreifen.

image Eine Unternehmensdatenbank kann riesig sein. Unternehmensdatenbanken können den gesamten geschäftskritischen Informationsfluss großer Unternehmen abbilden.

Was ist ein Datenbankverwaltungssystem?

Gut, dass Sie das fragen. Ein Datenbankverwaltungssystem (DBMSDatabase Management System) ist ein Satz von Programmen, mit denen Sie Datenbanken und die dazugehörigen Anwendungen definieren, verwalten und ausführen können. Eine verwaltete Datenbank ist im Wesentlichen eine Struktur zum Speichern von Daten, die für Sie oder Ihr Unternehmen wichtig sind. Ein DBMS ist ein Werkzeug, mit dem Sie eine derartige Struktur erstellen können, um die darin enthaltenen Daten bearbeiten zu können.

Heute werden viele Datenbankverwaltungssysteme angeboten. Einige laufen nur auf Servern, andere nur lokal auf Arbeitsrechnern, wie PCs, Laptops oder Tablets. Die Entwicklung geht jedoch deutlich in Richtung von Produkten, die von mehreren Plattformen unterstützt werden und in unterschiedlichen Netzwerken mit Rechnern verschiedener Leistungsklassen arbeiten können. Sehr viele Anwendungen besitzen Bedienoberflächen für Internet-Browser. Noch ausgeprägter ist der Trend, Daten in der Cloud zu speichern. Dieser Speicher kann heute von privaten Unternehmen oder auch einzelnen Personen, aber auch von großen Unternehmen wie etwa Amazon, Google oder Microsoft bereitgestellt werden. Dabei kann man zwischen privater und öffentlicher Cloud unterscheiden. Bereitgestellt werden die Daten irgendwo »in den Wolken« über das Internet. Lediglich der Zugang zu den Daten wird in einer privaten Cloud eingeschränkt. Im Grunde handelt es sich dann um eine Erweiterung des firmeninternen Intranets bis hinein ins Internet.

1 Der Begriff Cloud ist heute zwar einigermaßen unscharf definiert, aber in aller Munde. Eigentlich besteht eine Cloud lediglich aus einer Ansammlung von Computer-Ressourcen, auf die irgendwie mit einem Browser oder einer Anwendung über das Internet oder im privaten Intranet zugegriffen werden kann. Der Nebel der »Wolken« verhüllt lediglich, wo sich die benutzten Computer-Ressourcen in der Cloud befinden, also ob sich diese in physischen Rechenzentren mit bekanntem Standort oder vielleicht bei Google oder Amazon irgendwo auf dem Planeten auf angemieteten Geräten befinden. Der Datenzugriff muss dabei nicht zwangsläufig mit einem Browser erfolgen, da sich die gleichen Funktionen selbstverständlich auch mit geeignet programmierten und vorkonfigurierten Apps realisieren lässt.

1 Ein DBMS, das auf mehreren verschiedenen großen und kleinen Plattformen läuft, nennt man skalierbar.

Unabhängig von der Leistung des Computers, auf dem die Datenbank läuft, und davon, ob der Rechner in ein Netzwerk eingebunden ist, bleibt der Informationsfluss zwischen der Datenbank und dem Benutzer gleich. Abbildung 1.1 zeigt, wie Benutzer über das DBMS mit der Datenbank kommunizieren. Das Datenbankverwaltungssystem verbirgt die physischen Details der Datenbankspeicherung, weshalb die Anwendung nur die logischen Eigenschaften der Daten, nicht aber deren physische Speicherform kennen muss.

image

Abbildung 1.1: Blockdiagramm eines DBMS-Informationssystems

Flache Dateien

Die einfachste Sammlung strukturierter Daten stellt eine sogenannte flache Datei dar. Flache Dateien besitzen nur eine minimale Struktur. Sie bestehen einfach aus einer Sammlung von Datensätzen, die nacheinander in einem bestimmten Format in einer Liste angeordnet sind – sie enthält die Daten, die ganzen Daten und nichts als die Daten. Für Computer sind flache Dateien sehr einfach aufgebaut. Weil die Dateien keinerlei Informationen über ihre eigene Struktur enthalten (keine Metadaten), ist der enthaltene Overhead (Informationen in der Datei, die selbst keine Daten sind, aber Speicherplatz belegen) minimal.

Angenommen, Sie wollten die Namen und Adressen der Kunden Ihrer Firma in einer flachen Datei verwalten. Diese soll ähnlich wie das folgende Beispiel strukturiert sein:

Diese Datei enthält nur Daten. Jedes Feld hat eine feste Länge (das Namensfeld ist beispielsweise immer genau 18 Zeichen lang) und ein Feld wird vom anderen nicht durch Strukturen getrennt. Die Person, die die Datenbank entworfen hat, hat die Feldpositionen und Längen vorgegeben. Alle Programme, die diese Datei benutzen, müssen diese Felddefinitionen »kennen«, da diese Angaben nicht in der Datenbank selbst gespeichert sind.

Wegen des geringen Overheads kann man mit flachen Dateien sehr schnell arbeiten. Nachteilig ist jedoch, dass Anwendungsprogramme zusätzliche Logik enthalten müssen, um die Daten einer flachen Datei auf Detailebene bearbeiten zu können. Die Anwendung muss genau wissen, wo und wie die Daten in der Datei gespeichert sind. Flache Dateien eignen sich für kleinere Systeme. Je umfangreicher das System jedoch wird, desto umständlicher wird die Verarbeitung flacher Dateisysteme.

1 Wenn Sie stattdessen eine Datenbank benutzen, können Sie den Doppelaufwand verringern. Obwohl Datenbankdateien möglicherweise einen größeren Overhead haben, können die Anwendungen leichter auf andere Hardware- und Betriebssystemplattformen übertragen werden. Außerdem erleichtern Datenbanken das Schreiben von Anwendungsprogrammen, weil Programmierer keine Details über den Speicherort und die Speicherform der Daten wissen müssen.

Datenbanken vermeiden Doppelarbeit, weil das DBMS die Details der Datenbearbeitung übernimmt. Bei Anwendungen, die mit flachen Dateien arbeiten, müssen alle Einzelheiten im Anwendungscode programmiert werden. Wenn mehrere Anwendungen auf dieselben flachen Dateien zugreifen, muss jede Anwendung (redundant) den gesamten Code für die Datenbearbeitung enthalten. Bei einem DBMS ist dieser Code in der Anwendung überflüssig.

Verständlicherweise ist es nicht einfach, eine Anwendung von einer Plattform auf eine andere zu portieren, wenn sie mit flachen Dateien arbeitet und plattformspezifischen Code zur Datenmanipulation enthält, weil Sie zunächst den gesamten spezifischen Hardware-Code ändern müssen. DBMS-basierte Anwendungen lassen sich sehr viel leichter auf andere Plattformen portieren.

Datenbankmodelle

Die ersten Datenbanken, die in den 1950er-Jahren eingeführt wurden, waren nach dem hierarchischen Modell strukturiert. Sie litten unter Redundanzproblemen, und ihre inflexible Struktur erschwerte Datenbankänderungen. Bald darauf folgten Datenbanken, die nach dem Netzwerkmodell strukturiert waren und die Hauptnachteile der hierarchischen Datenbanken beseitigen sollten. Netzwerkdatenbanken verfügen über eine minimale Redundanz auf Kosten einer hohen strukturellen Komplexität.

Einige Jahre später entwickelt Dr. E. F. Codd bei IBM das relationale Modell, das minimale Redundanz und leicht verständliche Struktur miteinander kombiniert. Die Sprache SQL wurde für das Arbeiten mit relationalen Datenbanken entwickelt. Relationale Datenbanken haben hierarchische Datenbanken und Netzwerkdatenbanken fast vollständig verdrängt.

1 Seit etlichen Jahren werden auch sogenannte NoSQL-Datenbanken auf den Markt gebracht. Diese sind nicht wie relationale Datenbanken strukturiert und arbeiten nicht mit SQL als Abfragesprache. NoSQL-Datenbanken werden in diesem Buch nicht behandelt.

Das relationale Modell

E. F. Codd, der bei IBM arbeitete, formulierte das relationale Datenbankmodell erstmals im Jahre 1970. Es dauerte etwa ein Jahrzehnt, bis dieses Modell für Datenbankprodukte verwendet wurde. Es entbehrt nicht einer gewissen Ironie, dass nicht die Firma IBM das erste relationale DBMS lieferte. Diese Ehre wurde einer kleinen, neu gegründeten Firma zuteil, die ihr Produkt Oracle nannte.

Relationale Datenbanken haben Datenbanken der früher verwendeten Modelle weitgehend verdrängt, weil man die Struktur relationaler Datenbanken ändern kann, ohne die Anwendungen ändern zu müssen, die noch mit der alten Struktur gearbeitet haben. Angenommen, Sie wollten eine oder mehrere neue Spalten in eine Datenbanktabelle einfügen. Dann müssen Sie vorher erstellte Anwendungen, die mit dieser Tabelle arbeiten, nur dann ändern, wenn Sie eine oder mehrere der in den Anwendungen verwendeten Spalten ändern.

1 Wenn Sie eine Spalte löschen, auf die eine vorhandene Anwendung Bezug nimmt, die also von einer vorhandenen Anwendung referenziert wird, bekommen Sie natürlich Probleme, und zwar unabhängig vom verwendeten Datenbankmodell. Eine der wirksamsten Methoden, einen Fehler in einer Datenbankanwendung zu verursachen, besteht darin, Daten aus Spalten abzurufen, die in der Datenbank nicht vorhanden sind.

Komponenten relationaler Datenbanken

Die Flexibilität relationaler Datenbanken beruht darauf, dass ihre Daten in Tabellen gespeichert werden, die im Wesentlichen unabhängig voneinander sind. Sie können in einer Tabelle Daten einfügen, ändern oder löschen, ohne dadurch die Daten in den anderen Tabellen zu beeinflussen, sofern die betroffene Tabelle den anderen Tabellen nicht übergeordnet ist. (Die Beziehungen der Über- und Unterordnung zwischen Tabellen werden in Kapitel 5 erklärt.) In diesem Abschnitt zeige ich, woraus diese Tabellen bestehen und in welcher Beziehung sie zu den Komponenten einer relationalen Datenbank stehen.

Was sind Relationen?

Datenbanken bestehen aus miteinander verknüpften Tabellen. In der Datenbankterminologie werden diese Tabellen auch Relationen genannt. Eine relationale Datenbank besteht also aus einer oder mehreren Relationen.

1 Eine Relation ist eine zweidimensionale, aus Zeilen und Spalten bestehende Anordnung von Feldern, auch Array genannt, die nur Einträge eines Typs von Datenwerten und keine identischen Zeilen enthalten kann. Jede Zelle des Arrays darf nur einen Wert enthalten. Keine zwei Zeilen dürfen identisch sein.

Ein Beispiel: Die meisten Benutzer kennen zweidimensionale Arrays, die aus Zeilen und Spalten bestehen, in Form von Arbeitsblättern elektronischer Tabellenkalkulationen (wie zum Beispiel Microsoft Excel). Die auf der Rückseite der Baseball-Karten von Baseball-Spielern der Major-League aufgedruckte Offensivstatistik stellt ein weiteres Beispiel für ein Datenfeld dar. Die Baseball-Karte enthält Spalten für das Jahr, die Mannschaft (Team), die geleisteten Spiele sowie für die verschiedenen Leistungskriterien (At Bat, Hits, Runs und so weiter), die in der Baseball-Welt eine Rolle spielen. Eine Zeile fasst die Daten eines Jahres zusammen, in dem der Spieler in der Major-League gespielt hat. Sie können diese Daten auch in einer Relation (einer Tabelle) speichern, die dieselbe Grundstruktur hat. Abbildung 1.2 zeigt eine relationale Datenbanktabelle, die die Offensivstatistik eines Spielers der Major-League enthält. Im praktischen Einsatz würde eine solche Tabelle die statistischen Daten einer ganzen Mannschaft oder möglicherweise der gesamten Liga enthalten.

image

Abbildung 1.2: Tabelle mit der Offensivstatistik eines Baseball-Spielers

Spalten in der Tabelle sind in dem Sinne konsistent, als eine Spalte in jeder Zeile dieselbe Bedeutung hat. Wenn eine Spalte in einer Zeile den Nachnamen eines Spielers enthält, muss die Spalte in allen Zeilen den Nachnamen eines Spielers enthalten. Die Reihenfolge, in der Zeilen und Spalten in einer Tabelle erscheinen, spielt dabei keine Rolle. Aus der Sicht des DBMS ist es deshalb gleichgültig, welche Spalte an erster, welche an zweiter und welche an letzter Stelle steht. Das DBMS verarbeitet die Tabelle unabhängig von deren Aufbau.

Jede Spalte einer Datenbanktabelle stellt ein einzelnes Attribut der Tabelle dar. Die Bedeutung einer Spalte ist für alle Zeilen der Tabelle gleich. Eine Tabelle kann beispielsweise die Namen, Adressen und Telefonnummern aller Kunden einer Firma enthalten. Zeilen in der Tabelle, die auch Datensatz oder Tupel genannt werden, enthalten jeweils die Daten eines einzelnen Kunden. Jede Spalte enthält ein einzelnes Attribut des Kunden, wie zum Beispiel die Kundennummer (KundenNr), die Firma (Unternehmen), die Straße (Anschrift1) und so weiter. Abbildung 1.3 zeigt einige Zeilen und Spalten einer solchen Tabelle.

image

Abbildung 1.3: Jede Tabellenzeile enthält einen Datensatz; jede Spalte enthält ein einzelnes Attribut.

1 Die Relationen in diesem Datenbankmodell entsprechen den Tabellen einer auf dem Modell basierenden Datenbank.

Views oder Sichten

Tabellen können viele Spalten und Zeilen enthalten. Manchmal interessieren Sie sich für alle Daten, bei umfangreichen Tabellen aber oft auch nicht. Möglicherweise möchten Sie nur einige der Spalten einer Tabelle sehen oder nur Zeilen, die einer bestimmten Bedingung genügen. Vielleicht möchten Sie einige Spalten einer Tabelle und einige andere Spalten einer mit ihr verknüpften Tabelle sehen. Um die Daten auszuschließen, die Sie augenblicklich nicht interessieren, erstellen Sie eine sogenannte Sicht (englisch View). Eine Sicht ist eine Untermenge einer Datenbank. Diese Untermenge kann von einer Anwendung verarbeitet werden. Eine Sicht kann Ausschnitte einer oder mehrerer Tabellen enthalten.

1 Sichten werden manchmal auch virtuelle Tabellen genannt. Aus der Perspektive von Anwendungen oder Benutzern verhalten sich Sichten wie Tabellen. Sichten existieren jedoch nicht unabhängig von Tabellen. Mit Views können Sie Daten betrachten, wobei die Views selbst kein Bestandteil der Daten sind.

Angenommen, Sie arbeiten mit einer Datenbank, in der die beiden Tabellen Kunde und Rechnung enthalten sind. Die Tabelle Kunde enthält die Spalten KundenNr, Vorname, Nachname, Strasse, Ort, Land, Plz und Tel. Die Tabelle Rechnung verfügt über die Spalten RechnungNr, KundenNr, Datum, Umsatz, Bezahlt und Zahlungsart.

Ein Verkaufsleiter will nur den Vornamen (Vorname), den Nachnamen (Nachname) und die Telefonnummer (Tel) eines jeweiligen Kunden auf dem Bildschirm sehen. Der Verkaufsleiter kann nun für die Tabelle Kunde eine Sicht erstellen, die nur die drei benötigten Spalten und nicht auch noch die momentan überflüssigen Informationen aus anderen Spalten enthält. Abbildung 1.4 zeigt die vom Verkaufsleiter erstellte Sicht.

image

Abbildung 1.4: Die für den Verkaufsmanager definierte View wird von der Tabelle KUNDE abgeleitet.

Ein Zweigstellenleiter benötigt die Namen und Telefonnummern aller Kunden, deren Postleitzahl zwischen 90000 und 93999 liegt. Eine Sicht, die von ihr abgerufene Zeilen und angezeigte Spalten mit einer sogenannten Einschränkung versieht und sie damit filtert, führt diese Aufgabe aus. Abbildung 1.5 zeigt die Datenquellen für die Spalten der Sicht des Zweigstellenleiters.

image

Abbildung 1.5: Die Sicht des Zweigstellenleiters enthält nur bestimmte Zeilen der Tabelle KUNDE.