Datenbanktheorie - Relationales Datenbankmodell (RDM/RDMS)
Das relationale Modell wurde bei IBM Research durch Ted Codd
entwickelt und erstmals 1970 veröffentlicht.
([3]1)
Auf Datenbankmodelle, wie das Netzwerkmodell und hierarchische
Systeme soll hier nicht näher eingegangen werden.
Im folgenden werden nun wichtige Grundlagen zum Relationalen
Datenbankmodell in geraffter Form dargestellt.
Grundbegriffe des relationalen Modells
Relation: Bezeichnet eine einzelne Tabelle der Datenbank
Attribut: Spalte einer Tabelle
Tupel: Ein Rekord (Datensatz) einer Relation (ugs.: eine Zeile einer Tabelle)
Degree: Gibt die Zahl der Attribute einer Relation an
Domäne: Gibt den Wertebereich eines
Attributs an.
Dabei sind die Domänen tabellenübergreifend und
können in verschiedenen Tabellen verwendet werden,
beispielsweise in Schlüsselattributen.
Kardinalität: Bezeichnet die Anzahl der Tupel einer Relation
NULL-Wert
NULL ist ein Zustandsindikator, welcher angibt, dass ein bestimmter Wert nicht gesetzt wurde und somit nicht vorhanden ist.
„In SQL, NULL is not a value. It is a state indicating that an item's value is unknown or nonexistent.“[4]
Außerdem ist zu beachten, dass dieser Zustand durch keinen Wert repräsentiert werden kann, so gilt grundsätzlich:
NULL ≠ 0 und NULL ≠ [Leere Zeichenkette] und NULL ≠ NULL
Somit wird deutlich, dass ein auf „leer“ gesetztes Feld (aus menschlicher Sicht), beispielsweise durch Zuweisung eines Strings der Länge 0 nicht NULL enthält, da das Feld ja gesetzt wurde, sondern stattdessen einen leeren String zurück liefert.
Nullwerte können also wie folgt interpretiert werden (nach [2]):
- Attribut ist auf Tupel nicht anwendbar
- Attributwert für dieses Tupel ist unbekannt
- Wert ist bekannt, aber nicht vorhanden (d.h.: er wurde noch nicht erfasst)
Relationen
Relationen bilden das zentrale Element einer jeden Datenbank,
daher sollen einzelne Fakten dazu nun nochmals ausführlicher
erläutert werden.
Eine Relation besteht aus einer vergleichsweise statischen Anzahl
von Attributen. Dagegen kann die Zahl der Tupel je nachdem, ob
Datensätze gelöscht oder eingefügt werden steigen
bzw. fallen, wodurch sich die Kardinalität der Relation
entsprechend ändert, die Degree-Angabe jedoch unverändert
bleibt.
In einem relationalen Modell müssen außerdem bestimmte
Bedingungen erfüllt sein. So darf innerhalb einer Relation
kein Tupel identisch zu einem anderen der selben Relation sein.
Außerdem ist die Reihenfolge sowohl der Tupel als auch der
Attribute in einer Relation nicht festgelegt und kann somit nicht
als Grundlage zur verlässlichen Ansprache einer bestimmten
Zelle dienen.
Alle Attribute unterliegen einer Domäne. Im einfachsten
Falle ist dies der Feldtyp, welcher für das entsprechende
Attribut definiert wird. Ein recht häufig verwendeter Feldtyp
ist VARCHAR, welcher die Speicherung von Zeichenketten
ermöglicht. Außerdem seien folgende Domänen
genannt, welche ebenfalls zum Einsatz kommen: INTEGER (Speicherung
von Ganzzahlen), BLOB (Binary Large Objekt; - Speicherung von
beliebigen Binärinformationen bzw. Text ohne
Längenbegrenzung [mit Ausnahme der physikalisch gegebenen]),
TIMESTAMP (Speicherung von Datum und Zeit) und DECIMAL (Speicherung
von Dezimalzahlen). Je nach Datenbanksystem stehen weitere/andere
Feldtypen zur Verfügung.
Einschränkungen dieses Wertebereichs sind natürlich
denkbar. So können Gültigkeitseinschränkungen
für einzelne Attribute vergeben werden.
Ferner sind Domänen als atomar aufzufassen. Dies bedeutet, dass die Werte innerhalb einer Domäne nicht mehr sinnvoll in weitere Domänen zerlegt werden können. Da jedes Attribut auf einer Domäne basiert, folgt daraus direkt, dass auch Attribute atomar sein müssen.
Schlüssel
Unique/Candidate-Key
Sobald alle Werte eines Attributs/einer Attributmenge eindeutig (unique) sind, werden diese als Candidate-Key bezeichnet. Ein Candidate-Key kann aus mehreren Attributen zusammengesetzt sein, um seine Eindeutigkeit zu erlangen. Allerdings darf er nicht mehr Attribute enthalten, als für diese Eindeutigkeit unbedingt nötig. So verliert ein zusammengesetzter Candidate- Key nach Entfernen eines Attributs sofort seine Gültigkeit, da dann die Eindeutigkeit nicht mehr gewährleistet sein darf. [1]/[2]
Aus dem Grundsatz, dass innerhalb einer Relation keine gleichen Tupel vorkommen dürfen, folgt direkt, dass jede Relation mindestens einen Candidate-Key besitzen muss, nämlich die Verbindung aus allen Attributen. Allerdings muss dies nicht zwangsläufig ein [genutzter] Candidate-Key sein, was in den meisten Fällen zutreffen wird.
Eine Sonderstellung bildet der so genannte Superschlüssel, welcher alle Attribute enthalten kann, auch wenn diese Redundanz enthalten, so dass die Eindeutigkeitseinschränkung auch nach Entfernen einzelner Attribute nicht verletzt wird. Durch solch einen Superschlüssel wird gleichzeitig festgelegt, dass keine zwei Tupel einer Relation innerhalb eines Relationszustands identisch sein dürfen. [2]
Zusammenfassend kann gesagt werden, dass der jeweilige Schlüssel eindeutig ein Tupel der Relation kennzeichnen muss.
Primärschlüssel
Ein Primärschlüssel (Primary-Key) dient zum gezielten Zugriff auf die Tupel einer Relation. Dabei besitzt jede Relation genau einen Primärschlüssel. Jedes Tupel einer Relation muss über diesen Primärschlüssel eindeutig identifiziert werden können, was nach sich zieht, dass der Primärschlüssel gleichzeitig die Bedingungen eines Candidate-Keys erfüllen muss.
Fremdschlüssel
Fremdschlüssel (Foreign-Keys) dienen dazu, unterschiedliche Relationen miteinander logisch zu verknüpfen. Ein Attribut bzw. eine Attributmenge, welche als Fremdschlüssel deklariert wird, besitzt die selbe Domäne, wie der Primärschlüssel einer anderen Relation. Über die Beziehung von Fremd- und Primärschlüssel ist es so möglich, mittels JOIN eine Ergebnisrelation aus den beiden zugrunde liegenden Relationen zu erhalten.
Referenzielle Integrität
Die entsprechenden Bedingungen der referenziellen
Integrität werden jeweils zwischen zwei Relationen definiert
und stellen sicher, dass die Integrität zwischen den Tupeln
der beteiligten Relationen erhalten bleibt.
Gemäß der Einschränkung der Entityintegrität
dürfen Primärschlüssel nicht NULL enthalten, da sie
so keine eindeutige Identifizierung der einzelnen Tupel
gewährleisten würden. Fremdschlüssel dürfen
ebenfalls nicht den Status NULL besitzen, da sie sich stets auf
einen Primärschlüssel beziehen und die selbe Domäne
wie dieser aufweisen.
Ein Fremschlüssel (FK) zwischen zwei Relationen (R1; R2) muss folgende Gültigkeitsbedingungen erfüllen (nach [2]):
- Die Attribute von FK in R1 haben die selbe Domäne, wie der Primärschlüssel von R2
- Ein Wert von FK in R1 kommt im aktuellen Zustand entweder als Primärschlüssel-Wert eines Tupels in R2 vor, oder ist NULL
Diese beiden Regeln stellen sicher, dass in einer relationalen
Datenbank zu keiner Zeit die Integritätsbedingungen verletzt
werden, da die Datenbank sonst nicht den Anforderungen an eine
relationale Datenbank entsprechen würde.
Die Einhaltung dieser Integritätsbedingungen ist dabei einzig
und allein die Aufgabe des DBMS und nicht Sache des Klienten.
Dabei muss das DBMS entsprechende Anfragen an die Datenbank, welche
die Tupelmenge einer Relation verändern können (Insert,
Update und Delete), prüfen und sollten sie gegen die
Integritätsbedingungen verstoßen, zurückweisen.
1 siehe http://www.acm.org/classics/nov95/
