Zum Inhalt springen

Relationale Datenbank

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 27. Januar 2007 um 16:12 Uhr durch Heops (Diskussion | Beiträge) (Relationale Algebra). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Eine relationale Datenbank ist eine Datenbank, die auf dem relationalen Datenbankmodell basiert. Das Datenbankmodell wurde von Edgar F. Codd 1970 erstmals vorgeschlagen und ist heute, trotz einiger Kritikpunkte, ein etablierter Standard zum Speichern von Daten. Das zugehörige Datenbankmanagementsystem wird als das relationale Datenbankmanagementsystem (RDBMS) bezeichnet. Bekannt im Zusammenhang mit relationalen Datenbanken ist die Datenbanksprache SQL, zum Abfragen und Manipulieren der Daten in der Datenbank.

Grundlage des Konzeptes relationaler Datenbanken ist die Relation, ein im mathematischen Sinn wohldefinierter Begriff. Dabei handelt es sich im Wesentlichen um eine mathematische Beschreibung für eine Tabelle (siehe dazu Datenbank Relation). Operationen auf diesen Relationen werden durch die Relationale Algebra bestimmt, diese Operationen finden im Sprachumfang von SQL Berücksichtigung.

Dieser recht einfachen und realitätsnahen Struktur liegt vermutlich der Erfolg der relationalen Datenbanktechnologie zugrunde, der ihr eine heute marktdominierende Stellung beschert hat.

Grundlegende Konzepte

Datei:Begriffe relationaler Datenbanken.png
Begriffe relationaler Datenbanken

Im Allgemeinen kann man sich eine relationale Datenbank als eine Kollektion von Tabellen (den Relationen) vorstellen, in welchen Datensätze abgespeichert sind. Jeder Datensatz ist somit eine Zeile (Tupel) in einer Tabelle. Jeder Tupel besteht aus einer Menge von Attributwerten (Attribute = Eigenschaften), den Spalten der Tabelle. Das Bild illustriert die Relation R mit Attributen A1 bis An in den Spalten und den in Zeilen angeordneten Werte.

Zum Beispiel beschreibt der Datensatz (Buchnummer, Autor, Verlag, Verlagsjahr, Titel, Datum der Aufnahme) ein Buch in der Bibliothek. Die Datensätze müssen eindeutig identifizierbar sein. Das geschieht über ein oder mehrere Schlüssel (engl. Key). Schlüssel sind Attributmengen, die einen Tupel in der Tabelle eindeutig identifizieren. In diesem Fall ist Buchnummer ein Schlüssel aus einem Attribut.

Beispiel einer Relation "Bücher":
Buchnummer Autor Verlag Verlagsjahr Titel Datum
123456 Hans Vielschreiber Musterverlag 2007 Wir lernen SQL 13.01.2007
123457 J. Gutenberg Gutenberg und Co. 1452 Drucken leicht gemacht 01.01.1452
123458 G. I. Caesar Handschrift Verlag -44 Mein Leben mit Asterix 16.03.-44
123459 Galileo Galilei Inquisition International 1640 Eppur si muove 1641
123460 Charles Darwin Vatikan Verlag 1860 Adam und Eva 1862

Beispiel

Eine Bibliothekdatenbank könnte also folgendermaßen implementiert werden.


Tabelle Bücher, die für jedes Buch eine Zeile enthält:

  • Jede Zeile besteht aus Attributen (Spalten der Tabelle): Buchnummer, Autor, Verlag, Verlagsjahr, Titel, Datum der Aufnahme.
  • Als Schlüssel dient die Buchnummer, da sie jeden Tupel eindeutig identifiziert.

Tabelle Nutzer, die die Daten von allen registrierten Bibliotheksnutzern enthält:

  • Die Attribute wären zum Beispiel: Nutzernummer, Vorname, Nachname.
Relation "Nutzer"
Nutzernummer Vorname Nachname
3546 Hans Vielleser
3547 Jens Mittelleser
3548 Erich Wenigleser
Relation "Entliehen"
Nutzernummer Buchnummer
3546 123456
3546 123458
3546 123459
3547 123457
3547 123460

Außerdem braucht man eine Tabelle Entliehen, die Informationen über die Verfügbarkeit des Buches enhält. Sie würde folgende Attribute erhalten:

  • Nutzernummer, Buchnummer

Jede Zeile dieser Tabelle ordnet einem Nutzer ein von ihm entliehenes Buch zu.

