Die neun Regeln von Codd und ein Einblick in das formale Relationenmodell

Datenbanksysteme dienen zur effizienten Organisation und Verwaltung insbesondere großer Informationsmengen und bestehen aus zwei Komponenten, dem Datenbankmanagementsystem(DBMS) und der eigentlichen Datenbank. Eines der bekannteren DBMS ist Oracle Database, welches von dem amerikanischen Softwarehersteller Oracle Cooperation entwickelt und vermarktet wird. In Oracle Database können relationale Daten gespeichert werden, weshalb es auch als Relational Database Management System (RDBMS) bezeichnet wird.

Das relationale Datenbankmodell

Das relationale Datenbankmodell beruht auf dem mathematischen Konzept der Relation und wurde von dem Mathematiker Edgar F. Codd entwickelt. Alle relevanten Informationen einer Datenbank werden darin in Relationen abgelegt. Bereits in den 60er und 70er Jahren schuf er somit die Grundlagen der relationalen Datenbanken, welche bis zum heutigen Tag einen Standard in der Datenbanktechnik darstellen.
Edgar F. Codd definierte neun Anforderungen, die sog. Codd’schen Regeln, die für einen zuverlässigen und effizienten Datenbankbetrieb notwendig und hinreichend sind.

Die neun Regeln von Codd:

  1. Integration: Daten müssen in einer einheitlichen Struktur ohne Redundanz abgelegt werden.
  2. Operationen: In einer Datenbank müssen Daten gespeichert, geändert und gesucht werden können.
  3. Katalog: Im Katalog werden Informationen abgelegt, die die Daten in einer Datenbank beschreiben.
  4. Benutzersichten: Für unterschiedliche Anwendungen brauchen wir eine unterschiedliche Sicht auf den Datenbestand.
  5. Integritätssicherung: Die Korrektheit des Datenbankinhalts muss gewährleistet werden, also kann man Regeln angeben, die jeder Datenbankeintrag erfüllen muss.
  6. Datenschutz: Nur berechtigte Benutzer und Programme dürfen Zugriff auf die Datenbank haben.
  7. Transaktionen: Bündelung mehrerer Anweisungen zu einer einzigen Transaktion, welche als eine funktionale Einheit ausgeführt werden – entweder ganz oder gar nicht.
  8. Synchronisation: Parallel ausgeführte Transaktionen müssen den gleichen Datenbankzustand hervorrufen wie irgendeine serielle Ausführung der Transaktionen.
  9. Datensicherung: Das Datenbanksystem muss nach einem Systemfehler in der Lage sein, den letzten konsistenten Datenbankzustand mittels automatischer Datensicherungs- und Wiederherstellungsmechanismen herzustellen.

Mit diesen Regeln kann man beurteilen, ob es sich um eine echte Datenbank handelt, da diese Anforderungen anerkannte Mindestkriterien sind.

Wie sieht das Relationenmodell formal aus?

Die formale Grundlage des Relationenmodells ist recht mathematisch und beruht auf der relationalen Algebra. Im Folgenden gebe ich einen vereinfachten Einblick in die mathematischen Formulierungen dieser. Es wird darauf verzichtet eine Definition einer Algebra zu erläutern. Nur so viel – für eine Algebra benötigt man eine Trägermenge [latex]T[/latex] mit Operationen der Form [latex]T^n \rightarrow T [/latex] mit [latex]n \in \mathbb{N}[/latex]. In der relationalen Algebra ist die Trägermenge die Menge aller Relationen.

Definition (Relationenmodell):

  • Es sei [latex]U[/latex] eine universelle Menge von Attributen und sei [latex]Dom(A)[/latex] der Wertebereich für jedes [latex]A \in U[/latex].
  • Für jedes [latex]A \in U[/latex] gilt: [latex]Null \notin A[/latex]
  • Es sei [latex]R[/latex] eine endliche Menge mit [latex]R \subset U[/latex]. Dann heißt [latex]R[/latex] Relationenschema.
  • Es sei [latex]t[/latex] ein Tupel von [latex]R[/latex] mit: [latex]t:R \rightarrow \cup_{A \in U} Dom(A)[/latex], mit [latex]t(A) \in Dom(A)[/latex] für [latex]A\in R[/latex]
  • Es sei [latex]t'[/latex] ein partielles Tupel von [latex]R[/latex] mit: [latex]t’:R\rightarrow \cup_{A\in U} Dom(A) \cup {Null}[/latex], mit [latex]t(A) \in Dom(A) \cup {Null}[/latex] für [latex]A \in R[/latex] und [latex]t(A)=Null[/latex] für mindestens ein [latex]A \in R[/latex].
  • Es sei [latex]I(R)[/latex] eine Relation von [latex]R[/latex]. Dann ist diese entweder eine Menge, eine Multimenge oder eine Liste von Tupeln von [latex]R[/latex].
  • Eine Relation heißt partiell, wenn darin partielle Tupel enthalten sind.
  • Sei [latex]R[/latex] ein Relationenschema, dann wird mit [latex]Rel(R)[/latex] die Menge aller Relationen von [latex]R[/latex] bezeichnet.
  • Sei [latex]P={R_1, R_2, …, R_n}[/latex] eine Menge von Relationenschemata und [latex]I(P) = {I(R_1), I(R_2), …, I(R_n)}[/latex] die zugehörigen Relationen, wobei [latex]I(R_i)[/latex], mit [latex]i \in [1,2,…,n][/latex] die sogenannten Basisrelationen sind, dann heißt [latex]D = \{P, I(P)\}[/latex] Datenbank von [latex]P[/latex].

Beispiele von Operatoren auf Relationen

Insgesamt gibt es sechs Operatoren mit denen jegliche Zugriffe auf beliebige Relationen in der Datenbank realisiert werden können. Diese sind: Projektion, Selektion, kartesisches Produkt, Umbenennung, Vereinigung und Differenz. Zu der Projektion, Selektion und einem Equi-Join wird nachstehend beispielhaft das Sql Pendant gezeigt. Der Equi-Join ist dabei kein grundlegender Operator, kann aber aus den anderen Operatoren abgeleitet werden.

  • Projektion:
    • Notation: [latex]\pi_{A1, A2, …, An}(R)[/latex]
    • Bedeutung: Wählt Attribute [latex]A1[/latex] bis [latex]An[/latex] der Relation [latex]R[/latex] aus.
    • Sql Statement: SELECT [latex]A1, A2,…, An[/latex] FROM [latex]R [/latex];
  • Selektion:
    • Notation: [latex]\sigma_a(R)[/latex]
    • Bedeutung: Liefert das Tupel der Relation [latex]R [/latex], welches die Bedingung [latex]a[/latex] erfüllt.
    • Sql Statement: SELECT [latex]*[/latex] FROM [latex]R[/latex] WHERE [latex]a[/latex];
  • Equi-Join:
    • Notation: [latex]R1 \bowtie_\theta R2 [/latex], mit [latex] \theta := \pi_{A3}(R1) = \pi_{A3}(R2) [/latex], wobei [latex]R1[/latex] und [latex]R2[/latex] Relationen sind
    • Bedeutung: Liefert das Tupel der Relation [latex]R1[/latex] und der Relation [latex]R2[/latex], bei denen das Attribut [latex]A12 [/latex] der Relation [latex]R1[/latex] gleich dem Attribut [latex]A12 [/latex] der Relation [latex]R2[/latex] ist.
    • Sql Statement: SELECT [latex]*[/latex] FROM [latex]R1[/latex], [latex]R2[/latex] WHERE [latex]R1.A3 = R2.A3[/latex];