Kapitel 2 - Die relationale Datenbank ORACLE

2.1 Was ist ein relationales Datenbankmanagementsystem ?

Zuerst ein Beispiel:

Vor der Entwicklung von relationalen Datenbank-Managementsystemen (DBMS) wurden zunächst hierarchische DBMS (Ein-Vater-viele-Kinder) und dann Netzwerk-DBMS (Ein-Vater-viele-Kinder plus ein-Kind-viele-Eltern) eingesetzt. Beide hatten den Nachteil, daß man s ich sowohl bei der Datenspeicherung, als auch bei Datenabfragen mit der inneren Struktur der Datenhaltung auskennen und beschäftigen mußte. Speziell bei den Abfragen ging es häufig darum, irgendwelchen Zeigern von einem gefundenen Datensatz zu seinem Vater oder den Kindern zu folgen. Dies war sehr kompliziert, konnte nur von DB-Experten durchgeführt werden und deckte trotzdem nicht alle Anforderungen ab.

Dann wurde 1970 von Ted Codd (IBM, San Jose Research Lab) das zunächst theoretische Modell der relationalen Datenbankmanagementsysteme (RDBMS) entwickelt. Erste kommerzielle relationale Datenbanksysteme wurden dann zwischen 1975-1980 entwickelt (DB2 von IBM, ORACLE von Oracle Corporation u.a.).

Folgende 6 Punkte sollte ein relationales DBMS erfüllen [SQL01, S.21]:

  1. Repräsentation sämtlicher Daten in Tabellen (Relationen)
  2. Hochsprache zum Anlegen von Tabellen, Speichern und Abfragen von Daten.
    Mit dieser Hochsprache sagt der Benutzer dem System nur »WAS« für Information er möchte. Das System muß selber wissen »WIE« es an diese Daten kommt. (Sprache der 4. Generation).
  3. Optimierung der Zugriffe auf die Daten (speziell bei komplexen Anfragen).
  4. Volle relationale Fähigkeiten: Die Ergebnisse von Anfragen sollten Mengen sein. (nicht einzelne Datensätze wie in hierarchischen-, oder Netzwerk-DBMS) und die Hochsprache muß »relational vollständig« sein (siehe unten).
  5. Die Wartung des Systems muß vom Benutzer durchgeführt werden können. Also das Anlegen, Umdefinieren, Zerstören von Tabellen, Rechtevergabe usw.
  6. Sämtliche Information, die das System zur internen Verwaltung benötigt, muß auch wieder in Tabellen abgelegt werden, auf die der Benutzer (je nach Rechtevergabe) zugreifen kann. (sogenanntes Data Dictionary)

Auf den tabellarisch gespeicherten Daten müssen mit der Hochsprache fünf elementare relationale Operationen durchgeführt werden können, damit diese Sprache als »relational vollständig« gilt:

  1. Selektion : »Sag mir, wer Mathematik studiert !« (liefert einige Tabellenzeilen)
  2. Projektion : »Gib mir Matrikelnummern und Nachnamen aller Studenten« (einige Spalten)
  3. Vereinigung : »Sage mir alle Mathematikstudenten und alle Medizinstudenten !«
  4. Schnitt : »Wer studiert Mathematik und Physik ?«
  5. Differenz : »Wer studiert Mathematik aber nicht Physik ?«

Weiter sollten noch folgende zusammengesetzte Operatoren vorhanden sein:

  1. Kartesisches Produkt : »Bilde sämtliche möglichen Vorlesungs-Raum-Paare«
  2. Division : »Welche Studenten besuchen sämtliche InfoII-Vorlesungen«
  3. Join : »In welchem Gebäude ist die Fakultät des Studenten mit der Matrikelnummer nnnnn ?«

Von den zusammengesetzten Operationen ist speziell die Operation »Join« in relationalen Datenbanken eine der am häufig benötigtsten Operationen. Sie ermöglicht es, die Daten in den Tabellen möglichst redundanzfrei zu halten. Das Beispiel am Anfang dieses Kapitels zeigt bereits, daß hier für zwei verschiedene Objektarten aus der realen Welt (Student, Fakultät) zwei verschiedene Tabellen angelegt wurden. Es wird nicht bei jedem Studenten der Name seiner Fakultät abgelegt (spart Speicherplatz!). Und es wird auch nicht das Gebäude in der Studentenrelation abgelegt (einfachere Wartung, wenn die Fakultät das Gebäude einmal wechseln sollte).

In dem Fall der Fragestellung bei »8.Join«(siehe oben) muß ein JOIN über das Attribut »FAKNR« gemacht werden. Es kann also zuerst in der Studentenrelation der Student anhand seiner Matrikelnummer gesucht werden und dann anhand der Fakultätsnummer des Stud enten in der Fakultätenrelation die passende Gebäudenummer.

2.2 SQL - die Sprache für relationale Datenbanken

[Structured Query Language = SQL sprich: »sequel« (engl. Folge, Nachspiel)]

Eng verknüpft mit der Entwicklung von RDBMS war die Entwicklung einer einheitlichen Hochsprache für Datenbankabfragen. Der Vorgänger von SQL hieß SEQUEL und wurde Mitte der 70'er Jahre von IBM vorgestellt und zusammen mit dem Prototypen der relationalen Da tenbank »System R« (1975-1979) verwendet. 1977 fing die spätere Oracle Corporation ebenfalls mit der Entwicklung eines RDBMS an, das auf SQL basierte. 1979 wurde »Oracle Vers.1« fertiggestellt.

Durch zwei große Produkte von IBM (DB2 und SQL/DS) und die Datenbank Oracle wurde SQL zum defacto Industriestandard für relationale Datenbanksysteme. ANSI und ISO-Normungen folgten.

Die Syntax der drei wichtigsten Datenbankaktionen in SQL soll hier nun kurz besprochen werden: Tabellen anlegen, Daten in Tabellen füllen und Daten abfragen. Dabei sind die Syntaxdiagramme nicht vollständig, sondern ermöglichen wiederum nur die Basisfunkti onalität der Befehle.

2.2.1 CREATE TABLE - Tabellen anlegen

Die Studententabelle auf der ersten Grafik dieses Kapitels wird zum Beispiel so angelegt:

CREATE TABLE Student
( MATR   INTEGER NOT NULL,
  NAME   VARCHAR (30),
  FAKNR  INTEGER,
  SEM    INTEGER);

2.2.2 INSERT INTO - Daten in Tabellen füllen

Um nun den Datensatz von 'Allan Turing' einzufügen:

  INSERT INTO Student VALUES (12345,  'Allan Turing',  11, 4);

2.2.3 SELECT - Daten abfragen

Wenn man nun alle Studenten, die im vierten Semester sind, ermitteln möchte:

SELECT * FROM Student WHERE SEM=4;

liefert diese Ergebnismenge:

   MATR   NAME            FAKNR SEM
   ----   --------------- ----  ----
   12345  Allan Turing    11    4
   12346  Gregor Mendel    9    4

Um nun den oben bereits erwähnten JOIN durchzuführen, der das Gebäude der Fakultät des Studenten mit der Matrikelnummer 12347 ermittelt, muß folgende Abfrage durchgeführt werden.

  SELECT Fakultaet.GEB
  FROM Student, Fakultaet
  WHERE Student.MATR = 12347
        AND Fakultaet.FAKNR = Student.FAKNR;


Zum Kapitel 1 Zum Kapitel 3 Zum Inhalt