Der Eintrag (3546,123458) würde also heißen, dass der Nutzer mit der Nummer 3546 ("Hans Vielleser") das Buch mit der Nummer 123458 ("Mein Leben mit Asterix") entliehen hat. Derselbe Nutzer hat auch das Buch "Eppur si muove" entliehen, was durch den Tabelleneintrag (3546, 123459) belegt ist. Als Schlüssel nimmt man hier die Attributmenge (Nutzernummer, Buchnummer). Gleichzeitig verbindet die Nutzernummer jeden Eintrag der Tabelle Entliehen mit einem Eintrag der Tabelle Nutzer, sowie die Buchnummer jeden Eintrag von Entliehen mit einem Eintrag der Tabelle Bücher verbindet. Deswegen heißen diese Attribute in diesem Zusammenhang Fremdschlüssel (engl. Foreign Key).

Abgrenzung

Neben dem relationalen Datenbankmodell gibt es verschiedene alternative Konzepte, die es erlauben, Daten in anderen Strukturen zu verwalten. Diese Konzepte haben oft nur noch eine geringe Bedeutung oder haben sich noch nicht durchgesetzt. Dennoch bieten sie für bestimmte Applikationen eine einfachere Anbindung, der zu verwaltenden Daten.

Ältere Ansätze

In den 1960er und 1970er Jahren wurden zur betrieblichen Datenverarbeitung hierarchische Datenbanksysteme sowie Netzwerk-Datenbanksysteme verwendet. Bei diesen wird die Daten- bzw. Tabellenstruktur in der Entwurfsphase definiert und kann nicht bei der Abfrage variiert werden. Sie kommen in Spezialfällen auch heute noch zum Einsatz.

Objektorientierte Datenbanken

Mit dem Aufkommen objektorientierter Programmiersprachen wurden zunehmend objektorientierte Datenbanken angeboten. Damit können Objekte aus OO-Sprachen wie Java direkt in der Datenbank gehalten werden - eine Abbildung der Objekte auf die relationale Tabellenstruktur, das objekt-relationale Mapping, ist dann nicht mehr notwendig. Dieses Vorgehen hat Vorteile gegenüber dem relationalen Entwurf, wenn man komplexe Datenobjekte speichern möchte, die nur schwer auf die flachen relationalen Tabellenstrukturen abgebildet werden können.

Relationale Datenbanken sind aktuell die am meisten verbreitete Architektur (unter anderem, weil sie viel früher in der Praxis angewandt wurden als die objektorientierten Datenbanken) und es ist offen, ob die objektorientierten Datenbanken eine vergleichbare Verbreitung finden werden.

Objektrelationale Datenbanken

Einige Anbieter fügen ihren relationalen Datenbanken objektorientierte Eigenschaften hinzu und nennen diese dann auch Objektrelationale Datenbanken. Diese sind jedoch nicht zur direkten Abbildung von Objekten der Programmiersprache vorgesehen. Jedoch wurde der SQL 99 Standard um objektrelationale Sprachelemente erweitert, die es erlauben bequemer Objekte aus der Datenbank zu lesen oder zu speichern.

Semistrukturierte Datenbanken

Neuere Technologien sind die semistrukturierten Datenbanken. Sie unterscheiden sich von den herkömmlichen Datenbanktechnologien insofern, dass sie kein fest vorgegebenes Schema haben müssen.

Die Datenbank wird hierarchisch, baumartig aufgebaut und jede Datenbankeinheit (engl. Entity) des gleichen Typs kann verschiedene Mengen von Attributen (siehe Attribut) haben. Typische Vertreter von semistrukturierten Datenbanken sind XML-Datenbanken. Die Daten hier werden als XML-Fragmente verwaltet. Die XML-Daten sind hierbei hierarchisch geordnet und können beliebige Strukturen enthalten, solange diese nach XML-Definition wohlgeformt sind. Die Daten können über XQuery oder XPath abgefragt werden. Zur Manipulation der Daten werden heute proprietäre Spracherweiterungen verwendet. Nachteil von aktuellen XML-Datenbanken ist jedoch die im Vergleich zu relationalen Systemen sehr schwache Performance.

Theorie der relationalen Datenbanken

Die Grundlagen der Theorie der relationalen Datenbank wurden von Edgar F. Codd in den 1960ern und 1970ern gelegt und in seiner Arbeit A Relational Model of Data for Large Shared Data Banks [1] beschrieben. Theoretisch basieren alle Operationen auf der relationalen Algebra.

Relationale Algebra

Die Relationale Algebra ist ein algebraisches Modell, das beschreibt, wie Daten gespeichert, abgefragt und manipuliert werden können. Die wesentlichen Operationen, aus denen alle weiteren abgeleitet werden können sind die folgenden:

