Datenbanken und Datenbankmanagementsysteme Prof. Dr. Katrin Brabender Labor für Angewandte Informatik und Datenbanken Version: 12.03.2007 SS 2007 Datenbanken Seite 1 Inhalte der Vorlesung • Einführung in die Theorie der Datenbanken • Relationale Datenbanken • Phasen des Datenbankentwurfs • Das ER-Modell • Normalisierung • Die Datenbanksprache SQL • Datenbank-Techniken • Arbeitsweise eines DBMS und Optimierung • Die Datenbank im Netz • Einige Datenbanken im Vergleich • Datawarehouse und Mulitidimensionale Datenbanken SS 2007 Datenbanken Seite 2 Einige Literatur aus dem Bereich der Datenbanken • Ramez Elmasir, Shamkant B. Navathe: Grundlagen von Datenbanksystemen, Addison-Wesley 3. Auflage 2002 • Andreas Heuer, Gunter Saake, Kai-Uwe Sattler: Datenbanken kompakt, mitp 2001 • Rene Steiner: Theorie und Praxis relationaler Datenbanken, vieweg 2000 Zum Thema Data-Warehouse • Bauer, A.; Günzel, H.: Data-Warehouse-Systeme. Dpunkt.verlag Heidelberg 2001 • Inmon, W.H.: Building the Data Warehouse. Second Edition, John Wiley & Sons, New York, 1996. SS 2007 Datenbanken Seite 3 Einführung in die Theorie der Datenbanken Datenbanken bzw. Datenbanksysteme sind Systeme zur Beschreibung, Speicherung und Wiedergewinnung von umfangreichen Datenmengen, die von mehreren Anwendungsprogrammen benutzt werden. Ein Datenbanksystem besteht aus der Datenbank (Abkürzung DB), d.h. der Datenbasis, in der die Daten abgelegt werden, und dem Datenbankmanagementsystem (Abkürzung DBMS), d.h. den Verwaltungsprogrammen, die die Daten entsprechend den vorgegebenen Beschreibungen abspeichern, auffinden, verändern etc. SS 2007 Datenbanken Seite 4 Ein Datenbanksystem hat folgende Eigenschaften • Der Nutzer soll Zugriff auf die gespeicherten Daten haben, ohne dass dieser wissen muss, wie die Daten im System organisiert sind. • Daten müssen vor ungewollter Manipulation geschützt werden, d.h. ein Benutzer darf auf Daten nur lesend oder schreibend zugreifen, wenn er hierfür eine Zugriffsberechtigung hat. Es darf nicht passieren, dass wegen Fehlmanipulationen des Benutzers Daten zerstört werden können (bis hin zum gesamten Datenbestand). • Datenbanken sollten gewährleisten, dass eine Änderung der internen Datenorganisation nicht zu einer Anpassung der Anwendersoftware führen muss. SS 2007 Datenbanken Seite 5 • Die Daten sollen in strukturierter Form zur Verwendung durch mehr als ein Software-System gespeichert werden. • Ein Ziel von Datenbanksystemen ist die Beseitigung von Datenredundanzen. • Sie können große Datenmengen effizient verwalten. Dabei bieten sie benutzergerechte Anfragesprachen an, die es dem Anwender ermöglichen auf die Daten zuzugreifen ohne Rücksicht auf die interne Realisierung der Datenspeicherung. Interne Optimierungen ermöglichen einen effizienten Zugriff auf die Daten. • Multiuser-Fähigkeit, d.h. viele Nutzer können gleichzeitig auf die Datenbank zugreifen. Ein Transaktionskonzept verhindert unerwünschte Nebeneffekte beim Zugriff auf gemeinsam genutzte Daten. SS 2007 Datenbanken Seite 6 Das Problem der Datenredundanz • Ohne den Einsatz von Datenbanksystemen tritt das Problem der Datenredundanz (Mehrfachspeicherung) auf. Das Speichern von Daten in Dateien führt zum mehrfachen Speichern der selben Informationen, d.h. Informationen werden mehrfach abgelegt. Man bezeichnet dies als redundante Speicherung. • Die redundante Speicherung führt zu einer Verschwendung von Speicherplatz und zur Dateninkonsistenz. • Zugriffskontrollen und Datensicherheit sind nicht gewährleistet. • Die Datenunabhängigkeit ist nicht gegeben, d.h. die interne Darstellung der Daten ist nicht einheitlich und erschwert so dem Anwendungsprogrammierer das Zugreifen auf diese Daten. SS 2007 Datenbanken Seite 7 • Sowohl das Problem der fehlenden Datenunabhängigkeit als auch der fehlenden Zugriffskontrolle und Datensicherheit kann mit Hilfe des Einsatzes von Datenbanksystemen gelöst werden. • Im Gegensatz zur Datenredundanz spricht man dann von Datenintegration. Das Prinzip der Datenintegration basiert auf folgenden Überlegungen: • Die gesamte Basis- und Anwendungssoftware arbeitet auf denselben Daten, die in einer zentralen Datenhaltungskomponente verwaltet werden. SS 2007 Datenbanken Seite 8 Die Datenunabhängigkeit Das Konzept der Datenunabhängigkeit hat das Ziel, eine Datenbank von notwendigen Änderungen der Anwendung abzukoppeln. Sie kann in zwei Aspekte aufgeteilt werden: • Die Implementierungsunabhängigkeit oder physische Datenunabhängigkeit bedeutet, dass die konzeptionelle Sicht auf einen Datenbestand unabhängig von der für die Speicherung der Daten gewählten Datenstruktur besteht. • Die Anwendungsunabhängigkeit oder logische Datenunabhängigkeit koppelt die Datenbank von Änderungen und Erweiterungen der Anwendungsschnittstelle ab. SS 2007 Datenbanken Seite 9 Transaktionen • Transaktionen sind eine Folge von Datenbankoperationen, die einen konsistenten Datenbestand in einen neuen konsistenten Datenbestand überführen. • Die Folge von Datenbankoperationen wird dabei entweder vollständig oder gar nicht ausgeführt. • Gerade im Mehrbenutzerbetrieb ist die Unterstützung des Transaktionskonzeptes ein wichtiges Merkmal von Datenbanksystemen. SS 2007 Datenbanken Seite 10 Bemerkung • Die Datenunabhängigkeit wird durch die sog. Drei-EbenenArchitektur (s. später) gewährleistet. • Zugriffskontrolle, d.h. kein unbefugter Zugriff und Datensicherheit, d.h. kein ungewollter Datenverlust werden vom System gewährleistet. SS 2007 Datenbanken Seite 11 Anforderungen an ein Datenbank-Management-System Der Mathematiker Dr. Edgar F. Codd hat die theoretischen Grundlagen für Datenbanken gelegt. Anfang der 70er Jahre hat Codd die Anforderung an ein Datenbank-Management-System in 9 Regeln aufgestellt, die noch heute ihre Gültigkeit haben. SS 2007 Datenbanken Seite 12 Die Codd‘schen Regeln • Integration Einheitliche Verwaltung aller von Anwendungen benötigten Daten, d.h. nicht-redundante Datenhaltung. • Operationen Auf der Datenbank müssen Operationen möglich sein, die Datenspeicherung, Suchen, Verändern des Datenbestandes ermöglichen. • Katalog Der Katalog oder Data dictionary ermöglicht Zugriffe auf die Datenbeschreibungen der Datenbank. SS 2007 Datenbanken Seite 13 • Benutzersichten Für die unterschiedlichen Anwendungen sind unterschiedliche Sichten auf die Daten notwendig. • Konsistenzüberwachung Überprüfung der Dateninhalte und der korrekten Ausführung von Änderungen. • Zugriffskontrolle • Transaktionen Zusammenfassung von Datenbank-Änderungen zu Funktionseinheiten. SS 2007 Datenbanken Seite 14 • Synchronisation Konkurrierende Transaktionen mehrer Benutzer müssen koordiniert werden. • Datensicherung Das Wiederherstellen von Daten z.B. nach Systemfehlern muss gewährleistet werden. SS 2007 Datenbanken Seite 15 Grundmerkmale von modernen Datenbanksystemen sind (abgeleitet aus den Codd‘schen Regeln) • Verwaltung von persistenten (langfristig zu haltende) Daten. • Effiziente Verwaltung großer Datenmengen. • Datenbank-Management-Systeme definieren ein Datenmodell, mit dessen Konzepten alle Daten einheitlich beschrieben werden. • Sie stellen Operationen und Sprachen zur Verfügung. (Bei relationalen Datenbanken ist SQL der Standard). • Sie unterstützen das Transaktionskonzept. • Sie unterstützen die Einhaltung des Datenschutzes, Datenkonsistenz und Datensicherheit. SS 2007 Datenbanken Seite 16 Architektur in drei Ebenen Die heute noch allgemein akzeptierte Methode zur Beschreibung der Architektur eine Datenbank wurde in den 70er Jahren von der ANSI/X3/SPARC Study Group on Database Management Systems entworfen. Es handelt sich um die Drei-Ebenen-Schema Architektur einer Datenbank. Ein Datenbankschema wird in drei aufeinander aufbauenden Ebenen aufgeteilt: SS 2007 Datenbanken Seite 17 Datenbankarchitektur • Interne Ebene: Die interne Ebene beschreibt die systemspezifische Realisierung der Datenbank, d.h. die Art und Weise, wie die Daten physisch auf der Hardware abgespeichert werden. Die Interne Ebene verwaltet das DBMS. • Konzeptionelle Ebene: Sie beinhaltet eine implementierungsunabhängige Modellierung der Datenbank in einem systemunabhängigen Datenmodell. Die Struktur der Datenbank wird vollständig beschrieben. Zuständig für diese Ebene ist der Datenbank-Administrator. • Externe Schicht: Sicht der Endanwender auf die Daten. Es kann mehrere Sichten, d.h. mehrere Externe Schemata geben. SS 2007 Datenbanken Seite 18 Klassifizierung von Datenbankmanagementsystemen DBMS werden anhand verschiedener Kriterien klassifiziert. • Das dem DBMS zugrunde liegende Datenmodell. Man unterscheidet zwischen einem • Hierarchischem Modell • Netzwerk Modell • Relationalem Modell • Objektdatenmodell Das Hierarchische und Netzwerk Modell sind veraltete Modelle, bei denen die Datendateien hierarchisch angeordnet sind. Jeder Datensatz einer höheren Hierarchieebene enthält einen Verweis auf die ihm zugeordneten Datensätze der nächst niedrigeren Ebene. SS 2007 Datenbanken Seite 19 Bei relationalen Datenbanken werden die Daten nicht hierarchisch in einem File, sondern geordnet nach Themenkreisen (Entitäten) in Form von Tabellen abgelegt. Relationale Datenbanken zeichnen sich durch eine hohe Flexibilität aus. Objektmodelle beinhalten Konzepte der Objektorientierung. • Die vom System unterstützte Anzahl an Nutzern, die gleichzeitig auf die Datenbank zugreifen können. Unterschieden wird hier zwischen Single- und Multi-User System. • Anzahl der Rechner, auf die sich die Datenbank verteilt. Man spricht von einem zentralen DBMS, wenn die Daten auf einem einzigen Rechner gespeichert werden und von einem dezentralen DBMS, falls die Datenbank auf mehreren Rechnern verteilt ist. • Kosten eines DBMS SS 2007 Datenbanken Seite 20 Konkrete kommerzielle Datenbank Management Systeme sind z.B. die relationalen Datenbanksysteme Oracle, IBM DB2, Microsoft SQL-Server, Sybase. Diese Systeme haben • eine Drei-Ebenen-Architektur nach ANSI-SPARC • eine einheitliche Datenbanksprache (SQL) • eine Einbettung dieser Sprache in kommerzielle Programmiersprachen • verschiedene Werkzeuge für die Definition, Anfrage und Darstellung von Daten • kontrollierter Mehrbenutzerbetrieb, Zugriffskontrolle und Datensicherheitsmechanismen. SS 2007 Datenbanken Seite 21 Relationale Datenbanken Das relationale Datenmodell wurde von Codd 1970 eingeführt mit seiner Arbeit E. F. Codd: A Relational Model of Data for Large Shared Data Banks, Communications of the ACM Vol 13, June 1970. Die Firma Oracle war die erste Firma, die ein geeignetes DBMS auf den Markt brachte. SS 2007 Datenbanken Seite 22 Das Konzept einer relationalen Datenbank Die Basis für das Speichern von Daten in einer relationalen Datenbank sind Tabellen. Beispiel: Die Kunden einer Firma sind in einer Tabelle abgelegt: Kunde Name Meier Beier Meier Becker Kohnen Vorname Klaus Andrea Klaus Inga Silvia PLZ 44799 60528 42111 88212 60389 Ort Bochum Frankfurt Wuppertal Ravensburg Frankfurt Straße Laerheidestr. 26 Zeil 5 Güntherstr. 11 Lindenallee 2 Im Prüfling 2 Wertigkeit B A C A B SS 2007 Datenbanken Seite 23 Die Grundbegriffe des relationalen Datenmodells Entität (Tabellenname): Eine Entität stellt einen Themenkreis dar, der Elemente mit gleichen Merkmalen umfasst, Beispiel Kunde, Student etc. Entitätsmenge (Datensätze): Die Entitätsmenge beinhaltet alle zu den Merkmalen einer Entität gehörenden Werte. D.h. eine Entitätsmenge entspricht allen gespeicherten Datensätzen einer Tabelle. Tabelle: Entität mit zugehöriger Entitätsmenge Tupel (Datensatz): Ein Tupel umfasst alle Merkmale eines Elementes als Bestandteil einer Entitätsmenge. Entspricht also einem vollständigen Datensatz. Attribut (Spaltenname): Beschreibt spezifische Eigenschaft einer Entitätsmenge, Bsp. Name SS 2007 Datenbanken Seite 24 Attributwert: Datenwert, der das zugehörige Attribut eines Tupels beschreibt, Beispiel Attribut = Name, Attributwert = Meier. Jedes Tupel einer Entitätsmenge muss eindeutig identifizierbar sein. Dies kann durch ein Attribut oder einer Kombination von Attributen gewährleistet werden. Man bezeichnet dieses Attribut bzw. diese Kombination aus Attributen als Identifikationsschlüssel (Id-Schlüssel). Im Beispiel der Entität Kunde wäre der Identifikationsschlüssel beispielsweise gegeben durch Name, Vorname, PLZ Die Kombination Name, Vorname würde nicht ausreichen. SS 2007 Datenbanken Seite 25 Eigenschaften des Identifikationsschlüssels • Er ist eindeutig. • Jedem neuen Tupel muss sofort der entsprechende Attributwert des Identifikationsschlüssels zugeteilt werden können. • Der Identifikationsschlüssel eines Tupels darf sich während dessen Existenz nicht ändern. • Der Identifikationsschlüssel und auch kein Bestandteil darf ein NULLWert sein. SS 2007 Datenbanken Seite 26 Zur Wahrung der Übersichtlichkeit führt man meist künstliche Identifikationsschlüssel ein, z.B. laufende Nummern. Damit sieht die Kundentabelle wie folgt aus Kunde KNr 100 101 102 103 104 Entität Name Meier Beier Meier Becker Kohnen Vorname Klaus Andrea Klaus Inga Silvia Attribut PLZ 44799 60528 42111 88212 60389 Ort Bochum Frankfurt Wuppertal Ravensburg Frankfurt Straße Laerheidestr. 26 Zeil 5 Güntherstr. 11 Lindenallee 2 Im Prüfling 2 Wertigkeit B A C A B Tupel Id-Schlüssel SS 2007 Datenbanken Seite 27 Die Daten einer Datenbank werden unterteilt in Stammdaten und sog. Bewegungsdaten. Beispiel: Eine Firma verkauft und versendet Computerartikel. Die Kunden und die angebotenen Artikel wären hier die Stammdaten, die Aufträge die Bewegungsdaten. Ein Auftrag stammt von einem Kunden, ein Auftrag besteht aus einem oder mehreren Artikeln, die bestellt werden. Damit besteht eine Beziehung zwischen den Tabellen Auftrag und Kunde und eine weitere Beziehung zwischen den Tabellen Auftrag und Artikel. SS 2007 Datenbanken Seite 28 Eine Beziehung wird durch einen Fremdschlüssel ausgedrückt. Ein Fremdschlüssel in einer Tabelle T2 ist ein Attribut oder eine Attributkombination, welche in einer Tabelle T1 den Identifikationsschlüssel bildet. Auf der folgenden Folie sind die Tabellen mit ihren Beziehungen dargestellt. Das Attribut KNr in der Tabelle Auftrag ist ein Fremdschlüssel. Zwischen der Tabelle Kunde und Auftrag besteht eine 1:n Beziehung, d.h. 1 Kunde kann n Aufträge erteilen, 1 Auftrag stammt aber nur von 1 Kunden. SS 2007 Datenbanken Seite 29 Kunde KNr 100 101 102 103 104 Name Meier Beier Meier Becker Kohnen AufNr 30 40 50 60 Vorname Klaus Andrea Klaus Inga Silvia PLZ 44799 60528 42111 88212 60389 Ort Bochum Frankfurt Wuppertal Ravensburg Frankfurt Auftrag KNr AufDat LiefDat 102 26.03.2004 02.04.2004 104 01.03.2004 15.03.2004 102 29.03.2004 02.04.2004 103 03.01.2004 06.01.2004 1001 2036 3000 3057 4000 ArtBez CPU Grafikkarte Speicher Monitor Festplatte EkPreis 180 130 90 220 70 Wertigkeit B C A C B Position ArtNr AufNr Menge 1001 40 3 2036 40 1 3000 30 1 3057 60 5 3057 50 10 4000 50 2 Artikel ArtNr Straße Laerheidestr. 26 Zeil 5 Güntherstr. 11 Lindenallee 2 Im Prüfling 2 VKPreis 200 150 100 300 80 SS 2007 Datenbanken Seite 30 Für eine Beziehung kann referentielle Integrität bestimmt werden. Dann kann • kein Tupel in der Tabelle Auftrag mit einem Attributwert eines Kunden erzeugt werden, den es nicht in der Kundentabelle gibt • kein Kunde aus der Kundentabelle gelöscht werden, der noch Aufträge in der Tabelle Auftrag hat. SS 2007 Datenbanken Seite 31 Die Datenbanksprache SQL SQL (Structured Query Language) ist eine weitestgehend standardisierte Sprache für relationale Datenbanken. SQL ist eine deskriptive, d.h. nichtprozedurale Sprache. Es wird damit dem Datenbankmanagementsystem nicht mitgeteilt, wie die Daten gesucht werden sollen, sondern nur was erreicht werden soll. SQL ist mengenorientiert, d.h. das Ergebnis einer Datenbankabfrage kann aus einem oder mehreren Treffern bestehen. SS 2007 Datenbanken Seite 32 SQL besteht aus den Bereichen • DDL Data Definition Language mit den Befehlen CREATE (Anlegen von Tabellen, Sichten,…) ALTER (Ändern) DROP (Löschen) • DML Data Manipulation Language mit den Befehlen INSERT (Einfügen von Zeilen) UPDATE (Ändern) DELETE (Löschen) SELECT (Abfragen) SS 2007 Datenbanken Seite 33 • DCL Data Control Language mit den Befehlen GRANT (Vergabe von Zugriffsrechten) REVOKE (Zurücknahme von Zugriffsrechten) COMMIT (Abschluss von Transaktionen) ROLLBACK (Abbruch von Tranksaktionen) SS 2007 Datenbanken Seite 34 Der Datenbankentwurfsprozess Dem Entwurf einer Datenbank kommt eine sehr große Bedeutung zu. Der Datenbankentwurf kann in mehrere Phasen unterteilt werden: • Anforderungsanalyse Sammeln und Analysieren der Anforderungen an die zu realisierende Datenbank • Konzeptioneller Entwurf Die Datenbank soll zusammen mit den Anwendungsfunktionen unabhängig von dem später zur Implementierung verwendeten System entworfen werden. Es soll ein Datenbankmodell benutzt werden, das an konzeptionellen Informationsstrukturen und nicht an Implementierungsmöglichkeiten angelehnt ist. Gut geeignet ist das sog. ER-Modell. SS 2007 Datenbanken Seite 35 • Verteilungsentwurf Die Verteilung der Daten muss entworfen werden, wenn die Datenbankanwendung verteilt realisiert werden soll. • Logischer Entwurf In dieser Phase erfolgt der Detail-Entwurf. Das ER-Modell wird z.B. auf ein relationales Schema übertragen. • Datendefinition Hier werden die Datentypen, Wertebereiche etc. definiert. • Physischer Entwurf Anlegen von Datencontainern auf den Platten des Datenbankcomputers, Wahl von spezifischen Speicherstrukturen und Zugriffspfaden für die Datenbankdateien. SS 2007 Datenbanken Seite 36 • Externer Datenbankentwurf Definition von Benutzer-Sichten auf die Datenbank, Anlegen von Benutzern und Gruppen, Vergabe von Zugriffsrechten. • Realisierung des Entwurf in einem konkreten DBMS Installation, Anlegen der Datenbank, Anlegen der Tabellen. Dies fällt im Normalfall in den Aufgabenbereich des DBA und wird zusammen mit den Datenbankdesignern durchgeführt. SS 2007 Datenbanken Seite 37 Der Konzeptuelle Entwurf- Das Entity-Relationship-Modell (ERM) • Das Entity-Relationship-Modell wird häufig für den konzeptuellen Entwurf eingesetzt. • Der Begriff des Entity-Relationship-Modells geht zurück auf den grundlegenden Artikel von P.P.Chen im Jahre 1976: The Entity-Relationship Model-Toward a Unified View of Data in ACM Transcations on Database Systems, Band 1, Nr. 1 • Ein ER-Schema ist eine graphische Repräsentation der konzeptuellen Modellierung der Daten. • Das ERM basiert auf den drei Grundkonzepten Entity als zu modellierende Informationseinheit, Relationship zur Modellierung von Beziehungen zwischen den Enities und Attribut als Eigenschaft von einer Entity oder einer Relationship. SS 2007 Datenbanken Seite 38 • Entity bzw. Entität Objekt der realen Welt, über das Informationen zu speichern sind, z.B. Produkt, Kunde, Bestellungen, Artikel. • Relationship Beschreibt eine Beziehung zwischen Entities, z.B. ein Kunde bestellt n Produkte • Attribut Repräsentiert eine Eigenschaft einer Entity, z.B. Kunde hat Namen SS 2007 Datenbanken Seite 39 Verwendete Symbole im ER-Modell Für die Modellierung gibt es keinen einheitlichen Standard. Es gibt mehrere Darstellungsformen. Wir verwenden die Folgende: • Entities bzw. Entitäten werden durch Rechtecke repräsentiert: Student • Attribute werden durch Ellipsen repräsentiert: Name Eindeutige Attribute werden unterstrichen. SS 2007 Datenbanken Seite 40 • Relationship werden durch Rauten repräsentiert: Student besucht Vorlesung SS 2007 Datenbanken Seite 41 Beispiel für eine Entwicklung eines ER-Modells Eine Hochschule möchte eine Struktur in ihre Daten bringen. Studenten, Fachbereiche, Mitarbeiter, Studiengänge sollen sinnvoll mit ihren Beziehungen zueinander abgelegt werden. Vorgehensweise 1. Zunächst bildet man eine erste intuitive Entity-Struktur, Entities wären Student, Fachbereich, Mitarbeiter, Studiengang. 2. Untersuchung der wichtigen Beziehungen zwischen diesen Entitäten. SS 2007 Datenbanken Seite 42 Folgende Beziehungstypen (Kardinalitäten) sind möglich Beziehungstyp 1:N Dieser Typ liegt vor, wenn zu einem Wert eines Entities A mehrere Werte eines anderen Entities B in Beziehung stehen, umgekehrt aber jeder Wert von B genau zu einem Wert von A in Beziehung steht. Bsp. Fachbereich 1 hat N Studiengang Ein Fachbereich hat mehrere Studiengänge, 1 Studiengang gehört zu einem Fachbereich SS 2007 Datenbanken Seite 43 Beziehungstyp N:M Dieser Typ liegt vor, wenn zu einem Wert eines Entities ein oder beliebig viele Werte eines anderen Entities in Beziehung stehen und umgekehrt (many to many). Beispiel Student N hat M Studiengang Ein Student kann für mehrere Studiengänge (M) eingeschrieben sein, ein Studiengang hat mehrere Studenten (N). SS 2007 Datenbanken Seite 44 Beziehungstyp 1:1 Dieser Typ liegt vor, wenn jeder Wert eines Entities A genau zu einem Wert eines anderen Entities B eine Beziehung hat und umgekehrt. Beispiel Mitarbeiter 1 leitet 1 Fachbereich Ein Mitarbeiter (Dekan) leitet einen Fachbereich, ein Fachbereich wird von einem Mitarbeiter geleitet. SS 2007 Datenbanken Seite 45 Kann- oder Muss-Beziehung Es ist außerdem wichtig zu überprüfen, ob eine Beziehung optional (kannBeziehung) oder obligatorisch (muss-Beziehung) ist. Eine kann-Beziehung wird symbolisch durch ein ausgedrückt, eine muss- Beziehung durch ein Beispiel Mitarbeiter 1 leitet 1 Fachbereich Ein Mitarbeiter kann einen Fachbereich leiten (dies ist der Mitarbeiter Dekan), ein Fachbereich muss von einem Mitarbeiter geleitet werden. SS 2007 Datenbanken Seite 46 Fachbereich 1 hat N Mitarbeiter Ein Fachbereich muss N (d.h. mindestens 1) Mitarbeiter haben, ein Mitarbeiter gehört zu genau einem Fachbereich. SS 2007 Datenbanken Seite 47 Grad der Beziehung An einer Beziehung können mehrer Entities beteiligt sein. Von einer Binären Beziehung spricht man, wenn genau zwei Entities beteiligt sind. Fachbereich 1 hat N Mitarbeiter Sind drei oder mehr Entities beteiligt, so spricht man von einer Tenären bzw. n-ären Beziehung. SS 2007 Datenbanken Seite 48 Beispiel für eine Tenäre Beziehung Projekt N hat M Mitarbeiter P Qualifikation SS 2007 Datenbanken Seite 49 Ist nur eine einzige Entity an einer Beziehung beteiligt, so spricht man von einer rekursiv binären Beziehung. Mitarbeiter 1 verheiratet 1 Mitarbeiter Ein Mitarbeiter kann mit einem Mitarbeiter verheiratet sein. Eine andere Darstellungsform für eine rekursiv binäre Beziehung ist 1 Mitarbeiter verheiratet 1 SS 2007 Datenbanken Seite 50 Spezialisierung und Aggregation Unter einer Spezialisierung versteht man, wenn eine Teilmenge (Subtyp) weitere Attribute gegenüber der Grundmenge (Supertyp) hat. Die Entity Supertyp ist dann die Generalisierung, die Subtypen- Entities sind die Spezialisierung. Supertyp IS-A Subtyp SS 2007 Datenbanken Seite 51 Beispiel für eine Spezialisierung Laborassistent Sekretär Mitarbeiter IS-A d Professor Techniker Das d in der Beziehung gibt an, dass die Mengen disjunkt sind. SS 2007 Datenbanken Seite 52 Aggregation GUI Datenbankanwendung PART-OF DBS Dokumentation Von Aggregation spricht man, wenn ein Entity aus mehreren eigenständigen Entities zusammengesetzt ist. SS 2007 Datenbanken Seite 53 Redundante Beziehungen Bei der ER-Modellierung muss darauf geachtet werden, dass keine Redundanten Beziehung in dem Modell existieren. Hat man alle Einzelbeziehungen zwischen den Entities untersucht, dann setzt man die Beziehungen zu einem gesamten ER-Modell zusammen. Dort muss jeder geschlossene Kreis auf Redundanzen überprüft werden. Sind Redundanzen vorhanden, müssen diese im Modell bereinigt werden. SS 2007 Datenbanken Seite 54 Diese und die nächste Folie zeigen geschlossene Kreis-Beziehungen im Modell. Beim ersten geschlossenen Kreis handelt es sich um eine redundante Beziehung, der zweite Kreis stellt nicht-redundante Beziehungen dar. N 1 Kunde Auftrag erteilt N N redundante Beziehung bestellt enthält M Artikel M SS 2007 Datenbanken Seite 55 N 1 Kunde Auftrag erteilt N bevorzugt N nicht-redundante Beziehung enthält M Artikel M Die Beziehung „bevorzugt“ drückt nun etwas anderes aus. Diese Beziehung wäre beispielsweise wichtig um Kundenverhalten zu analysieren. SS 2007 Datenbanken Seite 56 Ein ER-Modell (hier sind nicht die Attribute eingezeichnet) für unser Hochschulbeispiel könnte dann wie folgt aussehen: Studiengang 1 N hat M Fachbereich 1 hat hat N Student 1 leitet N 1 ist 1 1 1 Mitarbeiter verheiratet 1 IS-A Laborassistent Sekretär Professor Techniker SS 2007 Datenbanken Seite 57 Die Beziehung Student- Studiengang sieht dann mit den Attributen wie folgt aus StudGangBez Studiengang M StudGangNr hat N Geburtstag Student Name MatrNr SS 2007 Datenbanken Seite 58 Das Logische Modell - Die Übertragung der Beziehungen in Tabellen Nachdem das Konzeptuelle Modell erstellt ist, folgt die Übertragung auf ein logisches Modell. Wir verwenden ein Relationales DBMS, d.h. die Beziehungen im ER-Modell werden in Tabellen überführt. Für den Aufbau einer Tabelle kann man folgende Kurzschreibweise wählen: Entitätsname(Id-Schlüssel,Attribut 1, Attribut 2,…, Attribut n) Der Tabellenname wird fett gedruckt, der Id-Schlüssel wird unterstrichen. Falls der Id-Schlüssel aus zusammengesetzten Attributen besteht, werden alle zur Bildung des Id-Schlüssels erforderlichen Attribute unterstrichen. SS 2007 Datenbanken Seite 59 Ein Attribut ohne Attributwert besitzt einen sog. Nullwert. Nullwerte dürfen in Fremdschlüsseln zunächst nicht vorhanden sein, da ein Fremdschlüsselattributwert immer im Wertebereich des entsprechenden Id-Schlüssels liegen muss. (Wir werden später Fälle betrachten, bei denen Nullwerte dennoch sinnvoll sind.) SS 2007 Datenbanken Seite 60 Alle Beziehungstypen werden wir anhand eines fiktiven Beispiels mit den Entities Person und Haustier durchführen. Die beiden Tabellen haben den folgenden Aufbau Person (PNr, Name, Vorname) Haustier(TNr, Art, Rasse, Alter) SS 2007 Datenbanken Seite 61 Die 1:1- Beziehung Eine Person hat also 1 Haustier, ein Haustier gehört einer Person. a) Beziehungstyp Person 1 hat 1 Haustier Eine Person hat genau 1 Haustier, ein Haustier gehört zu genau einer Person. SS 2007 Datenbanken Seite 62 Übertragen auf Tabellen: 1. Möglichkeit • Es entstehen 2 Tabellen (Person und Haustier). • Der Id-Schlüssel der Tabelle Haustier wird zum Fremdschlüssel der Tabelle Person (umgekehrt geht natürlich auch). Kurzschreibweise: Person (PNr, Name, Vorname, TNr) Haustier (TNr, Art, Rasse, Alter) SS 2007 Datenbanken Seite 63 Person PNr Name Vorname TNr 1 Meier Kai 2 2 Müller Ute 5 3 Becker Inga 4 4 Kohnen Bernd 1 5 Laufer Thomas 3 Art Vogel Hund Hund Fisch Katze 1 hat 1 Haustier zu jedem Tupel in Person gibt es genau ein Tupel in Haustier Haustier TNr 1 2 3 4 5 Person Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 SS 2007 Datenbanken Seite 64 2. Möglichkeit • Man fasst beide Entities zu einer Tabelle Haustierbesitzer zusammen Kurzschreibweise: Haustierbesitzer (PNr, Name, Vorname, Art, Rasse, Alter) Dies ist nur erlaubt, wenn die Tabelle Haustiere nicht noch mit anderen Tabellen in Beziehung steht, da es nun keinen Id-Schlüssel TNr mehr gibt. SS 2007 Datenbanken Seite 65 Haustierbesitzer PNr Name Vorname Art Rasse Alter 1 Meier Kai Hund Boxer 1 2 Müller Ute Katze Siam 7 3 Becker Inga Fisch Goldfisch 0,5 4 Kohnen Bernd Vogel Papagei 20 5 Laufer Thomas Hund Dackel 10 SS 2007 Datenbanken Seite 66 b) Beziehungstyp Person 1 hat 1 Haustier Eine Person kann höchstens 1 (kein oder genau ein) Haustier haben, ein Haustier gehört zu genau einer Person. SS 2007 Datenbanken Seite 67 Übertragen auf Tabellen: • Es entstehen 2 Tabellen (Person und Haustier). • 1. Möglichkeit In der Tabelle Haustier wird der Fremdschlüssel PNr eingefügt. Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter, PNr) SS 2007 Datenbanken Seite 68 Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd 5 Laufer Thomas Es gibt Tupel in Person, die keinen Bezug zu einem Tupel in Haustier haben Person Haustier TNr 1 2 3 Art Vogel Hund Hund Rasse Papagei Boxer Dackel Alter 20 1 10 PNr 3 1 4 1 hat 1 Haustier jedes Tupel in Haustier hat genau ein zugehöriges Tupel in Person SS 2007 Datenbanken Seite 69 • 2. Möglichkeit Da der Fremdschlüssel PNr in Haustier nur eindeutige Attributwerte annehmen kann, wird er gleichzeitig Id-Schlüssel für die Tabelle Haustier. Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (PNr, Art, Rasse, Alter) SS 2007 Datenbanken Seite 70 Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd 5 Laufer Thomas Es gibt Tupel in Person, die keinen Bezug zu einem Tupel in Haustier haben Person Haustier Art Vogel Hund Hund Rasse Papagei Boxer Dackel Alter 20 1 10 PNr 3 1 4 1 hat 1 Haustier jedes Tupel in Haustier hat genau ein zugehöriges Tupel in Person SS 2007 Datenbanken Seite 71 c) Beziehungstyp Person 1 hat 1 Haustier Eine Person kann höchstens 1 (kein oder genau ein) Haustier haben, ein Haustier gehört zu höchstens einer Person. SS 2007 Datenbanken Seite 72 Übertragen auf zwei Tabellen: In der Tabelle Person wird der Fremdschlüssel TNr, in der Tabelle Haustiere der Fremdschlüssel PNr verwendet. PNr Name Vorname TNr 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 4 Kohnen Bernd 1 5 Laufer Thomas 2 TNr 1 2 3 4 5 Art Vogel Hund Hund Fisch Katze Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 PNr 4 1 3 Hier sind Nullwerte in den Fremdschlüsseln, daher Transformation erforderlich. SS 2007 Datenbanken Seite 73 Übertragen der Beziehung auf Tabellen ( ohne Nullwerte im Fremdschlüssel): Person 1 hat 1 Haustier • Es entstehen 3 Tabellen (Person, Haustier, Tierhalter ). • In der Tabelle Tierhalter existieren nur diejenigen Tupel, die eine 1:1 (muss) Beziehung zwischen den Tabellen Person und Haustier herstellen. • Der Id-Schlüssel der Tabelle Tierhalter wird aus den Fremdschlüsseln PNr und TNr gebildet. • Jeder Attributwert der Attribute TNr und PNr darf in Tierhalter nur einmal vorkommen, daher reicht auch einer dieser Attribute als Id-Schlüssel aus. SS 2007 Datenbanken Seite 74 Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter) Tierhalter (TNr,PNr) SS 2007 Datenbanken Seite 75 Person Tierhalter PNr Name Vorname 1 Meier Kai PNr TNr 2 Müller Ute 1 2 3 Becker Inga 3 4 4 Kohnen Bernd 4 1 5 Laufer Thomas 1 Person 1 hat 1 1 Haustier TNr 1 2 3 4 5 Art Vogel Hund Hund Fisch Katze Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 Haustier 1 1 Tierhalter SS 2007 Datenbanken Seite 76 Die 1:N- Beziehung Eine Person hat also N Haustiere, ein Haustier gehört einer Person. a) Beziehungstyp Person 1 hat N Haustier Eine Person muss N (d.h. mindestens 1) Haustier haben, ein Haustier gehört zu genau einer Person. SS 2007 Datenbanken Seite 77 Übertragen auf Tabellen: • Es entstehen 2 Tabellen (Person und Haustier). • Der Id-Schlüssel der Tabelle Person wird zum Fremdschlüssel der Tabelle Haustier. Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter, PNr) SS 2007 Datenbanken Seite 78 Die Tabellen haben folgende Eigenschaften: • Ein Tupel der Tabelle Person hat eine Beziehung mit mehreren Tupeln aus der Tabelle Haustier. • Die Tabelle Haustier besitzt mindestens gleich viele Tupel wie die Tabelle Person. • Der Fremdschlüssel PNr in der Tabelle Haustier kann den selben Attributwert mehrmals annehmen. • Jeder Attributwert des Attributs PNr aus der Tabelle Person muss mindestens einmal als Fremdschlüssel in Haustier vertreten sein. SS 2007 Datenbanken Seite 79 Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd 5 Laufer Thomas Person 1 hat N Haustier Haustier TNr 1 2 3 4 5 6 7 Art Vogel Hund Hund Fisch Katze Pferd Reptil Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 Araber 3 Schlange 30 PNr 3 1 4 2 5 1 4 SS 2007 Datenbanken Seite 80 b) Beziehungstyp Person 1 hat N Haustier Eine Person kann N (d.h. 0, 1 oder mehr) Haustier haben, ein Haustier gehört zu genau einer Person. SS 2007 Datenbanken Seite 81 Übertragen auf Tabellen: • Es entstehen 2 Tabellen (Person und Haustier). • Der Id-Schlüssel der Tabelle Person wird zum Fremdschlüssel der Tabelle Haustier. Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter, PNr) SS 2007 Datenbanken Seite 82 Die Tabellen haben folgende Eigenschaften: • Der Fremdschlüssel PNr in der Tabelle Haustier kann die gleichen Attributwerte mehrmals verwenden. • In der Tabelle Haustier existieren nur Tupel, die einen Bezug zur Tabelle Person aufweisen. • In der Tabelle Person können Tupel stehen, deren Id-Schlüsselwert nicht im Fremdschlüssel PNr der Tabelle Haustier vorkommt. SS 2007 Datenbanken Seite 83 Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd 5 Laufer Thomas Person 1 hat N Haustier Tupel mit PNr 4 besitzt in Haustier keinen Datensatz Haustier TNr 1 2 3 4 5 6 7 Art Vogel Hund Hund Fisch Katze Pferd Reptil Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 Araber 3 Schlange 30 PNr 3 1 1 2 5 1 2 SS 2007 Datenbanken Seite 84 c) Beziehungstyp Person 1 hat N Haustier Eine Person muss N (d.h. mindestens 1) Haustier haben, ein Haustier hat höchstens einen (d.h. keinen oder genau einen) Besitzer. SS 2007 Datenbanken Seite 85 Übertragen auf Tabellen: Würde man wieder die zwei Tabellen Person und Haustier wählen und die Beziehung abbilden, so ergäbe sich die Eigenschaften wie im Beziehungsfall a) mit der Besonderheit: In der Tabelle Haustier können auch Tupel auftreten, die zu keinem Tupel in der Tabelle Person einen Bezug haben. Das folgende Beispiel zeigt die Übertragung der Beziehung mit Hilfe von zwei Tabellen: SS 2007 Datenbanken Seite 86 Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd Haustier TNr 1 2 3 4 5 6 7 Art Vogel Hund Hund Fisch Katze Pferd Reptil Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 Araber 3 Schlange 30 PNr 3 1 Das Attribut PNr, d.h. der Fremdschlüssel hat Null-Werte. 2 1 4 SS 2007 Datenbanken Seite 87 Die Abbildung der Beziehung c) mit Hilfe von zwei Tabellen führt zu Nullwerten im Fremdschlüssel PNr. Dies sollte vermieden werden. Daher muss die Beziehung c) transformiert werden: Es wird eine weitere Tabelle Tierhalter angelegt. SS 2007 Datenbanken Seite 88 Übertragen der Beziehung auf Tabellen ( ohne Nullwerte im Fremdschlüssel): Person 1 hat N Haustier • Es entstehen 3 Tabellen (Person, Haustier, Tierhalter ). • Der Id-Schlüssel der Tabelle Person wird zum Fremdschlüssel der Tabelle Tierhalter. • Der Id-Schlüssel der Tabelle Haustier ist gleichzeitig Id-Schlüssel der Tabelle Tierhalter. Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter) Tierhalter (TNr,PNr) SS 2007 Datenbanken Seite 89 Die drei Tabellen haben folgende Eigenschaften: • Zu jedem Tupel in der Tabelle Person muss es mindestens ein Tupel in der Tabelle Tierhalter geben. • Ein Haustier muss dagegen keinen Tierhalter haben. SS 2007 Datenbanken Seite 90 Tierhalter Person PNr Name Vorname 1 Meier 2 PNr TNr Kai 1 2 Müller Ute 1 5 3 Becker Inga 2 4 4 Kohnen Bernd 3 1 4 7 Haustier TNr 1 2 3 4 5 6 7 Art Vogel Hund Hund Fisch Katze Pferd Reptil Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 Araber 3 Schlange 30 1 Person N hat 1 Haustier 1 1 N Tierhalter SS 2007 Datenbanken Seite 91 d) Beziehungstyp Person 1 hat N Haustier Eine Person kann N (d.h. kein, ein oder mehr) Haustiere haben, ein Haustier hat höchstens einen (d.h. keinen oder genau einen) Besitzer. SS 2007 Datenbanken Seite 92 Übertragen auf Tabellen: Würde man wieder die zwei Tabellen Person und Haustier wählen und die Beziehung dort abbilden, so ergäben sich wieder Nullwerte im Fremdschlüssel Das folgende Beispiel zeigt die Übertragung der Beziehung mit Hilfe von zwei Tabellen: SS 2007 Datenbanken Seite 93 Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd Zu diesem Tupel gibt es kein Haustier Haustier TNr 1 2 3 4 5 6 7 Art Vogel Hund Hund Fisch Katze Pferd Reptil Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 Araber 3 Schlange 30 PNr 2 1 2 1 Das Attribut PNr, d.h. der Fremdschlüssel hat Null-Werte. Diese Tupel gehören zu keiner Person. 4 SS 2007 Datenbanken Seite 94 Übertragen der Beziehung auf Tabellen ( ohne Nullwerte im Fremdschlüssel): Person 1 hat N Haustier • Es entstehen 3 Tabellen (Person, Haustier, Tierhalter ). • Der Id-Schlüssel der Tabelle Person wird zum Fremdschlüssel der Tabelle Tierhalter. • Der Id-Schlüssel der Tabelle Haustier ist gleichzeitig Id-Schlüssel der Tabelle Tierhalter. Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter) Tierhalter (TNr,PNr) SS 2007 Datenbanken Seite 95 Die Tabellen haben folgende Eigenschaften: • Im Fremdschlüssel TNr der Tabelle Tierhalter darf jeder Attributwert nur einmal vorkommen • Im Fremschlüssel PNr der Tabelle Tabelle Tierhalter darf der gleiche Attributwert mehrmals vorkommen • Das Attribut TNr bildet den Id-Schlüssel für die Tabelle Tierhalter. SS 2007 Datenbanken Seite 96 Tierhalter Person PNr TNr Kai 1 2 Müller Ute 1 5 3 Becker Inga 2 1 4 Kohnen Bernd 2 4 4 7 PNr Name Vorname 1 Meier 2 Haustier TNr 1 2 3 4 5 6 7 Art Vogel Hund Hund Fisch Katze Pferd Reptil Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Siam 7 Araber 3 Schlange 30 1 Person N hat 1 Haustier 1 1 N Tierhalter SS 2007 Datenbanken Seite 97 Die N:M- Beziehung Eine Person hat M Haustiere, ein Haustier gehört N Personen. a) Beziehungstyp Person N hat M Haustier Eine Person hat mehrere (mindestens ein) Haustier, ein Haustier gehört zu mehreren (mindestens einer) Person. SS 2007 Datenbanken Seite 98 Übertragen auf Tabellen: Auch dieser Beziehungstyp muss transformiert werden. Eine Abbildung des Beziehungstyps in 2 Tabellen, würde zu Mehrfacheinträgen in beiden Tabellen führen. Beispiel: Die Personen Kai Meier und Ute Müller sind beide Besitzer des Haustieres Papagei mit Alter 20. SS 2007 Datenbanken Seite 99 Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga Die Beziehung ist korrekt dargestellt, aber: Doppelte Datensätze gefährden die Datenkonsistenz. Haustier TNr 1 2 3 4 1 4 4 Art Vogel Hund Hund Fisch Vogel Fisch Fisch Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Papagei 20 Goldfisch 0,5 Goldfisch 0,5 PNr 1 3 2 1 2 2 3 SS 2007 Datenbanken Seite 100 Daher Transformation der Beziehung: Person N hat M Haustier • Es entstehen 3 Tabellen (Person, Haustier, Tierhalter ). • Der Id-Schlüssel der Tabelle Tierhalter setzt sich zusammen aus dem Attribut PNr und TNr. Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter) Tierhalter (PNr,TNr) SS 2007 Datenbanken Seite 101 Person Tierhalter PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga Haustier TNr 1 2 3 4 Art Vogel Hund Hund Fisch Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Alle Tupel in den Tabellen sind nun verschieden PNr TNr 1 1 1 4 2 3 2 1 2 4 3 2 3 4 Person Nur eine Kombination aus PNr und TNr kann in dieser Tabelle der Id-Schlüssel sein N M hat 1 Haustier 1 N M Tierhalter SS 2007 Datenbanken Seite 102 b) Beziehungstyp Person N hat M Haustier Eine Person kann mehrere (kein, ein oder mehrere) Haustier haben, ein Haustier gehört mehreren (mindestens einer) Personen. SS 2007 Datenbanken Seite 103 Übertragung auf Tabellen Die Beziehung ist ähnlich wie die Beziehung vom Typ a). In der Tabelle Person können allerdings auch Tupel existieren, die keinen Bezug zu einem Tupel in Tabelle Haustier besitzen. Der Goldfisch hat mehrere Besitzer Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd Diese Person besitzt kein Haustier Haustier TNr 1 2 3 4 1 4 4 Art Vogel Hund Hund Fisch Vogel Fisch Fisch Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Papagei 20 Goldfisch 0,5 Goldfisch 0,5 PNr 1 3 2 1 2 2 3 SS 2007 Datenbanken Seite 104 Um auch hier Doppelspeicherung zu vermeiden, muss transformiert werden Person • N hat M Haustier Es entstehen 3 Tabellen (Person, Haustier, Tierhalter ). Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter) Tierhalter (PNr,TNr) SS 2007 Datenbanken Seite 105 Person Tierhalter PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd Haustier TNr 1 2 3 4 Art Vogel Hund Hund Fisch Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 PNr TNr 1 1 1 4 2 3 2 1 2 4 3 2 3 4 Nur eine Kombination aus PNr und TNr kann in dieser Tabelle der Id-Schlüssel sein N M hat Person Haustier Alle Tupel in den Tabellen sind nun verschieden 1 1 N M Tierhalter SS 2007 Datenbanken Seite 106 c) Beziehungstyp Person N hat M Haustier Eine Person kann mehrere (kein, ein oder mehrere) Haustier haben, ein Haustier kann mehreren Personen gehören. SS 2007 Datenbanken Seite 107 Übertragung auf Tabellen Die Beziehung ist ähnlich wie die Beziehung vom Typ a) und b). In der Tabelle Haustier können allerdings auch Tupel existieren, die keinen Bezug zu einem Tupel in Tabelle Person besitzen. Der Hund hat keinen Besitzer Person PNr Name Vorname 1 Meier Kai 2 Müller Ute 3 Becker Inga 4 Kohnen Bernd Diese Person besitzt kein Haustier Haustier TNr 1 2 3 4 1 4 4 Art Vogel Hund Hund Fisch Vogel Fisch Fisch Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Papagei 20 Goldfisch 0,5 Goldfisch 0,5 PNr 1 2 1 2 2 3 SS 2007 Datenbanken Seite 108 Hier tauchen also zwei Probleme auf: Doppelspeicherung und Nullwerte im Fremdschlüssel. Person N hat M Haustier Also muss transformiert werden: • Es entstehen 3 Tabellen (Person, Haustier, Tierhalter ). Kurzschreibweise: Person (PNr, Name, Vorname) Haustier (TNr, Art, Rasse, Alter) Tierhalter (PNr,TNr) SS 2007 Datenbanken Seite 109 Person Tierhalter PNr Name Vorname 1 Meier 2 PNr TNr Kai 1 1 Müller Ute 1 4 3 Becker Inga 2 3 4 Kohnen Bernd 2 1 2 4 3 4 Haustier TNr 1 2 3 4 Art Vogel Hund Hund Fisch Rasse Alter Papagei 20 Boxer 1 Dackel 10 Goldfisch 0,5 Nur eine Kombination aus PNr und TNr kann in dieser Tabelle der Id-Schlüssel sein Alle Tupel in den Tabellen sind nun verschieden N M hat Person Haustier Alle Tupel in den Tabellen sind nun verschieden 1 1 N M Tierhalter SS 2007 Datenbanken Seite 110 Rekursiv binäre Beziehung Auf den nächsten Folien wird die Überführung zweier möglicher rekursiver Beziehungen dargestellt: Beispiel 1 1 Mitarbeiter verheiratet 1 SS 2007 Datenbanken Seite 111 1. Möglichkeit der Umsetzung in Tabellenform Eine Tabelle der Form Mitarbeiter (MID, Name, Vorname, VID) , wobei VID Fremdschlüssel ist, der aus dem Id-Schlüssel MID von Mitarbeiter gebildet wird. Hier entstehen sehr viele NULL-Werte im Fremdschlüssel, da solche Ehen sehr selten sind. Daher sollte diese Variante nicht gewählt werden. SS 2007 Datenbanken Seite 112 2. Möglichkeit der Umsetzung in Tabellenform Zwei Tabellen der Form Mitarbeiter (MID, Name, Vorname) , MitarbeiterEhe (MID1, MID2, verheiratet_seit), wobei MID1 und MID2 Fremdschlüssel sind, die aus dem Id-Schlüssel MID von Mitarbeiter gebildet werden. SS 2007 Datenbanken Seite 113 3. Möglichkeit der Umsetzung in Tabellenform Drei Tabellen der Form Mitarbeiter (MID, Name, Vorname) , EheName (EID, Name), MitarbeiterEhe (MID, EID). Bemerkung Bei dieser Variante sind die Namen der Fremdschlüssel stets identisch mit dem Namen des zugehörigen Id-Schlüssels. In der Praxis würde man aber bei diesem Beispiel die Variante 2 vorziehen. SS 2007 Datenbanken Seite 114 Beispiel 2 1 Mitarbeiter leitet N Ein Mitarbeiter wird von genau einem Mitarbeiter (dies ist der Abteilungsleiter) geleitet, ein Mitarbeiter kann N Mitarbeiter leiten. SS 2007 Datenbanken Seite 115 1. Möglichkeit der Umsetzung in Tabellenform Eine Tabelle der Form Mitarbeiter (MNr, LNr, Name, Vorname) , wobei LNr Fremdschlüssel ist, der aus dem Id-Schlüssel MNr von Mitarbeiter gebildet wird. MNr 1 2 3 4 5 6 7 LNr 4 4 3 3 3 3 4 Name Schmidt Müller Meier Dicke Becker Fischer Bauer Vorname Uwe Anke Bettina Malte Ingo Volker Ute Meier, Bettina ist Chefin, d.h. sie wird von sich selbst geleitet Nachteil: Um zu Überprüfen, ob z. B. Volker Fischer Abteilungsleiter ist, müssen alle Attributwert von LNr auf den Eintrag 6 untersucht werden. SS 2007 Datenbanken Seite 116 2. Möglichkeit der Umsetzung in Tabellenform Zwei Tabellen der Form Mitarbeiter (MNr, LNr, Name, Vorname) , Abteilungsleiter (LNr, MNr). Mitarbeiter MNr LNr 1 2 2 2 3 1 4 1 5 1 6 1 7 2 Name Schmidt Müller Meier Dicke Becker Fischer Bauer Vorname Uwe Anke Bettina Malte Ingo Volker Ute Abteilungsleiter LNr 1 2 MNr 3 4 Nachteil: Hier hängt der Id-Schlüssel MNr vom Fremdschlüssel LNr ab und umgekehrt hängt der Id-Schlüssel LNr vom Fremdschlüssel MNr ab. SS 2007 Datenbanken Seite 117 3. Möglichkeit der Umsetzung in Tabellenform Drei Tabellen der Form Mitarbeiter (MNr, ANr, Name, Vorname) , Abteilung (ANr, Name) Abteilungsleiter (ANr, MNr). SS 2007 Datenbanken Seite 118 Abteilung ANr Name 1 Bo1 Operativ 2 Bo1P Projekte MNr 3 4 Mitarbeiter MNr 1 2 3 4 5 6 7 Anr 2 2 1 1 1 1 2 Abteilungsleiter Name Schmidt Müller Meier Dicke Becker Fischer Bauer ANr 1 2 Vorname Uwe Anke Bettina Malte Ingo Volker Ute SS 2007 Datenbanken Seite 119 Tabellendarstellung für Ternäre- Beziehungen bzw. n-äre Beziehungen Als Beispiel betrachten wir die folgende Ternäre-Beziehung Projekt N hat M Mitarbeiter P Qualifikation Um jede Beziehung abzubilden, müssen zusätzlich zu den 3 Entities 3 weitere Beziehungstabellen gebildet werden. SS 2007 Datenbanken Seite 120 Mitarbeiter MNr 1 2 3 4 5 6 7 Name Schmidt Müller Meier Dicke Becker Fischer Bauer ProjektMitarbeiter MNr PNr 1 1 1 2 3 2 4 1 5 1 6 2 7 1 Vorname Uwe Anke Bettina Malte Ingo Volker Ute Projekt PNr 1 2 Name CostPlus EasyGo Beziehungstabellen Laufzeit 6 12 Qualifikation ProjektQualifikation PNr QNr 1 1 1 3 1 4 2 3 2 5 StDat 01.09.2003 01.04.2004 MaQualifikation MNr QNr 1 1 1 5 2 2 3 4 4 4 4 5 5 1 5 2 6 3 7 3 QNr 1 2 3 4 5 Name C++ Oracle Project Manager GUI-Designer Business Analyst SS 2007 Datenbanken Seite 121 Die Tabellen haben die Form Mitarbeiter (MNr, Name, Vorname) , Projekt (PNr, Name, StDat,Laufzeit) Qualifikation (QNr, Name), MaQualifikation (MNr, QNr) ProjektQualifikation (PNr, QNr) ProjektMitarbeiter (MNr, PNr) Die Tabellen geben nun z.B. Auskunft über • Mitarbeiter, die in keinem Projekt sind • Alle Qualifikationen eines Mitarbeiters • Die Qualifikationen, die im Projekt benötigt werden SS 2007 Datenbanken Seite 122 Auch die Abbildung mit Hilfe einer einzigen Beziehungstabelle ist möglich. Allerdings werden jetzt nicht alle Informationen abgebildet. Informationen, die verloren gehen: • Qualifikationen von Mitarbeiter, die in keinem Projekt sind • Alle Qualifikationen eines Mitarbeiters SS 2007 Datenbanken Seite 123 Mitarbeiter MNr 1 2 3 4 5 6 7 Name Schmidt Müller Meier Dicke Becker Fischer Bauer Vorname Uwe Anke Bettina Malte Ingo Volker Uter Projekt PNr Name 1 CostPlus 2 EasyGo Beziehungstabelle Laufzeit 6 12 Qualifikation Projektressourcen PNr MNr 1 1 1 4 1 4 1 5 1 5 1 7 2 1 2 1 2 3 2 6 StDat 01.09.2003 01.04.2004 QNr 1 4 5 1 2 3 1 5 3 4 QNr 1 2 3 4 5 Name C++ Oracle Project Manager GUI-Designer Business Analyst SS 2007 Datenbanken Seite 124 Generalisierung / Spezialisierung (IS-A) Die spezialisierten Tabellen, d.h. die Subtypen (hier Laborassistent, Sekretär etc) haben weitere Attribute gegenüber der Grundmenge, d.h. dem Supertyp (hier Mitarbeiter). Die entstehenden Subtypen können die Grundmenge total oder partiell überdecken sowie disjunkt oder nicht disjunkt sein. Laborassistent Sekretär Mitarbeiter IS-A d Professor Techniker SS 2007 Datenbanken Seite 125 Übertragen der Generalisierung auf Tabellen Zusätzlich zur Tabelle für die Grundmenge wird eine weitere Tabelle für jede Teilmenge angelegt, die denselben Id-Schlüssel wie die Grundmenge hat. In unserem Beispiel würden also zusätzlich zur Tabelle Mitarbeiter vier weitere Tabellen angelegt, wobei jede dieser Tabellen denselben Id-Schlüssel wie die Tabelle Mitarbeiter hat. Zusätzlich haben die Subtyp-Tabellen weitere charakteristische Attribute. Beispiel: Mitarbeiter IS-A Laborassistent Mitarbeiter (MaNr, Name, Vorname) Laborassistent(MaNr, Labor) SS 2007 Datenbanken Seite 126 Totale Überdeckung der Grundmenge Man spricht von einer totalen Überdeckung der Grundmenge, wenn die Entitätsmenge des Supertyps vollständig aus der Entitätsmenge der Subtypen besteht. D.h. in der Tabelle des Supertyps existieren keine Tupel, deren Id-Schlüssel nicht in einer der Tabellen der Subtypen als Fremdschlüssel vorkommt. SS 2007 Datenbanken Seite 127 Partielle Überdeckung der Grundmenge Man spricht von einer partiellen Überdeckung der Grundmenge, wenn die Entitätsmenge des Supertyps nur partiell aus der Entitätsmenge der Subtypen besteht. D.h. in der Tabelle des Supertyps existieren Tupel, deren Id-Schlüssel in keiner der Tabellen der Subtypen als Fremdschlüssel vorkommen. SS 2007 Datenbanken Seite 128 Disjunkte Überdeckung der Grundmenge Man spricht von einer disjunkten Überdeckung der Grundmenge, wenn die Entitätsmenge des Supertyps sich nicht überschneiden. D.h. zu einem Id-Schlüssel des Supertypen gibt es nur ein Tupel in einem Subtypen. SS 2007 Datenbanken Seite 129 Nicht-Disjunkte Überdeckung der Grundmenge Man spricht von einer nicht-disjunkten Überdeckung der Grundmenge, wenn die Entitätsmenge des Supertyps sich überschneiden. D.h. zu einem Id-Schlüssel des Supertypen kann es in mehreren Subtypen ein entsprechendes Tupel geben. Bemerkung: Handelt es sich um disjunkte Mengen, so kann eindeutig angegeben werden, welches Tupel aus dem Supertypen in welchem Subtypen vorkommt. Daher kann in der Supertyp-Tabelle ein sog. diskriminierendes Attribut eingefügt werden, das die Subtyp-Tabelle angibt. SS 2007 Datenbanken Seite 130 Anmerkungen zu Null-Werten im Fremdschlüssel Null-Werte im Fremdschlüssel sollten nur verwendet werden, wenn sie die Ausnahme sind. Unter referentieller Integrität versteht man die Bedingung für Fremdschlüssel, dass diese nur Werte annehmen können, die im Wertebereich des entsprechenden Id-Schlüssels liegen (oder NULL sind). SS 2007 Datenbanken Seite 131 Die 10 Beziehungstypen Durch die Transformation der einzelnen Beziehungen, können alle Beziehungstypen durch die folgenden 4 Beziehungen ausgedrückt werden: 1 1 1 1 1 N 1 N Können von einem Datenbankprogramm nicht direkt auf Datendefinitionsebene unterstützt werden. Für die Realisierung dieser Beziehungen ist der Datenbankentwickler zuständig SS 2007 Datenbanken Seite 132 Normalisierung Die Normalisierung ist ein wichtiger Prozess in der Datenmodellierung. Die Normalisierung bezweckt die redundanzfreie Speicherung von Informationen innerhalb der Tabellen der Datenbasis. Redundanzfreie Datenspeicherung: Kein Teil eines Datenbestandes kann weggelassen werden, ohne dass dies zu Informationsverlusten führt. Redundanzfreie Speicherung führt zum einen zu Speicherplatzersparnis, zum anderen verhindert es Dateninkonsistenz und Löschanomalie. SS 2007 Datenbanken Seite 133 Beispiel: Tabelle mit Redundanzen Kurs_Nr 14 7 16 9 11 Kurs_Bez Datenbanken Einführung Programmierung Betriebssysteme I Verteilte Systeme Data-Warehouse Semester WS 04/05 SS 05 WS 04/05 SS 05 SS 05 Redundanzen Doz_Kürzel dm dm ib ib ak Doz_Name Meier Meier Bauer Bauer Kühne SS 2007 Datenbanken Seite 134 Abhängigkeiten Vorab müssen die unterschiedlichen Abhängigkeiten von Attributen innerhalb einer Relation definiert werden: Es werden drei Abhängigkeiten unterschieden • Funktionale Abhängigkeit • Volle Abhängigkeit • Transitive Abhängigkeit SS 2007 Datenbanken Seite 135 Definition Ein Attribut bzw. eine Attributkombination B ist dann von einem Attribut oder einer Attributkombination A funktional abhängig, wenn zu einem bestimmten Attributwert von A genau ein Attributwert von B gehört. Aus dem Attributwert von A ergibt sich also eindeutig der Attributwert von B. Beispiel: In der Tabelle Mitarbeiter (MNr, Name) ist das Attribut Name funktional abhängig vom Attribut MNr. SS 2007 Datenbanken Seite 136 Definition Ein Attribut bzw. eine Attributkombination B ist dann von einer Attributkombination A voll abhängig, wenn B nur von A, nicht jedoch von einem Teil der Attributkombination A funktional abhängig ist. Beispiel: In der Tabelle MitarbeiterQualifikation (MNr,QNr, zertifiziert) ist das Attribut zertifiziert voll abhängig von der Kombination MNr und QNr. Es gibt an, ob ein Mitarbeiter für eine entsprechende Qualifikation zertifiziert ist. Das Attribut zertifiziert ist nur von der Kombination MNr und QNr abhängig. SS 2007 Datenbanken Seite 137 Definition Ein Attribut bzw. eine Attributkombination C ist von einem Attribut oder einer Attributkombination A transitiv abhängig, wenn das Attribut B von A und das Attribut C von B funktional abhängig ist, aber A nicht von C funktional abhängig ist. Beispiel: In der Tabelle Mitarbeiter (MNr,AbtNr, Abteilung) ist das Attribut Abteilung vom Attribut MNr transitiv abhängig, da • Abteilung von AbtNr und AbtNr von MNr funktional abhängig ist. • MNr ist von Abteilung aber nicht abhängig. • Aus MNr folgt die AbtNr und aus AbtNr folgt die Abteilung. • Also erhält man aus MNr auch die Abteilung. SS 2007 Datenbanken Seite 138 Der Normalisierungsprozess verläuft schrittweise über die Bildung von sog. Normalformen. Es werden hier die ersten 4 Normalformen vorgestellt. Im Beispiel sollen die unterschiedlichen Bankverbindungen von Firmen sinnvoll dargestellt werden. Bankverbindung 123 456 Sparkasse Frankfurt (630 500 00) 234 567 Sparda-Bank Kiel (600 100 70) 987 654 Postbank Bochum (600 908 00) 876 543 Firmenname Bau u. Partner Burkhardt 654 452 Commerzbank Frankfurt (500 400 00) 454 328 8 Deutsche Bank Hamburg (100 205 22) 543 226 86 Sparkasse Frankfurt (631 500 00) WohnIdee Diese Tabelle hat keine korrekte Form. SS 2007 Datenbanken Seite 139 1. Normalform Eine Tabelle befindet sich in der 1. Normalform, wenn alle Attribute nur einfache Attributwerte aufweisen, wobei auch Nullwerte zulässig sind. Nur atomare Merkmalswerte sind erlaubt. Firmenkonto KontoNr 123456 234567 987654 876543 654452 4543288 54322686 BLZ 630 500 00 600 100 70 600 908 00 600 908 00 500 400 00 100 20522 631 500 00 Geldinstitut FID Sparkasse Frankfurt 101 Sparda-Bank Kiel 101 Postbank Bochum 102 Postbank Bochum 102 Commerzbank Frankfurt 103 Deutsche Bank Hamburg 103 Sparkasse Frankfurt 103 Firmenname Bau und Partner Bau und Partner Burkhardt Burkhardt WohnIdee WohnIdee WohnIdee Firmenkonto(KontoNr, BLZ, Geldinstitut, FID, Firmenname) SS 2007 Datenbanken Seite 140 2. Normalform Eine Tabelle befindet sich in der 2. Normalform, wenn sie schon in der 1. Normalform ist und jedes nicht zum Id-Schlüssel gehörende Attribut voll vom Id-Schlüssel abhängig ist. Es können sich also nur Tabellen mit zusammengesetzten IdSchlüsseln in der 2. Normalform befinden. SS 2007 Datenbanken Seite 141 2. Normalform KontoNr 123456 234567 987654 876543 654452 4543288 54322686 Geldinstitut ist nur von BLZ abhängig BLZ 630 500 00 600 100 70 600 908 00 600 908 00 500 400 00 100 20522 631 500 00 Geldinstitut Sparkasse Frankfurt Sparda-Bank Kiel Postbank Bochum Postbank Bochum Commerzbank Frankfurt Deutsche Bank Hamburg Sparkasse Frankfurt FID 101 101 102 102 103 103 103 Firmenname Bau und Partner Bau und Partner Burkhardt Burkhardt WohnIdee WohnIdee WohnIdee Die Tabelle befindet sich also nicht in der 2. Normalform. SS 2007 Datenbanken Seite 142 2. Normalform FirmenKonto KontoNr BLZ 123456 63050000 234567 60010070 987654 60090800 876543 60090800 654452 50040000 4543288 10020522 54322686 63150000 Bank FID 101 101 102 102 103 103 103 Firmenname Bau und Partner Bau und Partner Burkhardt Burkhardt WohnIdee WohnIdee WohnIdee BLZ 63050000 60010070 60090800 50040000 Geldinstitut Sparkasse Frankfurt Sparda-Bank Kiel Postbank Bochum Commerzbank Frankfurt 10020522 Deutsche Bank Hamburg 63150000 Sparkasse Frankfurt Es entstehen 2 Tabellen FirmenKonto(KontoNr, BLZ, FID, Firmenname) Bank(BLZ, Geldinstitut) SS 2007 Datenbanken Seite 143 3. Normalform Eine Tabelle befindet sich in der 3. Normalform, wenn sie schon in der 2. Normalform (bzw. mit einfachem Id-Schlüssel in der 1. Normalform) ist und kein Nichtschlüssel-Attribut vom Id-Schlüssel transitiv abhängig ist. Die Attribute innerhalb einer Tabelle sind also nur vom Id-Schlüssel funktional abhängig. Untereinander existieren keine sonstigen funktionalen Abhängigkeiten. SS 2007 Datenbanken Seite 144 3. Normalform Die Tabelle Bank befindet sich also schon in der 3. Normalform. Die Tabelle FirmenKonto nicht, da das Attribut Firmenname vom IdSchlüssel (KontoNr, BLZ) transitiv abhängig ist. KontoNr 123456 234567 987654 876543 654452 4543288 54322686 BLZ FID 630 500 00 101 600 100 70 101 600 908 00 102 600 908 00 102 50040000 103 10020522 103 63150000 103 Firmenname Bau und Partner Bau und Partner Burkhardt Burkhardt WohnIdee WohnIdee WohnIdee SS 2007 Datenbanken Seite 145 3. Normalform: keine Abhängigkeiten über Umwege Bank FirmenKonto KontoNr 123456 234567 987654 876543 654452 4543288 54322686 BLZ 630 500 00 600 100 70 600 908 00 600 908 00 50040000 10020522 63150000 FID 101 101 102 102 103 103 103 BLZ 63050000 60010070 60090800 50040000 Geldinstitut Sparkasse Frankfurt Sparda-Bank Kiel Postbank Bochum Commerzbank Frankfurt 10020522 Deutsche Bank Hamburg 63150000 Sparkasse Frankfurt Firma FID Firmenname 101 Bau und Partner 102 Burkhardt Nun sind alle Tabellen in der 3. Normalform. 103 WohnIdee SS 2007 Datenbanken Seite 146 Tabellen, die sich in der 3. Normalform befinden, werden als normalisiert bezeichnet. Die darin enthaltenen Informationen sind redundanzfrei. Dies gilt allerdings nur innerhalb der Relation und sagt nichts über die Redundaz-Freiheit in der gesamten Datenbasis aus. SS 2007 Datenbanken Seite 147 4. Normalform Eine Datenbasis befindet sich in der 4. Normalform, wenn sich alle Tabellen in der 3. Normalform befinden und nur noch lokale und globale Attribute existieren. Auch dürfen die Tabellen keine aus der Datenbasis abgeleiteten Attribute, z.B. Berechnungen enthalten. SS 2007 Datenbanken Seite 148 Bemerkung: Es muss auch untersucht werden, ob sich ein Attribut aus Attributen anderer Tabellen ableiten lässt. Beispiel: In Tabelle Rechnung (RechNr, RechDat, NettoWert, MWST, BruttoWert) kann BruttoWert durch NettoWert und MWST berechnet werden. Tabelle befindet sich nicht in der 4 NF. Lösung: Streichen des Attributes BruttoWert. SS 2007 Datenbanken Seite 149 Als lokale Attribute einer Tabelle bezeichnet man alle Attribute, die nur innerhalb einer einzigen Tabelle vorkommen und nicht deren Id-Schlüssel bilden, bzw. Bestandteile des Id-Schlüssels sind. Als globale Attribute bezeichnet man alle Attribute, die mindestens in einer Tabelle im Id-Schlüssel vorkommen bzw. den Id-Schlüssel bilden. SS 2007 Datenbanken Seite 150 Zusammenfassung der Normalformen 1. Normalform: Tabelle hat nur Attribute mit einfachen Attributwerten. 2. Normalform: Tabelle ist in 1 NF und jedes nicht zum Id-Schlüssel gehörende Attribut ist voll vom Id-Schlüssel abhängig. 3. Normalform: Tabelle ist in 2 NF (bzw. mit einfachem Id-Schlüssel in der 1. Normalform) und kein Nichtschlüssel-Attribut vom IdSchlüssel transitiv abhängig ist. 4. Normalform: Alle Tabellen sind in der 3. Normalform und nur noch lokale und globale Attribute existieren. SS 2007 Datenbanken Seite 151 Ein weiteres Beispiel: Tabellen vor der Normalisierung Kunde (KuNr, Firma, Ort, AufNr) Auftrag (AufNr, AufDat, LiefDat) Artikel (ArtNr, ArtBez, LagNr, LagOrt, LagStr) Position (ArtNr, AufNr, Menge, Preis) Rechnung ( RechNr, RechDat, Nettowert, MWST, Bruttowert, AufNr) Tabellen nachdem Datenbasis in 4 NF gebracht wurde Kunde (KuNr, Firma, OId) Ort (OId, Ort) Auftrag (AufNr, AufDat, LiefDat,KuNr) Artikel (ArtNr, ArtBez, Preis, LagNr) Position (ArtNr, AufNr, Menge) Rechnung ( RechNr, RechDat, AufNr, MWST) Lager (LagNr, LagOrt, LagStr) SS 2007 Datenbanken Seite 152 Einige Bemerkung zur Normalisierung: • Durch die Normalisierung wird erreicht, dass die Tabellen redundanzfrei sind. • Durch das Überführen der Datenbasis in die 4. Normalform erreicht man die redundanz-freie Speicherung der Daten innerhalb der gesamten Datenbasis. • Anwenden der Normalformen ist kein „Muss“, Voraussetzung ist nur, dass die Tabellen mindestens in der 1NF vorliegen. • Mit steigendem Normalisierungsgrad werden immer mehr Tabellen erzeugt, so dass das Datenmodell sehr unübersichtlich wird. Dies kann Auswirkungen auf die Performance bei Datenmanipulationen haben. • Die 4. Normalform wird in der Praxis meist nicht angewendet. SS 2007 Datenbanken Seite 153 Vorgehen beim Datenbankentwurf Beim Entwurf werden zusammenfassend folgende Aktivitäten durchgeführt (es kann, bzw. muss auch wieder zurückgesprungen werden): 1. Definition der Aufgabenstellung Zunächst wird die zu lösende Aufgabenstellung klar umrissen. Dabei können größerer Vorhaben in mehrere kleine Zwischenschritte aufgeteilt werden. Es ist wichtig, sich die Ziele vom Auftraggeber schriftlich bestätigen zu lassen. 2. Informationsbeschaffung Es werden alle für die Anwendung benötigten Informationen gesammelt. 3. Bestimmung der Entities mit ihren Attributen Es werden intuitiv die für die zu lösende Aufgabenstellung benötigten Entities festgelegt. Dabei werden die Daten der Informationsbeschaffung strukturiert, indem zusammengehörige Daten zusammengefasst und einem Oberbegriff zugeordnet werden. Beispiel „Firmenadresse“ und „Firmenname“ zu Oberbegriff „Kunde“. SS 2007 Datenbanken Seite 154 Bei der Strukturierung ist zu beachten, dass - jedes Attribut eines Entities einen direkten Bezug zu diesem Entity hat - alle benötigten Informationen als Entities bzw. Attribute auftauchen - keine berechneten Attribute existieren Bestimmung des Id-Schlüssels Es wird dasjenige Attribut bestimmt, dessen Wert innerhalb des Entities eindeutig ist. Falls kein solches existiert, werden mehrere geeignete Attribute zum Id-Schlüssel zusammengefasst oder ein künstlicher Schlüssel wird angelegt. • Ermittlung der Beziehungen Mit Hilfe des ERM werden die Beziehungen zwischen den bisher definierten Entities festgestellt. SS 2007 Datenbanken Seite 155 6. Ableiten der Tabellenstruktur aus dem ERM Aus dem ERM werden die Tabellenstrukturen einschließlich der Fremdschlüssel abgeleitet. 7. Überprüfung des Entwurfs mit Hilfe der globalen Normalisierung (bis 4NF). Damit können logische Fehler bei der ERM-Methode festgestellt werden. 8. Festlegung der Datentypen und Formulierung der Konsistenzbedingungen Formulierung der Bedingungen, die von den gespeicherten Daten eingehalten werden müssen. Damit ist sichergestellt, dass die Datenkonsistenz jederzeit erhalten bleibt. 9. Test des Entwurfs Erstellen der Datenbank als Prototyps. Testen anhand eines Testkonzeptes. 10. Transaktionen definieren 11. Anlegen von Benutzersichten und Zugriffsrechte SS 2007 Datenbanken Seite 156 Ein Beispiel: Sitzplatzreservierung auf Flügen Aufgabenstellung Die neu gegründete Airline EasyFlight möchte ihr SitzplatzReservierungssystem über eine Datenbankanwendung abbilden. Für ein konkretes Flugereignis soll erfasst werden, welcher Sitzplatz von welchem Kunden reserviert wurde. Dabei gilt: • Ein Flugereignis ist ein konkreter Flug an einem bestimmten Datum. • Ein Flug ist eindeutig charakterisiert durch eine Flugnummer und einen Wochentag. • Ein Flug besteht aus mehreren Teilstrecken (Legs). • Die zu reservierenden Sitzplätze sind unterschieden in die Kategorien First, Business und Economy. SS 2007 Datenbanken Seite 157 Bildung der Entitätsmengen mit den Attributen Flugzeug Kennzeichen jedes Flugzeug hat ein eindeutiges Kennzeichen Flugzeugtyp Flotte Ein Flugzeug gehört einer bestimmten Flotte an, z.B. A340, B747-400 Max_Kapazität gibt die maximale Kapazität, d.h. Personen+Fracht an SS 2007 Datenbanken Seite 158 Flug FlugNr Eine Flugnummer wird nur einmal pro Tag vergeben und beinhaltet nicht den Hin- und Rückflug WT Wochentag DepA_F Abflug-Airport ArrA_F Ankunft-Airport Leg LegNr Jedes Teilstück bekommt eine Nummer DepA_L Abflug-Airport des Legs ArrA_L Ankunft-Airport des Legs SS 2007 Datenbanken Seite 159 Flugereignis Datum Flug an einem bestimmten Datum Sitz SitzNr Sitzplatznummer Kategorie F, C oder M Bezeichnung z.B. 7D SS 2007 Datenbanken Seite 160 Bestimmung bzw. Bildung der Id-Schlüssel SS 2007 Datenbanken Seite 161 Festlegen der Beziehungen 1. Alle möglichen, gegenseitigen Beziehungen zwischen den Entitätsmengen sind festzuhalten. Unklare Beziehungen sind anzuschreiben. 2. Streichen von redundanten Beziehungen. 3. Transformation der Beziehungen => Bildung zusätzlicher Entitäten SS 2007 Datenbanken Seite 162 Überführung der Beziehung in Tabellenform Flugzeugtyp ( FTID, Flotte, Max_Kapazität) Flugzeug (FID, Kennzeichen, FTID) Flug (FlugID,FlugNr, WT, DepA_F, ArrA_F, FID) Leg (LegID, DepA_L, ArrA_L) FlugLeg(FlugID, LegID) Airport(AID, 3LC, Bezeichnung) Flugereignis (FEID, Datum, LegID, FlugID) Reservierung (RID, FEID, SitzID, Kundenname) Sitz (SitzID, Kategorie, Bezeichnung, FTID ) Anmerkung: DepA_F, ArrA_F, DepA_L, ArrA_L sind Fremdschlüssel und entsprechen AID. SS 2007 Datenbanken Seite 163 Überprüfung des Entwurfs auf Normalisierung Zunächst fällt auf, dass Redundanzen in den Tabellen sind, da der Airport zweimal in Tabelle Flug und zweimal in Tabelle Leg auftaucht. Der Abflug-Airport des 1. Legs eines Fluges muss mit dem Abflug-Airport des Fluges übereinstimmen. Ebenso muss der Ankunft-Airport des letzten Legs mit dem Ankunft-Airport des Fluges übereinstimmen. Daher sind DepA_F, ArrA_F in Flug überflüssig. Zusätzlich muss aber eine Kennung eingefügt werden, die eine Reihenfolge der Legs anzeigt. Auch die Tabelle FlugLeg erweist sich als unnötig. Sie liefert keine neuen Informationen. Sind die Tabellen sonst alle in der 3NF, bzw. befindet sich Datenbasis in 4NF? SS 2007 Datenbanken Seite 164 Festlegung der Datentypen und Formulierung der Konsistenzbedingungen Beispiel für Datentypen Tabelle Attribut Wertebereich Airport APID Ganze Zahl 3LC Zeichenkette mit 3 Zeichen Bezeichnung Zeichenkette mit 50 Zeichen SitzID Ganze Zahl Kategorie Nur Zeichen C, M, F zugelassen Bezeichnung Zeichenkette Sitz SS 2007 Datenbanken Seite 165 Formulierung der Konsistenzbedingungen Bei diesem Schritt geht es darum, Bedingungen zu formulieren, die von den gespeicherten Daten eingehalten werden müssen. Damit ist sichergestellt, dass die Datenkonsistenz jederzeit erhalten bleibt. SS 2007 Datenbanken Seite 166 Transaktionen definieren Einige Transaktionen für unser Flugbeispiel A: Einfügen, Löschen und Korrigieren von Reservierungen in der Tabelle Reservierung. B: Einfügen eines Datensatzes in der Tabelle Flugzeug C: Einfügen, Updaten eines Datensatzes in der Tabelle Airport. D: Einfügen eines Flugereignisses E: Löschen eines Fluges SS 2007 Datenbanken Seite 167 Nach dem Entwurf des Datenmodells, müssen die Tabellen physisch angelegt werden, die Beziehungen müssen angelegt werden, die Tabellen müssen mit Daten gefüllt werden, die Daten müssen manipuliert werden etc. Dazu dient die Datenbanksprache SQL. SS 2007 Datenbanken Seite 168 Die Datenbanksprache SQL • SQL (Structured Query Language) wurde Ende der 70er Jahre von IBM entwickelt und war ursprünglich für DB2 vorgesehen. • Mitte der 80er Jahre wurde SQL als ANSI-Standard formuliert. • Im Jahre 1992 wurde SQL92 zum Standard, seit 2000 gibt es SQL3. • Die meisten Anbieter relationaler DBMS unterstützen ein erweitertes SQL. => es gibt kein einheitliches SQL sondern verschiedene Dialekte. In der Vorlesung gehen wir auf Besonderheiten vom SQL-Server und Oracle ein. SS 2007 Datenbanken Seite 169 Namenskonventionen für Tabellen Tabellennamen und Attribute: • müssen mit einem Buchstaben beginnen • dürfen 1-30 Zeichen enthalten • dürfen nur die folgenden Zeichen enthalten: A-Z, a-z, 0-9,_, $, # • dürfen nicht den Namen eines anderen Objekts duplizieren, das demselben Benutzer gehört • dürfen nicht einem reservierten Wort entsprechen SS 2007 Datenbanken Seite 170 Ausschnitt aus den verschiedenen Datentypen in ANSI-SQL CHAR(size) (Synonym CHARACTER) Zeichenkette mit der maximalen Länge size. Werte dieses Datentyps müssen von einfachen Hochkommata eingeschlossen sein. DEC(n,m) (Synonym DECIMAL) Dezimalzahl mit Genauigkeit und Anzahl der Nachkommastellen. INT, FLOAT, REAL Datentypen für Zahlen DATE Felder für Datum und Zeit SS 2007 Datenbanken Seite 171 Einige Datentypen von Oracle VARCHAR2(size) Zeichendaten variabler Länge CHAR(size) Zeichendaten fester Länge NUMBER(p,s) Numerische Daten variabler Länge. Gesamtstellenzahl ist p, Anzahl der Nachkommastellen ist s LONG Zeichendaten variabler Länge mit bis zu 2 Gigabyte DATE Datums- und Zeitwerte BLOB Binärdaten bis zu 4 Gigabyte CLOB Zeichendaten bis zu 4 Gigabyte SS 2007 Datenbanken Seite 172 Einige Datentypen vom SQL Server VARCHAR(size) Zeichendaten variabler Länge CHAR(size) Zeichendaten fester Länge FLOAT[(p)] Fließkommazahl, wobei p die Genauigkeit festlegt. REAL Fließkommazahl DECIMAL(g,n) Fließkommazahl in Abhängigkeit von g,n. g kennzeichnet die Anzahl aller Ziffern, p die Anzahl der Ziffern hinter dem Komma. INT ganzzahliger numerischer Wert, der in 4 Bytes gespeichert wird. DATETIME Datumswerte, gespeichert als Ganzzahlen in vier Byte. Eingabe im Format „MMMM dd yyyy“ SS 2007 Datenbanken Seite 173 Anlegen einer Tabelle: die CREATE TABLE Anweisung Tabellen werden durch die Anweisung CREATE TABLE angelegt. (Die Eckigen Klammern zeigen optionale Ausdrücke an. Alle von SQL reservierten Wörter werden hier zur Identifizierung mit Großbuchstaben geschrieben). CREATE TABLE Tabellenname - (Attribut1 Datentyp [DEFAULT deftyp][Spalten_constraint], Attribut2 Datentyp, …., [table_constraint]); Für jedes Attribut dieser Tabelle muss Attributname und Datentyp angegeben werden. SS 2007 Datenbanken Seite 174 Optional sind • DEFAULT-Option • Spalten-Constraint • Tabellen-Constraint SS 2007 Datenbanken Seite 175 Constraints • Constraints erzwingen Regeln auf Tabellenebene • Die folgenden Constraint-Regeln sind gültig • NOT NULL • UNIQUE • PRIMARY KEY • FOREIGN KEY • CHECK SS 2007 Datenbanken Seite 176 Constraint Beschreibung NOT NULL Gibt an, dass die Spalte keinen NULLWert enthalten darf. UNIQUE Gibt eine Spalte oder Spaltenkombination an, deren Werte in allen Zeilen der Tabelle eindeutig sein müssen. PRIMARY KEY Identifiziert jede Zeile der Tabelle eindeutig. FOREIGN KEY Richtet eine Fremdschlüsselbeziehung zwischen der Spalte und einer Spalte der referenzierten Tabelle ein und setzt diese durch. CHECK Gibt eine Bedingung an, die erfüllt sein muss. SS 2007 Datenbanken Seite 177 Constraints definieren Constraints werden in der Regel gleichzeitig mit der Tabelle erstellt. Sie können aber auch nach dem Erstellen der Tabelle hinzugefügt werden. Constraints auf Spaltenebene Attribut [CONSTRAINT constraint_name] constraint_type,… Constraints auf Tabellenebene Attribut,…. [CONSTRAINT constraint_name] constraint_type (Attribut1,…) SS 2007 Datenbanken Seite 178 NOT NULL-Constraint Dieses Constraint kann nur auf Spaltenebene definiert werden. Beispiel: Anlegen einer Tabelle Airport Constraint wird vom System benannt. CREATE TABLE Airport (APID INT NOT NULL , A3LC CHAR(3) NOT NULL ABEZ VARCHAR(100), COUNTRY VARCHAR(100) DEFAULT 'aaa', ); SS 2007 Datenbanken Seite 179 oder Constraint wird vom Nutzer benannt. CREATE TABLE Airport (APID INT NOT NULL , A3LC CHAR(3) DEFAULT 'aaa‘ CONSTRAINT A_3LC NOT NULL, ABEZ VARCHAR(100), COUNTRY VARCHAR(100)); SS 2007 Datenbanken Seite 180 UNIQUE-Constraint Ein UNIQUE-Constraint erfordert, dass jeder Wert eines Attributs oder Attributkombination eindeutig ist. Dieses Constraint wird auf Tabellen- oder Spaltenebene definiert. CREATE TABLE Airport (APID INT NOT NULL , A3LC CHAR(3) NOT NULL ABEZ VARCHAR(100), COUNTRY VARCHAR(100) UNIQUE, ); SS 2007 Datenbanken Seite 181 oder CREATE TABLE Airport (APID INT A3LC CHAR(3) NOT NULL , ABEZ VARCHAR(100), COUNTRY VARCHAR(100), NOT NULL , CONSTRAINT A_3LC UNIQUE (A3LC) ); SS 2007 Datenbanken Seite 182 PRIMARY KEY-Constraint Ein PRIMARY KEY-Constraint erstellt für die Tabelle einen Id-Schlüssel. Für jede Tabelle kann nur ein Id-Schlüssel erstellt werden. Das PRIMARY KEY-Constraint ist ein Attribut oder eine Attributkombination, die jedes Tupel einer Tabelle eindeutig identifiziert. SS 2007 Datenbanken Seite 183 Beispiel CREATE TABLE Airport (APID INT PRIMARY KEY , A3LC CHAR(3) NOT NULL , ABEZ VARCHAR(100), COUNTRY VARCHAR(100) ); Bemerkung: Besteht ein Primary Key aus einer Attributkombination, so muss PRIMARY KEY als Constraint auf Tabellenebene angegeben werden. SS 2007 Datenbanken Seite 184 FOREIGN KEY-Constraint Ein FOREIGN KEY-oder referentielle Integritäts-Constraints bestimmten ein Attribut oder eine Attributkombination als Fremdschlüssel und richten eine Beziehung zwischen einem PRIMARY KEY in derselben oder einer anderen Tabelle ein. Ein FOREIGN KEY- Constraint kann auf Spalten- oder Tabellenebene definiert werden. Bemerkung: Ein FOREIGN KEY – Constraint wird von MySQL nur unterstützt mit dem Tabellentyp TYPE=INNODB. SS 2007 Datenbanken Seite 185 Beispiel CREATE TABLE Abteilung (AbtID NUMBER(6) PRIMARY KEY , Abt_Name VARCHAR2(20) NOT NULL ); CREATE TABLE Mitarbeiter (MID NUMBER(6) PRIMARY KEY , Name VARCHAR2(20) NOT NULL , Vorname VARCHAR2(20), AbtID NUMBER(6) REFERENCES Abteilung (AbtID) ); SS 2007 Datenbanken Seite 186 Schüsselwörter von FOREIGN KEY-Constraints • FOREIGN KEY: definiert das Attribut der untergeordneten Tabelle auf Tabellen-Constraint-Ebene. • REFERENCES: identifiziert die Tabelle und das Attribut in der übergeordneten Tabelle • ON DELETE CASCADE: löscht die abhängigen Zeilen aus der untergeordneten Tabelle, wenn eine Zeile in der übergeordneten Tabelle gelöscht wird. • ON DELETE SET NULL: konvertiert abhängige Fremdschlüsselwerte in NULLWerte. SS 2007 Datenbanken Seite 187 CHECK-Constraint Ein CHECK-Constraint definiert eine Bedingung, die jede Zeile erfüllen muss. Beispiel: CREATE TABLE Mitarbeiter ( …. gehalt NUMERIC (8,2) CHECK (gehalt > 0), ….) Bemerkung: MySQL unterstützt dieses Constraint nicht. SS 2007 Datenbanken Seite 188 Veränderung von bestehenden Tabellen Die Strukturen bestehender Tabellen müssen unter Umständen verändert werden, d.h. Spalten hinzufügen, Spaltendefinition verändern, Spalten entfernen, Constraints verändern. Dies erfolgt mit Hilfe der ALTER TABLE- Anweisung SS 2007 Datenbanken Seite 189 ALTER TABLE- Anweisung Spalten hinzufügen: ALTER TABLE Tabellenname ADD Neuer_Attributname Datentyp [DEFAULT deftyp],…; Bestehende Attribute ändern ALTER TABLE Tabellenname MODIFY Bestehendes_Attribut neuer_Datentyp [DEFAULT deftyp],…; Attribut löschen ALTER TABLE Tabellenname DROP Bestehendes_Attribut,…; SS 2007 Datenbanken Seite 190 Constraints nachträglich hinzufügen Mit der ALTER TABLE Anweisung können auch Constraints nachträglich bearbeitet werden. Ein Constraint kann • hinzugefügt oder gelöscht werden • aktiviert oder deaktiviert werden Beispiel für die Syntax zum Einfügen einer neuen Spalte ALTER TABLE Tabellenname ADD [CONSTRAINT constraint] type (Attribut); SS 2007 Datenbanken Seite 191 Daten in eine Tabelle einfügen mit INSERT Die Syntax für das Einfügen eines Tupels in eine Tabelle lautet INSERT INTO Tabellenname [(Attribut1 [, Attribut2…])] VALUES (wert1 [,wert2…]); SS 2007 Datenbanken Seite 192 Beispiel Es sollen Tupel in die Tabelle Mitarbeiter(MID,Name, Vorname, Gehalt) eingefügt werden. Es gibt folgende Möglichkeiten INSERT INTO Mitarbeiter VALUES (100,'Beier','Marc',50000); -> dann müssen Werte in Reihenfolge der Tabellendefinition angegeben werden SS 2007 Datenbanken Seite 193 Sind NULL-Werte für einzelne Attribute erlaubt, so müssen für diese nicht unbedingt Werte eingegeben werden: INSERT INTO Mitarbeiter(MID,Name) VALUES(103,'Becker'); oder INSERT INTO Mitarbeiter VALUES (104,'Becker',NULL,NULL); SS 2007 Datenbanken Seite 194 oder INSERT INTO Mitarbeiter (MID,Name,Vorname, Gehalt) VALUES (101,'Beier','Marc',50000); werden die Attribute hinter dem Tabellennamen angegeben, so kann die Reihenfolge vertauscht werden: INSERT INTO Mitarbeiter(MID, Gehalt, Name, Vorname) VALUES (102,50000,'Marc','Beier‘); SS 2007 Datenbanken Seite 195 Abfragen von Datensätzen: die SELECT-Anweisung Um Daten aus der Datenbank zu extrahieren, verwendet man die SELECT Anweisung. Mit einer SELECT Anweisung können folgende Aktionen ausgeführt werden: • Projektion: Legt fest, welche Spalten einer Tabelle die Abfrage zurückgibt. Es können beliebig viele Spalten der Tabelle gewählt werden. • Auswahl: Legt fest, welche Zeilen einer Tabelle die Abfrage zurückgibt. Es können verschiedene Kriterien angegeben werden, um die angezeigten Zeilen einzuschränken. • Join: Die in verschiedenen Tabellen gespeicherten Daten können durch Verknüpfung zusammengebracht werden. SS 2007 Datenbanken Seite 196 Grundlegende SELECT-Anweisung SELECT * | {[DISTINCT] Attribut | Ausdruck [alias],…} FROM tabellenname; | steht für „alternativ“ • SELECT bestimmt, welches Attribut • FROM bestimmt, welche Tabelle SS 2007 Datenbanken Seite 197 Die Tabelle mitarbeiter(mid,name,vorname,abteilung,gehalt) habe 6 Tupel: Alle Spalten auswählen SELECT * FROM mitarbeiter; liefert mid 100 101 102 103 104 105 name Hoffmann Schulte Becker Schmidt Schlodder Hoffmann vorname Richard Karin Malte Andreas Kim Richard abteilung F3/20 F2/4 Projekte D13/1 A12/2 Marketing F3/21 gehalt 40000,00 60450,00 25230,00 65000,00 40000,00 42000,00 Alternativ können auch statt * alle Attribute angeben werden: SELECT mid, name, vorname, abteilung, gehalt FROM mitarbeiter SS 2007 Datenbanken Seite 198 Bestimmte Spalten auswählen SELECT name, vorname FROM mitarbeiter; liefert name Hoffmann Schulte Becker Schmidt Schlodder Hoffmann vorname Richard Karin Malte Andreas Kim Richard Die Reihenfolge der Angabe der Attribute entscheidet über die Reihenfolge der Ausgabe. SS 2007 Datenbanken Seite 199 Arithmetische Ausdrücke In der Anzeige können auch Zahlendaten durch arithmetisch verknüpft werden. SELECT name, vorname, gehalt, gehalt/12 + 100 FROM mitarbeiter; liefert name Hoffmann Schulte Becker Schmidt Schlodder Hoffmann vorname Richard Karin Malte Andreas Kim Richard gehalt 40000,00 60450,00 25230,00 65000,00 40000,00 42000,00 gehalt/12+100 3433,3333 5137,5000 2202,5000 5516,6667 3433,3333 3600,0000 Bemerkung: Es wird keine neue Spalte in der Tabelle erzeugt sondern nur in der Anzeige eine weitere Spalte hinzugefügt. SS 2007 Datenbanken Seite 200 Attribut-Aliasnamen definieren Ein Attribut-Aliasname • benennt ein Attribut in der Ausgabe um • kann z.B. nützlich bei nicht-aussagekräftigen Attributsnamen oder bei Berechnungen sein • wird direkt hinter dem Attributnamen angegeben. Optional kann zwischen Attribut und Aliasname AS angegeben werden • hat der Aliasname Leerzeichen, so muss er in “ “ gesetzt werden Bemerkung: in Oracle werden in der Anzeige alle Attribute in Großbuchstaben ausgegeben. Sollen sie auch in Kleinbuchstaben ausgegeben werden, müssen sie ebenfalls in “ “ gesetzt werden. SS 2007 Datenbanken Seite 201 Attribut-Aliasnamen verwenden SELECT name AS Mitarbeitername,gehalt, gehalt/12 AS Monatsgehalt FROM mitarbeiter; Mitarbeitername Hoffmann Schulte Becker Schmidt Schlodder Hoffmann gehalt 40000,00 60450,00 25230,00 65000,00 40000,00 42000,00 Monatsgehalt 3333,3333 5037,5000 2102,5000 5416,6667 3333,3333 3500,0000 SELECT name "Mitarbeiter Name", gehalt, gehalt/12 Monatsgehalt FROM mitarbeiter; Mitarbeiter Name Hoffmann Schulte gehalt 40000,00 60450,00 Monatsgehalt 3333,3333 5037,5000 SS 2007 Datenbanken Seite 202 Mehrfach vorhandene Zeilen ausblenden mit DISTINCT SELECT name FROM mitarbeiter; liefert name Hoffmann Schulte Becker Schmidt Schlodder Hoffmann SELECT DISTINCT name FROM liefert dagegen mitarbeiter name Hoffmann Schulte Becker Schmidt Schlodder SS 2007 Datenbanken Seite 203 Daten einschränken und sortieren – die WHERE- Klausel Die zurückgegebenen Zeilen werden mit Hilfe der WHERE-Klausel eingeschränkt. SELECT * | {[DISTINCT] Attribut | Ausdruck [alias],…} FROM tabellenname [WHERE bedingung(s)]; Die WHERE-Klausel besteht aus • Spaltenname, • Vergleichsoperator, • Attribut, Konstante oder Werteliste SS 2007 Datenbanken Seite 204 Die WHERE-Klausel SELECT * FROM mitarbeiter WHERE mid = 101; liefert oder mid 101 name Schulte vorname Karin abteilung F2/4 Projekte gehalt 60450,00 SELECT mid, name, vorname , gehalt FROM Zeichenfolgen müssen in Hochkommata gesetzt werden mitarbeiter WHERE abteilung= 'F3/20'; mid 100 name Hoffmann vorname Richard gehalt 40000,00 SS 2007 Datenbanken Seite 205 Die folgenden Vergleichsoperatoren sind möglich = > < >= < <= <> (auch !=) SELECT * FROM mitarbeiter WHERE gehalt > 40000 mid 101 103 name Schulte Schmidt vorname Karin Andreas abteilung F2/4 Projekte A12/2 Marketing gehalt 60450,00 65000,00 SS 2007 Datenbanken Seite 206 Bemerkung In einer WHERE-Klausel darf kein Alias verwendet werden. Andere Vergleichsoperatoren Operator Bedeutung BETWEEN….AND…. Zwischen zwei Werten (einschließlich dieser Werte) IN (menge) Entspricht einem Wert aus der Menge LIKE Entspricht einem Zeichenmuster IS NULL ist ein NULL-Wert SS 2007 Datenbanken Seite 207 Der Operator BETWEEN SELECT * FROM mitarbeiter WHERE gehalt BETWEEN 40000 AND 60450; liefert mid 100 101 104 105 name Hoffmann Schulte Schlodder Hoffmann vorname Richard Karin Kim Richard abteilung F3/20 F2/4 Projekte F3/21 gehalt 40000,00 60450,00 40000,00 42000,00 SS 2007 Datenbanken Seite 208 Der Operator IN SELECT * FROM mitarbeiter WHERE mid IN (100, 104); liefert mid 100 104 name Hoffmann Schlodder vorname Richard Kim abteilung F3/20 gehalt 40000,00 40000,00 Bemerkung: Zeichen- oder Datumswerte müssen in der Liste in Hochkommata (‘‘)gesetzt werden. SS 2007 Datenbanken Seite 209 Der Operator LIKE Mit LIKE kann eine Platzhaltersuche durchgeführt werden. Der Platzhalter % steht für kein, ein oder beliebig viele Zeichen Der Platzhalter _ steht für genau ein Zeichen. SELECT * FROM mitarbeiter WHERE name LIKE 'S%' ; mid 101 103 104 name Schulte Schmidt Schlodder vorname Karin Andreas Kim abteilung F2/4 Projekte A12/2 Marketing gehalt 60450,00 65000,00 40000,00 SS 2007 Datenbanken Seite 210 Der Operator IS NULL SELECT * FROM mitarbeiter WHERE abteilung IS NULL; liefert mid 104 name Schlodder vorname Kim abteilung gehalt 40000,00 Entsprechen kann auf IS NOT NULL abgefragt werden. SS 2007 Datenbanken Seite 211 Logische Operatoren Operator Bedeutung AND TRUE, falls beide Komponentenbedingungen wahr sind OR TRUE, falls eine der beiden Komponentenbedingungen wahr ist. NOT TRUE, falls die Bedingung falsch ist. Mit diesen Operatoren können mehrere Bedingungen in der WHEREKlausel verknüpft werden. SS 2007 Datenbanken Seite 212 SELECT * FROM mitarbeiter WHERE name LIKE 'SCH%' AND gehalt > 50000; liefert mid 101 103 name Schulte Schmidt vorname Karin Andreas abteilung F2/4 Projekte A12/2 Marketing gehalt 60450,00 65000,00 SS 2007 Datenbanken Seite 213 Dagegen ergibt die Anweisung SELECT * FROM mitarbeiter WHERE name LIKE 'SCH%' OR gehalt > 50000; mid 101 103 104 name Schulte Schmidt Schlodder vorname Karin Andreas Kim abteilung F2/4 Projekte A12/2 Marketing gehalt 60450,00 65000,00 40000,00 SS 2007 Datenbanken Seite 214 Der NOT-Operator kann mit anderen Operatoren wie IN, BETWEEN, LIKE und NULL kombiniert werden. SELECT * FROM mitarbeiter WHERE mid NOT IN (100,104) mid 101 102 103 105 name Schulte Becker Schmidt Hoffmann vorname Karin Malte Andreas Richard abteilung F2/4 Projekte D13/1 A12/2 Marketing F3/21 gehalt 60450,00 25230,00 65000,00 42000,00 SS 2007 Datenbanken Seite 215 Sortieren mit der ORDER BY-Klausel Die ORDER BY Klausel in Verbindung mit ASC sortiert in aufsteigender Reihenfolge DESC sortiert in absteigender Reihenfolge. Wird hinter ORDER BY weder ASC noch DESC angegeben, so wird aufsteigend sortiert. Syntax SELECT * | {[DISTINCT] Attribut | Ausdruck [alias],…} FROM tabellenname [WHERE bedingung(s)] [ORDER BY {Attribut , Ausdruck ,alias} [ASC|DESC|]]; SS 2007 Datenbanken Seite 216 Absteigend und Aufsteigend sortieren SELECT * FROM mitarbeiter ORDER BY name DESC; liefert mid 101 103 104 105 100 102 name Schulte Schmidt Schlodder Hoffmann Hoffmann Becker vorname Karin Andreas Kim Richard Richard Malte abteilung F2/4 Projekte A12/2 Marketing F3/21 F3/20 D13/1 gehalt 60450,00 65000,00 40000,00 42000,00 40000,00 25230,00 SS 2007 Datenbanken Seite 217 Es kann auch nach Attributen sortiert werden, die nicht in der SELECT Anweisung enthalten sind SELECT name, vorname FROM mitarbeiter ORDER BY gehalt DESC; SS 2007 Datenbanken Seite 218 Auch nach mehreren Attributen oder nach alias kann sortiert werden SELECT name, gehalt/12 monatsgehalt FROM mitarbeiter ORDER BY monatsgehalt, name; name Becker Hoffmann Schlodder Hoffmann Schulte Schmidt monatsgehalt 2102,5 3333,333333 3333,333333 3500 5037,5 5416,666667 SS 2007 Datenbanken Seite 219 SQL-Funktionen Es gibt zwei verschiedene Arten von Funktionen: • Single Row-Funktionen Diese Funktionen bearbeiten nur einzelne Zeilen und geben ein Ergebnis pro Zeile zurück. • Multiple Row-Funktionen Diese Funktionen können Gruppen von Zeilen bearbeiten, um ein Ergebnis pro Zeilengruppe zurückzugeben (Gruppenfunktionen). SS 2007 Datenbanken Seite 220 Single Row-Funktionen • bearbeiten Datenelemente • bearbeiten jede zurückgegebene Zeile • geben ein Ergebnis pro Zeile zuück • akzeptieren Spalten oder Ausdrücke als Argumente • können verschachtelt sein. Im Folgenden werden einige dieser Funktionen behandelt. SS 2007 Datenbanken Seite 221 Zeichenfunktionen • haben als Input Zeichendaten, als Output Zeichenwerte oder numerische Werte. • es wird unterschieden zwischen Zeichenfunktionen zur Umwandlung von Groß-/Kleinbuchstaben • Funktionen zum Bearbeiten von Zeichen Funktion LOWER(attribut|ausdruck) UPPER(attribut|ausdruck) CONCAT(attribut1|ausdruck1,attribut2|ausdruck2) LENGTH(attribut|ausdruck) TRIM(trim_character FROM trim_source) Zweck Konvertiert alphanumerische Zeichenwerte in Kleinbuchstaben Konvertiert alphanumerische Zeichenwerte in Großbuchstaben Verkettung der Attribute bzw. Ausdrücke entfernt am Anfang und Ende das Zeichen oder die Zeichenkette trim_character aus trim_source SS 2007 Datenbanken Seite 222 Beispiel für das Verwenden von Zeichenfunktionen SELECT LOWER(name), UPPER(vorname), CONCAT(vorname,' ',name) AS mitarbeitername, LENGTH(name), TRIM('Sch' FROM name) FROM mitarbeiter; LOWER(name) UPPER(vorname) mitarbeitername LENGTH(name TRIM('Sch' FROM name) hoffmann RICHARD Richard Hoffmann 8 Hoffmann schulte KARIN Karin Schulte 7 ulte becker MALTE Malte Becker 6 Becker schmidt ANDREAS Andreas Schmidt 7 midt schlodder KIM Kim Schlodder 9 lodder hoffmann RICHARD Richard Hoffmann 8 Hoffmann SS 2007 Datenbanken Seite 223 Numerische Funktionen • haben als Input und Output numerische Werte Auszug der Funktionen Funktion ROUND (attribut|ausdruck,n) TRUNC (attribut|ausdruck,n) bzw. TRUNCATE(attribut|ausdruck,n) in MySQL MOD (m,n) SQRT(attribut|ausdruck) SIN(…), COS(..), TAN(…) … Zweck Rundet die Spalte bzw. den Ausdruck auf n Dezimalstellen. Ist kein Wert angegeben, wird auf einen ganzzahligen Wert gerundet. Schneidet die Spalte bzw. den Ausdruck auf n Dezimalstellen ab. Ist kein Wert für n angegeben, werden die Ziffern hinter dem Dezimalkomma abgeschnitten Gibt den ganzzahligen Rest von m/n zurück. Berechnet die Wurzel Winkelfunktionen SS 2007 Datenbanken Seite 224 Beispiel für das Verwenden von Numerischen Funktionen SELECT gehalt, gehalt/12, ROUND(gehalt/12,2), TRUNC (gehalt/12,2), MOD(gehalt, 12) FROM mitarbeiter; gehalt 65000 25230 60450 40000 40000 42000 gehalt/12 5416,6667 2102,5 5037,5 3333,333333 3333,333333 3500 ROUND(gehalt/12,2) TRUNC(gehalt/12) 5416,67 5416,66 2102,50 2102,50 5037,50 5037,50 3333,33 3333,33 3333,33 3333,33 3500,00 3500,00 MOD(gehalt,12) 8 6 6 4 4 0 SS 2007 Datenbanken Seite 225 Datums- und Zeitwerte In SQL2 gibt es die Datentypen DATE und TIME. DATE umfasst 10 Stellen im Format YYYY-MM-DD. TIME hat 8 Stellen im Format HH:MM:SS. Zusätzlich gibt es den Datentyp TIMESTAMP, der DATE- und TIME-Felder und Stellen für Bruchteile von Sekunden beinhaltet. Die Datums- und Zeitwerte sind je nach DBMS unterschiedlich. SS 2007 Datenbanken Seite 226 Datums- und Zeitwerte in Oracle • Oracle speichert Datumswerte in einem internen numerischen Format: Jahrhundert, Jahr, Monat, Tag, Stunde, Minute, Sekunde • Das Default-Format für die Anzeige ist DD-MM-JJ • Mit der Funktion TO_CHAR(datum,‘format‘) kann ein datum in einem anderen Format angezeigt werden. • SYSDATE Funktion, die das aktuelle Datum und die aktuelle Uhrzeit des Datenbankservers zurückgibt • Da Datumswerte als Zahlen gespeichert werden, können mit Hilfe der arithmetischen Operatoren Berechnungen durchgeführt werden. SS 2007 Datenbanken Seite 227 Einige Funktionen für Datum in Oracle Funktion Bedeutung MONTH_BETWEEN(date1,date2) Anzahl der Monate zwischen zwei Datumswerten ADD_MONTHS(date,n) Kalendermonat zu einem Datum addieren NEXT_DAY(date,‘char‘) Datum des nächsten Wochentages LAST_DAY(date) Letzter Tag des Monats ROUND Datumswert runden TRUNC Datumswert abschneiden SS 2007 Datenbanken Seite 228 Datums- und Zeitwerte beim SQL-Server • Der SQL-Server kennt die Datentypen DATETIME und SMALLDATETIME. DATETIME speichert das Datum und die Zeit in Sekundengenauigkeit, SMALLDATETIME in Minutengenauigkeit. • GETDATE() Funktion, die das aktuelle Datum und die aktuelle Uhrzeit des Datenbankservers zurückgibt SS 2007 Datenbanken Seite 229 Einige Funktionen für Datum beim SQL-Server DATEADD(datumsteil, anzahl, datum): Zu einem gegebenen Datum kann eine bestimmte Anzahl an Intervallen hinzugefügt oder abgezogen werden. Intervalle sind year, month, week, quarter, hour, minute, second(date,n) DATEDIFF(datumsteil, startdatum, enddatum): Liefert Differenz zwischen zwei Datumswerten DATENAME(datumsteil, datum): Liefert den angegebenen Datumsteil DAY(datum), MONTH(datum), YEAR(datum): Liefert den entsprechenden Datumsteil als Zahl. SS 2007 Datenbanken Seite 230 Bedingte Ausdrücke Bedingte Ausdrücke stellen die IF-THEN-ELSE Logik innerhalb einer SQLAnweisung bereit. In SQL werden sie mit Hilfe von CASE ausgeführt. Syntax CASE attribut|ausdruck WHEN vergleichs_ausdruck1 THEN return_ausdruck1 [WHEN vergleichs_ausdruck2 THEN return_ausdruck2 WHEN vergleichs_ausdruck3 THEN return_ausdruck3 … ELSE else_ausdruck] END SS 2007 Datenbanken Seite 231 Beispiel für das Verwenden von CASE SELECT name, vorname, abteilung, gehalt, CASE abteilung WHEN 'A12/2 Marketing' THEN gehalt+100 WHEN 'F3/20' THEN gehalt + 500 ELSE gehalt END 'Angepasstes Gehalt' FROM mitarbeiter; name Hoffmann Schulte Becker Schmidt Schlodder Hoffmann vorname Richard Karin Malte Andreas Kim Richard abteilung F3/20 F2/4 Projekte D13/1 A12/2 Marketing F3/21 gehalt 40000,00 60450,00 25230,00 65000,00 40000,00 42000,00 Angepasstes Gehalt 40500,00 60450,00 25230,00 65100,00 40000,00 42000,00 SS 2007 Datenbanken Seite 232 EINSCHUB- Daten in Tabellen ändern und löschen Tupel in einer Tabelle werden in SQL mit Hilfe der UPDATE Anweisung geändert: Syntax UPDATE tabellenname SET attribut = wert [, attribut2 = wert,…] [WHERE bedingung]; Es können ein oder mehrere Tupel pro Tabelle geändert werden. SS 2007 Datenbanken Seite 233 Beispiel für das Ändern von Tupeln Die Tabelle airport habe die folgenden Attribute und Datentypen (hier in MySQL): Field Type APID int(11) A3LC char(3) ABEZ varchar(100) COUNTRY varchar(100) UPDATE_DAT timestamp(14) INSERT_DAT timestamp(14) In die Tabelle werden zwei Datensätze eingefügt: INSERT INTO airport VALUES (100,'FRA', 'Frankfurt','Deutschland',NULL,NULL); INSERT INTO airport (APID, A3LC, ABEZ, COUNTRY,INSERT_DAT) VALUES (105,'LAX', 'Los Angeles','USA',NULL); SS 2007 Datenbanken Seite 234 Damit hat die Tabelle den Inhalt Frankfurt soll in Frankfurt am Main geändert werden: UPDATE airport SET ABEZ = 'Frankfurt am Main' Satz wurde geändert WHERE APID = 100; SS 2007 Datenbanken Seite 235 Löschen von Tupeln Tupel in einer Tabelle werden in SQL mit Hilfe der DELETE Anweisung gelöscht: Syntax DELETE [FROM] tabellenname [WHERE bedingung]; SS 2007 Datenbanken Seite 236 Daten aus mehreren Tabellen anzeigen SS 2007 Datenbanken Seite 237 mitarbeiter abteilung Das Ergebnis der Abfrage: SS 2007 Datenbanken Seite 238 Um Daten aus mehreren Tabellen anzuzeigen, müssen sog. JOIN-Bedingungen benutzt werden. In SQL99 gibt es In Oracle • Natural-Join/Inner-Join Equi-Join • Left-Outer-Join bzw. Right-Outer-Join Outer-Join • Self-Join Self-Join • Cross-Join Kartesisches Produkt Seit Oracle9i unterstützt Oracle auch die Standard-Joins. SS 2007 Datenbanken Seite 239 Equi-Joins bzw. Inner-Joins mitarbeiter Fremdschlüssel abteilung Id-Schlüssel Um für eine M_ID den Abteilungsname zu erhalten, müssen die Attributwerte aus der Spalte ABT_ID der Tabelle mitarbeiter mit ABT_ID aus der Tabelle abteilung verglichen werden. Die Verknüpfung der beiden Tabellen nennt man Equi-Join oder Inner-Join. SS 2007 Datenbanken Seite 240 Datensätze mit Equi-Join abfragen SELECT mitarbeiter.m_id, mitarbeiter.name, mitarbeiter.vorname, abteilung.abt_name FROM mitarbeiter, abteilung WHERE mitarbeiter.abt_id = abteilung.abt_id; JOINBedingung SS 2007 Datenbanken Seite 241 Die Attribute aus den unterschiedlichen Tabellen müssen eindeutig sein Die Eindeutigkeit wird gewährleistet, indem Tabellenpräfixe gesetzt werden. Z.B. mitarbeiter.abt_id Tabellenpräfixe verbessern die Performance bei Abfragen über mehrere Tabellen. SS 2007 Datenbanken Seite 242 Tabellen-Aliasnamen Die Abfragen sollten über Tabllen-Aliasnamen vereinfacht werden. Durch das Verwenden von Tabellenpräfixen wird die Performance verbessert. Beispiel SELECT m.m_id, m.name, m.vorname, a.abt_name FROM mitarbeiter m, abteilung a WHERE m.abt_id = a.abt_id; Der Tabellen-Aliasname gilt nur für die aktuelle SELECT-Anweisung. SS 2007 Datenbanken Seite 243 Zusätzliche Suchkriterien mit AND SELECT m.m_id, m.name, m.vorname, a.abt_name FROM mitarbeiter m, abteilung a WHERE m.abt_id = a.abt_id AND m.name = 'Schutt'; SS 2007 Datenbanken Seite 244 Mehrere Tabellen verknüpfen mitarbeiter abteilung standort SS 2007 Datenbanken Seite 245 SELECT m.m_id, m.name, m.vorname, a.abt_name,s.stadt FROM mitarbeiter m, abteilung a, standort s WHERE m.abt_id = a.abt_id AND a.abt_sitz = s.abt_sitz SS 2007 Datenbanken Seite 246 Alternativ kann auch ein INNER JOIN gesetzt werden SELECT m.m_id, m.name, m.vorname, a.abt_name FROM mitarbeiter m INNER JOIN abteilung a ON m.abt_id = a.abt_id; oder bei Verbindungen von 3 Tabellen SELECT m.m_id, m.name, m.vorname,a.abt_name,s.stadt FROM mitarbeiter m INNER JOIN abteilung a ON m.abt_id = a.abt_id INNER JOIN standort s ON a.abt_sitz = s.abt_sitz; SS 2007 Datenbanken Seite 247 Bemerkung Bei den bisherigen JOINS müssen die vergleichenden Attribute nicht gleich heißen. Beispiel: mitarbeiter(m_id, name, vorname, abtid), abteilung (abt_id, abt_name, abt_sitz) dann ist ein INNER JOIN gegeben durch SELECT m.m_id, m.name, m.vorname, a.abt_name FROM mitarbeiter m INNER JOIN abteilung a ON m.abtid = a.abt_id; SS 2007 Datenbanken Seite 248 INNER JOIN USING Heißen die zu verbindenden Attribute in den Tabellen gleich, so kann man bei Oracle auch statt des ON ein USING setzen: Beispiel: Statt SELECT m.m_id, m.name, m.vorname, a.abt_name FROM mitarbeiter m INNER JOIN abteilung a ON m.abt_id = a.abt_id; kann SELECT m.m_id, m.name, m.vorname, a.abt_name FROM mitarbeiter m INNER JOIN abteilung a USING (abt_id); die Klammer muss gesetzt werden es darf kein Tabellenpräfix gesetzt werden SS 2007 Datenbanken Seite 249 Outer-Joins mitarbeiter abteilung Diese Sätze würden bei einem INNER-JOIN rausfallen Ein OUTER-JOIN zeigt auch Datensätze an, die keinen Bezug zur zweiten Tabelle haben. SS 2007 Datenbanken Seite 250 LEFT OUTER JOIN ( RIGHT OUTER JOIN) Eine Verknüpfung zwischen zwei Tabellen, die das Ergebnis des INNER JOINS sowie die Zeilen ohne Übereinstimmung in der linken Tabelle zurückgibt, wird als LEFT-OUTER-JOIN bezeichnet. Eine Verknüpfung zwischen zwei Tabellen, die das Ergebnis des INNER JOINS sowie die Zeilen ohne Übereinstimmung in der rechten Tabelle zurückgibt, wird als RIGHT-OUTER-JOIN bezeichnet. Durch das Vertauschen der Tabellen, ist der RIGHT OUTER JOIN überflüssig. SS 2007 Datenbanken Seite 251 Beispiel für einen LEFT OUTER JOIN SELECT m.m_id, m.name, m.vorname, a.abt_id, a.abt_name FROM mitarbeiter m LEFT OUTER JOIN abteilung a ON (m.abt_id = a.abt_id); alle Tupel der linken Tabelle mitarbeiter werden angezeigt SS 2007 Datenbanken Seite 252 Beispiel für einen RIGHT OUTER JOIN SELECT m.m_id, m.name, m.vorname, a.abt_id, a.abt_name FROM mitarbeiter m RIGHT OUTER JOIN abteilung a ON (m.abt_id = a.abt_id); alle Tupel der rechten Tabelle abteilung werden angezeigt SS 2007 Datenbanken Seite 253 FULL OUTER JOIN Sollen alle Datensätze aus den beteiligten Tabellen angezeigt werden, so spricht man von einem FULL OUTER JOIN. Wo es möglich ist, werden auch hier Verknüpfungen vorgenommen. Beispiel SELECT m.m_id, m.name, m.vorname, a.abt_id, a.abt_name FROM mitarbeiter m FULL OUTER JOIN abteilung a ON (m.abt_id = a.abt_id); Bemerkung: Der FULL OUTER JOIN existiert nicht unter MySQL. SS 2007 Datenbanken Seite 254 SELF JOIN Beim SELF JOIN wird eine Tabelle mit sich selbst verknüpft. mitarbeiter Attributwerte vom Fremdschlüssel CHEF_ID entsprechen denen vom IdSchlüssel M_ID Um CHEF_ID aufzulösen, muss die Tabelle mitarbeiter mit sich selbst verknüpft werden. SS 2007 Datenbanken Seite 255 Beispiel für einen SELF JOIN SELECT m.m_id, m.name, m.vorname, concat(v.vorname,' ' , v.name) AS vorgesetzter FROM mitarbeiter m , mitarbeiter v WHERE m.chef_id = v.m_id; SS 2007 Datenbanken Seite 256 Was ergibt die folgende SELECT-Anweisung? SELECT m.m_id, m.name, m.vorname, concat(v.vorname,' ' , v.name) AS vorgesetzter FROM mitarbeiter m , mitarbeiter v WHERE m.m_id = v.chef_id; SS 2007 Datenbanken Seite 257 CROSS JOIN Der CROSS JOIN entspricht dem Kartesischen Produkt aus zwei Tabellen. Beispiel SELECT m.name, a.abt_name FROM mitarbeiter m , abteilung a; entspricht SELECT m.name, a.abt_name FROM mitarbeiter m CROSS JOIN abteilung a; Alternativ zu CROSS JOIN kann auch nur JOIN gesetzt werden. SS 2007 Datenbanken Seite 258 Der NATURAL JOIN Der NATURAL JOIN entspricht dem INNER JOIN mit einer USING Klausel. Es werden alle Datensätze mit einer Verbindung angezeigt, deren Spalten den selben Namen haben. Beispiel mitarbeiter abteilung standort SS 2007 Datenbanken Seite 259 Beispiel für den NATURAL JOIN SELECT m.m_id, m.name, m.vorname,a.abt_name,s.stadt FROM mitarbeiter m NATURAL JOIN abteilung a NATURAL JOIN standort s; SS 2007 Datenbanken Seite 260 Beispiel für den NATURAL JOIN Hat aber der Id-Schlüssel der Tabelle standort nicht den Namen abt_sitz sondern ab_sitz, so ergibt die folgende SELECT Anweisung 56 Datensätze SELECT m.m_id, m.name, m.vorname,a.abt_name,s.stadt FROM mitarbeiter m NATURAL JOIN abteilung a NATURAL JOIN standort s; … SS 2007 Datenbanken Seite 261 Non- Equi- Joins Equi-Joins selektieren nur die Datensätze, die durch = miteinander verbunden werden (z.B. WHERE m.abt_id = a.abt_id). Benutzt man einen anderen Operator als den = Operator, so spricht man von einem Non-Equi-Join. SS 2007 Datenbanken Seite 262 Beispiel für eine Non-Equi-Join Die Tabelle mitarbeiter habe noch eine Spalte gehalt. Die Tabelle gehaltstufe gibt die Gehaltsstufen innerhalb der Firma an. SS 2007 Datenbanken Seite 263 Non- Equi- Join SELECT m.m_id, m.name, m.vorname, m.gehalt, g.gehalt_stufe FROM mitarbeiter m, gehaltstufe g WHERE m.gehalt BETWEEN g.gehalt_von AND g.gehalt_bis; SS 2007 Datenbanken Seite 264 Daten mit Gruppenfunktionen aggregieren SS 2007 Datenbanken Seite 265 Gruppenfunktionen Im Gegensatz zu Single-Row Funktionen werden Gruppenfunktionen auf Gruppen von Zeilen angewendet und geben ein Ergebnis pro Gruppe zurück. Gruppenfunktionen sind z.B. COUNT( ) Anzahl der Zeilen. SUM(n) Summe der Werte von n. MIN() Minimum MAX() Maximum AVG() Durchschnitt SS 2007 Datenbanken Seite 266 Die Syntax von Gruppenfunktionen SELECT [attribut,] gruppen_funktion(attribut),… FROM tabellenname [WHERE bedingung] [GROUP BY attribut] [ORDER BY attribut] Für die Gruppenfunktionen gilt: • Alle Funktionen können zusätzlich zum Attribut als Argument ein DISTINCT haben. DISTINCT bewirkt, dass die Funktion keine doppelten Werte berücksichtigt. • Alle Gruppenfunktionen ignorieren NULL-Werte. SS 2007 Datenbanken Seite 267 Funktionen AVG(), SUM(), MIN() und MAX() SELECT AVG(gehalt), SUM(gehalt)/10, MAX(gehalt), MIN(gehalt), SUM(gehalt) FROM Ergebnis der Abfrage mitarbeiter ; mitarbeiter NULL-Werte werden ignoriert SS 2007 Datenbanken Seite 268 Funktionen COUNT() zählt die Datensätze SELECT COUNT(*) FROM mitarbeiter ; ergibt 10 SELECT COUNT(abt_id) FROM mitarbeiter; ergibt 7 SELECT COUNT(DISTINCT abt_id) FROM mitarbeiter; ergibt 4 SS 2007 Datenbanken Seite 269 Gruppierungen durchführen mit GROUP BY SELECT abt_id, AVG(gehalt) FROM mitarbeiter GROUP BY abt_id ergibt mitarbeiter gruppieren nach abt_id SS 2007 Datenbanken Seite 270 Für Gruppierungen gilt: • Ist eine Gruppenfunktion in einer SELECT-Klausel angegeben, können nicht gleichzeitig einzelne Attribute selektiert werden, es sei denn, sie werden in der GROUP BY-Klausel angegeben. • Mit der WHERE-Klausel können vorher Zeilen ausgeschlossen werden, bevor die übrigen Zeilen gruppiert werden • Es dürfen keine Spalten-Aliasnamen in der GROUP BY-Klausel verwendet werden. • Die in der GROUP BY-Klausel angegebene Spalte muss nicht in der SELECT Liste enthalten sein. SS 2007 Datenbanken Seite 271 Nach mehreren Spalten gruppieren mitarbeiter Die Gehälter aus der Tabelle mitarbeiter sollen für jede job_id addiert und gruppiert nach abt_id werden SELECT abt_id, job_id, SUM(gehalt) FROM mitarbeiter GROUP BY abt_id, job_id; SS 2007 Datenbanken Seite 272 Gruppenergebnisse filtern mit HAVING • Die WHERE-Klausel darf nicht verwendet werden um Gruppen einzuschränken, d.h. es darf keine Gruppenfunktionen in der WHERE Klausel benutzt werden. • Um Gruppen einzuschränken, benutzt man die HAVING-Klausel. • HAVING arbeitet wie folgt: • Die Zeilen werden gruppiert • Die Gruppenfunktion wird angewandt • Gruppen, die der HAVING-Klausel entsprechen, werden angezeigt. SS 2007 Datenbanken Seite 273 Gruppenergebnisse filtern mitarbeiter Das maximale Gehalt jeder Abteilung soll ermittelt werden, wenn es größer als 3000 ist SELECT abt_id, MAX(gehalt) FROM mitarbeiter GROUP BY abt_id HAVING MAX(gehalt) > 3000; SS 2007 Datenbanken Seite 274 Die Syntax von Gruppenfunktionen lautet zusammenfassend SELECT • [attribut,] gruppen_funktion(attribut),… FROM tabellenname [WHERE bedingung] [GROUP BY attribut] [HAVING gruppen_bedingung] [ORDER BY attribut] Benutzt man eine Gruppenfunktion zusammen mit einem Attribut in eine SELECT-Klausel, muss das Attribut in der GROUP BY Klausel angegeben werden. • Bedingungen für Gruppenfunktionen müssen in der HAVING-Klausel angegeben werden. SS 2007 Datenbanken Seite 275 Unterabfragen Hauptabfrage Unterabfrage gibt Wert an Hauptabfrage zurück Unterabfrage SS 2007 Datenbanken Seite 276 Die Syntax von Unterabfragen SELECT selections_liste FROM tabellenname1 WHERE ausdruck operator ( SELECT selections_liste FROM tabellenname2); • Die Unterabfrage wird einmal vor der Hauptabfrage ausgeführt • Die Hauptabfrage verwendet das Ergebnis der Unterabfrage • Unterabfragen können z.B. in WHERE Klauseln, HAVING-Klauseln und FROM-Klauseln eingefügt werden. • Der operator ist ein Vergleichsoperator. • Die Tabellen aus der Haupt-und Unterabfrage können gleich oder verschieden sein. SS 2007 Datenbanken Seite 277 Ein Beispiel für eine Unterabfrage mitarbeiter SELECT m_id, name, vorname FROM mitarbeiter WHERE gehalt > (SELECT gehalt FROM mitarbeiter WHERE name = 'Breitinger'); Ergebnis der Unterabfrage Ergebnis der Hauptabfrage SS 2007 Datenbanken Seite 278 Für Unterabfragen gilt: • Sie müssen in Klammern gesetzt werden • Sie stehen auf der rechten Seite des Vergleichoperators • Single Row-Operatoren müssen bei Single Row- Unterabfragen verwendet werden • Multiple Row-Operatoren müssen bei Multiple Row- Unterabfragen verwendet werden. SS 2007 Datenbanken Seite 279 Single Row-Unterabfragen • geben nur eine Zeile zurück • verwenden Single Row Vergleichsoperatoren, d.h. = > >= < <= <> SS 2007 Datenbanken Seite 280 Ein weiteres Beispiel für eine Unterabfrage SELECT name, vorname, gehalt FROM mitarbeiter WHERE job_id = (SELECT job_id FROM mitarbeiter WHERE m_id = 60) AND gehalt > (SELECT gehalt FROM mitarbeiter WHERE m_id = 54); Ergebnis der Hauptabfrage SS 2007 Datenbanken Seite 281 Gruppenfunktionen in Unterabfragen SELECT name, vorname FROM mitarbeiter WHERE gehalt = (SELECT MAX(gehalt) FROM mitarbeiter); Ergebnis der Hauptabfrage SS 2007 Datenbanken Seite 282 Gruppenfunktionen in Unterabfragen Welche Mitarbeiter liegen mit ihrem Gehalt über dem Durchschnitt aller Gehälter? SELECT name, vorname FROM mitarbeiter WHERE gehalt > (SELECT AVG(gehalt) FROM mitarbeiter); SS 2007 Datenbanken Seite 283 Unterabfragen in HAVING-Klauseln SELECT MIN(m.gehalt) "min gehalt", m.abt_id, a.abt_name FROM mitarbeiter m, abteilung a WHERE m.abt_id = a.abt_id GROUP BY m.abt_id, a.abt_name HAVING MIN(m.gehalt) >= (SELECT MIN(m.gehalt) FROM mitarbeiter WHERE m.abt_id = 11); Ergebnis der Hauptabfrage SS 2007 Datenbanken Seite 284 Welche Mitarbeiter sind in der höchsten Gehaltstufe? SELECT m.name, m.vorname, g.gehalt_stufe FROM mitarbeiter m, gehaltstufe g WHERE m.gehalt BETWEEN AND AND (SELECT MAX(g.gehalt_von) FROM gehaltstufe g) (SELECT MAX(g.gehalt_bis) FROM gehaltstufe g) m.gehalt BETWEEN g.gehalt_von AND g.gehalt_bis; SS 2007 Datenbanken Seite 285 Multiple Row-Unterabfragen • geben mehrere Zeile zurück • verwenden Multiple Row Vergleichsoperatoren Operator Bedeutung IN Gleich einem Element aus der Liste ANY Vergleicht einen Wert mit jedem Wert der Ergebnisliste. ALL Wert wird mit allen von der Unterabfrage zurückgegebenen Werten verglichen EXISTS Fragt Existenz von Werten ab SS 2007 Datenbanken Seite 286 Operator ANY in Multiple Row Unterabfragen SELECT m_id, name, vorname, job_id, gehalt FROM mitarbeiter mitarbeiter WHERE gehalt < ANY ( SELECT gehalt FROM mitarbeiter WHERE job_id = 10) AND job_id <> 10; SS 2007 Datenbanken Seite 287 Operator ALL in Multiple Row Unterabfragen SELECT m_id, name, vorname, job_id, gehalt FROM mitarbeiter mitarbeiter WHERE gehalt < ALL ( SELECT gehalt FROM mitarbeiter WHERE job_id = 10) AND job_id <> 10; SS 2007 Datenbanken Seite 288 Operator IN und NOT IN in Multiple Row Unterabfragen Welche Mitarbeiter sind keine Chefs? SELECT m.name, m.vorname FROM mitarbeiter m WHERE m.m_id NOT IN mitarbeiter (SELECT v.chef_id FROM mitarbeiter v) Ergebnis SS 2007 Datenbanken Seite 289 ACHTUNG bei NULL-WERTEN in einer Unterabfrage Welche Mitarbeiter sind keine Chefs? SELECT m.name, m.vorname FROM mitarbeiter m WHERE m.m_id NOT IN mitarbeiter (SELECT v.chef_id FROM mitarbeiter v) Es wird kein Ergebnis geliefert. SS 2007 Datenbanken Seite 290 Beim Operator IN gibt es mit NULL-Werten keine Probleme: Welche Mitarbeiter sind Chefs? SELECT m.name, m.vorname FROM mitarbeiter m WHERE m.m_id IN mitarbeiter (SELECT v.chef_id FROM mitarbeiter v) Ergebnis SS 2007 Datenbanken Seite 291 EXISTS and NOT EXISTS SELECT m.name, m.vorname FROM mitarbeiter m WHERE EXISTS (SELECT 'c' FROM mitarbeiter v WHERE v.chef_id = m.m_id) SS 2007 Datenbanken Seite 292 Unterabfragen können auch in der FROM-Klausel verwendet werden Welche Mitarbeiter liegen mit ihrem Gehalt über dem Durchschnitt in ihrer Abteilung? SELECT a.abt_id,a.name, a.vorname, a.gehalt, b.durchschnittgehalt FROM mitarbeiter a, (SELECT abt_id, AVG(gehalt) durchschnittgehalt FROM mitarbeiter GROUP BY abt_id) b WHERE a.abt_id = b.abt_id AND a.gehalt > b.durchschnittgehalt SS 2007 Datenbanken Seite 293 Mengenoperatoren Mengenoperatoren kombinieren die Ergebnisse von zwei oder mehreren Abfragen Es wird unterschieden zwischen UNION Gibt alle eindeutigen Zeilen von einer der beiden Abfragen zurück INTERSECT Gibt alle eindeutigen Zeilen zurück, die von beiden Abfragen geliefert werden MINUS Gibt alle eindeutigen Zeilen zurück, die von der ersten SELECT-Anweisung, nicht jedoch von der zweiten SELECT-Anweisung geliefert werden. SS 2007 Datenbanken Seite 294 • Die Anzahl und Datentypen der Spalten müssen in allen von der Abfrage verwendeten SELECT-Anweisungen identisch sein. • Die Spaltennamen müssen nicht identisch sein. • Für die Syntax gilt SELECT attribut,… FROM tabellenname1 WHERE bedingung UNION SELECT attribut,… FROM tabellenname2 WHERE bedingung SS 2007 Datenbanken Seite 295 Beispiel für UNION mitarbeiter job_historie Ausgabe des aktuellen Jobs und aller vorherigen Jobs eines Mitarbeiters SELECT FROM m_id, job_id mitarbeiter UNION SELECT FROM m_id, job_id job_historie; SS 2007 Datenbanken Seite 296 Strategien zur Formulierung von SELECT-Anweisungen • Wie soll die Ergebnisliste aussehen • Welche Tabellen werden benötigt? • Aliasnamen für Tabellen verwenden, sobald mehr als eine Tabelle verwendet werden • Welche Attribute sollen angezeigt werden? • Welche virtuellen Spalten kommen vor? • Welche (Gruppen-) Funktionen kommen vor? Falls man das Ergebnis einer Gruppenfunktion anzeigen will, darf die Ergebnistabelle entweder nur einen Wert haben oder es muss eine GROUP BY Anweisung folgen, in der die übrigen Ergebnisspalten aufgenommen werden. SS 2007 Datenbanken Seite 297 • Werden mehrere Tabellen verwendet? Damit kein kartesisches Produkt entsteht, muss eine JOIN- Bedingung angegeben werden. • Welche Selektionsbedingungen liegen vor? • Bezieht sich die Bedingung auf eine einzelne Zeile, so muss die WHERE-Klausel verwendet werden. • Bezieht sich die Bedingung auf eine Gruppe von Zeilen, so muss mit GROUP BY die HAVING Klausel verwendet werden. • Unterabfragen Liegen Vergleichswerte in einer anderen Tabelle? • Besteht der Vergleichswert aus mehr als einer Zeile, wird eine Unterabfrage mit ANY, ALL, IN oder EXISTS formuliert • Eine Ordnung wird durch ORDER BY erreicht. SS 2007 Datenbanken Seite 298 Views • Eine View ist eine virtuelle Tabelle, d.h. sie ist nicht physisch vorhanden. • Eine View enthält keine Daten. • Eine View basiert auf einer Tabelle oder einer anderen View. • Man bezeichnet die Tabellen, auf denen eine View basiert als Basistabellen. • Eine View wird im Data Dictionary als SELECT-Anweisung gespeichert. SS 2007 Datenbanken Seite 299 Vorteile von Views Der Einsatz von Views dient zur • Beschränkung von Datenzugriffen • Erleichterung von komplexen Abfragen • Erzielung von Datenunabhängigkeit • Darstellung von verschiedenen Ansichten derselben Daten Analog zu Tabellen können nicht zwei Views mit dem identischen Namen innerhalb einer Datenbank angelegt werden. SS 2007 Datenbanken Seite 300 Das Erstellen von Views Die Syntax für das Erstellen einer View lautet CREATE VIEW viewname [(alias,…)] AS SELECT- Anweisung [WITH CHECK OPTION] SS 2007 Datenbanken Seite 301 Bemerkung zur Syntax • Die SELECT-Anweisung darf kein ORDER BY enthalten • Werden keine Attribute angegeben, so werden die in der SELECTAnweisung angegebenen Spalten für die View-Definition verwendet. • CHECK OPTION bedeutet, dass beim Ändern in der VIEW automatisch darauf geachtet wird, dass die View-Definition in der SELECT-Anweisung durch die Änderung nicht verletzt wird. SS 2007 Datenbanken Seite 302 Beispiel für das Anlegen einer View Es soll eine View erstellt werden, die nur die Informationen der Mitarbeiter aus den Abteilungen 5 und 11 enthält. CREATE VIEW v_mitarbeiter_abt5_11 AS SELECT m_id, name, vorname , abt_id FROM mitarbeiter WHERE abt_id IN (5,11) SELECT * FROM v_mitarbeiter_abt5_11 ergibt SS 2007 Datenbanken Seite 303 Auch durch Änderungen in der View können die Inhalte der Tabelle verändert werden UPDATE v_mitarbeiter_abt5_11 SET name = 'Schuttemann‚ WHERE m_id = 50; SELECT * FROM mitarbeiter WHERE m_id = 50 ergibt SS 2007 Datenbanken Seite 304 Klausel WITH CHECK OPTION verwenden Zunächst wird eine View ohne die CHECK OPTION angelegt CREATE VIEW v_mitarbeiter_abtsitz_muc AS SELECT m.m_id, m.name, m.vorname , m.gehalt, m.abt_id FROM mitarbeiter m INNER JOIN abteilung a ON m.abt_id = a.abt_id INNER JOIN standort s ON a.abt_sitz = s.abt_sitz WHERE s.stadt = 'München' SELECT * FROM v_mitarbeiter_abtsitz_muc ergibt SS 2007 Datenbanken Seite 305 Ändert man nun einen Datensatz mit Hilfe der View UPDATE v_mitarbeiter_abtsitz_muc SET abt_id = 10 WHERE m_id = 50; der Mitarbeiter m_id = 50 wird nicht mehr angezeigt so ergibt SELECT * FROM v_mitarbeiter_abtsitz_muc ergibt SS 2007 Datenbanken Seite 306 Klausel WITH CHECK OPTION verwenden Nun legt man eine identische View mit Hilfe der WITH CHECK OPTION an CREATE VIEW v_mitarbeiter_abtsitz_muc AS SELECT m.m_id, m.name, m.vorname , m.gehalt, m.abt_id FROM mitarbeiter m INNER JOIN abteilung a ON m.abt_id = a.abt_id INNER JOIN standort s ON a.abt_sitz = s.abt_sitz WHERE s.stadt = 'München' WITH CHECK OPTION SELECT * FROM v_mitarbeiter_abtsitz_muc ergibt auch hier SS 2007 Datenbanken Seite 307 Ändert man nun einen Datensatz mit Hilfe der View UPDATE v_mitarbeiter_abtsitz_muc SET abt_id = 10 WHERE m_id = 50; so ergibt sich die Fehlermeldung SS 2007 Datenbanken Seite 308 • Mit der Klausel WITH CHECK OPTION wird sichergestellt, dass auf eine View angewandte DML-Operationen nur innerhalb der Zeilen ausgeführt werden können, die die View selektieren kann. • Falls versucht wird, DML-Operation für Zeilen auszuführen, die von der View nicht ausgewählt wurden, wird eine Fehlermeldung erzeugt. SS 2007 Datenbanken Seite 309 Mit der Klausel WITH CHECK OPTION können diskrete Werte für Views als zugelassene Werte definiert werden CREATE VIEW aufmwst AS SELECT * FROM auftrag WHERE mwst IN (0,0.07,0.16) WITH CHECK OPTION SS 2007 Datenbanken Seite 310 Auch virtuelle Spalten sind zugelassen CREATE VIEW v_leistnet (anr, lnr, ltext, ldatum, netto) AS SELECT anr, lnr, ltext, ldatum, lanz*lsatz FROM leistung • Benutzt man Spaltenaliasnamen in der CREATE VIEW Anweisung, so müssen diese in der selben Reihenfolge angegeben werden, wie die Spalten in der Unterabfrage • Ein INSERT, UPDATE oder DELETE auf dieser View, die einen Wert des Attributes netto verändert, wird mit einer Fehlermeldung zurückgewiesen, da netto ein berechnetes Feld ist. SS 2007 Datenbanken Seite 311 Views mit Gruppierungen CREATE VIEW v_abt_gehalt (abteilungsname, min_gehalt, max_gehalt, avg_gehalt) AS SELECT a.abt_name,MIN(m.gehalt), MAX(m.gehalt), AVG(m.gehalt) FROM mitarbeiter m INNER JOIN abteilung a ON m.abt_id = a.abt_id GROUP BY abt_name werden Gruppenfunktionen benutzt, so müssen AliasSpaltennamen verwendet werden SELECT * FROM v_abt_gehalt SS 2007 Datenbanken Seite 312 Auch DISTINCT kann verwendet werden CREATE VIEW v_leiter AS SELECT DISTINCT v.name, v.vorname ,v.gehalt FROM mitarbeiter m, mitarbeiter v WHERE m.chef_id = v.m_id SELECT * FROM v_leiter SS 2007 Datenbanken Seite 313 DML-Operationen für eine View Es können keine DML-Operationen auf Views durchgeführt werden, wenn die View • Gruppenfunktionen • GROUP BY Klauseln • DISTINCT enthält. Dann kann die View auch nicht mit der WITH CHECK OPTION angelegt werden. Auch darf kein UPDATE oder INSERT auf einem abgeleiteten Feldern durchgeführt werden. SS 2007 Datenbanken Seite 314 Es können keine Daten über eine View eingefügt werden, wenn es NOT NULL Spalten in den Basistabellen gibt, die nicht für die View ausgewählt wurden. Beispiel: Die View v_mitarbeiter_abt5 sei definiert durch CREATE VIEW v_mitarbeiter_abt5 AS SELECT m_id, name, gehalt FROM mitarbeiter WHERE abt_id = 5; Das Einfügen eines Tupels über die View erfolgt durch INSERT INTO v_mitarbeiter_abt5 VALUES (80,'Birker', 6023) SS 2007 Datenbanken Seite 315 Falls das Attribut vorname in mitarbeiter ein NOT NULL Attribut ist, ergibt sich beim INSERT die Fehlermeldung SS 2007 Datenbanken Seite 316 View entfernen • Views werden mit DROP VIEW viewname gelöscht • Eine View wird ungültig, wenn die Basistabelle nicht mehr vorhanden ist. • Sobald die Basistabelle wieder vorhanden ist, wird auch die View erneut gültig. SS 2007 Datenbanken Seite 317 Indizes • Ein Index ist ein Datenbankobjekt • Ein Index kann die Geschwindigkeit von Abfragen erheblich beschleunigen. • Indizes können auch verwendet werden um für eine Spalte oder eine Gruppe von Spalten Eindeutigkeit zu erzwingen. SS 2007 Datenbanken Seite 318 Wie werden die Datensätze bei einer SELECT Anweisung bearbeitet? Beispiel SELECT name, vorname FROM mitarbeiter WHERE name = 'Birker ' Ohne die Verwendung eines Indizes werden alle Datensätze der Tabelle sequentiell durchsucht und es wird überprüft ob der name im Datensatz = 'Birker' ist. Man spricht von einem Full Table Scan. Bei sehr großen Datenmengen in den Tabellen führt dies zu langen Antwortzeiten. SS 2007 Datenbanken Seite 319 Um das Suchen der gewünschten Datensätze zu beschleunigen, setzt man Indizes ein. Ein Index ermöglicht den unmittelbaren und schnellen Zugriff auf Zeilen einer Tabelle. Indizes sind unabhängig von der indizierten Tabelle, d.h. sie können jederzeit ohne Auswirkungen auf die zu Grunde liegende Tabelle erstellt oder gelöscht werden. Wird eine Tabelle gelöscht, so werden alle zugehörigen Indizes ebenfalls gelöscht. SS 2007 Datenbanken Seite 320 Wie arbeitet ein Index Es gibt unterschiedliche Index-Strategien. • In einem relationalen DBMS wird meistens ein B* -Baum Index verwendet. • B* - Bäume sind ausbalancierte Baumstrukturen, deren Blattknoten alle den gleichen Abstand zum Wurzelknoten haben. • Vorteil von B* - Bäume sind die extrem kurzen Suchpfade von der Wurzel zum Blatt. Ein weiterer wichtiger Index ist der Bitmap Index, der z.B. im DataWarehouse Umfeld eingesetzt wird. SS 2007 Datenbanken Seite 321 Welche Spalten müssen/sollten indiziert werden? Indizes werden automatisch erstellt bei Verwendung eines • PRIMARY KEY- Constraints • UNIQUE- Constraints Eine manuelle Indizierung sollte erfolgen bei • Fremdschlüsselspalten (der Index wird nicht automatisch durch Constraint erzeugt) • Häufig verwendete Spalten SS 2007 Datenbanken Seite 322 Indizes erstellen Ein Index wird durch die folgende Syntax erstellt: CREATE INDEX indexname ON tabellenname(Attribut1[,Attribut2]…); Beispiel: Ein Index wird für das Attribut name in der Tabelle mitarbeiter angelegt CREATE INDEX mitarbeiter_name_idx ON mitarbeiter (name); SS 2007 Datenbanken Seite 323 Zusammengesetzte Indizes Auch mehrere Spalten können zusammen einen Index bilden. Man spricht dann von einem zusammengesetzten Index. Beispiel: Ein Index wird für die Attribute name und gehalt der Tabelle mitarbeiter angelegt CREATE INDEX mitarbeiter_name_gehalt_idx ON mitarbeiter (name, gehalt); SS 2007 Datenbanken Seite 324 Bemerkung zur Indizierung Der Einsatz von Indizes sollte gut überlegt sein. • Mehrere Indizes auf einer Tabelle führen nicht unbedingt zu schnelleren Abfragen. • Bei jeder DML-Operation, die für eine Tabelle mit Indizes ausgeführt wird, müssen die Indizes aktualisiert werden. • Je mehr Indizes auf dieser Tabelle sind, umso höher ist der Aktualisierungsaufwand. SS 2007 Datenbanken Seite 325 Wann sollte ein Index erstellt werden? In den folgenden Fällen sollte ein Index erstellt werden • Eine Spalte enthält eine große Anzahl von Werten • Eine Spalte enthält viele NULL-Werte • Eine oder mehrere Spalten werden häufig gemeinsam in einer WHEREKlausel oder Join-Bedingung verwendet • Die Tabelle ist sehr groß und die meisten Abfragen rufen wahrscheinlich nicht mehr als 5 % der Zeilen ab. SS 2007 Datenbanken Seite 326 Wann sollte kein Index erstellt werden? In den folgenden Fällen sollte kein Index erstellt werden • Die Tabelle ist klein • Die Spalten werden selten als Bedingung in einer Abfrage verwendet • Die meisten Abfragen rufen wahrscheinlich mehr als 5 % der Zeilen ab. • Die Tabelle wird häufig aktualisiert SS 2007 Datenbanken Seite 327 Transaktionen SS 2007 Datenbanken Seite 328 Beispiel für Transaktionen Überweisung von einem Konto auf ein anderes Konto. Konto 100 EUR werden überwiesen SS 2007 Datenbanken Seite 329 Um diese Überweisung durchzuführen sind zwei Schritte notwendig: 1. Reduzierung des Kontostandes mit der Kontonummer 4532168 um 100 UPDATE konto SET kontostand = kontostand -100 WHERE konto_nr = 4532168 2. Erhöhung des Kontostandes mit der Kontonummer 1556432 um 100 UPDATE konto SET kontostand = kontostand +100 WHERE konto_nr = 1556432 SS 2007 Datenbanken Seite 330 Diese UPDATES müssen beide ausgeführt werden. Kann durch einen Fehler nur das erste UPDATE ausgeführt werden, so kommt es zu inkonsistenten Daten in der Datenbank. Fehler können z.B. auftreten durch • Programmierfehler in der Anwendung • Systemabstürze • Fehleingaben des Benutzers Damit solche Inkonsistenzen nicht entstehen können gibt es bei DBMS das Transaktionskonzept. SS 2007 Datenbanken Seite 331 • Transaktionen sind Arbeitseinheiten, die als Gruppe in einer logischen Reihenfolge, komplett oder gar nicht ausgeführt werden. • Eine Transaktion hat einen definierten Anfang und ein definiertes Ende. • Erst wenn alle Arbeitseinheiten abgearbeitet sind, wird das Ergebnis in der Datenbank gespeichert. • Eine Transaktion überführt einen konsistenten Datenbestand in einen neuen konsistenten Datenbestand. SS 2007 Datenbanken Seite 332 Das Erstellen von Transaktionen Die beiden entscheidenden Schlüsselwörter für eine Transaktion sind COMMIT zum Abschließen einer laufenden Transaktion ROLLBACK zum Zurücksetzen einer laufenden Transaktion. Die DBMS, die Tranksaktionen unterstützen, gehen bzgl. der Syntax mit Transaktionen unterschiedlich um. Alle diese DBMS müssen dem System explizit mitteilen können, dass eine Transaktion beginnt. SS 2007 Datenbanken Seite 333 Das Erstellen von Transaktionen Transaktionen werden erstellt durch Anweisung zum Beginn der Transaktion Anweisung1 Anweisung2… COMMIT oder ROLLBACK der Transaktion Im SQL-Server wird der Beginn einer Transaktion durch BEGIN TRANSACTION eingeleitet, Oracle benutzt für den Beginn die Anweisung SET TRANSACTION SS 2007 Datenbanken Seite 334 Beispiel: SQL-Server Transaktion für die Banküberweisung BEGIN TRANSACTION UPDATE konto SET kontostand = kontostand -100 WHERE konto_nr = 4532168 UPDATE konto SET kontostand = kontostand +100 WHERE konto_nr = 1556432 COMMIT TRANSACTION durch das COMMIT wird die Transaktion abgeschlossen und die Werte in die Datenbank geschrieben. SS 2007 Datenbanken Seite 335 Beispiel: Zurücksetzen einer laufenden Transaktion Transaktionen können stets – bevor sie mit COMMIT bestätigt wurden mit ROLLBACK zurückgesetzt werden. BEGIN TRANSACTION UPDATE konto SET kontostand = kontostand +100 WHERE konto_nr = 4532168 UPDATE konto SET kontostand = kontostand -100 WHERE konto_nr = 1556432 ROLLBACK TRANSACTION durch das ROLLBACK wird die laufende Transaktion zurückgesetzt. SS 2007 Datenbanken Seite 336 Sicherungspunkte Durch ein ROLLBACK werden die gesamten Aktionen innerhalb der Transaktion rückgängig gemacht. Einige DBMS (wie Oracle und SQL Server) können für ihre Transaktionen sog. Sicherungspunkte setzen. Eine Transaktion kann dann nur bis zu dem bestimmten Sicherungspunkt rückgängig gemacht werden. SS 2007 Datenbanken Seite 337 Beispiel Sicherungspunkte für den SQL Server BEGIN TRANSACTION Anweisung1: Buche Betrag von Konto K1 ab SAVE TRANSACTION t1 Anweisung2: Füge diesen Betrag zu Konto K2 hinzu Ein ROLLBACK TRANSACTION t1 macht Anweisung2 rückgängig, nicht aber Anweisung1. Ein ROLLBACK TRANSACTION macht sowohl Anweisung1 als auch Anweisung2 rückgängig. SS 2007 Datenbanken Seite 338 Beispiel Sicherungspunkte für Oracle In Oracle lautet die Syntax SET TRANSACTION; Anweisung1: Buche Betrag von Konto K1 ab; SAVEPOINT t1; Anweisung2: Füge diesen Betrag zu Konto K2 hinzu; Ein ROLLBACK TO SAVEPOINT t1 macht Anweisung2 rückgängig, nicht aber Anweisung1. Ein ROLLBACK macht sowohl Anweisung1 als auch Anweisung2 rückgängig. SS 2007 Datenbanken Seite 339 Transaktionen und Sperren Um die Konsistenz der Daten zu gewährleisten, gibt es das Transaktionskonzept. Eine Transaktion ist dabei eine Folge von Datenbankzugriffen mit folgenden Eigenschaften: • Atomarität Eine Tranksaktion ist unteilbar. Das DBMS stellt (mittels LoggingTechnik) sicher, dass eine Transaktion selbst im Fall eines Systemabsturzes entweder komplett oder gar nicht durchgeführt wird. SS 2007 Datenbanken Seite 340 • Konsistenzerhaltung Stellt sicher, dass eine Transaktion die Datenbank in einem gültigen Zustand hinterlässt. Die Kriterien, welcher Zustand als gültig zu betrachten sind, sind Anwendungsspezifisch. • Isoliertheit Die Transaktion ist von Effekten anderer Transaktionen isoliert, d.h. gleichzeitig ausgeführte Transaktionen haben keinen Einfluss aufeinander. Sie kann ohne Nebeneffekte zurückgesetzt werden. SS 2007 Datenbanken Seite 341 • Dauerhaftigkeit Nach Beendigung einer Transaktion wird die Dauerhaftigkeit aller Änderungen garantiert (Persistenz). Das Tranksaktionskonzept realisiert damit das ACID –Prinzip durch die Eigenschaften Atomicity, Consistency, Isolation, Durability. SS 2007 Datenbanken Seite 342 Sperren Beim Arbeiten mit einer Datenbank kann es passieren, dass zwei Benutzer denselben Datenbestand gleichzeitig bearbeiten wollen. Dies kann zu inkonsistenten Daten führen. Zur Vermeidung dieser Inkonsistenzen müssen die Teile der Datenbank, die von solchen Änderungen betroffen sind, vorübergehend gegen den Zugriff anderer Benutzer gesperrt werden. Die DBMS haben die Möglichkeit, Sperren auf Tabellen oder Zeilen zu setzten und wieder freizugeben. SS 2007 Datenbanken Seite 343 Das Sperren bei Transaktionen • Hat ein User eine Transaktion gestartet, aber noch nicht mit COMMIT bestätigt, so kann er sich den veränderten Datenbestand schon anzeigen lassen. • Die Daten sind aber für jeden anderen Nutzer gesperrt. Erst nach der Bestätigung durch ein COMMIT, kann auf dem neuen Datenbestand durch andere Nutzer zugegriffen werden. • Durch dieses Sperren wird Dateninkonsistenz vermieden. SS 2007 Datenbanken Seite 344 Logging und Recovery Die geforderte Atomarität einer Transaktion wird in DBMS durch Logging realisiert, d.h. Informationen werden in einem LOG-Protokoll aufgezeichnet. Für eine Transaktion gibt es zwei Arten von Logs: • UNDO Log • REDO Log SS 2007 Datenbanken Seite 345 • UNDO Log Beim UNDO Log wird der Zustand der Daten vor ihrer Änderung meist zeilenweise aufgezeichnet. Dieses Log wird im Falle eines ROLLBACK herangezogen • REDO Log Das REDO-Log enthält den Zustand der Daten nach der Datenänderung. Durch dieses Log kann eine bereits abgeschlossene Transaktion, deren Änderungen noch nicht in der Datenbank realisiert waren, nachgefahren werden. Das REDO-Log wird beim Hochfahren des Datenbankystems nach einem Ausfall herangezogen. SS 2007 Datenbanken Seite 346 Recovery Beim Hochfahren des DBS wird automatisch ermittelt, ob das letzte Abschalten des DBS ordnungsgemäß oder aufgrund eines Fehlers erfolgt ist. Lag ein Fehler vor, wird beim Hochfahren ein Recovery durchgeführt. Bei einem Recovery werden die zum Zeitpunkt der Unterbrechung abgeschlossenen Transaktionen erneut zum Abschluß gebracht (REDO) und die offenen Trankaktionen werden zurückgesetzt. SS 2007 Datenbanken Seite 347 Sicherheitskonzept – Zugriffsrechte Für ein DBMS ist ein gutes Benutzer und Berechtigungskonzept von entscheidender Bedeutung. In einem DBMS gibt es drei Konzepte • Benutzerkonzept • Rollenkonzept • Privilegienkonzept. SS 2007 Datenbanken Seite 348 Es müssen Nutzer für die Datenbanken angelegt werden, Berechtigungen zur Ausführung bestimmter SQL-Anweisungen (d.h. Privilegien) vergeben werden, sowie Rollen, d.h. Gruppen von Privilegien angelegt werden, die Benutzern zugeordnet werden können. Der Datenbankadministrator (DBA) ist ein Benutzer auf höchster Ebene, der alle Systemprivilegien und Objektprivilegien hat. Die gesamte Verwaltung von Benutzern, Privilegien und Rollen kann beim SQL-Server über den SQL Server Enterprise Manager bzw. dem SQL Server Management Studio oder über die Kommandozeile erfolgen. SS 2007 Datenbanken Seite 349 Das Benutzerkonzept Das Benutzerkonzept wird anhand des DBMS Microsoft SQL Server beschrieben. Datenbankuser müssen auf zwei Ebenen bekannt sein: 1. SQL-Server 2. Auf den entsprechenden Datenbanken. SS 2007 Datenbanken Seite 350 Das Benutzerkonzept für den SQL-Server Eine Anmeldung auf dem SQL-Server erfolgt entweder über • SQL Server Authentifizierung oder über • das System, d.h. die Domäne, zu der der SQL-Server gehört. im Ordner Sicherheit findet man die Benutzernamen des Servers SS 2007 Datenbanken Seite 351 Anlegen eines Users über die Kommandozeile User können mittels DDL-Anweisungen oder mittels gespeicherter Prozeduren angelegt werden. Zunächst werden die gespeicherten Prozeduren vorgestellt: 1. SQL Server-Authentifizierung exec sp_addlogin 'name', 'passwort' [, ' standard db '] Beispiel: Anlegen des Users abcd mit Passwort a23&57v1a3 exec sp_addlogin 'abcd', ' a23&57v1a3 '; Wird keine Standard-Datenbank angegeben, wird als default die Datenbank MASTER gesetzt. SS 2007 Datenbanken Seite 352 Löschen eines Users über die Kommandozeile exec sp_droplogin 'name' ; Bemerkung: Ist der zu löschende User noch einer Datenbank zugeordnet, so kann er nicht gelöscht werden. Bemerkung: Beide Prozeduren sollen mit der nächsten SQL-Server Version nicht mehr gültig sein. Stattdessen werden die User mit Hilfe der folgenden DDL-Anweisung angelegt: CREATE LOGIN login_name bzw. mit DROP LOGIN login_name gelöscht. SS 2007 Datenbanken Seite 353 Ändern des Passworts eines Users exec sp_password ' pw_alt', 'pw_neu' Der Administrator kann das Passwort für einen User jederzeit neu setzen: exec sp_password NULL, ' pw_neu', 'name_user' Ändern der Standard-Datenbank für einen User exec sp_defaultdb ' name_user', 'db' SS 2007 Datenbanken Seite 354 Anlegen eines Users über die Kommandozeile Auch hier gibt es die Möglichkeit über DDL-Anweisungen oder über Stored Procedures User anzulegen. Hier die auszuführenden gespeicherten Prozeduren: 2. Anmeldung über die Domäne exec sp_grantlogin 'domäne\name' Entziehung der Berechtigung für einen User auf den SQL-Server zuzugreifen exec sp_revokelogin 'domäne\name' SS 2007 Datenbanken Seite 355 Der Nutzer abcd kann nun auf den SQL-Server zugreifen Als Standard Datenbank wurde test festgelegt SS 2007 Datenbanken Seite 356 Er kann aber noch nicht auf seine Standarddatenbank zugreifen. Für die einzelnen Datenbanken müssen die User angelegt werden. SS 2007 Datenbanken Seite 357 Verwaltung von Datenbankbenutzern Das Hinzufügen eines Nutzers zu einer Datenbank erfolgt entweder mit Hilfe von Transact SQL Anweisungen oder mit Hilfe von gespeicherten Prozeduren. Die folgenden gespeicherten Prozeduren erlauben bzw. entziehen einem User den Zugriff auf eine bestimmte Datenbank. use datenbankname; exec sp_grantdbaccess 'user_name' ; Mit exec sp_revokedbaccess 'user_name' ; wird ein Benutzer aus einer Datenbank entfernt. SS 2007 Datenbanken Seite 358 Mit CREATE USER user_name FOR LOGIN lname kann per Transact SQL ein User für eine Datenbank angemeldet werden. Z.B. USE test CREATE USER abcd FOR LOGIN abcd erlaubt dem User abcd das Arbeiten auf der Datenbank test. Bemerkung: Das Bekanntmachen eines Nutzers in einer Datenbank weist diesem Benutzer keine Rechte auf Datenbankobjekte zu. SS 2007 Datenbanken Seite 359 Der User abcd wurde für die Datenbank test angemeldet Nun kann der User abcd auf die Datenbank test zugreifen SS 2007 Datenbanken Seite 360 Privilegien Es wird unterschieden zwischen System- und Objektprivilegien. Systemprivilegien wirken Systemweit (z.B. Anlegen und Löschen von Usern, Datenbanken erstellen Rechteverwaltung etc.) Objektprivilegien gelten für ein spezielles Datenbankobjekt (z.B. UPDATE, INSERT….) Diese Privilegien werden entweder einzeln oder durch die Verwendung von Rollen verwaltet. SS 2007 Datenbanken Seite 361 Der User abcd hat nach dem Anlegen keinerlei Privilegien auf der Datenbank test. Dem Nutzer abcd müssen Privilegien zugewiesen werden. SS 2007 Datenbanken Seite 362 Rollen • Eine Rolle ist ein Gruppe verwandter Privilegien. • Benutzer werden einer oder mehrere Rollen zugewiesen und erhalten die damit verbundenen Privilegien. • Ein Benutzer kann verschiedenen Rollen angehören, und dieselbe Rolle kann von mehreren Benutzern wahrgenommen werden. • Im SQL Server gibt es fest vorgegebene Rollen, die durch eigene Rollen ergänzt werden können. SS 2007 Datenbanken Seite 363 Einige der vorgegebenen Rollen Es wird unterschieden zwischen Server-Rollen und Datenbank-Rollen. Server-Rollen enthalten Rechte, die zur Administration des gesamten Servers benötigt werden, z.B. Anlegen von Benutzern und Datenbanken oder Herunterfahren des Servers. Alle Mitglieder der Rolle sysadmin haben DBA-Rechte und können damit alle Operationen ausführen. User können einer Server-Rolle durch die Prozedur sp_addsrvrolemember 'rollen_name' ,'user_name' zugewiesen werden. SS 2007 Datenbanken Seite 364 Mitglieder von Datenbank-Rollen enthalten Rechte auf Datenbankebene. • Mitglieder der Rolle db_owner sind Besitzer einer Datenbank und haben damit innerhalb dieser Datenbank alle Rechte. • Mitglieder der Datenbankrolle db_datareader haben die Berechtigung SELECT für jede Tabelle oder View ihrer Datenbank. Sie können niemandem Berechtigungen erteilen oder entziehen. • Alle Datenbank Benutzer sind automatisch immer der Rolle public zugewiesen. Rechte die der Rolle public zugewiesen werden gelten damit für alle Nutzer. SS 2007 Datenbanken Seite 365 Rollen erstellen Eigene Rollen können entweder über die Transact SQL Anweisung CREATE ROLE rollen_name oder über die Prozedur sp_addrole erzeugt werden. Die so erzeugten Rollen beinhalten noch keine Rechte. Beispiel: exec sp_addrole 'rollen_name' bzw. CREATE ROLE rollen_name Dieser oder andere Datenbank-Rollen können durch die Prozedur sp_addrolemember 'rollen_name' ,'user_name' Benutzer zugewiesen werden. SS 2007 Datenbanken Seite 366 sp_droprolemember entfernt Benutzer aus einer Rolle. sp_droprole löscht die Rolle. Alternativ kann ALTER ROLE zum Ändern des Rollennames bzw. DROP ROLE zum Löschen der Rolle verwendet werden. SS 2007 Datenbanken Seite 367 Zuordnung von Privilegien Privilegien können Benutzern oder Rollen zugewiesen werden. Zu diesem Zweck gibt es drei Kommandos: GRANT, DENY, REVOKE GRANT fügt vorhandene Rechten ein oder mehrere neue Rechte hinzu. DENY verbietet Privilegien, ist dem GRANT übergeordnet REVOKE entfernt mit GRANT oder DENY erteilte Berechtigungen. SS 2007 Datenbanken Seite 368 Syntax für GRANT GRANT Privileg,…|ALL [PRIVILEGES] ON tabellenname,… TO benutzername,….|rollenname entfällt für Datenbankprivilegien [WITH GRANT OPTION] Falls WITH GRANT OPTION angegeben ist, kann der Rechteempfänger diese Rechte an andere weitergeben. Mit ALL werden alle Privilegien vergeben. Anstelle eines Tabellennames kann auch ein Viewname angegeben werden. SS 2007 Datenbanken Seite 369 Syntax für REVOKE REVOKE Privileg,…|ALL [PRIVLEGES] ON tabellenname,… FROM benutzername,….|rollenname entfällt für Datenbankprivilegien [CASCADE] Falls CASCADE angegeben ist und der Rechteempfänger Rechte an andere weitergegeben hat, werden auch diese entfernt. SS 2007 Datenbanken Seite 370 Syntax für DENY DENY Privileg,…|ALL [PRIVILEGES] ON tabellenname,… TO benutzername,….|rollenname entfällt für Datenbankprivilegien [CASCADE] SS 2007 Datenbanken Seite 371 Objekt-Privilegien sind dabei z.B. SELECT INSERT UPDATE DELETE Datenbank-Privilegien sind CREATE TABLE | VIEW | FUNCTION Das Privileg CREATE DATABASE kann nur in der Datenbank MASTER vergeben werden. SS 2007 Datenbanken Seite 372 Beispiel GRANT SELECT ON mitarbeiter TO PUBLIC; => jeder Nutzer hat SELECT Rechte auf der Tabelle mitarbeiter; exec sp_addrole 'rolle_test' GRANT SELECT, UPDATE, INSERT ON mitarbeiter TO rolle_test exec sp_addrolemember 'rolle_test' , 'abcd' DENY UPDATE ON mitarbeiter TO abcd SS 2007 Datenbanken Seite 373 Das Anlegen und Verwalten der User, Privilegien und Rollen über das SQL Server Management Studio 1. Zugriff auf den SQL-Server SS 2007 Datenbanken Seite 374 Das Anlegen und Verwalten der User, Privilegien und Rollen über das SQL Server Management Studio 2. Zugriff auf die Datenbanken Über Eigenschaften des SQL-Users in Sicherheit\Anmeldungen können die Zugriffe auf die einzelnen Datenbanken definiert werden. SS 2007 Datenbanken Seite 375 Das Anlegen und Verwalten der User, Privilegien und Rollen über das SQL Server Management Studio 3. Rollen definieren SS 2007 Datenbanken Seite 376 Das Anlegen und Verwalten der User, Privilegien und Rollen über das SQL Server Management Studio 4. Rechte den Rollen oder Usern zuweisen SS 2007 Datenbanken Seite 377 Transact-SQL und PL/SQL • Transact-SQL und PL/SQL sind Datenbankprogrammiersprachen des SQL-Servers und Oracle. • SQL ist ein Abfragesprache. Dies reicht für eine Datenbankprogrammierung nicht aus. Prozedurale Elemente fehlen. • Transact-SQL bzw. PL/SQL sind prozedurale Spracherweiterungen zu SQL. • Sie werden unter anderem zur Erstellung von Triggern, Stored Procedures und userdefinierten Funktionen benötigt. SS 2007 Datenbanken Seite 378 Der SQL-Server: Transact-SQL • Es werden zwei Arten von Variablen unterschieden: • Benutzerdefinierte Variablen. Sie werden innerhalb eines Transact-SQL Programms vom Benutzer erzeugt und gelten nur innerhalb dieses Programms. Deklariert werden sie durch das reservierte Wort DECLARE gefolgt vom Variablennamen und dem Datentyp. Der Name der Variablen beginnt mit einem @ • Globale Variablen. Ihr Inhalt wird durch das System zugewiesen. Geben Informationen z.B. über das System. Der Name beginnt mit einem @@. • Eine Wertzuweisung erfolgt durch eine SET-Anweisung oder durch eine SELECT- Anweisung. SS 2007 Datenbanken Seite 379 Kontrollstrukturen in Transact-SQL • Wie in jeder höheren Programmiersprache gibt es in Transact-SQL Kontrollstrukturen. Unterschieden werden die zwei Kategorien Auswahlund Schleifenstruktur. • Repräsentiert werden die beiden Kategorien durch IF-ELSE und WHILE. SS 2007 Datenbanken Seite 380 Oracle: PL/SQL • Der Deklarationsteil eines PL/SQL-Blocks beginnt mit dem reservierten Wort declare. • Variablen werden deklariert durch die Syntax variablenname datentyp := initialwert; (die Zuweisung eines Initialwertes ist hier optional) SS 2007 Datenbanken Seite 381 Der Ausführungsteil in PL/SQL • Nach dem Deklarationsblock folgt der Ausführungsteil. Dieser wird durch begin und end eingeschlossen. • PL/SQL kennt die Kontrollstrukturen IF THEN ELSIF ENDIF LOOP EXIT WHILE LOOP FOR LOOP GOTO SS 2007 Datenbanken Seite 382 Gespeicherte Prozeduren – Stored Procedures SS 2007 Datenbanken Seite 383 Stored Procedures • Gespeicherte Prozeduren sind wichtige Bestandteile im Datenbankbetrieb. Sie können Datenbankverwaltung und –wartung vereinfachen und beschleunigen. • Sie können große Gruppierungen von SQL Anweisungen, Transact SQL bzw. PL/SQL Anweisungen enthalten. • Sie können mit großer Geschwindigkeit ausgeführt werden, weil viele zur Abarbeitung erforderliche Schritte bereits bei der Erzeugung bzw. beim ersten Aufruf durchgeführt werden. SS 2007 Datenbanken Seite 384 • Die Anweisungen innerhalb einer Stored Procedure laufen alle nacheinander auf dem Datenbank-Server ab. Es erfolgt erst nach Beendigung aller Anweisungen ein Datenaustausch mit dem ClientRechner. Dies führt zu einer deutlichen Performance-Steigerung. • Stored Procedures können Werte zurückgeben und können auf Eingabeparametern beruhen. • Sie können beim Start des Datenbank Servers automatisch ausgeführt werden • Sie werden explizit aufgerufen. SS 2007 Datenbanken Seite 385 Das Erstellen von Stored Procedures Syntax für den MS SQL-Server: CREATE PROCEDURE Prozedurname {;Nummer} [{@Parameter Datentyp} [VARYING] [=default][OUTPUT]] [WITH {RECOMPILE | ENCRYPTION }] [FOR REPLICATION] AS SQL-Anweisungen SS 2007 Datenbanken Seite 386 Ein Beispiel für eine einfache Stored Porcedure CREATE PROCEDURE AS sp_mitarbeiterabt_11 SELECT name, vorname FROM mitarbeiter WHERE abt_id = 11 ORDER BY name DESC Um die Prozedur auszuführen wird der Befehl EXEC verwendet: EXEC sp_mitarbeiterabt_11 SS 2007 Datenbanken Seite 387 Den Quelltext der Stored Procedure erhält man durch Ausführen der Stored Procedure sp_helptext spname Beispiel: EXEC sp_helptext sp_mitarbeiterabt_11 ergibt SS 2007 Datenbanken Seite 388 Die Abhängigkeiten der Stored Procedure erhält man durch Ausführen der SP sp_depends spname d.h. EXCEC sp_depends sp_mitarbeiterabt_11 ergibt SS 2007 Datenbanken Seite 389 Auch eine Gruppe von gespeicherten Prozeduren kann erstellt werden: CREATE PROCEDURE AS sp_g_mitarbeiter; 1 SELECT name, vorname FROM mitarbeiter WHERE abt_id = 11 GO CREATE PROCEDURE AS sp_g_mitarbeiter; 2 SELECT name,vorname, abt_name FROM mitarbeiter m INNER JOIN abteilung a ON m.abt_id = a.abt_id INNER JOIN standort s ON a.abt_sitz = s.abt_sitz WHERE s.stadt = 'München' GO SS 2007 Datenbanken Seite 390 Bemerkung zur Prozedurengruppe • Bei einer Prozedurengruppe wird nur eine einzige Prozedur angelegt, die mehrere Prozeduren als Gruppe beinhaltet. Im Beispiel hat die Prozedur den Namen sp_g_mitarbeiter. • Die Referenzierung der einzelnen Prozeduren erfolgt über Prozedurengruppenname; Nummer Im Beispiel: EXEC sp_g_mitarbeiter;2 führt die zweite Prozedur innerhalb der Gruppe aus SS 2007 Datenbanken Seite 391 Parameter in Stored Procedures Die folgende Zeile ist für SP mit Parametern zuständig: [{@Parameter Datentyp} [VARYING] [=default][OUTPUT]] • @Parameter legt den Namen des Parameters innerhalb der Prozedur fest. Innerhalb einer Prozedur können bis zu 1024 Parameter verwendet werden. • Hinter dem Parameternamen muss der Datentyp angegeben werden. • Mit = default kann für diesen Parameter ein default Wert angegeben werden. Dieser wird gesetzt, wenn beim Ausführen der Prozedur kein Wert hierfür angegeben wird SS 2007 Datenbanken Seite 392 • OUTPUT bedeutet, dass der Parameter ein Rückgabeparameter darstellen soll. • VARYING bezieht sich auf die zurück gelieferte Datenmenge/Cursor. SS 2007 Datenbanken Seite 393 Beispiel: Berechnung des Durchschnitts von 3 Zahlen CREATE PROCEDURE sp_myDurchschnitt3 @param1 int, @param2 int, @param3 int, @myAvg real OUTPUT AS SELECT @myAvg = (@param1 + @param2 + @param3)/3. SS 2007 Datenbanken Seite 394 Um den Wert von myAvg zu verwenden, muss zunächst eine Variable deklariert werden. DECLARE @durchschnitt real Danach kann die Prozedur mit den Werten ausgeführt werden: EXEC sp_myDurchschnitt3 10, 14, 7, @durchschnitt OUTPUT Jetzt kann das Ergebnis angezeigt werden: SELECT 'Der Durchschnitt ist: ',@durchschnitt SS 2007 Datenbanken Seite 395 Bei Verwendung von default-Werten sollte die Reihenfolge beachtet werden CREATE PROCEDURE sp_myDurchschnitt_d @myAvg real OUTPUT, @param1 int = 0, @param2 int = 0, @param3 int = 0 AS SELECT @myAvg = (@param1 + @param2 + @param3)/3. Beim Ausführen der Prozedur müssen nicht alle Paramter angegeben werden. Die Reihenfolge ist entscheidend. Z.B. Wert, default, Wert ist nicht möglich. EXEC sp_myDurchschnitt_d @durchschnitt OUTPUT, 4 SS 2007 Datenbanken Seite 396 Bemerkung • Die Werte müssen an die gespeicherte Prozedur in einer festgelegten Reihenfolge übergeben werden. • Eine Übergabe als benannte Parameter ist möglich, indem man die Werte in der Form Parametername = Wert übergibt. Damit kann eine beliebige Reihenfolge angegeben werden. DECLARE @durchschnitt real EXEC sp_myDurchschnitt3 @myAvg = @durchschnitt OUTPUT, @param1 = 10, @param3 = 5, @param2 = 0 SS 2007 Datenbanken Seite 397 Rückgabe mit RETURN • Statt der Verwendung des Schlüsselworte OUTPUT innerhalb der gespeicherten Prozedur und bei der Ausführung der Prozedur kann auch das Schlüsselwort RETURN verwendet werden. CREATE PROCEDURE sp_addition @p1 int, @p2 int, @retadd int AS SELECT @retadd = @p1 + @p2 RETURN @retadd DECLARE @myReturnWert int EXEC @myReturnWert = sp_addition 6,9,0 SELECT 'Das Ergebnis ist', @myReturnWert SS 2007 Datenbanken Seite 398 Die Option WITH RECOMPILE • kann in der Anweisung CREATE PROCEDURE oder in der Anweisung EXEC PROCEDURE stehen. • Wird die Option in CREATE PROCEDURE eingesetzt, wird der Ausführungsplan für die Prozedur nicht im Prozedurcache gespeichert. Die gesamte Prozedur wird bei jedem Ablauf neu kompiliert. • Wird WITH RECOMPILE in der Anweisung EXEC PROCEDURE verwendet, so wird die gespeicherte Prozedur einmal bei der Ausführung kompiliert und der neue Ausführungsplan anschließend für nachfolgende Aufrufe von EXEC PROCEDURE im Prozedurcache gespeichert. SS 2007 Datenbanken Seite 399 Die Option WITH ENCRYPTION • Die Option WITH ENCRYPTION verschlüsselt die zur Erzeugung der Prozedur eingesetzten SQL-Anweisungen. Beispiel CREATE PROCEDURE sp_kunde WITH ENCRYPTION AS SELECT kname, kvorname FROM kunde versucht man nun den Quelltext anzuzeigen, erhält man die Meldung SS 2007 Datenbanken Seite 400 Das Löschen von gespeicherten Prozeduren Wie alle Datenbankobjekt werden auch SP mit dem reservierten Wort DROP gelöscht. DROP PROCEDURE prozedurname; Prozedur-Gruppen können nur komplett gelöscht werden. Um eine einzelne Prozeduren innerhalb der Gruppe zu löschen, muss die gesamte Gruppe gelöscht werden und mit dem veränderten Quelltext erneut angelegt werden. SS 2007 Datenbanken Seite 401 Kontrollstrukturen innerhalb einer Stored Procedure Wie in anderen Programmiersprachen gibt es in Transact-SQL und PL/SQL Kontrollstrukturen. Syntax für Transact-SQL IF boolean_ausdruck {Anweisungsblock} [ELSE {Anweisungsblock}] Die Schleife wird durch folgende Syntax abgebildet: WHILE boolean_ausdruck {Anweisungsblock} [BREAK] SS 2007 Datenbanken Seite 402 Ein komplexeres Beispiel für eine Stored Procedure artikel gruppe Mit Hilfe einer Stored Procedure sollen Werte in die Tabelle artikel eingefügt werden. Die Werte werden in der Form Artikelbezeichnung, Artikelpreis, Gruppenbezeichnung eingegeben. Zurückgegeben werden soll die Id des eingefügten Datensatzes SS 2007 Datenbanken Seite 403 CREATE PROCEDURE sp_insert_artikel @aname varchar(50), @apreis real, @agruppenbez varchar(50) AS DECLARE @grupp_id int, @max_art_id int SELECT @grupp_id = gruppen_id FROM gruppe WHERE @agruppenbez = gruppen_bez SELECT @max_art_id = max(a_id)+1 FROM artikel SS 2007 Datenbanken Seite 404 IF @grupp_id IS NOT NULL INSERT artikel (a_id,a_bez,a_preis,gruppen_id) VALUES (@max_art_id, @aname,@apreis,@grupp_id) ELSE BEGIN DECLARE @max_grupp_id int SELECT @max_grupp_id = max(gruppen_id)+1 FROM gruppe INSERT gruppe VALUES (@max_grupp_id, @agruppenbez) INSERT artikel VALUES (@max_art_id, @aname,@apreis,@max_grupp_id) END RETURN @max_art_id SS 2007 Datenbanken Seite 405 Einfügen des Datensatzes 'Keyboard-Super', 35.6, 'Tastatur' DECLARE @hilf int EXEC @hilf = sp_insert_artikel 'Keyboard-Super',35.6,'Tastatur' Einfügen des Datensatzes 'easyKlick', 10. ,'Maus' DECLARE @hilf int EXEC @hilf = sp_insert_artikel 'easyKlick',10.,'Maus' SS 2007 Datenbanken Seite 406 Demonstration der Übersetzungszeit für Prozeduren anhand einer mehrfach aufgerufenen Stored Procedure Beispiel SS 2007 Datenbanken Seite 407 Anhand der Prozedur sp_messwert wird der Zeitaufwand für einen Übersetzungsprozess simuliert -- Diese Prozedur erzeugt einen neuen Messwert für eine Geräte-ID mit vorgegebenem Zeitstempel CREATE PROCEDURE sp_messwert @geraete_id int, @ts datetime AS INSERT INTO messungen (mgi,wert,gemessen_am,geprueft_am,prid) VALUES(@geraete_id, RAND()*100, @ts , NULL , NULL) SS 2007 Datenbanken Seite 408 Mehrfacher Aufruf der Testprozedur mit Zeitmessung SS 2007 Datenbanken Seite 409 Laufzeit-Ergebnisse Laufzeit mit Prozeduraufruf, aber ohne Recompile Laufzeit mit Prozeduraufruf, aber mit Recompile SS 2007 Datenbanken Seite 410 Datenbank-Trigger SS 2007 Datenbanken Seite 411 Trigger • Trigger sind eine Art gespeicherte Prozeduren, die automatisch gestartet werden, sobald ein vordefiniertes Ereignis und zwar eine Datenmodifikation eintritt. • Sie sind direkt einer Tabelle oder View zugeordnet. • Trigger reagieren nur auf DML-Kommandos, d.h. auf Insert, Update oder Delete. • Trigger können keine Parameter übernehmen und lassen sich nicht explizit aufrufen. • Trigger werden standardmäßig nach einer Datenmodifikation ausgelöst oder Ersetzen eine Datenmodifikation. SS 2007 Datenbanken Seite 412 Einsatzmöglichkeiten von Triggern • Trigger unterstützen die Datenintegrität. Sie können unbefugte oder inkonsistente Datenänderungen verhindern. • Trigger sichern die referentielle Integrität • Trigger können die Durchsetzung komplexer Unternehmensregeln gewährleisten. • Trigger dienen zur Ausführung zusammenhängender Aktionen SS 2007 Datenbanken Seite 413 Das Erstellen von Trigger Syntax für den MS SQL-Server: CREATE TRIGGER Triggername ON Tabellenname|Viewname [FOR | AFTER | INSTEAD OF] {INSERT | UPDATE | DELETE} [WITH ENCRYPTION] AS SQL-Anweisungen Die folgenden Beispiele verwenden diese Syntax. SS 2007 Datenbanken Seite 414 Ein einfaches Beispiel für einen Trigger CREATE TRIGGER t_addupmitarbeiter ON mitarbeiter FOR INSERT,UPDATE AS PRINT cast(@@rowcount AS varchar)+ ' Zeilen wurden geändert' Ein Update oder Insert auf die Tabelle mitarbeiter löst den Trigger aus: UPDATE mitarbeiter SET gehalt = gehalt + 100 WHERE abt_id = 11 Ergebnis des Triggers SS 2007 Datenbanken Seite 415 Die Tabellen inserted und deleted im MS SQL-Server • Trigger im SQL-Server benutzen die zwei virtuellen Tabellen inserted und deleted, die vom SQL-Server selber erstellt und verwaltet werden. • Diese beiden Tabellen haben die identische Struktur wie die Tabelle, die dem Trigger zugrunde liegt, d.h. wie die Basistabelle. SS 2007 Datenbanken Seite 416 AFTER bzw. FOR Trigger • Die Tabelle deleted enthält alle Zeilen, die aus der Basistabelle gelöscht wurden. • Die Tabelle inserted enthält alle Zeilen, die der Basistabelle zugefügt worden sind oder verändert wurden. INSTEAD OF Trigger • Die Tabelle deleted enthält alle Zeilen, die aus der Basistabelle gelöscht werden sollen. Die Basistabelle ist noch unverändert. • Die Tabelle inserted enthält alle Zeilen, die der Basistabelle zugefügt bzw. verändert werden sollen . SS 2007 Datenbanken Seite 417 Beispiel: Erstellung eines Triggers, der einen Datensatz in die Tabelle bestell einfügt, sobald der Bestand eines Artikels < 10 wird. artikel CREATE TRIGGER tr_bestell ON artikel AFTER UPDATE AS INSERT bestell SELECT artnr FROM inserted WHERE bestand < 10; SS 2007 Datenbanken Seite 418 Beispiel: Erstellung eines eigenen Autoincrements CREATE TRIGGER t_autoinc_kunde ON kunde INSTEAD OF INSERT AS DECLARE @count int SELECT @count = max(a_id) FROM kunde; IF @count IS NOT NULL SELECT @count = @count+2; ELSE SELECT @count = 1 INSERT INTO kunde SELECT @count, kname, kwert FROM inserted SS 2007 Datenbanken Seite 419 Beispiel: Erstellen eines Lösch-Triggers, der Datensätze nur dann aus der Tabelle kunde löscht, falls der Kunde keine offenen Aufträge mehr hat. CREATE TRIGGER tr_loeschkontrolle ON kunde INSTEAD OF DELETE AS IF (@@rowcount < 2) BEGIN IF ((SELECT auftraege FROM deleted) = 0) BEGIN DELETE FROM kunde WHERE kdnr = (SELECT kdnr FROM deleted) END ELSE PRINT 'Fehler! Auftraege ist > 0' END ELSE PRINT 'Dieser Befehl ist nur für einzelne Zeilen zulässig!' SS 2007 Datenbanken Seite 420 Auslösen des Triggers DELETE FROM kunde WHERE kdnr = 1 löst die folgende Fehlermeldung aus DELETE FROM kunde WHERE kdnr = 2 löscht den Datensatz SS 2007 Datenbanken Seite 421 Beispiel: Erstellen des Triggers, der die Preise der gelöschten Artikel in einer separaten Tabelle aufsummiert. CREATE TRIGGER tr_loeschsumme ON artikel INSTEAD OF DELETE AS IF (@@rowcount <2) BEGIN UPDATE loeschsumme SET summe = ( SELECT summe FROM loeschsumme)+ (SELECT preis FROM deleted) DELETE FROM artikel WHERE artnr = (SELECT artnr FROM deleted) END ELSE PRINT 'Dieser Befehl ist nur für einzelne Zeilen zulässig!' SS 2007 Datenbanken Seite 422 Trigger können eingesetzt werden um die referentielle Integrität zu gewährleisten. Beispiel: kunde nur dieser Kunde darf gelöscht werden auftrag Ein Trigger soll gewährleisten, dass nur Kunden gelöscht werden dürfen, die keine Aufträge in der Tabelle Auftrag haben. SS 2007 Datenbanken Seite 423 CREATE TRIGGER tr_integr ON kunde INSTEAD OF DELETE AS IF (@@rowcount < 2) BEGIN IF( 0 = (SELECT COUNT(*) FROM auftrag WHERE kdnr = (SELECT kdnr FROM deleted)) ) DELETE FROM kunde WHERE kdnr = (SELECT kdnr FROM deleted) ELSE PRINT 'Für diesen Kunden sind noch Aufträge vorhanden' END ELSE PRINT 'Dieser Befehl ist nur für einzelne Zeilen zulässig!' SS 2007 Datenbanken Seite 424 Ein Löschen des Kunden mit der kdnr = 1 ist nicht möglich DELETE FROM kunde WHERE kdnr = 1 SS 2007 Datenbanken Seite 425 Sicherung von Datenbanken SS 2007 Datenbanken Seite 426 • Die richtige Datensicherung ist ein wichtiger Aspekt für den Datenbankbetrieb. • Welche Datensicherung für die entwickelte Datenbankanwendung am besten bzw. am sinnvollsten ist, sollte bereits während der Projektphase entschieden werden. • Für die Durchführung der Datenbanksicherungen ist meist der Datenbankadministrator zuständig. Verantwortlich für die Initiierung ist der Leiter oder das ITSicherheitsmanagement. • Die Art der Datensicherung ist von dem jeweiligen Datenbanksystem abhängig. • Fehlende Datensicherung können nach Auffassung der Gerichte juristische Konsequenzen nach sich ziehen. SS 2007 Datenbanken Seite 427 Bei der Wahl der Datensicherung spielen die folgenden Kriterien eine Rolle • Wie viele Daten beinhaltet die Datenbank • Wie wichtig sind die Daten für das Unternehmen • Wie wird die Verfügbarkeit der Daten für das Unternehmen eingestuft • Wie oft werden die Daten verändert SS 2007 Datenbanken Seite 428 Hat man sich für ein Sicherungsverfahren entschieden, müssen folgende Punkte geklärt werden: • Welche Medien benutzt man zur Sicherung • Wie oft soll gesichert werden • Wann soll gesichert werden, d.h. wann ist die geringste Last auf dem Server • Wie lange sollen Sicherungskopien aufgehoben werden • Wie lange dauert die Wiederherstellung einer Sicherungskopie SS 2007 Datenbanken Seite 429 Datensicherung einer Datenbank Auszüge aus dem IT-Grundschutzhandbuch des Bundesamtes für Sicherheit in der Informationstechnik • Die Sicherung der Daten eines Datenbanksystems kann in der Regel nicht mit den Datensicherungsprogrammen auf Betriebssystemebene vollständig abgedeckt werden. • Zur Sicherung des DBMS und der Daten müssen die jeweiligen Dienstprogramme des DBMS eingesetzt werden. SS 2007 Datenbanken Seite 430 Auszüge aus dem IT-Grundschutzhandbuch des Bundesamtes für Sicherheit in der Informationstechnik Möglichkeiten einer Datenbanksicherung • Komplettsicherung der Datenbank in heruntergefahrenem Zustand. Dies ist die einfachste und sicherste Methode, die allerdings aus Gründen der Verfügbarkeitsanforderungen an die Datenbank oder aufgrund des zu sichernden Datenvolumens oft nicht durchführbar ist. • Online-Sicherung der Datenbank. Die Sicherung erfolgt während des laufenden Betriebs, d.h. Datenbank muss nicht heruntergefahren werden. Nachteile: Inkonsistenzen können nicht explizit ausgeschlossen werden. Zusätzlich muss eine Offline-Komplettsicherung bestehen. SS 2007 Datenbanken Seite 431 • Partielle Datenbanksicherung Sollte immer dann verwendet werden, wenn das zu sichernde Datenvolumen zu groß ist, um eine vollständige Sicherung durchführen zu können. SS 2007 Datenbanken Seite 432 Auszüge aus dem IT-Grundschutzhandbuch des Bundesamtes für Sicherheit in der Informationstechnik Für die Datensicherung eines Datenbanksystems muss ein eigenes Datensicherungskonzept erstellt werden. Einflussfaktoren für ein solches Konzept sind: • Verfügbarkeitanforderungen an die Datenbak Wenn beispielsweise eine Datenbank werktags rund um die Uhr zur Verfügung stehen muss, so kann eine Komplettsicherung nur am Wochenende durchgeführt werden, da dies im allgemeinen ein Herunterfahren der Datenbank erfordert. SS 2007 Datenbanken Seite 433 • Datenvolumen Das gesamte zu sichernde Datenvolumen muss mit den zur Verfügung stehenden Sicherungskapazitäten verglichen werden. Dabei muss festgestellt werden, ob die Sicherungskapazität für das entsprechende Datenvolumen der Datenbank ausreichend dimensioniert ist. Falls dies nicht der Fall ist, muss ein Konzept zur Teilsicherung des Datenvolumens erstellt werden. • Maximal verkraftbarer Datenverlust • Wiederanlaufzeit Die maximal zulässige Zeitdauer des Wiederherstellens der Datenbank nach einem Absturz muss festgelegt werden, um den Verfügbarkeitsanforderungen zu genügen. SS 2007 Datenbanken Seite 434 • Datensicherungsmöglichkeiten der Datenbank-Software Im allgemeinen werden von einer Datenbank-Standardsoftware nicht alle denkbaren Datensicherungsmöglichkeiten unterstützt, wie z.B. eine partielle Datenbanksicherung. Dies ist vorab zu prüfen. SS 2007 Datenbanken Seite 435 Anhand dieser Informationen kann ein Konzept für die Datensicherung der Datenbank erstellt werden. In diesem Sicherungskonzept wird u.a. festgelegt • wer für die ordnungsgemäße Durchführung von Datensicherungen zuständig ist, • in welchen Zeitabständen eine Datenbanksicherung durchgeführt wird, • in welcher Art und Weise die Datenbanksicherung zu erfolgen hat, • zu welchem Zeitpunkt die Datenbanksicherung durchgeführt wird, • die Spezifikation des zu sichernden Datenvolumens je Sicherung, • wie die Erstellung von Datensicherungen zu dokumentieren ist, • wo die Datensicherungsmedien aufbewahrt werden. SS 2007 Datenbanken Seite 436 Ergänzende Kontrollfragen: • Existiert eine Dokumentation, wie im Falle eines Absturzes der Datenbank diese wiederherzustellen ist? • Ist für die Institution ein aktuelles Datensicherungskonzept für den Bereich Datenbanken dokumentiert? • Wie werden Mitarbeiter über den sie betreffenden Teil des Konzeptes unterrichtet? • Wird die Einhaltung dieses Konzeptes kontrolliert? • Wie werden Änderungen der Einflussfaktoren berücksichtigt? SS 2007 Datenbanken Seite 437 Technische Verfahren zur Datensicherung - Spiegelung, Duplexing und Striping • Zwei Festplatten bezeichnet man als gespiegelt, wenn sie exakt die gleichen Daten enthalten. Eine Änderung der Daten auf der einen Festplatte, führt auch zu einer Änderung der Daten auf der gespiegelten Platte. Beide Platten werden von einem gemeinsamen Controller angesteuert. • Unter Duplexing versteht man eine Spiegelung, wobei aber jede Festplatte einen eigenen Festplattencontroller besitzt. • Beim Striping werden die Daten gleichmäßig auf verschiedene Festplatten verteilt. Angesteuert werden die Festplatten von einem gemeinsamen Controller. SS 2007 Datenbanken Seite 438 RAID Konzept • RAID = Redundant Array of Inexpensive Disk bzw. Redundant Array of Independent Disk • Das RAID Konzept ist in der Industrie weit verbreitet. Es gibt mehrere Stufen. • Festplatten werden in RAID-Array konfiguriert, um die auf den Festplatten enthaltenen Daten zu schützen und eine hohe Verfügbarkeit zu gewährleisten. SS 2007 Datenbanken Seite 439 Die wichtigsten RAID Stufen • RAID 0: Festplattenstriping ohne Paritätsinformationen • RAID 1: Spiegelung oder Duplexing. • RAID 5: Festplattenstriping mit Parität. Paritätsdaten werden auf alle Festplatten verteilt. • RAID 10: Festplattenspiegelung mit Striping, wobei ein Festplattenarray auf einen anderen Satz von verteilten Festplatten mit einem separaten Controller gespiegelt wird. SS 2007 Datenbanken Seite 440 Die Datenbank im Netz Verteilte Datenbanken, Replikation, ODBC SS 2007 Datenbanken Seite 441 Verteilte Datenbanken In einem Netzwerk befinden sich mehrere Datenbanken, die miteinander verknüpft sind. Die einzelnen lokalen Datenbanken werden so zu einer einheitlichen Sicht zusammengefasst, dass sie sich für den Anwender als eine logische Gesamtdatenbank darstellt. Das DBMS sorgt dafür, dass die Anfragen und Änderungen der Anwender auf die richtigen Daten im Netz zugreifen. Verteilte Datenbanken werden im wesentlichen aus zwei Gründen eingesetzt: • aus Performancegründen • zur dezentralen Datenhaltung (Replikation) SS 2007 Datenbanken Seite 442 Verteiltes Datenbanken-Design Das Design einer verteilten Datenbank erfolgt in den folgenden Schritten • Zunächst wird das globale Datenmodell entworfen. Dieser Schritt gilt für alle Datenbanken, d.h. er ist unabhängig von einer Verteilung • Fragmentierung bzw. Partitionierung. Fragmente können ganze Tabellen oder Teile von Tabellen sein. • Zuordnung der Fragmente zu den vorgesehenen Datenbanken. SS 2007 Datenbanken Seite 443 Fragmentierung bzw. Partitionierung • Unter Fragmentierung versteht man die disjunkte Zerlegung einer Tabelle in Teiltabellen. • Diese Partitionen werden auf die einzelnen dezentralen Datenbanken (Knoten) verteilt. • Fragmentierung dient zur Performance- und VerfügbarkeitsOptimierung. SS 2007 Datenbanken Seite 444 Replikation • Unter Replikation versteht man die redundante Speicherung von Tabellen oder Tabellen-Fragmenten auf unterschiedlichen Knoten. • Man unterscheidet im wesentlichen drei Arten von Replikation: • synchrone Replikation • asynchrone Replikation • symmetrische Replikation SS 2007 Datenbanken Seite 445 Gründe für die Anwendung von Replikation • Zugriffsoptimierung: Kopien der Daten werden am Ort der Verarbeitung gespeichert. Dadurch werden Lese-Zugriffe auf entfernte Datenbankknoten vermieden. => Verringerung von Netzwerkzugriffen und Lastverteilung für die Datenbankserver. • Verfügbarkeitsoptimierung: Dadurch, dass die Tabellen mehrfach im Verbund vorhanden sind, ergibt sich eine höherer Verfügbarkeit. SS 2007 Datenbanken Seite 446 Synchrone Replikation • Bei der synchronen Replikation werden Tabellen in einer zentralen Datenbank gehalten. Auf mehreren Knoten werden Kopien dieser Tabelle redundant abgelegt. Diese bezeichnet man als Replikate. • Die Replikate zusammen mit der Basistabelle der zentralen Datenbank enthalten zu jedem Zeitpunkt inhaltlich identische Daten. • Schreiboperationen auf den Tabellen müssen in allen anderen Replikaten nachvollzogen werden. Hierfür eignet sich der Einsatz von Triggern. SS 2007 Datenbanken Seite 447 Eigenschaften der Synchronen Replikation • Vorteil: Ein Anwender liest seine Daten stets von der Datenbank, die am nächsten für ihn liegt. Dadurch wird das Netz, sowie die zentrale Datenbank nicht belastet. • Nachteil: Eine Datenänderung muss in allen Replikaten nachgeführt werden. Dies geschieht, sobald das Netz verfügbar ist. Synchrone Replikationen eigenen sich, wenn bevorzugt Leseoperationen auf den Tabellen durchgeführt werden. SS 2007 Datenbanken Seite 448 Beispiel für den Einsatz von Synchronen Replikationen: Literatur-Datenbank, die Artikel aus Fachzeitschriften enthält. Auf diese Datenbank finden sehr viele Lesezugriffe durch eine Vielzahl von Clients statt. Schreibzugriffe finden in geringerer Zahl beim Zufügen neuer Artikel statt. SS 2007 Datenbanken Seite 449 Asynchrone Replikation • Bei der asynchronen Replikation gibt es nur einen Knoten, auf dem die Tabellen geändert werden können (Masterknoten). • Dieser Masterknoten enthält immer den aktuellen Datenbestand. • Die anderen Knoten enthalten Kopien dieses Masters. • Die Aktualisierung der Kopien erfolgt nur periodisch. • Dies führt dazu, dass die Daten nicht konsistent sind. • Die Kopien werden auch als Snapshot bezeichnet. SS 2007 Datenbanken Seite 450 Bemerkung zur Asynchrone Replikation • Asynchrone Replikation eignet sich nur, wenn es auf die Aktualität der Datenbestände nicht ankommt. • Auf Snapshots kann nur lesend zugegriffen werden. • Die Datenaktualisierung durch den Master ist unkritisch. • Snapshots eigenen sich besonders gut für Tabellen mit Stammdaten. Stammdaten verändern sich mit einer niedrigen Frequenz. Nach jedem Versionswechsel der Stammdaten sollte eine Aktualisierung der Snapshots stattfinden. SS 2007 Datenbanken Seite 451 Symmetrische Replikation • Asynchrone und Synchrone Replikation sind die beiden Hauptarten der Replikation. • Es gibt eine Reihe weiterer Replikationsarten, die eine Mischform oder Erweiterung der beiden Hauptarten darstellt. • Die Symmetrische Replikation ist ein Überbegriff dieser Mischformen und Erweiterungen. SS 2007 Datenbanken Seite 452 Einige Arten der Symmetrischen Replikation • Mehrere Master Kopien der Tabellen werden auf mehrere Knoten verteilt: Jede Kopie kann verändert werden. Transaktionen werden – wenn möglich- auf allen Knoten zeitgleich durchgeführt. Falls dies auf einem Knoten nicht möglich ist, werden die Änderungen für diesen Knoten in eine Warteschlage gestellt und erst übertragen, wenn der Knoten wieder zugänglich ist. • Aktualisierbare Snapshots Änderungen können auch an einem Snapshot durchgeführt werden. Die Änderungen werden an den Masterknoten übertragen, der dann eine Verteilung an die anderen Knoten vornimmt. SS 2007 Datenbanken Seite 453 • Gemischtes Verfahren Kombiniert Verfahren der mehreren Master und der aktualisierbaren Snapshots. Bemerkung: Die symmetrische Replikation kann zu Konflikten führen, wenn an zwei verschiedenen Orten auf den gleichen Daten etwas geändert wird. Daher müssen Regeln definiert werden, die das Konfliktfreie Durchführen von Transaktionen sicherstellen. SS 2007 Datenbanken Seite 454 Durchführung von verteilten Transaktionen Verteilte Transaktionen sind Transaktionen, für die gilt: • Von der Datenmanipulation sind mehrere Datenbanken betroffen • Die gesamte Transaktion wird durch ein COMMIT oder ROLLBACK abgeschlossen. Zur Wahrung der Konsistenzerhaltung und Atomarität bei verteilten Transaktionen wird z.B. das sog. Two Phase Commit Protokoll benutzt. SS 2007 Datenbanken Seite 455 Jeder der verteilten Datenbankserver hat eine spezielle Softwarekomponente des DBMS, den sog. Transaktionsmanager. Der Transaktionsmanager des Datenbankservers, von wo aus die Transaktion gestartet wurde, kommuniziert mit den anderen an der Transaktion beteiligten Transaktionsmanagern. SS 2007 Datenbanken Seite 456 Das Two Phase Commit Protokoll 1. Phase (Prepare Phase) In dieser Vorbereitungsphase schickt der Transaktionsmanager des auszuführenden Servers eine Prepare Aufforderung an alle beteiligten Server, um sie zur Schaffung der Voraussetzung für ein Commit oder Rollback zu veranlassen. Nachdem die Logs geschrieben wurden, schicken die Server eine Antwort auf die Prepare Aufforderung an den Transaktionsmanager. SS 2007 Datenbanken Seite 457 2. Phase (Commit Phase) Wenn alle beteiligten Server eine positive Bestätigung geschickt haben, schickt der Transaktionsmanager eine COMMIT Aufforderung an alle Server. Ansonsten verschickt er eine ROLLBACK Aufforderung. Erst dann schließen die Server die Transaktionen ab bzw. machen sie rückgängig. SS 2007 Datenbanken Seite 458 ODBC • Bei ODBC handelt es sich um eine standardisierte Methode, die den Zugriff auf Datenbanken erlaubt. Hierbei muss nicht berücksichtigt werden, aus welchem Programm auf welche Datenbank zugegriffen werden. • ODBC stammt ursprünglich von Microsoft, ist aber inzwischen auch für eine Reihe von anderen Betriebssystemen verfügbar. • ODBC steht für Open DataBase Connectivity. Anwendung Anwendung Anwendung ODBC-Schnittstelle DBS DBS DBS SS 2007 Datenbanken Seite 459 ODBC • ODBC wird dem Bereich Middelware zugerechnet, d.h. einer Softwareschicht, die zwischen Anwendung und Datenhaltungssystem liegt. • Mit Hilfe von ODBC greift ein Anwendungsprogramm über eine -auf dem Client installierte- Standardschnittstelle auf das DBMS zu. • Mit ODBC wird ein Standard API zur Verfügung gestellt, das eine einheitliche Anwendungsprogrammierung für unterschiedliche DBMSe ermöglicht. • ODBC beruht auf einer Spezifikation, die von der SQL-ACCESS Group unter Federführung von Microsoft ins Leben gerufen wurde. • ODBC ist ein ISO-Standard. SS 2007 Datenbanken Seite 460 Vor- und Nachteile von ODBC • Vorteil: • ODBC wird eingesetzt um einen Datenbankzugriff unabhängig vom DBMS-Hersteller zu ermöglichen. • • Reduzierter Aufwand bei der Treiberentwicklung. Nachteil: • Performance-Verlust durch zusätzliche Schicht. • Es kann nur auf eine Untermenge der verfügbaren Datenbankfunktionen zugegriffen werden. Teilweise problematische Anwendungen durch die unterschiedliche SQL-Syntax der verschiedenen DBMSAnbieter. SS 2007 Datenbanken Seite 461 Alternativen zu ODBC Datenbank bzw. Programmiersprachenspezifische DBMS Schnittstellen z.B. hat PHP Schnittstellen zu über 20 verschiedenen Datenbanken. Vorteile dieser Schnittstellen: • Sie können den gesamten Funktionsumfang der Datenbank abdecken • Höhere Kommunikations-Geschwindigkeit Nachteile dieser Schnittstellen: • Erhöhter Aufwand bei der Treiberentwicklung • Erhöhter Aufwand bei der Wartung • Erhebliche Flexibilitätseinbußen beim Datenbankwechsel SS 2007 Datenbanken Seite 462 ODBC einrichten für einen MS SQL-Server SS 2007 Datenbanken Seite 463 Datenquelle hinzufügen SS 2007 Datenbanken Seite 464 Es folgen weitere Treiberspezifische Formulare, die hier nicht aufgeführt werden. Diese müssen beim SQLServer vorerst nicht verändert werden. SS 2007 Datenbanken Seite 465 Damit ist die ODBC Vebindung vom Client zur Datenbank hergestellt. SS 2007 Datenbanken Seite 466 Praktischer Einsatz von Data-Warehouse-Systemen in Großprojekten SS 2007 Datenbanken Seite 467 Ist-Situation in Großunternehmen • Verschiedenste operative IT-Systeme und Datenbanken, die die Anforderungen des entsprechenden Bereichs abdecken. • Historisch bedingter ‚Wildwuchs‘ . M A R K O -D B A nbieter F lug, C ar, H otel A nbieter T ouristik div. L isten aus M ythos PM 5 SN div. D ateien der tour. A nbieter exciting MA AR AR TK EB amadeus Bahn PM 3 AB PR div. D ateien von AN div. D ateien aus A SP A nbieter F ähren PB SU KC RW SZ GF PM 6 CP PW SA P TM CM AF EI AA ST A D I-D B CO AT R egionalbüros VK PM 1 DER KM AI IO RSB-K ettenZ e ntralen D atei erzeugt durch SBT PM 7 KS VA BT X PI EA Spedition PD T IC SRZ PM 2 D atei erzeugt durch PM A nbieter V E RS => Übergreifende Analysen sind kaum möglich SS 2007 Datenbanken Seite 468 Probleme für die Analyse • • • Die Daten sind in zu vielen Datenbanken verstreut und nicht vergleichbar. Unterschiedliche Begrifflichkeiten in den Systemen erschweren die Vergleichbarkeit und Zusammenführung der Daten. Extraktion liegt in der Hand der “Datenbänker” (SQL-Kenner). Unternehmen ein starkes Interesse diese Daten für Analysen und Entscheidungsfindung nutzbar zu machen. Wichtig: verdichtete Daten und Vergleiche über längere Zeiträume. => Ein Data Warehouse ist erforderlich. Technischer Sicht • Datenbank, die meist große Datenmengen aus verschiedenen Datenquellen integriert. Betriebswirtschaftlicher Sicht • Stellt Daten dem Anwender zu Analysezwecken zur Verfügung. SS 2007 Datenbanken Seite 469 Eine der ersten Definitionen des Begriffes Data Warehouse wurde von W. H. Inmon 1992 geprägt. ‚A data warehouse is a subject oriented, integrated, non -volatile, and time variant collection of data in support of management‘s decisions‘ Damit hat nach Inmon ein Data-Warehouse 4 Eigenschaften: • Themenorientiert (subject-oriented) • Integrierte Datenbasis (intergrated) • Nicht flüchtige Datenbasis (non-volatile) • Historische Daten (time-variant) Erweiterung der Definition: • dient der Analyse, d.h. ein adäquater Modellierungsansatz ist erforderlich. SS 2007 Datenbanken Seite 470 Basis-Architektur eines Data-Warehouse-Systems Data-Warehouse-System Bereich der Datenbeschaffung Datenquelle(n) Extraktion Arbeitsbereich Laden Basisdatenbank Laden Data Warehouse Analyse Transformation Data-WarehouseManager Monitor MetadatenManager Datenfluss Kontrollfluss Repository SS 2007 Datenbanken Seite 471 Analyse Einer der wichtigsten Analyseansätze im Data Warehouse Umfeld ist OLAP (Online Analytical Processing) (Codd 1993). • Analyseansatz, der die dynamische, multidimensionale Analyse von Daten bezeichnet. • Analyse basiert auf Fragestellungen wie z.B. ‚In welchem Bezirk macht eine Produktgruppe den größten Umsatz?‘ Um den OLAP-Ansatz gerecht zu werden, muss ein multidimensionales Datenmodell zugrunde liegen. SS 2007 Datenbanken Seite 472 Das Multidimensionale Datenmodell Quartal Ze itr au m Jahr Fakt, Kennzahl Produkt (z.B. Umsatz) Kategorie Navigieren im Würfel durch Artikel - drill down / roll-up Region Filiale Dimension Stadt - drill across - slice & dice Bundesland SS 2007 Datenbanken Seite 473 Umsetzung des multidimensionalen Datenmodells Wie kann das MDD auf das Datenmodell des Datenbanksystems abgebildet werden? • Umsetzung auf relationales Datenmodell (ROLAP) • Umsetzung direkt auf multidimensionale Speicherstrukturen (MOLAP) SS 2007 Datenbanken Seite 474 Beispiel ROLAP: Star-Schema Produkt Zeit Zeit_ID Zeit_ID Tag Tag Monat Monat Quartal Quartal Jahr Jahr Geographie Geo_ID Geo_ID Stadt Stadt Bundesland Bundesland Land Land Kontinent Kontinent ...... Verkauf Produkt_ID Produkt_ID Zeit_ID Zeit_ID Geo_ID Geo_ID Verkäufer VerkäuferID ID Verkäufe Verkäufe Umsatz Umsatz ...... Produkt_ID Produkt_ID Produktname Produktname Beschreibung Beschreibung Kategorie Kategorie ...... Verkäufer Verkäufer_ID Verkäufer_ID Verkäufername Verkäufername Position Position ...... SS 2007 Datenbanken Seite 475 Metadaten Alle Informationen, die den Aufbau, die Wartung und die Administration des DataWarehouse Systems vereinfachen und darüber hinaus den Anwender bei der Informationsgewinnung aus dem Data Warhouse unterstützen. Technische Metadaten informieren über bzw. beinhalteten z.B. • die Datengenerierung (build process): alle Datenquellen, Speichermedien, Datenstrukturen, Extraktions- und Transformationsprogramme, Generierungszeitpunkte. • die Kontrolldaten: Zugriffsrechte, letzter Aktualisierungszeitpunkt. Betriebswirtschaftliche Metadaten informieren z.B. über... • das Datenmodell • Kalkulationen und Aggregationen • Dimensionen und Hierarchien Die Metadaten des Data-Warehouse-Systems werden im Repository abgelegt. SS 2007 Datenbanken Seite 476 Data-Warehouse-Manager... ist eine zentrale Komponente eines Data-Warehouse Systems. Ist verantwortlich für • Initiierung, Steuerung und Überwachung der einzelnen Prozesse. Man spricht von Ablaufsteuerung. • Initiierung des Datenbeschaffungsprozesses. • Nach Auslösen des Ladeprozesses • Überwachung der weiteren Schritte (Bereinigung, Integration ...). • Koordination der Reihenfolge der Verarbeitung. • Im Fehlerfall: Protokollierung der Fehler, Wiederanlaufmechanismen. SS 2007 Datenbanken Seite 477 Data-Warehouse-Systeme mit sehr großen Datenmengen Problematik bei großen Datenmengen • langen Bewirtschaftungsprozessen. • lange Antwortzeiten bei den Analysen durch die Nutzer. => Optimierungen sowie Verteilungen der Datenbasis sind notwendig. Lösungsansätze • Verteilung der Daten auf Data Marts. • Einsatz von Optimierungstechniken. SS 2007 Datenbanken Seite 478 Bildung von Data Marts • spezielle Teildatenmenge eines Data Warehouses, z.B. für eine bestimmte Abteilung des Unternehmens. Analyse A Analyse B Analyse C Analyse D Data Marts Data Warehouse Laden SS 2007 Datenbanken Seite 479 Data Marts Gründe für die Aufteilung in Data Marts: • • • • • • • • Besserer Übersichtlichkeit Leichtere Pflege Eigenständigkeit Datenschutz, da nur eine Teilsicht auf die Daten gewährt ist Organisatorische Aspekte (Unabhängigkeit von Abteilungen) Verringerung des Datenvolumens Performanzgewinn Verteilung der Last SS 2007 Datenbanken Seite 480 Optimierungstechniken 1. Indexstrukturen • Sehr große Datenvolumen und ein häufiges Lesen dieser Daten erfordern eine Technik, mit der die komplexen Anfragegebilde in vernünftiger Zeit und mit möglichst geringem Aufwand bewältigt werden können. Dazu bedient man sich verschiedener Indizierungstechniken. • Im Data Warehouse werden Daten über längere Zeit nicht verändert => • Die in Datenbanksystemen üblichen B-Bäume sind für den Einsatz im Data Warehouse nicht geeignet. Im Data Warehouse werden Bitmap-Indizes eingesetzt. Vorteil: Daten mit großen Wertebereichen werden speicherplatzeffizient indiziert und Bereichsanfragen schneller bearbeitet. SS 2007 Datenbanken Seite 481 Standard-Bitmap-Index Bsp.: Dimension Kunde, Attribut Geburtsmonat M. Ein Bitmap-Index soll auf Attribut ‚Geburtsmonat‘ erzeugt werden. Monat Dez Nov Okt Sep Aug Jul Jun Mai Apr Mar Feb Jan M B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 5 0 0 0 0 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 0 0 0 11 1 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 0 0 0 Bei Anfrage nach allen Tupeln mit Geburtsmonat April wird der BitmapVekor B3 geladen und für jede 1 in dem Vektor wird das entsprechende Tupel selektiert. Nachteil: für jede Ausprägung eines Attributs muss ein Bitmap-Vektor angelegt werden => hoher Speicherplatzbedarf. SS 2007 Datenbanken Seite 482 Mehrkomponenten-Bitmap-Index • Löst das Speicherproblem • Die jeweiligen Werte von M werden kodiert. Bsp.: Jeder Wert x von M zwischen 0 und 11 kann dargestellt werden durch x=4*y+z mit y in {0,1,2}, z in {0,1,2,3}. x y Z M B2,1 B1,1 B0,1 B3,0 B2,0 B1,0 B0,0 5 0 1 0 0 0 1 0 3 0 0 1 1 0 0 0 11 1 0 0 1 0 0 0 3 0 0 1 1 0 0 0 => nur noch 7 Vektoren müssen gespeichert werden. Aber Lesezugriff für eine Punktabfrage immer 2 Leseoperationen. Standard-Bitmaps und Mehrkomponenten-Bitmaps sind für Punktabfragen gut geeignet. SS 2007 Datenbanken Seite 483 Bereichskodierte Bitmap-Indizes • Bits aller Bitmap-Vekoren werden auf eins gesetzt, die größer oder gleich dem gegebenen Wert sind. Bsp.: Monat Dez Nov Okt Sep Aug Jul Jun Mai Apr Mar Feb Jan M B 11 B 10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 5 1 1 1 1 1 1 1 0 0 0 0 0 3 1 1 1 1 1 1 1 1 1 0 0 0 11 1 0 0 0 0 0 0 0 0 0 0 0 3 1 1 1 1 1 1 1 1 1 0 0 0 Anfrage alle Werte mit 2 <=M<=7 würde bei Standard-Bitmaps 6 Vektoren lesen, hier durch ((NOT B1) AND B7). Für Punktabfrage allerdings auch zwei Abfragen: alle Kunden, die im April Geburtstag haben ((NOT B2) AND B3). SS 2007 Datenbanken Seite 484 2. Partitionierung Bildet Ergänzung zu den Indexverfahren. Stammt aus dem Bereich verteilter und paralleler Datenbanksysteme. Horizontale Partitionierung Master-Tabelle Vertikale Partitionierung SS 2007 Datenbanken Seite 485 Einsatz im Data-Warehouse ist meist die Range-Partitionierung: • häufig angefragte Datenbereiche sollen in getrennten Partitionen liegen. Bsp.: Fakttabelle ‚Verkauf‘ soll partitioniert werden. Partition mit Daten für alle Tage vor 2002, Partition mit Daten >= 2002 Oracle 8i und höher unterstützt diese Partitionierung: CREATE TABLE Verkauf (Produkt_ID NUMBER, Zeit_ID DATE, Geo_ID NUMBER, Verkäufer_ID NUMBER) PARTITION BY RANGE(Zeit_ID) ( PARTITION vor_2002 VALUES LESS THAN (TO_DATE (‚01-JAN-2002‘,‘DD-MONYYYY‘), PARTITION nach_2002 VALUES LESS THAN (MAXVALUE)) SS 2007 Datenbanken Seite 486 Zusammenfassung Ein Data Warehouse ist eine physische Datenbank • • • • • die meist große Datenmengen aus verschiedensten Datenquellen integriert. dient der Analyse (d.h. ein adäquater Modellierungsansatz ist erforderlich) - erreichbar durch ein multidimenisonales Datenmodell - OLAP. Daten sind in der Regel nicht modifizierbar. • Ein Data Warehouse ist in ein Data-Warehouse-System eingebunden. • • Meist werden die Daten auf ‚Data Marts‘ aufgeteilt. Spezielle Optimierungstechniken wie Bitmap-Indizes und Range Partitionierung sind erforderlich. SS 2007 Datenbanken Seite 487 Literaturausschnitt Bauer, A.; Günzel, H.: Data-Warehouse-Systeme. Dpunkt.verlag Heidelberg 2001 Inmon, W.H.: Building the Data Warehouse. Second Edition, John Wiley & Sons, New York, 1996. Kimball, R.: The Data Warehouse Toolkit. John Wiley & Sons, New York 1996. Web-Adressen: German OLAP and Data Warehouse Forum: http://www.winf.ruhr-uni-bochum.de/olap/ http://www.datawarehousing.com/ SS 2007 Datenbanken Seite 488 Wird eine gespeicherte Prozedur das erste Mal ausgeführt, werden die folgenden Schritte durchlaufen. • Die Prozedur wird auf ihre Bestandteile hin analysiert • Die Objekte, die vom Quelltext referenziert werden (Tabellen, Views etc) werden auf ihr Vorhandensein hin untersucht. Man bezeichnet dies auch als Auflösung. • Name und Code zum Erstellen der Prozedur werden in Systemtabellen gespeichert. • Es wird eine optimierte Abfragestruktur erstellt und gespeichert. • Die Abfragestruktur wird gelesen, übersetzt und als Ausführungsplan im Prozedurcache gespeichert und ausgeführt. SS 2007 Datenbanken Seite 489 Wird eine Stored Procedure erneut ausgeführt, müssen diese Schritte nicht mehr durchgeführt werden. Es wird wird nur noch der Ausführungsplan aus dem Prozedurcache gelesen und ausgeführt. SS 2007 Datenbanken Seite 490