![]() |
![]() |
|
Eine Funktion kann durchaus auch mehrere Parameter haben. So kann zum Beispiel eine Funktion Film(Kinosaal, Uhrzeit) eindeutig bestimmen, welcher Film in welchem Saal eines Multiplexkinos zu welcher Uhrzeit läuft. Funktion: eindeutige Beziehung Eine Funktion ist also eine eindeutige Beziehung zwischen einem Argument, oder einem ganzen Tupel von Argumenten, und einem Wert der Funktion. Doch nicht alle interessanten Beziehungen zwischen Fakten lassen sich als eine Funktion formulieren. Denn manche Beziehungen sind nicht eindeutig. Für die Beziehung der Koordinaten x und y einer Kreislinie mit dem Mittelpunkt (0,0) und dem Radius 1 gilt zum Beispiel die Formel x²+y²=1, nur für die Werte 1 und –1 von x lässt sich ein eindeutiger Wert von y bestimmen (0). Alle anderen Werte von x haben entweder gar keinem oder zwei zugehörige Werte von y. Man kann zwar im Allgemeinen keinen eindeutigen Wert y zu einem beliebigen x bestimmen, man kann aber immer eindeutig entscheiden, ob ein Paar (x, y) zu der Kreislinie gehört oder nicht. Relation: Beziehung zwischen MengenEine solche Beziehung zwischen Elementen mehrerer Mengen nennt man eine Relation. Für die Definition einer Relation ist die Eindeutigkeit nicht wichtig, ausschlaggebend ist nur, dass man bestimmen kann, ob ein Tupel der Elemente der Argumentmengen (der Domänen) zu der Relation gehört oder nicht. Die Relation definiert keine Reihenfolge der Tupel, sie bestimmt nur, ob ein Tupel zu ihr gehört oder nicht. Aus der Sicht der Datenbanksysteme sind Relationen, für die es eine Berechnungsformel gibt, nicht besonders interessant. Die Datenbanksysteme gibt es, um Informationen über Relationen zu speichern, für die es eben keine solche Formel gibt. RDBMSDie relationalen Datenbanksysteme (RDBMS für Relational Database Management System) verwalten also Informationen über Relationen zwischen den Fakten aus verschiedenen Domänen. Ein Element einer Relation ist ein Tupel, der aus Elementen der Domänen dieser Relation besteht. Bei den gespeicherten Daten spricht man auch von Datensätzen (engl. Record) einer Relation, die aus Feldern (engl. Field) bestehen. In einer relationalen Datenbank gibt es verschiedenartige Relationen. Gespeichert werden die Tabellen, von den Tabellen können andere Relationen abgeleitet werden – die Ansichten (engl. View) und die Abfragen (engl. Queries). Wenn wir uns die tabellarische Darstellung einer Relation ansehen, ist recht schnell klar, warum wir die Begriffe Zeile beziehungsweise Spalte als Synonyme für die Begriffe Datensatz und Feld verwenden. In Abbildung 6.2 ist eine Relation am Beispiel dargestellt.
Funktionale AbhängigkeitDie Funktionen gehören auch zu den Relationen. Wenn man immer anhand einiger Felder die Werte anderer Felder in einem Datensatz eindeutig bestimmen kann, spricht man von einer funktionalen Abhängigkeit. So besteht in unseren Beispielen eine funktionale Abhängigkeit zwischen der Stadt und dem Land, in dem die Stadt liegt, nicht aber umgekehrt, denn in einem Land können mehrere Städte liegen.1 Es besteht auch eine funktionale Abhängigkeit zwischen einem Kinosaal und einer Uhrzeit einerseits und einem Film andererseits, es besteht jedoch keine funktionale Abhängigkeit zwischen einem Kinosaal alleine und einem Film, denn um den Film eindeutig bestimmen zu können, brauchen wir auch die Uhrzeit. SchlüsselWenn wir anhand der Werte einiger Spalten einer Relation den kompletten Datensatz eindeutig bestimmen können, bilden die Spalten einen Schlüssel der Relation. Man sollte hier nicht die Bedeutung des Wortes »bestimmen« mit der Bedeutung des Wortes »berechnen« verwechseln. Dass wir anhand der Werte der Spalten eines Schlüssels die Werte der anderen Spalten der Relation eindeutig bestimmen können, bedeutet nicht, dass man den Wert nach einer Formel berechnen kann, sondern dass es eine fachliche Regel gibt, die besagt, dass es zu einer Kombination der Werte der Schlüsselspalten nur einen einzigen Datensatz in der Relation geben kann. Es besteht also immer eine funktionale Abhängigkeit zwischen einem Schlüssel einer Relation und allen anderen Spalten dieser Relation. Eine Relation kann auch mehrere Schlüssel haben. So kann man zum Beispiel einen Mitarbeiterdatensatz sowohl über die E-Mail-Adresse des Mitarbeiters als auch über seine Personalausweisnummer eindeutig identifizieren. Und offensichtlich, wenn einige Spalten einen Schlüssel bilden, entsteht so auch ein Schlüssel (ein Überschlüssel), wenn man weitere Spalten hinzufügt. Tabellen ohne Schlüssel? Obwohl die meisten relationalen Datenbanken es zulassen, dass man Tabellen ohne einen Schlüssel anlegt, ist dies sehr selten eine gute Idee. Denn wenn in einer Tabelle gleiche Datensätze vorkommen können, kann man sie nicht eindeutig identifizieren – zumindest nicht mit den Mitteln der relationalen Theorie. Ein Tupel kann nämlich zu einer Relation entweder gehören oder nicht gehören, es kann zu der Relation jedoch nicht »mehrfach« gehören. Eine derartige Information kann für die Anwendung zwar relevant sein, man sollte aber über eine alternative Speichermöglichkeit nachdenken – über eine, die sich als eine Relation abbilden lässt. Schlüsselkandidat Primärschlüssel Alternativschlüssel In der Praxis wählt man einen der Schlüssel einer Tabelle aus und deklariert ihn als den Primärschlüssel der Tabelle. Andere Schlüssel der Tabelle nennt man auch ihre Alternativschlüssel, alle zusammen nennt man auch Schlüsselkandidaten. Welcher der Schlüssel zum Primärschlüssel ausgewählt werden sollte, ist eine technische Entscheidung. Die Theorie befasst sich nicht mit der effizienten technischen Umsetzung der Datenbanken, dies wird dem jeweiligen Datenbankhersteller überlassen. Dem Anwender der Datenbank müssen die technischen Möglichkeiten der verwendeten Datenbank jedoch bekannt sein, damit er sie effektiv nutzen kann. Relationale Datenbanken verwenden verschiedene Hilfsmittel, um die gesuchten Datensätze effektiv zu finden. IndexZu den meistverwendeten solcher Hilfsmittel gehören die Indizes. Für welche Spaltengruppen ein Index angelegt werden sollte, ist aber keine Entscheidung, die relationale Theorie beantworten kann. Um eine solche Entscheidung zu treffen, müssen wir wissen, anhand welcher Spalten die Datensätze meistens gesucht werden. Und da man in den meisten Fällen einen Index für den Primärschlüssel anlegen wird, ist es oft eine gute Idee, den Schlüssel zum Primärschlüssel zu machen, nach dem häufiger gesucht wird. Da wir aber Indizes auch für andere Spalten anlegen können, ist dies lediglich ein Hinweis. FremdschlüsselIn einer relationalen Datenbank werden meistens mehrere Relationen verwaltet. Manche werden Spalten aus den gleichen Domänen haben. So kann man zum Beispiel eine Tabelle der Mitarbeiter mit der Spalte E–Mail-Adresse und eine andere Tabelle der E-Mails mit der Spalte Absender-Adresse aus der gleichen Domäne der E-Mail-Adressen haben. Eine Absenderadresse ist in der Tabelle der E-Mails kein Schlüssel, denn ein Mitarbeiter kann mehrere Mails verschickt haben, sie identifiziert aber eindeutig einen Datensatz in der Tabelle der Mitarbeiter. Wenn eine Spaltengruppe einer Relation einen Datensatz einer anderen Relation eindeutig bestimmen kann, spricht man von einem Fremdschlüssel. NULL-WerteBisher haben wir davon gesprochen, dass eine Relation aus Element-Tupeln besteht, die zu dieser Relation gehören. Eine solche Relation kann als eine Tabelle in einer relationalen Datenbank gespeichert werden. Wir könnten für das Speichern unserer Kontaktdaten eine Relation mit folgenden Feldern definieren: (Vorname, Nachname, Straße, Hausnummer, Postleitzahl, Stadt, Telefonnummer, Faxnummer, E-Mail). Nun, in einer solchen Relation könnten wir keine Daten von Leuten, die kein Faxgerät besitzen oder deren Adresse wir nicht kennen, speichern. Mehrere Relationen Stattdessen könnten wir mehrere Relationen definieren:
Alle vier Relationen haben einen Schlüssel, der aus den Spalten (Vorname, Nachname) besteht – wir gehen jetzt vereinfacht davon aus, dass wir Menschen mit gleichen Namen durch einen Namenszusatz zum Beispiel in der Spalte Vorname eindeutig auseinander halten können. In der Datenbank müssten wir für jeden Kontakt, den wir speichern möchten, also bis zu vier Einträge mit dem Vor- und dem Nachnamen erzeugen. Dies könnte wenig effizient sein, wenn wir für die meisten Kontakte tatsächlich alle vier Einträge speichern würden. Eine Abhilfe bieten hier die NULL-Werte. Man kann in einer Tabelle bestimmen, welche Spalten einen Wert haben müssen und welche leer bleiben können. Auf diese Art kann man mehrere fachliche Relationen in einer Tabelle speichern und so den Speicherplatz effektiver nutzen. Die Schlüssel-Spalten können natürlich keinen NULL-Wert enthalten. 1 Wir gehen hier von der vereinfachten Sichtweise aus, dass eine Stadt immer nur in einem Land liegt.
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.