Alle Anfragen, die mittels SQL an eine relationale Datenbank gestellt werden, werden vom Datenbankmanagementsystem auf diese Operatoren abgebildet, das heißt übersetzt. In der Praxis gibt es weitere Operatoren, wie zum Beispiel den Join-Operator, der jedoch ebenfalls nur eine Kombination aus Kreuzprodukt, Selektion und Projektion darstellt.

Datenbankschema und Modellierung

Datei:Er-diagramm.png
Ein ER-Diagramm in Chen-Notation

Wichtiger Bestandteil einer Relationalen Datenbank ist ihr Schema. Das Schema legt fest, welche Daten in der Datenbank gespeichert werden und wie diese Daten in Beziehung zu einander stehen. Der Vorgang zum Erstellen eines Schemas nennt sich Modellierung.

Zur Modellierung von relationalen Datenbanken wird auch das Entity-Relationship-Modell oder Varianten davon verwendet. Es dient zum Entwurf eines konzeptuellen Schemas, welches unter Verwendung eines Datenbankmanagementsystems (DBMS) implementiert werden kann. Dieser Schritt wird als logischer Entwurf oder auch Datenmodellabbildung bezeichnet und hat als Ergebnis ein Datenbankschema im Implementierungsdatenmodell des DBMS.

Ein wichtiger Schritt des Modellierungsprozesses ist die Normalisierung. Der Sinn der Normalisierung besteht darin, Redundanzen zu verringern und Anomalien zu verhindern, um so die Wartung einer Datenbank zu vereinfachen, sowie die Konsistenz der Daten zu gewährleisten. Edgar F. Codd hat dazu vier Normalformen vorgeschlagen, die seitdem bei dem relationalen Datenbankentwurf zum Einsatz kommen und um weitere ergänzt wurden.

Eigenschaften eines RDBMS

Die wesentlichen Eigenschaften eines relationalen Datenbankmanagementsystems lassen sich wie folgt beschreiben:

  • Speichern der Daten
  • Verwaltung der Metadaten
  • Datensicherheit
  • Mehrbenutzerbetrieb durch Transaktionen
  • Sicherstellen der Datenintegrität
  • Anfrageoptimierung
  • Bereitstellen von Indizes
  • Bereitstellung von Triggern
  • Stored Procedures

Datensicherheit

Das RDBMS speichert die relationalen Daten auf einem Festspeicher Medium. Neben den eigentlichen Daten werden ebenfalls Informationen über die Datenschemata und Zugriffsrechte von Benutzern gespeichert. Letztere sind wichtig um die Datensicherheit zu garantieren. Dazu gehört sowohl Schutz gegen Datenverlust sowie Schutz gegen unerlaubten Zugriff. Die Metadaten eines DBMS werden auch als das Data Dictionary oder Katalog des Systems bezeichnet.

Ein weiterer wichtiger Aspekt von Datenbanken ist das sichern des Datenbestandes durch Backups. In der Praxis ist dies oft ein nicht zu vernachlässigendes Performance Problem, da während eines Backups Daten nur sehr eingeschränkt modifiziert werden dürfen.

Transaktionen

Ein weiterer wichtiger Teil der Datensicherheit sind das Transaktionskonzept, das Daten gegen Race Conditions durch den parallelen Zugriff mehrerer Benutzer schützt. Andernfalls könnten Daten von verschiedenen Benutzern gleichzeitig geändert werden. Das Ergebnis der Änderungen würde dann vom Zufall abhängen. Vereinfacht dargestellt sperren Transaktionen Daten vorübergehend für den Zugriff durch andere Benutzer, bis eine Transaktion durch einen Commit beendet wird. Danach werden die geänderten Daten wieder freigegeben.

Datenintegrität

Die Integrität der Daten kann durch Constraints sichergestellt werden. Dies sind Regeln im Managementsystem, die beschreiben, wie Daten verändert werden dürfen. Der wichtigste Vertreter bei relationalen Datenbanksystemen ist der Foreign Key Constraint. Dieser verhindert, daß Daten gelöscht werden können, die noch von einer anderen Tabelle benötigt werden. Das heißt Daten die über einen Foreign Key referenziert werden.

Anfrageoptimierung

Datei:Datenbankoperatoren.png
Ausführungsplan in Form eines Operatorbaums

Damit Daten abgefragt und manipuliert werden können stellt das DBMS eine Datenbanksprache zur Verfügung. Eine Anfrage an das Datenbanksystem wird dabei zunächst in die logischen Operationen der relationalen Algebra übersetzt. Danach werden sogenannte Datenbankoperatoren ausgewählt, die die logische Operation tatsächlich auf den Daten ausführt. Die Wahl der Operatoren und die Reihenfolge ihrer Ausführung nennt man das erstellen eines Ausführungsplans durch den Anfrageoptimierer. Der Optimierer ist ein besonders komplexer Teil der Datenbanksoftware und hat wesentlichen Einfluss auf die Effizienz des Gesamtsystems.

