7.1. Basic Concepts
TO BE TRANSLATED...
Attribute, Tabellenschema und Tabellen
Die Spalten einer Tabelle entsprechen den im zugrunde liegenden Tabellenschema definierten Attributen. Jedes Attribut hat einen Namen und einen Datentyp als Wertebereich (engl. "range"), der die für das Attribut zulässigen Datenwerte festlegt. Zum Beispiel könnte in einem Tabellenschema für eine Tabelle books
ein Attribut isbn
mit dem Wertebereich TEXT(10)
definiert sein. Dieser MS-Access-Datentyp umfasst alle Zeichenreihen (Strings) mit einer maximalen Länge von 10 Zeichen.
Ein relationales Tabellenschema besteht aus einer Menge von elementar-wertigen Attributen und einer Menge von Integritätsbedingungen, deren Aufgabe es ist, die Integrität der gespeicherten Daten zu garantieren. Ein solches Schema definiert die Struktur und die zuässigen Tupel bzw. Zeilen einer Tabelle.
Eine besonders wichtige Form einer Integritätsbedingung ist durch eine Eindeutigkeitsbeschränkung für ein Attribut A gegeben, die verlangt, dass es in einer Tabelle nicht mehr als eine Zeile mit demselben Wert für A geben kann, der Wert für A also eine eindeutige Kennung für die Tabellenzeile darstellt. Ein solches Kennungs-Attribut wird auch Schlüssel genannt. Für jede Tabelle, die einen Entitätstyp repräsentiert, also für jede Entitätstabelle, sollte ein Schlüssel als Primärschlüssel (engl. "primary key") deklariert sein. Ein Primärschlüssel kann auch Standard-Kennung genannt werden.
Ein relationales Tabellenschema kann mit Hilfe der SQL-Anweisung CREATE TABLE
definiert werden. Zum Beispiel könnte ein einfaches Schema für eine Tabelle books
mit drei Attributen für die ISBN (Internationale Standard-Buch-Nummer), den Titel und die Auflagennummer (engl. "edition") folgendermaßen definiert werden:
1 2 3 4 5 | CREATE TABLE books { isbn TEXT(10) PRIMARY KEY, title TEXT(50), edition INTEGER } |
Dabei wurde das Attribut isbn
als Primärschlüssel der Tabelle books
deklariert, was impliziert, dass seine Werte eindeutig sind.
Eine solche einfache Schemadefinition, die Attribute nur mit Wertebereichen, aber ohne weitere Integritätsbedingungen, definiert, kann auch als Tabellenkopf in einer Tabelle ohne Rumpf dargestellt werden:
books | ||
---|---|---|
TEXT(10) | TEXT(50) | INTEGER |
isbn | title | edition |
Das Attribut isbn
ist unterstrichen, um auszudrücken, dass es den Primärschlüssel der Tabelle bildet.
Der Rumpf einer relationalen Tabelle ist eine (endliche) mengen-theoretische Relation über elementaren Datentypen, also eine Menge von gleichförmigen elementar-wertigen Tupeln, die die Tabellenzeilen bilden und die Integritätsbedingungen erfüllen, die in dem der Tabelle zugrunde liegenden Tabellenschema definiert sind. Eine solche Relation könnte folgendermaßen aussehen:
006251587X | Weaving the Web | 3 |
0465026567 | Gödel, Escher, Bach | 1 |
0465030793 | I Am A Strange Loop | |
0321312562 | Database Systems | 2 |
Während eine mathematische Relation kein Schema, und ihre Tabellendarstellung also keinen Kopf, hat, haben relationale Tabellen immer einen Kopf, da sie nur auf der Basis eines Tabellenschemas erzeugt werden können. Deswegen müssen wir den durch eine Relation gegebenen Tabelleninhalt mit dem zugehörigen Kopf ergänzen, um eine relationale Tabelle vollständig darzustellen:
books | ||
---|---|---|
TEXT(10) | TEXT(50) | INTEGER |
isbn | title | edition |
006251587X | Weaving the Web | 3 |
0465026567 | Gödel, Escher, Bach | 1 |
0465030793 | I Am A Strange Loop | |
0321312562 | Database Systems | 2 |
Eine Suche nach Werten kann durch einen Such-Index beschleunigt werden. Sofern es um Strings/Texte (oder Zahlen) geht, ist ein solcher Index eine alphabetisch (oder numerisch) geordnete Hilfstabelle, die ein DBMS mit der Tabelle, in der gesucht werden soll, synchronisieren muss. Für Primärschlüsselattribute erzeugt eine RDBMS automatisch enen Index, um die über den Primärschlüssel erfolgenden Zugriffe zu beschleunigen. Für andere Attribute, wie z.B. für title
, kann ein Index mit Hilfe des folgenden SQL-Befehls erzeugt werden:
1 | CREATE INDEX title_idx on books (title); |
Datenbankschema und Datenbanken
Ein Tabellenschema t besteht aus einer (endlichen) Menge von Attributen A1, A2, ..., An und einer (endlichen) Menge von Integritätsbedingungen IC1, IC2, ..., ICm, die eine oder mehrere Schlüsseldefinitionen enthalten, wovon eine als Primärschlüssel dient. Eine Tabelle T vom Typ t, symbolisch T : t, muss in allen Spalten passende Werte haben, die die Wertebereiche der Attribute respektieren und sie muss alle für t definierten Integritätsbedingungen erfüllen. Das heißt, für jede Zeile t aus T und jedes Attribut Ai gilt, dass wenn t einen Wert für Ai hat, dann muss der Wert aus dem Wertebereich von Ai stammen, symbolisch: t(Ai) ∈ rng(Ai) oder, anders ausgedrückt, t ∈ rng(A1) × rng(A2) × ... × rng(An), bzw. T ⊆ rng(A1) × rng(A2) × ... × rng(An).
Ein Tabellenschema kann vereinfacht als eine Auflistung von Attributen definiert werden, wobei die Primäschlüsselattribute unterstrichen dargestellt werden und die jeweiligen Wertebereiche (sowie weitere Integritätsbedingungen) implizit bleiben. Zum Beispiel:
books = ⟨ isbn, title, edition, publisher⟩
publishers = ⟨ name, address⟩
Ein Relationales Datenbankschema (RDB-Schema) S besteht im Wesentlichen aus einer (endlichen) Menge von Tabellenschemata t1, t2, ..., tk sowie einer (endlichen) Menge von tabellen-übergreifenden Integritätsbedingungen ICS:
Ein Beispiel für ein RDB-Schema ist folgendes Schema für eine (vereinfachte) Bibliotheksdatenbank:
Eine auf einem RDB-Schema S basierende Relationale Datenbank D besteht aus einer zu S passenden Menge relationaler Tabellen, die alle Integritätsbedingungen aus ICS erfüllen:
Als Relationen über elementaren Datentypen (wie String, Integer, etc.) erlauben relationale Tabellen nur elementare Daten, die mit RDB-Operationen nicht weiter zerlegt werden können. Die Einschränkung auf elementare Daten ergibt sich aus der Wahl der mathematischen Prädikatenlogik und der mit ihr verknüpften Relationenalgebra als formale Semantik von Relationalen Datenbanken. Diese Einschränkung ist jedoch in der Praxis problematisch und wurde deswegen in vielen, oft objekt-relational genannten, DBMS aufgehoben.