Datenbanken Relationale Datenbanksysteme Relationale Datenbanksysteme Einfache Grundidee: speichere alle Daten in Tabellen Relational, weil ... abgeleitet vom mathematischen Konzept der Relationen als Menge von Tupeln (etwa: Tabellenzeilen) mit Werten für Attribute mit unterschiedlichen Wertebereichen (Tabellenspalten) Überwiegende Mehrheit aktueller DBMS sind relationale DBMS → RDBMS Die standardisierte Datenbanksprache SQL implementiert relationales Datenmodell (mit kleinen Abweichungen von der Theorie und von verwendeten Begriffen) Hinweis: im folgenden gehen wir von in SQL verwendeten Begriffen aus Gegenwärtiger Stand: objekt-relationale DBMS (ORDBMS) (SQL:2008) mit objektorientierten Erweiterungen (in dieser Vorlesung nicht behandelt) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–16 Datenbanken Relationale Datenbanksysteme Aktuell verbreitete DBMS Kommerzielle relationale DBMS, z.B. ◮ ◮ ◮ Oracle Database IBM DB2 Microsoft SQL Server Freie (Open Source) RDBMS, z.B. ◮ ◮ MySQL PostgreSQL Speziallösungen: ◮ ◮ Für Analyse großer Datenmengen in Data Warehouse Systemen, z.B. Teradata Andere Datenmodelle, wie z.B. objektrorientierte DBMS (Objectivity, Versant) oder XML DBMS (Xindice, eXist) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–17 Datenbanken Relationale Datenbanksysteme RDBMS Grundkonzepte: Tabellen (-2,09C'+0 AB19'+0 @0821- :?3301 ()*2340 :0%01 =>' /0-01 (08'&-%'9 7!#!"# < ;!6!"# . "5!6!"# 7 ()*2340 /0-01 "!.!"# ()*+%,- $%&' !"!"# Tabellen haben Namen und bestehen aus Spalten und Zeilen Schema der Tabelle besteht aus fester Anzahl von Spalten Spalten repräsentieren Eigenschaften – haben Namen und festgelegten Datentyp Zeilen repräsentieren eigentliche Daten – haben für jede Spalte einen Spaltenwert Tabelle hat beliebiebige Anzahl von Zeilen (inklusive leerer Tabelle) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–18 Datenbanken Relationale Datenbanksysteme RDBMS Grundkonzepte: Schlüssel 2)968=) '()*+* +(58 BC*=(58 A8<9*) !&## '@::8* >?( #-.- .,$ !"$ $ %!### 2349:;8 '808* 78)8* 28<(1)0(= %-&- .,! "-&- .,# !!"# 2349:;8 78)8* -!- .,, !!"#$ 234506) /01( ,- - .,, Schlüssel (auch Primärschlüssel) erlauben eindeutige Identifizierung von Datensätzen (Zeilen) innerhalb einer Tabelle Einzelne Spalte oder Kombination mehrerer Spalten, deren Wert(ekombination) innerhalb der Tabelle einmalig ist Existieren solche Spalten nicht, kann eine Spalte mit künstlich erzeugten eindeutigen Werten (Surrogatschlüssel) eingeführt werden Dient vor allem der Referenzierung der Daten aus anderen Tabellen → Fremdschlüssel Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–19 Datenbanken Relationale Datenbanksysteme RDBMS Grundkonzepte: Fremdschlüssel Tabellen beinhalten bloß Zeilen mit fester Anzahl von atomaren Werten Komplexere Beziehungen zwischen Daten werden über Fremdschlüsselbeziehungen zwischen Zeilen dargestellt: Verwendung des Schlüssels einer Zeile als spezieller Spaltenwert in einer anderen Zeile(meist aus einer anderen Tabelle) N:1-Beziehung: eine beliebige Anzahl (N) Datensätze in einer Tabelle beziehen sich auf einen anderen Datensatz ◮ Beispiel: Studenten wird genau ein Studiengang zugeordnet, ein Studiengang umfaßt viele Studenten N:M-Beziehung: beliebig viele (N) Datensätze einer Tabelle können sich auf beliebig viele (M) andere Datensätze beziehen ◮ Beispiel: ein Student kann viele Vorlesungen besuchen, eine Vorlesung wird von vielen Studenten besucht Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–20 Datenbanken Relationale Datenbanksysteme RDBMS Grundkonzepte: Fremdschlüssel N:1 40.G,;0 170/8/ 87F, DE/;7F, +,-./0 4+56 !)$''! 1C??,/ AB7 '#%#!%&* 12 !)"*!* 4=>.?@, <,0,/ (#$#!%&) 312 !()''' 1,:,/ 4,-790:7; !"#$#!%&' 12 40.G:,;I7;I 4+56 2,@,:=>;.;I 12 179=>:;,;-7. 312 3:/09=>7H09:;I,;:,./J179=>:;,;-7. Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–21 Datenbanken Relationale Datenbanksysteme RDBMS Grundkonzepte: Fremdschlüssel N:M /*27-8* ?D+3-A28E ()*+,+ ,)6- ?=@ G-4-.01828E !#'$$! (533-+ <=> <+2873)E-8B7-+B=8FD+6)*.C !#%&!& /01234- :; :D8A*+2C*.D8A-3-6-8*- !"#$$$ (-.-+ 9( 9-018.A01-B(-01)8.C 9-.38)16- Eike Schallehn ()*+,+ ?=@ /-6-A*-+ !#'$$! <=> H./-IJIK !#'$$! <=> /D/-IK !#'$$! 9( /D/-IK !#%&!& :; H./-I#IJ Grundlagen der Informatik für Ingenieure 2008/2009 6–22 Datenbanken Relationale Datenbanksysteme Weitere RDBMS Konzepte NULL-Werte: kann ein Spaltenwert nicht angegeben werden (weil z.B. nicht bekannt oder nicht existent), kann der vordefinierte und typunabhängige Wert NULL verwendet werden Für Spalten und Tabellen können Integritätsbedingungen (Integrity Constraints) angegeben werden, die konsistenten Zustand beschreiben ◮ ◮ ◮ ◮ ◮ ◮ Eindeutigkeit von Spaltenwerten (UNIQUE) Spaltenwert muss angegeben werden (NOT NULL) Spaltenwert ist Schlüssel (PRIMARY KEY = UNIQUE + NOT NULL) Wertebereichseinschränkungen Referentielle Integrität: Fremschlüsselwert muss als Primärschlüssel in korrespondierender Tabelle existieren ... Zahlreiche weitere Konzepte hier nicht diskutiert Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–23 Datenbanken Relationale Datenbanksysteme Operationen auf Tabellen Anfrageoperationen basieren auf Relationaler Algebra Eingabe: Relation(en) Ausgabe: Relation(en) Grundlegende Operationen ◮ ◮ ◮ ◮ Selektion: Auswahl von Tupeln (Zeilen) durch Angabe einer Auswahlbedingung Projektion: Auswahl von Attributen (Spalten) durch Angabe von deren Namen Verbundoperationen: (engl. Joins) Zusammenführen von Tupeln verschiedener Relationen (Tabellen) über Verfolgung von Fremdschlüsselbeziehungen oder durch die Angabe von Verbundbedingungen Mengenoperationen: zum Beispiel Vereinigung oder Schnittmenge von Relationen → umgesetzt durch Anfragesprache SQL Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–24 Datenbanken Relationale Datenbanksysteme SQL – Die Structured Query Language Deklarative Anfragesprache ◮ ◮ ◮ SQL Anfrage beschreibt lediglich zu liefernde Daten RDBMS entscheidet selbständig, wie Ergebnis effizient berechnet werden kann Im Gegensatz zu imperativen Programmiersprachen, die genauen Ablauf der Berechnung festlegen Geschichte ◮ ◮ ◮ ◮ Entwickelt in den 1970ern bei IBM Erfolgreiche Standardisierung seit 1986 SQL-92 umfaßt relationalen Sprachkern und wird von vielen RDBMS vollständig unterstützt Aktuelle Version SQL:2008 umfaßt zahlreiche Erweiterungen (Objektorientierung, XML, Multimedia, etc.) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–25 Datenbanken Relationale Datenbanksysteme Teile von SQL Anfragesprache (SQL-Kern): lesende Zugriffe durch Umsetzung der relationalen Operationen zum Auswahl von Zeilen, Spalten sowie Verbund und Mengenoperationen auf Tabellen + SQL-spezifische Erweiterungen (z.B. Sortierung, Gruppierung, etc.) Data Manipulation Language (DML): Erzeugen, Ändern und Löschen von Datensätzen in Tabellen Data Definition Language (DDL): Erzeugen, Ändern und Löschen von Tabellen sowie Indexen (Baum- oder Hash-Datenstrukturen für Zugriffsbeschleunigung) und Sichten (aus Anfragen definierte virtuelle Tabellen) Weitere Teile: ◮ ◮ Zugriffsrechte (Data Control Language) Transaktionen zur Steuerung der Ablaufkonsistenz Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–26 Datenbanken Relationale Datenbanksysteme Überblick SQL Im folgenden Teile von SQL erklärt entsprechend Reihenfolge der Nutzung – entspricht nicht unbedingt Bedeutung 1 Erzeugung von Tabellen → DDL → Einmalig genutzt beim Erstellen der Datenbank 2 Einfügen von Daten → DML → Erzeugung und Modifikation in meisten Anwendungen seltener als ... 3 Lesen der Daten → Anfragesprache → meist sehr oft angewandt Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–27 Datenbanken Relationale Datenbanksysteme SQL DDL: Operationen für Tabellen Erzeugen einer Tabelle CREATE TABLE student ( matrnr CHAR(6) PRIMARY KEY, name VARCHAR(50) NOT NULL, vorname VARCHAR(50)NOT NULL, geburt DATE, sgid CHAR(5) ); Ändern einer Tabelle: Hinzufügen/Löschen/Ändern von Spalten, Constraints, etc. ALTER TABLE student (ADD|DROP|MODIFY|CHANGE) ...; Löschen einer Tabelle DROP TABLE student; Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–28 Datenbanken Relationale Datenbanksysteme SQL DDL: Basisdatentypen laut SQL Standard Ganzzahlige Datentypen: smallint, int bzw. integer, bigint Festkommazahlen (garantierte Genauigkeit der Nachkommastellen): numeric (n, m) bzw. decimal (n, m) Gleitkommazahlen: float (m), real, double Zeichenketten character (n) bzw. char (n), varchar (n) bzw. character varying (n) Zeiten und Datumsangaben: date, time, timestamp Logische Werte: boolean Große Binär- oder Textdaten blob (n) bzw. binary large object (n), clob Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–29 Datenbanken Relationale Datenbanksysteme SQL DDL: Indexe und Sichten Erzeugen einer logischen Sicht (virtuelle Tabelle) durch Anfrage (→) CREATE VIEW alte_studenten AS SELECT * FROM student WHERE geburt < ’1980-01-01’; ◮ ◮ Sicht kann (mit Einschränkungen bzgl. Änderungen) wie eine normale Tabelle genutzt werden Daten werden aber nicht erneut (redundant) abgespeichert Erzeugen eines Index CREATE INDEX studenten_name ON student (name); ◮ Erzeugt eine Indexdatenstruktur – in den meisten DBMS einen B-Baum – welche eine schnelle Suche nach Datensätzen mit der angegebenen Spalte als Suchkriterium, z.B. bei SELECT * FROM student WHERE name = ’Müller’; ◮ System erkennt automatisch, dass hier der Index verwendet werden kann Ändern und Löschen von Indexen über ALTER und DROP Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–30 Datenbanken Relationale Datenbanksysteme SQL DML: Daten Einfügen, Ändern, Löschen Gebräuchlichste Form des INSERT-Statements zum Einfügen von Zeilen INSERT INTO student VALUES (’174551’,’Müller’,’Eva’,’1982-09-05’,’MB’); Ändern und Löschen von Zeilen basiert auf Angabe einer Bedingung in WHERE-Klausel (siehe Anfragesprache →), welche Zeilen davon betroffen sein sollen UPDATE student SET name = ’Meier’ WHERE matrnr = ’174551’; DELETE FROM student WHERE matrnr = ’173212’; Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–31 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache Grundaufbau durch SFW-Block SELECT <Projektion auf Ausgabespalten> FROM <Eingabetabellen ggf. mit Verbund> WHERE <Selektionsbedingungen>; SELECT und FROM müssen angegeben werden WHERE ist optional aber meist verwendet Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–32 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Projektion Projektion ist die Auswahl von in der Ergebnisrelation enthaltenen Spalten (Auswahl aus Eingaberelation) In SQL umgesetzt in der SELECT Klausel: ◮ ◮ Erfordert Angabe der Spaltennamen Erlaubt auch Umbenennung durch AS, z.B. SELECT name AS nachname ...; ◮ Erlaubt im Zusammenhang mit Gruppierung (→) auch Aufruf von Aggregatfunktionen zur Berechnung von einem einzelnen Spaltenwert aus ggf. vielen Gruppenwerten (z.B. Mittelwert, Anzahl, Summe, Minimum, Maximum, ...) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–33 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Projektion /2 +09/7C0 !*08B8 B*.7 GH8C*.7 >7?980 +>@A %1<33% !F::78 DE* 3$&$%&#4 !" %124%4 +,-9:;7 57078 =$<$%&#1 %=1333 !7(78 +7?*)0(*C %2$<$%&#3 !" %1123% +,-9:;7 57078 %$1$%&## 56 %11234 +,-.(/0 '()* #$%$%&## SELECT name, vorname FROM student; Eike Schallehn !" !" B*.7 GH8C*.7 !F::78 DE* +,-9:;7 57078 !7(78 +7?*)0(*C +,-9:;7 57078 +,-.(/0 '()* Grundlagen der Informatik für Ingenieure 2008/2009 6–34 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Projektion /3 SELECT DISTINCT name, vorname FROM student; 8#'* 67.,#'* -511*. 34# $%&012* /*)*. -*!*. $*+#")!#, $%&'!() !"# Eliminierung von Duplikaten passiert (im Gegensatz zur Theorie der relationalen Algebra) in SQL nicht automatisch Erfordert Angabe des Schlüsselworts DISTINCT Vorsicht: Duplikateliminierung ggf. sehr aufwändige Operation, da u.U. Sortierung oder Erstellung einer Hash-Tabelle notwendig ist Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–35 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Selektion Selektion ist die Auswahl von Zeilen der Eingabetabelle für die Ergebnistabelle In SQL durch die WHERE-Klausel umgesetzt Selektion hat als Parameter eine Bedingung, welche das Auswahlkriterium umfaßt Prädikate sind einfache (atomare) Bedingungen, zum Beispiel name = ’Müller’ kontostand > 0 student.sgid = studiengang.sgid immaDatum < exmaDatum Komplexe Bedingungen können durch logische Operatoren AND, OR, NOT (Negation) etc. sowie Klammerung gebildet werden Auch existenz- und allquantifizierte geschachtelte Anfragen als Prädikate möglich (hier nicht behandelt) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–36 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Selektion /2 SELECT * FROM student WHERE name = ‘Müller‘ OR name = ‘Schulze‘ '2%$3$ 32?! <=$>2?! ,-011, ';77!$ 9:2 1#%#"%&4 '( ,-./,/ )56#78! 4!%!$ 2#3#"%&$ &'( "$$01" *+,-./' '(') "#$#"%&& ! Eike Schallehn !"#$% Grundlagen der Informatik für Ingenieure ) *+ 2008/2009 6–37 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Selektion /3 SELECT * FROM student WHERE name LIKE ‘S%‘; !*08B8 B*.7 CD8E*.7 >7?980 +>@A %124%4 +,-9:;7 57078 <$=$%&#1 !" %1123% +,-9:;7 57078 %$1$%&## %11234 +,-.(/0 '()* #$%$%&## 56 !" SQL beinhaltet zahlreiche spezielle Prädikate, als Operatoren oder Funktionen Hier: häufig verwendete Textähnlichkeit durch Wildcard-Muster mit LIKE (% als Auslassung einer Zeichenfolge beliebiger Länge, _ als Auslassung eines einzelnen Zeichens) Im Beispiel: alle Studenten, deren Nachname mit S beginnt Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–38 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Verbund Verbund (engl. Join) macht aus Zeilen zweier (oder mehrerer) Eingabetabellen eine Zeile der Ergebnistabelle Sehr wichtige Operation, da wegen einfacher Struktur des relationalen Datemodells zusammengehörige Daten meist über mehrere Tabellen verteilt abgespeichert werden müssen (z.B. durch Normalisierung, s.u.) Zahlreiche spezielle Verbundoperationen in SQL durch verschiedenen Syntax unterstützt Einfachste und gebräuchlichste Form des Verbundes in SQL: ◮ ◮ Angabe der zu verbindenden Tabellen in der FROM-Klausel (kommasepariert) Angabe einer Verbundbedingung (z.B. Primärschlüssel = Fremdschlüssel) in der WHERE-Klausel Wichtige Alternativen: Natural Join und Kartesisches Produkt (s.u.) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–39 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Verbund /2 %/6:53/ #1/.H. H1@5 LM.31@5 &586./ %&'( =AFCC= #KEE5. IJ1 C<><=>;D #$ =ABD=D %0)6E95 G<F<=>;A "#$ =GACCC #5,5. =B<F<=>;C #$ =AABC= %0)6E95 =<A<=>;; ! =AABCD %0)@,:/ ;<=<=>;; "#$ 5/5. %581+/,13 5/5. ?,+1 %/6:,534134 %&'( $595,0)3634 #$ #1+0),353816 "#$ ",./+0)12/+,3453,56.7#1+0),353816 ! Eike Schallehn )*+,Grundlagen der Informatik für Ingenieure 2008/2009 6–40 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Verbund /3 s.name, s.vorname, sg.bezeichnung AS studiengang FROM student s, studiengang sg WHERE s.sgid = sg.sgid; SELECT >'2+ <=")'2+ 1#,3!+)*')* .;77+" 9:' 1%&,78+ 4+#+" .+!+" 1+/'$#!') .'$%&!)+)/', 1%&,78+ 4+#+" 4&5$!6 1%&2!3# 0!$' Eike Schallehn .'$%&!)+)/', !"#$%&'(#$!)*+)!+,"-.'$%&!)+)/', !"#$%&'(#$!)*+)!+,"-.'$%&!)+)/', Grundlagen der Informatik für Ingenieure 2008/2009 6–41 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Verbund /4 Gleiches Ergebnis alternativ über NATURAL JOIN möglich SELECT name, vorname, bezeichnung AS studiengang FROM student NATURAL JOIN studiengang; ◮ ◮ ◮ Kann direkt in der FROM-Klausel angegeben werden Funktioniert nur, wenn namensgleiche Spalten in beiden Tabellen existieren Für diese Spalten werden Zeilen mit gleichen Spaltenwerten verbunden Was passiert, wenn keine Verbundbedingung angegeben wird? → Berechnung des kartesischen Produkts (Kreuzprodukt) ◮ ◮ Jede Zeile der einen Eingabetabelle wird mit jeder Zeile der anderen Eingabetabelle verbunden (alle möglichen Kombinationen) Vorsicht: Ergebnis kann u.U. sehr groß sein Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–42 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Kartesisches Produkt T1 % $ # " ! SELECT * FROM t1,t2; T2 - , + * ) ( ' #& Eike Schallehn % $ - , # " + * # " ) ( # " ' #& ! + * ! ) ( ! ' #& Grundlagen der Informatik für Ingenieure 2008/2009 6–43 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Gruppierung SELECT sgid, COUNT(*) AS anzahl FROM student GROUP BY sgid; %&'( +,-./0 #$ * "#$ * ! ) Gruppierung fasst Zeilen mit gleichen Werten für Gruppierungsspalten zu einer Zeile zusammen Spalten, die nicht Gruppierungsspalten sind, und somit keine gleichen Werte haben, können mit Aggregatfunktionen zusammengefaßt werden, z.B ◮ ◮ ◮ ◮ ◮ COUNT() - Anzahl von Werten SUM() - Summe der Werte AVG() - Mittelwert MIN() - Minimum MAX() - Maximum Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–44 Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Sortierung SELECT * FROM student ORDER BY matrnr ASC; !8,-C- C8=+ GH-;8=+ @+71-, .@AB &#)666 !+:+- .+789,:8; &4$%$&'(6 !" &)45&5 ./0123+ *+,+- #$%$&'() &)%66& !F22+- DE8 6$'$&'(5 !" &))46& ./0123+ *+,+- &$)$&'(( *? &))465 ./0=:>, <:98 ($&$&'(( !" !" Angabe eines Sortierkriteriums für die Ergebnistabelle bestehend aus Spalte(n) und Reihenfolge ASC (ascending = aufsteigend, default) oder DESC (descending = absteigend) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–45 Reihenfolge der Zeilen in der Ergebnistabelle erhält damit Datenbanken Relationale Datenbanksysteme SQL Anfragesprache: Mengenoperationen SELECT * FROM t1 UNION SELECT * FROM t2; + ) " % ' & * ( ! $ "# Mengenoperationen UNION (Vereinigung), INTERSECT (Schnittmenge) und EXCEPT (Mengendifferenz) Erwartet für Eingabetabellen kompatible Schemata (gleiche Spaltenanzahl mit kompatiblen Datentypen) Eike Schallehn Grundlagen der Informatik für Ingenieure 2008/2009 6–46