Bei der Anfrageoptimierung spielen Indizes eine wichtige Rolle. Sie dienen dazu, schnell einen bestimmten Datensatz zu finden. Welche Daten einen Index erhalten wird mit dem Datenbankschema festgelegt, kann aber später von einem Datenbankadministrator angepasst werden.

Anwendungsunterstützung

Zur Unterstützung von Datenbankapplikationen bieten Datenbanksysteme Trigger und Stored Procedures an. Ein Trigger löst eine Aktion in der Datenbank aus, wenn ein bestimmtes Ereignis eingetreten ist, häufig bei Einfüge- oder Änderungsoperationen. Stored Procedures dienen dem Ausführen von Scripten in der Datenbank. Da Stored Procedures innerhalb des Datenbanksystems ausgeführt werden sind sie oft der effizienteste Weg, Daten zu manipulieren.

Kritik am relationalen Datenbankmodell

  • Segmentierung
    In der relationalen Darstellung erfolgt die Abspeicherung eines Objektes segmentiert auf viele unterschiedliche Relationen. Die Anwendungsobjekte sind normalerweise komplex, bestehen also selbst wieder aus Objekten oder Listen von Objekten. Da das relationale Modell lediglich Tupelmengen kennt, die aus Werten bestehen, müssen komplexe Anwendungsobjekte bei einer Abfrage durch das DBMS mittels zahlreicher Joins aus den einzelnen Relationen wiederhergestellt werden, was zu unübersichtlichen Abfragen führt.
  • künstliche Schlüsselattribute
    Zur eindeutigen Identifizierung von Tupeln müssen in manchen Fällen künstliche Schlüssel eingesetzt werden. Dies dient z.B. dazu, die Größe des Schlüssels zu reduzieren, wenn er als Fremdschlüssel eingesetzt werden soll, oder dazu, gehört-zu-Beziehungen zu implementieren. Es werden also Attribute in die Relation aufgenommen, die mit der abstrakten Beschreibung eines Anwendungsobjektes nichts zu tun haben, sondern "nur" Verwaltungsinformationen sind.
  • externe Programmierschnittstelle
    Da in vielen relationalen Datenbanken nur Datenmanipulationssprachen eingeschränkter Mächtigkeit vorhanden sind, folgt daraus, dass Schnittstellen notwendig werden, um mächtigere Programmiersprachen einbinden zu können. Es gibt jedoch auch relationale Datenbanken mit mächtigen Programmiersprachen wie PL/SQL in Oracle. Die Verbindung von Datenbanksprachen mit externen, schon vorhandenen Programmiersprachen führt zu einer wenig programmiererfreundlichen Handhabung, z. B. beim Einbinden von SQL in C++-Programme: Beide Sprachen verfolgen hier ein unterschiedliches Verarbeitungsparadigma: SQL arbeitet mengenorientiert und C++ satzorientiert.
  • fehlendes Verhalten
    In der relationalen Datenbank kann das anwendungstypische Verhalten eines Objektes nicht beschrieben werden. Diese Beschreibung kann somit erst außerhalb der Datenbank in einer Anwendungssoftware erfolgen. Wenn mehrere Anwendungen den gleichen Datenbestand nutzen, kann das zu einer redundanten Implementierung führen.

Gegenüberstellung von Grundbegriffen

Tabelle Relationales Datenmodell Entity-Relationship-Modell (ERM) Unified Modeling Language (UML)
Wertebereich (Domäne, Domain) Wertebereich (Domäne, Domain) Wertebereich (Domäne, Domain) Wertebereich (Domäne, Domain)
Kopfzeile Relationstyp/Relationsformat Entitätstyp Klasse
Spaltenüberschrift Attribut Attribut Attribut
Inhalt Relation Entitätsmenge(-set) Objektmenge, Instanzmenge, Klasse
Inhalt Fremdschlüssel Beziehung (Relationship) Assoziation
Zeile Tupel Entität Objekt, Instanz
Zelle Attributwert Attributwert Attributwert


Siehe auch

Literatur

  1. Edgar F. Codd: A Relational Model of Data for Large Shared Data Banks, Communications of the ACM, 6/13/Juni 1970, ACM Press, New York, S. 377-387, ISSN 0001-0782
  • Edgar F. Codd: The Relational Model for Database Management. Version 2. Addison-Wesley, Reading u.a. 1990, ISBN 0-201-14192-2
  • Alfons Kemper, André Eickler: Datenbanksysteme. Eine Einführung. Oldenbourg, München 2004, ISBN 3-486-27392-2