2.1 Datenbanksysteme

2.1.1 Relationale Datenbanken

In relationalen Datenbanken werden die Daten in Tabellen oder Relationen gespeichert. Jede Relation besteht aus einer bestimmten Anzahl von Spalten oder Attributen sowie einer Menge von Zeilen oder Tupeln (Sätzen). Die Anzahl der Attribute bestimmt den Grad, die Anzahl der Tupel die Kardinalität einer Relation. Abb. 2-1 zeigt ein Beispiel zweier Relationen vom Grad 3 und Kardinalität 6 bzw. 5.

Abb. 2-1: Beispiel von Relationen

Jedem Attribut ist ein sogenannter Domain (Definitionsbereich) zugeordnet, der die zulässigen Werte festlegt. Die Beschreibung einer Relation umfaßt den Namen der Relation und deren Attribute sowie die zugehörigen Domains. Die Ausprägung der Relation ist durch die Menge der Tupel gegeben und entspricht einer Teilmenge des kartesischen Produktes über den Attribut-Domains. Die Mengeneigenschaft von Relationen bedeutet, daß kein Tupel mehrfach vorkommen darf und daß keine vorgegebene Reihenfolge unter den Tupeln besteht.

Das Relationenmodell schreibt zwei modellinhärente Integritätsbedingungen vor, die sogenannten Relationalen Invarianten. Die Primärschlüsselbedingung verlangt, daß zu jeder Relation ein Attribut bzw. eine Kombination von Attributen als Primärschlüssel fungiert, mit dem Tupel eindeutig identifiziert werden können. In Abb. 2-1 bilden z.B. die Attribute KTONR (Relation KONTO) und KNR (Relation KUNDE) geeignete Primärschlüssel. Die zweite modellinhärente Integritätsbedingung betrifft sogenannte Fremdschlüssel, mit denen Beziehungen zwischen Relationen realisiert werden können. In Abb. 2-1 ist das Attribut KNR (Kundennummer) in Relation KONTO ein solcher Fremdschlüssel, mit dem der Inhaber eines Kontos durch einen Verweis auf den Primärschlüssel der Relation KUNDE repräsentiert wird. Die Fremdschlüsselbedingung verlangt, daß das durch einen Fremdschlüsselwert referenzierte Tupel in der Datenbank existiert, d.h., daß in der referenzierten Relation ein entsprechender Primärschlüsselwert definiert sein muß (referentielle Integrität).

Zur Beschreibung relationaler Anfragen greifen wir (neben SQL) vor allem auf die Relationenalgebra zurück. Die Relationenalgebra erlaubt eine kompakte Darstellung von Operationen und spezifiziert explizit die Basisoperatoren, die bei der Anfragebearbeitung auszuführen sind. Die Operatoren der Relationenalgebra sind mengenorientiert, da sie aus einer oder zwei Eingaberelation(en) wiederum eine Relation erzeugen. Neben allgemeinen mengentheoretischen Operatoren wie Vereinigung (), Durchschnittsbildung (), kartesisches Produkt () oder Differenz interessieren vor allem die relationalen Operatoren Selektion (Restriktion), Projektion und Verbund (Join). Mit der Selektion


wird eine zeilenweise (horizontale) Teilmenge einer Relation R gebildet, die alle Tupel enthält, die das Selektionsprädikat P erfüllen. Ein Beispiel dazu findet sich in Abb. 2-2a. Die Projektion


bildet eine spaltenweise (vertikale) Teilmenge der Eingaberelation, wobei alle nicht spezifizierten Attribute "weggefiltert" werden (Beispiel: Abb. 2-2b). Dabei werden zudem Duplikate eliminiert, um die Mengeneigenschaft der Ergebnisrelation zu wahren. Der Verbund () schließlich erlaubt die Verknüpfung zweier Relationen, die Attribute mit übereinstimmenden Domains besitzen. Der mit Abstand wichtigste Verbundtyp ist der Gleichverbund (Equi-Join), bei dem die Verknüpfung durch eine Gleichheitsbedingung auf den Verbundattributen definiert ist. Der Gleichverbund zwischen Relation R mit Verbundattribut r und Relation S mit Verbundattribut s kann als Selektion auf dem kartesischen Produkt zwischen R und S definiert werden:

Der natürliche Verbund zwischen zwei Relationen, bei denen die Verbundattribute den gleichen Namen besitzen, ist definiert als Gleichverbund zwischen den Relationen, wobei die Verbundattribute nur einmal im Ergebnis vorkommen. Aufgrund der Namenskonvention kann beim natürlichen Verbund die Join-Bedingung weggelassen werden (R S). Abb. 2-2c zeigt ein Beispiel für den natürlichen Verbund.
Der Semi-Join zwischen zwei Relationen R und S (R S) ist definiert als ein Verbund, in dessen Ergebnis nur Attribute der Relation R enthalten sind:

Abb. 2-2: Beispiele relationaler Operatoren (bezogen auf die Relationen aus Abb. 2-1)

Abb. 2-2d zeigt ein Beispiel für einen (natürlichen) Semi-Join. Semi-Joins haben vor allem im Kontext von Verteilten Datenbanksystemen Bedeutung erlangt. Sie erlauben eine Verkleinerung der Ergebnismenge gegenüber dem normalen Join, was zu einer Reduzierung der zu übertragenden Datenmengen genutzt werden kann (s. Kap. 6.5.2).

Da die Operatoren Relationen als Eingabe verwenden und wiederum Relationen erzeugen, können sie miteinander kombiniert werden, um komplexere Anfragen zu formulieren. Ein Beispiel dazu ist in Abb. 2-2e gezeigt.

In der Praxis werden DB-Anfragen natürlich in einer benutzerfreundlicheren und deskriptiveren Anfragesprache als der Relationenalgebra formuliert. Hier hat sich SQL eindeutig durchgesetzt. Diese Anfragesprache wird von nahezu allen Datenbanksystemen unterstützt und ist im Rahmen der ISO standardisiert. Der aktuelle Standard (SQL2, SQL92) ist gegenüber seinen Vorgängerversionen sehr mächtig und umfassend und wird von existierenden Implementierungen derzeit meist nur teilweise abgedeckt. Für dieses Buch werden lediglich geringe SQL-Kenntnisse vorausgesetzt, da nur vereinzelt Beispiele in SQL formuliert werden, die zudem weitgehend selbsterklärend sein dürften. Die Anfrage aus Abb. 2-2e würde in SQL z.B. folgendermaßen lauten:

Besonderheiten von SQL, die natürlich auch durch Mehrrechner-DBS zu unterstützen sind, betreffen u.a. die Berechnung sogenannter Aggregatfunktionen (MIN, MAX, SUM, COUNT, AVG) sowie die optionale Sortierung von Ergebnismengen. Für eine Einführung in SQL sei auf die reichlich vorhandene Literatur verwiesen; der aktuelle Sprachumfang von ISO-SQL wird z.B. in [DD92, MS92] beschrieben.