1 Relationale Datenbanken (DB): Das Relationenmodell [eine Zusammenfassung von Christian Rausch nach Schicker: „Datenbanken und SQL“, 1999] Vereinfacht ausgedrückt bestehen relationale Datenbanken aus Tabellen, in denen Daten gespeichert sind. Üblicherweise stehen die Tabellen in Beziehungen zueinander, d. h. manche Einträge sind Verweise auf andere Einträge in anderen Tabellen. Wichtige Anforderungen an eine Datenbank: geringe Redundanz, gleiche Daten sind möglichst nicht an mehreren Stellen gleichzeitig abgelegt. Dadurch bleibt die DB übersichtlicher, Updates der Daten werden erleichtert, Speicherplatz wird gespart. Daten sind übersichtlich abgelegt, Abfragen sind einfach. gute Handhabbarkeit, einfache Zugriffe über möglichst wenige Tabellen Sicherstellung von Konsistenz und Integrität Datenbeziehungen bleiben in sich logisch und stimmig. Keine Gefahr von Datenverlust z. B. bei Updates oder Löschungen. 1.1 Beispiel zu relationalen Datenbanken Negativbeispiel: Datenbanktabelle VerkaeferProdukt (Tab. 1): Tab. 1 VerkaeferProdukt Verk_Nr Verk_Name V1 Meier V1 Meier V1 Meier V2 Schneider V2 Schneider V3 Müller PLZ 80075 80075 80075 70038 70038 10183 Verk_Adresse München München München Stuttgart Stuttgart Berlin Produktname Waschmaschine Herd Kühlschrank Herd Kühlschrank Staubsauger Umsatz 11000 5000 1000 4000 3000 1000 Zu jedem Verkäufer ist dessen Nummer und Name (Verk_Nr und Verk_Name), PLZ und Stadt seiner Adresse (PLZ und Verk_Adresse), der Name der von ihm verkauften Produkte (Produktname) und der Umsatz angegeben. Nachteile obiger Tabelle: Redundanzen: Name, PLZ und die Adresse der Verkäufer kommen mehrfach vor. Unbequeme Handhabbarkeit: ändert ein beliebiger Verkäufer seine Adresse, so ist eine variable Anzahl von Adresseinträgen zu ändern. Falls nicht alle Adresseinträge geändert werden, so besteht die Gefahr von Inkonsistenzen. Redundanz ist immer eine Gefahrenquelle für Fehler und Inkonsistenzen. Falls die Firma den Artikel Staubsauger aus dem Programm nimmt, so können nicht einfach die 1/13 Zeilen, die den Produktnamen Staubsauger enthalten, entfernt werden, da sonst auch alle Informationen zu Verkäufer Müller aus der Datenbank entfernt werden! E. F. Codd untersuchte ab 1970 den optimalen Aufbau von Tabellen und legte die Grundlage zu mathematisch-fundierten Theorien (relationale Algebra, Relationenkalül, Normalformenlehre). Es wurde theoretisch belegt, dass Tabellen so aufgebaut werden können, dass sowohl Redundanzen in den Daten vermieden als auch Einzeldaten isoliert gelöscht werden können. 1.2 Relationale Datenstrukturen Übersicht Entsprechung der formalen relationalen Ausdrücke mit mehr informellen alltäglichen Ausdrücken: Tab. 2 Formale relationale Ausdrücke Relation Tupel Kardinalität Attribut Grad Primärschlüssel Gebiet Informelle Ausdrucksweise Tabelle eine Zeile (Reihe) einer Tabelle Anzahl der Zeilen einer Tabelle eine Spalte (Feld) einer Tabelle Anzahl der Spalten einer Tabelle eindeutiger Bezeichner einer Zeile (eines Tupels) Menge aller möglichen Werte L# Lname Stadt PLZ L1 Müller München 81724 Schmidt Regensburg 93055 L3 Maier Hamburg 20543 L4 Schwarz Köln 50087 L5 Weiß Berlin 11168 Relation L2 Kopf(zeile) Rumpf Tupel Attribute Grad Abb. 1 Relationale Begriffe am Beispiel: L1-L5 Primärschlüssel; die Kardinalität ist die Zeilenzahl (=Tupelzahl) Der Kopf besteht aus einer festen Anzahl von Attributen: {(A1; D1), (A2; D2), ... , (An; Dn)}, wobei jedes Attribut Ai genau mit einem Gebiet korrespondiert (1 i n) Der Rumpf besteht aus einer variablen Anzahl von Tupeln. 2/13 Der Grad einer Relation R (d. h. die Spaltenzahl = Attributszahl) wird beim Erzeugen der Relation festgelegt (beim Hinzufügen einer Spalte (Attribut) handelt es sich genaugenommen um die Überführung der Relation in eine andere). Die Kardinalität ist beim Erzeugen der Relation gleich Null und erhöht sich mit jedem Einfügen eines neuen Tupels. Definition (Relation) Eine Relation ist eine Tabelle obiger Gestalt, bestehend aus einem Kopf und einem Rumpf, mit folgenden 4 Eigenschaften: Es gibt keine doppelten Tupel. Tupel sind nicht geordnet (etwa von oben nach unten). Attribute sind nicht geordnet (etwa von links nach rechts). Alle Attribute sind atomar, d. h. jedes Attribut („Tabellenelement“) enthält nur ein Element. (Handhabung wird vereinfacht, Speicherbedarf kann besser geplant werden.) Definition (Relationale Datenbank) = eine Ansammlung von normalisierten Relationen, die zeitlich variieren (können). die einen (geeigneten) Grad haben. die Relationen stehen zueinander in einer bestimmten Beziehung und werden von einem Verwaltungssystem gemeinsam verwaltet. Eine Datenbank, die ausschließlich mit SQL Befehlen verwaltet und auf die ausschließlich mit SQL Befehlen zugegriffen wird, ist bereits eine relationale Datenbank, da SQL nur Relationen kennt. Unterscheidung „eigentliche“ Relationen <---> von „eigentl.“ Relationen abgeleitete Relationen Basisrelationen (am wichtigsten, da „eigentliche“ Relation) existieren tatsächlich (real) in der DB, haben Namen und sind dauerhaft gespeichert. Sichten (Views) virtuell und nicht real erscheinen dem Benutzer wie „normale“ Relationen aus Basisrelationen abgeleitet geeignet, um Benutzer mit eingeschränkten Rechten z.B. nur „Teilsicht“ auf eine best. Relation zu gewähren. Abfrageergebnisse (Query-Results) sind auch Relationen existieren nur temporär als Abfrageergebnisse auf Bildschirm oder Drucker Temporäre Relationen existieren wie Abfrageergebnisse nur temporär werden aber erst durch best. Aktionen z.B. Beenden einer Transaktion zerstört dienen v.a. zum Abspeichern von Zwischenergebnissen. 3/13 In SQL: CREATE TABLE ...; CREATE VIEW ...; SELECT ...; CREATE TEMPORARY TABLE ...; Erzeugen einer Basisrelation Erzeugen einer Sicht Abfrage Erzeugen einer temporären Relation Definition (Primärschlüssel) der Primärschlüssel ist ein besonderes Attribut, durch das jeder Tupel eindeutig beschrieben wird. Primärschlüssel kann aus mehreren Einzelattributen zusammengesetzt sein. Wegen der Def. der Relation (einmaliges Auftauchen eines Tupels) besitzt jede Relation einen Primärschlüssel. Im ungünstigsten Fall erstreckt sich dieser über mehrere oder sogar alle Attribute! Bsp. Primärschlüssel Tab. 3 Tab. 3 Relation Lagerbestand mit zusammengesetztem Primärschlüssel Produktname Produkttyp Bestand Preis Staubsauger T06 25 498 Staubsauger T17 17 219 ... ... ... ... Herd T04 10 1598 7 1998 Herd T06 <--- Primärschlüssel -------------> 1.3 Relationale Integritätsregeln Physische Integrität Vollständigkeit der Zugriffspfade und der physischen Speicherstrukturen Vom Datenbankprogrammierer nicht beeinflussbar. Ablaufintegrität Korrektheit der ablaufenden Programme Keine Dateninkonsistenz im Mehrfachbenutzerbetrieb Verantwortung: Anwendungsprogrammierer und Datenbankdesigner Zugriffsberechtigung korrekte Vergabe der Zugriffsberechtigung Verantwortung: Datenbank-Administrator Semantische Integrität Übereinstimmung der Daten in der DB mit denen in der realen Welt Gefahr: z.B. aus Versehen könnten falsche Werte z.B. Mengenangaben eingegeben werden Abhilfe: Eingabe muss auf Korrektheit überprüft werden. Empfehlung: die Gebiete sind so klein wie möglich zu wählen. Verantwortung: Anwendungsprogrammierer, Datenbank-Administrator, DB-Hersteller 4/13 1.3.1 Entitäts-Integritätsregel = 1. Integritäsregel Jeder Primärschlüssel identifiziert jedes Tupel eindeutig <=> jedes Tupel hat einen Primärschlüssel. 1. Integritätsregel (Entitäts-Integritätsregel) Keine Komponente des Primärschlüssels einer Basisrelation darf nichts enthalten. Definition (Schlüsselkandidat) Ein eventuell aus mehreren einzelnen Attributen zusammengesetztes Attribut heißt Schlüsselkandidat, falls es eindeutig jedes Tupel identifiziert und minimal ist, d.h. bei Weglassen eines einzelnen Attributs die Eindeutigkeit verloren geht. Definition (Primärschlüssel, alternativer Schlüssel) Besitzt eine Relation mehrere Schlüsselkandidaten, so wird davon einer als Primärschlüssel ausgewählt; alle anderen heißen alternative Schlüssel. Der Primärschlüssel soll minimal sein. Teilattribute des alternativen Schlüssels dürfen leer sein. Bsp. für Auftreten von Primärschlüssel und alternativen Schlüsseln in Tab. 4: Tab. 4 Tabelle der chemischen Elemente Protonen Atomgewicht Name Symbol 1 1,0079 Wasserstoff H 2 4,0026 Helium He 3 6,9410 Lithium Li ... ... ... ... NB: Protonenzahl, Namen und Symbol des Elements sind Schlüsselkandidaten. 1.3.2 Referenz-Integritätsregel Diese regelt Verweise der Relationen untereinander. Allgemein gesprochen sind Relationen einzelne Objekte ohne zwingenden Bezug. Üblicherweise gibt es aber einen Bezug, da in Datenbanken „zusammengehörige“ Dinge verwaltet werden. Der Bezug zwischen zwei Relationen wird durch einen weiteren Schlüssel, den sog. Fremdschlüssel hergestellt. Fremdschlüssel sind der „Kitt“, der die einzelnen Relationen zu einem gemeinsamen Datenbestand zusammenfügt. Definition (Fremdschlüssel) Ein (möglicherweise zusammengesetztes) Attribut einer Basisrelation heißt Fremdschlüssel, falls das ganze Attribut entweder nichts oder einen definierten Inhalt enthält, eine Basisrelation mit einem Primärschlüssel existiert, so dass jeder definierte Wert des Fremdschlüssels zum Wert jenes Primärschlüssels identisch ist. Beispiel für die Relationen Personal, Kunde und Auftrag (Tab. 5) (nächste Seite) 5/13 Tab. 5 Beispiel für die Relationen Personal, Kunde und Auftrag 6/13 2. Integritätsregel (Referenz-Integritätsregel) Eine relationale Datenbank enthält keinen Fremdschlüssel (ungleich NULL), der auf einen nichtexistenten Primärschlüssel verweist. Problem: Falls ein Tupel mit Primärschlüssel gelöscht werden soll, auf den Fremdschlüssel verweisen, so kann dieses nicht einfach gelöscht werden, da sonst der Fremdschlüssel ins Leere verweist wodurch die 2. Integritätsregel verletzt wäre. Lösungsmöglichkeiten: Löschen bzw. Ändern nicht durchführen ON DELETE NO ACTION bzw. ON UPDATE NO ACTION Löschen bzw. Ändern rekursiv aller darauf verweisender Tupel ON DELETE CASCADE bzw. ON UPDTATE CASCADE Nullsetzen aller darauf verweisender Fremdschlüssel ON DELETE SET NULL bzw. ON UPDTATE SET NULL 1.4 Relationale Algebra E. F. Codd definierte eine vollständige Syntax auf 8 Operatoren und schuf eine relationale Algebra. Er zeigte, dass damit alle denkbaren Zugriffe auf beliebige Relationen der Datenbank möglich sind. 1.4.1 Relationale Operatoren Eine Relation R ist eine Menge (R ist Menge aller Relationen) Es gibt 8 Mengenoperatoren auf R x R (binäre Operatoren) und R (unäre Operatoren). Das Bildgebiet ist wieder eine Menge (Relation). Binäre Operatoren sind z.B. Addition und Multiplikation Unäre Operatoren sind z.B. das negative Vorzeichen. Vereinigung R1 UNION R2 Alle Tupel, die wenigstens in einer der beiden Relationen vorkommen Schnitt R1 INTERSECT R2 Enhält nur die in beiden Relationen vorkommenden Tupel. Differenz R1 MINUS R2 Bezüglich der Tupel: R1 ohne R2 i.e. R1 \ R2 Kartesisches Produkt R1 TIMES R2 alle möglichen Kombinationen der Tupel aus R1 und R2 Restriktion R WHERE Bedingung die sich ergebende Relation ist eine Teilmenge von R entsprechend der Bedingung Projektion R [Attributsauswahl] alle Tupel, aber nur mit einer Auswahl von Attributen werden angezeigt. 7/13 (Natürliche) Verbindung R1 JOIN R2 alle mögl. Kombinationen der Tupel aus R1 u. R2. „gemeinsame Attribute dienen als Verknüpfung“, Verknüpfung bei gemeinsamen Attributen ist über Fremdschlüssel -> Primärschlüssel gegeben. Division R1 DEVIDEBY R2 R1 muss mindestens alle Att. von R2 enthalten (R2 ist Teilmenge von R1). Die neue Relation enthält nur die Attribute, die R1 zusätzlich zu R2 hat enthält nur die Tupel von R2 deren Attribute Att mit denen von R1 übereinstimmen. nur die „neuen“ Attribute werden gewählt (d.h. nur in R1 enthalten) nur die Tupel werden gewählt, wo für die Attribute gilt, die in R1 und R2 vorhanden sind: „die Attribute stimmen in ihren Werten überein“ Graphische Verdeutlichung (Abb. 2): Abb 2.1: Natürliche Verbindung (JOIN) der Relationen Personal und Auftrag Abb 2.2: Graphische Verdeutlichung der 8 relationalen Operatoren 8/13 2 Datenbankdesign 2.1 Normalformenlehre Die Normalformenlehre betrachtet immer Relationen für sich. Das Entity-Relationship-Modell ist ein Gesamt-Design mit allen Beziehungen zwischen den Relationen. Die Normalformenlehre beschreibt, wie Relationen aufgebaut werden sollen, um Redundanzen zu vermeiden. Codd stellte 1970 3 Normalformen auf, heute gibt es insg. 5 Normalformen. Die 1. - 3. finden am meisten Anwendung. Die Normalformen bauen aufeinander auf, d.h. befindet sich eine Datenbank in der m.ten Normalform, so befindet sie sich auch in der n.ten (m n). Definition (erste Normalform) Eine Relation ist in der ersten Normalform, wenn alle zugrundeliegenden Gebiede nur atomatre Werte anthalten. Definition (funktionale Abhähngigkeit) Ein Attrbut Y einer Relation R heiß funktional abhängig vom Attirbut X derselben Relation, wenn zu jedem X-Wert höchsten ein Y-Wert möglich ist. Ist Y von X funktional abhängig so schreiben wir: X->Y Definition (volle funktionale Abhängigkeit) Ein Attribut Y einer Relation R heißt voll funktional abhängig vom Attribut X derselben Relation, wenn es funktional abhängig von X ist, nicht aber funktional abhängig von beliebigen Teilattributen von X. Ist Y von X voll funktional abhängig so schreiben wir: X=>Y Definition (zweite Normalform) Eine Relation ist in der zweiten Normalform, wenn sie in der ersten Normalform ist, und jedes Nichtschlüsselattribut voll funktional abhängig vom Primärschlüssel ist. (Ein Nichtschlüsselattribut ist jedes (auch zusammengesetzte) Attribut, das kein Schlüsselkandidat ist.) Bemerkung: Eine normalisierte Relation mit einem nicht zusammengesetzten Primärschlüssel befindet sich immer in der zweiten Normalform. Umgekehrt besitzt eine Relation, die sich nicht in der zweiten Normalform befindet, einen zusammengesetzten Primärschlüssel. Definition (Determinante) Eine Determinante ist ein (eventuell zusammengesetztes) Attribut, von dem ein anderes voll funktional abhängig ist. Diese Definition besagt nur, dass jedes Attribut, von dem ein Doppelpfeil ausgeht, als Determinante bezeichnet wird. In der zweiten Normalform sind also mindestens alle Schlüsselkandidaten Determinanten. Die dritte Normalform geht noch einen Schritt weiter: 9/13 Definition (dritte Normalform nach Boyce/Codd) Eine normalisieret Relation ist in der dritten Normalform, wenn jede Determinante dieser Relation ein Schlüsselkandidat ist. Bemerkung Jede beliebige Relation kann durch Umformung (meist Zerlegung in mehrere Relaitonen) in die zweite und auch in die dritte Normalform überführt werden. Vierte und fünfte Normalform (Ausblick) Primärschlüssel und alternative Schlüssel sind möglichst so zu wählen, dass sie nur aus ein oder höchstens zwei Attributen bestehen. Dies sind Aussage und Inhalt der vierten und fünften Normalform. Besitzt eine Relation einen nicht zusammengesetzten Primärschlüssel, so fallen die Definitionen der dritten, vierten und fünften Normalform zusammen! 2.2 Entity-Relationship-Modell Nachdem geklärt wurde, wie einzelne Relationen aufgebaut werden sollten, wird nun beschrieben, wie die Beziehungen zwischen den Relationen gestaltet werden sollen. 2.2.1 Entitäten Tab. 5 Begriffe zu relationalen Datenbanken Entiät ein unterscheidbares Objekt (im Sinne der betrachteten Objekte in der Datenbank), im mathematischen Sinne ein Element Eigenschaft ein Teil einer Entität, der die Entität beschreibt Beziehung eine Entität, die zwei oder mehr Entitäten miteinander verknüpft Subtyp eine Entität Y, die auch zu einer Entität X gehört Supertyp eine Entität, die Subtypen enthält Tab. 6 Beispiele zu den Begriffen zu relationalen Datenbanken Begriff Beispiele Entität Person, Werkzeugteil, Produkt, Rechnung Eigenschaft Name, Vorname, PLZ, Ort, Adresse einer Person; Einzelteile, aus denen ein Werkzeug besteht; Rechnungsdatum Beziehung die Relation Verknuepfung verbindet die Relationen Verkaeufer und Produkt (siehe Tab.7) Subtyp die Entität Programmierer ist ein Subtyp zu Entität Person. Supertyp die Entität Person ist ein Supertyp der Entität Programmierer. 10/13 Tab. 7 Relation Verkaeufer Verk_Nr Verk_Name PLZ Verk_Adresse V1 Meier 80075 München V2 Schneider 70038 Stuttgart V3 Müller 50083 Köln Tab. 8 Relation Produkt Prod_Nr Produktname P1 Waschmaschine P2 Herd P3 Kühlschrank P4 Staubsauger Tab. 9 Realtion Verknuepfung Verk_Nr Produkt_Nr Umsatz V1 P1 11000 V1 P2 5000 V1 P3 1000 V2 P2 4000 V2 P3 3000 V3 P4 1000 Abb. 3 Beispiel zu Entitäten und Eigenschaften 11/13 Ein Beispiel zu Beziehungen zwischen Relationen (Abb. 4): Eine Entität Person hat eine Beziehung zu der Entität (Relation) Abteilung, in der Daten zu den Abteilungen abgespeichert sind. Diese Beziehung stellt selbst eine Entität dar, eine sog. Beziehungs-Entität (dargestellt als Raute). Abb. 4 Beispiel einer Beziehungsrelation Es wird zwischen schwachen und starken Entitäten unterschieden. Eine schwache Entität hängt von einer starken Entität ab. Wird die starke Entität entfernt, so verliert jede von ihr abhängige schwache Entität ihre Daseinsberechtigung und kann auch entfernt werden. Ein Beispiel wären die Entitäten Produkt, Einzelteile und Fehler. Die Entitäten Einzelteile und Fehler hängen von Prokukt ab. Falls alle Fehler prokukt-spezifisch sind, so ist Fehler eine schwache Entiät, d. h. falls das Produkt aus der Prokuktion genommen wird, so sind die Fehlerdaten wertlos. Einzelteile können jedoch für verschiedene Produkte verwendet werden, diese Entität ist daher nicht schwach. 2.2.2 Beziehungen: Primärschlüssel und Fremdschlüssel Eine Beziehungsentiät zwischen zwei Entitäten enthält zwei Fremdschlüssel, die auf die Primärschlüssel der beiden Entitäten verweisen. Es liegen also Beziehungen wie zwischen Verkaefer und Produkt, oder wie zwischen Teilelieferant und Teile vor. Es sind auch Beziehungen zwischen mehreren Entitäten möglich, die Beziehungs-Entitäten enthalten dann dementsprechend mehr Fremdschlüssel. Abb. 5 Beziehungsrelation zwischen Verkaeufer und Prokukt Die Relation Verknuepfung wird in SQL wie folgt erzeugt, wobei alle Schlüsselinformationen bereits mit angegeben sind: 12/13 CREATE TABLE Verknuepfung ( Verk_Nummer CHARACTER(4) Produkt_Nr CHARACTER(4) Umsatz SMALLINT, PRIMARY KEY (Verk_Nummer, Produkt_Nr) ); REFERENCES Verkaeufer, REFERENCES Produkt, Einige Empfehlungen zum Erstellen einer Datenbank: Auswahl aller Eigenschaften, die in die Datenbank aufgenommen werden sollen (meist ein langwieriger und zeitraubender Prozess). Eine gute Auswahl schon in der Anfangsphase verhindert ein mehrmaliges und zeitraubendes Anpassen der Datenbank. Zusammenfassen der Eigenschaften zu Entitäten. Hier ist die Normalformenlehrre zu berücksichtigen. Bei guter Auswahl der Entitäten werden die Relationen meist automatisch in dritter oder höherer Normalform sein. Ermittlung der Beziehungen zwischen den einzelnen Entitäten Erzeugen der Relationen, Erzeugen der Beziehungsrelationen. Geeignete Wahl der Fremdschlüssel. Ermittlung der Eigenschaften der Fremdschlüssel. (Was soll mit ihnen geschehen falls der zugehörige Primärschlüssel eine „Lösch- oder Update-Anfrage“ bekommt.) Hier helfen auch Stichworte wie schwache Entität und Subtyp weiter. 13/13