relationale Algebra und SQL

Ähnliche Dokumente
Informatik II Vorlesung am D-BAUG der ETH Zürich. Vorlesung 12, 2017 Datenbanksysteme: Datendefinition in SQL, Kompliziertere Datenbankabfragen

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

Informatik II Vorlesung am D-BAUG der ETH Zürich. Vorlesung 12, Datenbanksysteme: Datendefinition in SQL, Kompliziertere Datenbankabfragen

Universität Augsburg, Institut für Informatik WS 2008/2009 Prof. Dr. W. Kießling 23. Nov Dr. A. Huhn, M. Endres, T. Preisinger Lösungsblatt 5

Datenbanksysteme 2013

Wiederholung VU Datenmodellierung

Kapitel 8: Datenintegrität

Wiederholung VU Datenmodellierung

Grundlagen: Datenbanken

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Datenbanksysteme noch Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

Datenbanksysteme noch Kapitel 7: SQL. Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Übung 4. Tutorübung zu Grundlagen: Datenbanken (Gruppen Do-T24 / Do-T31 WS 2016/2017)

Datenbanksysteme SS 2007

Übung 9. Tutorübung zu Grundlagen: Datenbanken (Gruppen Do-T24 / Do-T31 WS 2016/2017)

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #4. SQL (Teil 2)

DATENBANKSYSTEME: SQL

Diskussion: Personal (1)

Entity Relationship Modell

Abfragen (Queries, Subqueries)

Relationale Anfragesprachen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Dr. Thomas Neumann

Wirtschaftsinformatik 7a: Datenbanken. Hochschule für Wirtschaft und Recht SS 16 Dozent: R. Witte

Relationale Entwurfstheorie (Teil 2)

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

(4 Punkte) Aufgabe 1: Relationenalgebra - Relationenkalkül

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Kapitel 5 Dr. Jérôme Kunegis. SQL: Grundlagen. WeST Institut für Web Science & Technologien

Fortsetzung: Projektion Selektion. NULL Werte

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Aufgabe 7. Sei die Schema R(A, B, C, D, E) mit folgenden fkt. Abh.:

Übersicht der wichtigsten MySQL-Befehle

6. Tutorübung zu Grundlagen: Datenbanken

Rückblick: Relationale Normalisierung

8. Tutorübung zu Grundlagen: Datenbanken

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Es wird empfohlen folgendes Material anzusehen:

Datenbanksysteme Vorlesung vom noch Kapitel 7: SQL. Oliver Vornberger. Institut für Informatik Universität Osnabrück

Datenintegrität. Kapitel 5 1

Grundlagen: Datenbanken

SQL. Ziele. Grundlagen von SQL. Beziehung zur relationalen Algebra SELECT, FROM, WHERE. Joins ORDER BY. Aggregatfunktionen. dbis.

Datenbanksysteme noch Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

5. Relationale Entwurfstheorie

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Datenintegrität. Kapitel 5 1

Rückblick. SQL bietet viele Möglichkeiten zur Anfrageformulierung

Anfragebearbeitung. Logische Optimierung Physische Optimierung (Kostenmodelle Tuning ) Kapitel 8 1

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

Rückblick: Relationale Entwurfstheorie

Rückblick: Relationales Modell

Wirtschaftsinformatik 7a: Datenbanken. Dozent: R. Witte

Oracle 10g Einführung

Vorlesung Datenbanksysteme vom

insert, update, delete Definition des Datenbankschemas select, from, where Rechteverwaltung, Transaktionskontrolle

Wir haben folgende Ausprägung der Relation Studenten:

Grundlagen: Datenbanken WS 15/16

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

SQL als Zugriffssprache

Kapitel 8 Dr. Jérôme Kunegis. SQL Continued. WeST Institute for Web Science & Technologies

Datenbanken 6: Normalisierung

Daniel Warner SQL. Das Praxisbuch. Mit 119 Abbildungen. Franzis

Fortsetzung: Kreuzprodukt, Inner Join. Sortierung. Existenzquantor, Mengenvergleich Gruppierung, Aggregate Cast-Operator

Datenbanken (Übung 12)

Übung 3. Tutorübung zu Grundlagen: Datenbanken (Gruppen Do-T24 / Do-T31 WS 2016/2017)

Rückblick: Relationales Modell

Rückblick: Datenbankentwurf

2. Relationale Datenbanken

Wiederholung: Relationale Algebra

Relationales Datenmodell Relationale Algebra

3. Relationales Modell & Algebra

Datenbanken 6: Normalisierung

Kapitel 11: Relationale Entwurfstheorie

Zerlegung einer Relation

Grundlagen: Datenbanken

Übungsblatt 10: Lösungsvorschlag

Kapitel 6. Datenmalipulation (DML) d. h. insert, update, delete, select im Relationenmodell (in Oracle)

GROUP BY, HAVING und Sichten

Datenbanksysteme 2015

3. Relationales Modell & Algebra

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Finalklausur zur Vorlesung Datenbanksysteme I Wintersemester 2003/2004 Prüfer: Prof. R. Bayer, Ph.D. Datum: Zeit: 16.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Datenmodelle und Datenbanken 1 Internet-Datenbanken

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort... 13

Datenbanksysteme 2009

Datenintegrität. Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Übung Datenbanksysteme Normalformen

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

2. Übungsblatt 3.0 VU Datenmodellierung

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

Transkript:

Entity-Relationship-Modell Seite 1 / 22 Entität: Student Vorlesung Attribut: Name Geburtstag Beziehung: besucht Schlüsselattribut: Matrikelnummer Schreibweise: Entität : {[ Schlüsselattribut : datentyp, Attribut 1 : datentyp, Attribut 2 : datentyp, ]} Beispiel: Student : {[ Matrikelnummer : int, Name : string, Geburtstag : date]} Vorlesung : {[ Nr : int, Titel : string ]} besucht : {[ Matrikelnummer : int, Nr : int, Datum : date]} Name Geburtstag Datum Nr Titel Matrikelnummer Student M besucht N Vorlesung Eine Vorlesung wird von M besucht. Ein Student besucht N Vorlesungen. Funktionalitäten Es gibt vier verschiedene Funktionalitäts-Kombinationen: Bei einer 1:N bzw. N:1 Funktionalität kann man des Schema vereinfachen indem man das Schlüsselattribut der 1-Entität und alle Attribute der Beziehung als Fremdschlüssel in die N-Entität einfügt. Min-Max-Schreibweise Bei der min-max-schreibweise gibt man die minimale Matrikelnummer Name Student Geburtstag (1,*) Vorlesungen werden von einem besucht. (1,*) besuchen eine Vorlesung. Datum (1,*) (1,*) besucht Nr Vorlesung Titel

Vereinigung Seite 2 / 22 LMU 75345 Emily Medizin = 85676 Sofia Philosophie München 75345 Emily Medizin 85676 Sofia Philosophie Schnittmenge LMU 75345 Emily Medizin 85676 Sofia Philosophie = hardcore Differenz - LMU 75345 Emily Medizin - 85676 Sofia Philosophie = nicht-hardcore MatrNr Name Fach

Symmetische Differenz Seite 3 / 22 LMU 75345 Emily Medizin 85676 Sofia Philosophie = nicht-hardcore München MatrNr Name Fach 75345 Emily Medizin 85676 Sofia Philosophie Kartesisches Produkt LMU = 75345 Emily Medizin LMU Matr Nr Name Fach 75345 Emily Medizin 75345 Emily Medizin 75345 Emily Medizin 75345 Emily Medizin Relationale Division hören MatrNr VorNr 47542 1001 54346 1005 46534 1001 46534 1002 18572 1001 18572 1002 18572 1011 67893 1002 67893 1009 Grundlagen Vorlesungen VorNr = 1001 1002 hören Grundlagen 46534 18572 MatrNr

Projektion π β Seite 4 / 22 π MatrNr, Name MatrNr Name 54346 Max 46534 Lisa 47542 Tom 12246 Anna 67893 Mario 18572 Lena Selektion σ β σ MatrNr = 67893 Umbenennung ρ β ρ LMU LMU

Theta Join θ Seite 5 / 22 TUM.Fach = LMU.Fach LMU 67577 Carlo Biologie 75345 Emily Medizin 85676 Sofia Philosophie 35636 Clara Physik = München 67577 Carlo Biologie 35636 Clara Physik 75345 Emily Medizin Natural Join hören MatrNr VorNr 47542 1001 54346 1005 46534 1001 = 46534 1002 18572 1001 18572 1002 18572 1011 67893 1002 67893 1009 VorNr 1005 1001 1002 1001 1002 1009 1001 1002 1011 Semi Join θ hören MatrNr VorNr 47542 1001 54346 1005 46534 1001.MatrNr = hören.matrnr = 46534 1002 18572 1001 18572 1002 18572 1011 67893 1002 67893 1009

Outer Join θ MatrNr Name Fach hören MatrNr VorNr 47542 1001 54346 1005 46534 1001 46534 1002.MatrNr = hören.matrnr = 18572 1001 18572 1002 18572 1011 67893 1002 67893 1009 84626 1010 Seite 6 / 22 VorNr 1001 1005 1001 1002 1001 1002 1011 1002 1009 NULL Full Outer Join θ hören MatrNr VorNr 47542 1001 54346 1005 46534 1001.MatrNr = hören.matrnr = 46534 1002 18572 1001 18572 1002 18572 1011 67893 1002 67893 1009 84626 1010 VorNr 1001 1005 1001 1002 1001 1002 1011 1002 1009 NULL 84626 NULL NULL 1010 Anti-Semi-Join θ hören MatrNr VorNr 47542 1001 54346 1005 46534 1001.MatrNr = hören.matrnr 46534 1002 = 18572 1001 18572 1002 18572 1011 67893 1002 67893 1009 84626 1010 hören MatrNr VorNr 84626 1010

SELECT, FROM Seite 7 / 22 Spalten aus einer Tabelle auslesen. DISTINCT SELECT Name FROM ; Name Max Lisa Tom Anna Mario Lena Tom Sofi Spalten aus einer Tabelle auslesen ohne Duplikate. SELECT DISTINCT Name FROM ; Name Max Lisa Tom Anna Mario Lena Sofi WHERE Spalten aus einer Tabelle auslesen unter bestimmten Bedingungen. SELECT Name FROM WHERE.Fach = 'Biologie' ; Name Max Sofi

AND & OR Seite 8 / 22 Spalten aus einer Tabelle auslesen unter bestimmten Bedingungen. SELECT Name FROM WHERE.Fach = 'Biologie' OR.Fach = 'Informatik' ; Name Max Sofi Mario ORDER BY Gibt die Reihenfolge an, in der die Zeilen ausgelesen werden. ASC alphabetisch bei Zeichenketten, aufsteigend bei Zahlen DESC rückwerts-alphabetisch bei Zeichenketten, absteigend bei Zahlen SELECT Name FROM WHERE.Fach = 'Biologie' OR.Fach = 'Informatik' ORDER BY Name ASC; Name Mario Max Sofi UPDATE & SET Zeilen in der Tabelle können mit neuen Werten belegt werden. UPDATE SET.Fach = 'Chemie' WHERE.MatrNr = 54346 ; 54346 Max Chemie

DELETE Zeilen in der Tabelle löschen. MatrNr Name Fach DELETE FROM WHERE.MatrNr = 47542 ; MatrNr Name Seite 9 / 22 Fach IN Dadurch können in der Where-Klausel spezifische Wertebereiche angegeben werden. SELECT Name FROM WHERE.Fach IN ('Biologie','Informatik') ; Name Max Mario Sofi BETWEEN Dadurch können in der Where-Klausel spezifische Wertebereiche angegeben werden. SELECT Name FROM WHERE.MatrNr BETWEEN 10000 AND 50000 ; Name Lisa Tom Anna Lena Sofi

JOIN / INNER JOIN Seite 10 / 22 Zwei Tabellen können wie in relationaler Algebra gejoint werden. Sowohl JOIN als auch INNER JOIN entsprechen dem Theta-Join in relationaler Algebra. hoeren MatrNr VorNr 47542 1001 54346 1005 46534 1001 46534 1002 18572 1001 18572 1002 18572 1011 67893 1002 67893 1009 SELECT.Name, hoeren.vornr FROM JOIN hoeren ON.MatrNr = hoeren.matrnr ; Result Name VorNr Tom 1001 Max 1005 Lisa 1001 Lisa 1002 Lena 1001 Lena 1002 Lena 1011 Mario 1002 Mario 1009 LEFT JOIN / RIGHT JOIN Zwei Tabellen können wie in relationaler Algebra outer gejoint werden. hoeren MatrNr VorNr 47542 1001 54346 1005 46534 1001 46534 1002 18572 1001 SELECT.Name, hoeren.vornr FROM LEFT JOIN hoeren ON.MatrNr = hoeren.matrnr ; Result Name VorNr Tom 1001 Max 1005 Lisa 1001 Lisa 1002 Lena 1001 18572 1002 Lena 1002 18572 1011 Lena 1011 67893 1002 Mario 1002 67893 1009 Mario 1009 Anna NULL Tom NULL Sofi NULL

UNION Seite 11 / 22 Mit UNION können die Ergbenisse von zwei SELECT-Klauseln vereinigt werden. Dabei ist zu beachten, dass UNION Duplikate eliminiert. Will man Duplikate behalten muss man die Klausel UNIOIN ALL verwenden. hoeren MatrNr VorNr 47542 1001 54346 1005 46534 1001 SELECT MatrNr FROM UNION SELECT MatrNr FROM hoeren ; Result MatrNr 54346 46534 47542 46534 1002 12246 18572 1001 67893 18572 1002 18572 18572 1011 57543 67893 1002 34576 67893 1009 67893 CREATE TABLE Eine neue Tabelle kann erzeugt werden. CREATE TABLE Professoren ( PersNr integer not null, Name varchar (30) not null, Rang character (2) ); Professoren PersNr Name Rang INSERT INTO Einen neuen Datensatz in eine vorhandene Tabelle hinzufügen. INSERT INTO Professoren VALUES(5213, 'Müller', 'C4') ; Professoren PersNr Name Rang 5213 Müller C4 CAST(expression AS [data type]) Datentypenumwandlung. SELECT CAST(17.85 AS int) ; 17 SELECT CAST(17.85 AS float) ; 17,85 SELECT CAST(17.85 AS varchar(5)) ; '17.85'

EXISTS / NOT EXISTS Seite 12 / 22 Wenn eine SELECT-Untersequenz keine Ergebnisse (also keine Zeilen) liefert, dann ist EXISTS false und NOT EXISTS true. Professoren PersNr Name Rang 5213 Müller C4 5321 Schneider C4 5712 Schmid C3 Vorlesungen VorNr Titel SWS gelesenvon 1001 Grundlagen 8 5213 1002 Analysis 1 8 5321 1005 Genetik 6 5321 Beispiel: Welche Professoren halten keine Vorlesungen? SELECT p.persnr, p.name FROM Professoren p WHERE NOT EXISTS ( SELECT * FROM Vorlesungen v WHERE v.gelesenvon = p.persnr ) ; Professoren PersNr Name Rang 5712 Schmid C3 GROUP BY Bildet Gruppen von Zeilen, in Abhängigkeit von einer Spalte. Beispiel: Wie viele gibt es pro Semester? SELECT s.semester, count(matrnr) AS Anzahl FROM s GROUP BY s.semester ; Semester 1 2 5 3 5 5 2 1 GROUP BY Zwischenergebnis Semester 1 1 2 2 3 5 5 5 Ergebnis Semester Anzahl 1 2 2 2 3 1 5 3

WITH Seite 13 / 22 Mit der WITH-Klausel kann man Views innerhalb einer Abfrage definieren. Es darf innerhalb einer Abfrage immer nur eine WITH-Klausel vorkommen! Beispiel: Bestimmung des durchschnittlichen Semesters der, die mindestens eine Vorlesung bei Sokrates hören. WITH vorlesungen_von_sokrates AS ( SELECT * FROM vorlesungen v, professoren p WHERE v.gelesenvon = p.persnr AND p.name = Sokrates ), studenten_von_sokrates AS ( SELECT * FROM studenten s WHERE EXISTS ( SELECT * FROM hoeren h, vorlesungen_von_sokrates v WHERE h.matrnr = s.matrnr AND v.vorlnr = h.vorlnr ) ) SELECT avg(semester) FROM studenten_von_sokrates ; CREAT VIEW Mit der CREATE VIEW-Klausel kann man Views in der Datenbank definieren. Mit CREATE VIEW erzeugte Views sind tatsächeliche Objket innerhalb der Datenbank, sie können für mehrere SELECT-Abfragen genutzt werden, mit der WITH-Klausel erzeugte Views sind dagegen nur Teile einer einzigen SELECT-Abfrage. CREATE VIEW WieHartAlsPrüfer (PersNr, Durchschnittsnote) AS SELECT PersNr, avg(note) FROM pruefen pruefen GROUP BY PersNr ; MatrNr VorlNr PersNr Note 54346 1005 5213 4 46534 1001 5321 2 47542 1002 5712 1 12246 1001 5321 3 67893 1002 5712 2 18572 1001 5321 1 57543 1001 5321 4 34576 1002 5712 3 WieHartAlsPrüfer PersNr DrhNote 5213 4 5321 2,5 5712 2

Aggregationen Seite 14 / 22 sum(spaltenname) avg(spaltenname) count(spaltenname) first(spaltenname) last(spaltenname) max(spaltenname) min(spaltenname) Liefert die Summe der Spalte. Liefert den Durchschnittswert der Spalte. Liefert die Anzahl der Werte (NULL-Werte nicht mitgezählt) der Spalte. Liefert den ersten Wert der Spalte. Liefert den letzten Wert der Spalte. Liefert den größen Wert der Spalte. Liefert den kleinsten Wert der Spalte. HAVING Die WHERE-Bedingung wird vor der Aggregation überprüft. Die HAVING-Bedingung wird nach der Aggregation überprüft. Die HAVING-Klausel kann nicht ohne die GROUP BY-Klausel verwendet werden! Beispiel: Alle auswählen, die alle Vorlesungen hören. SELECT h.matrnr FROM hören h GROUP BY h.matrnr HAVING count (*) = ( ) ; SELECT count (*) FROM Vorlesungen hoeren MatrNr VorNr 47542 1001 54346 1001 54346 1002 54346 1005 46534 1001 46534 1002 18572 1001 18572 1002 Vorlesungen VorNr Titel SWS gelesenvon 1001 Grundlagen 8 5213 1002 Analysis 1 8 5321 1005 Genetik 6 5321 Result MatrNr 54346 18572 1011 CASE WHEN THEN ELSE END Mit diesen Klauseln können einfache Verzweigungen in SQL-Anfragen realisiert werden. SELECT CASE WHEN Bedingung THEN Ergebnis WHEN Bedingung THEN Ergebnis... ELSE Ergebnis END FROM SELECT MatrNr, CASE WHEN p.note = 1.0 THEN 'perfekt bestanden' WHEN p.note < 4.0 THEN 'nicht bestanden' ELSE 'bestanden' END FROM pruefen p Bedinung ist eine Bedinung wie man sie in der WHERE-Klausel verwendet. Ergebnis ist ein beliebiger SQL-Ausdruck.

Seite 15 / 22 Funktionale Abhängigkeiten Aus einer Menge von Atributen, lässt sich eine andere Menge von Attributen bestimmen. Vorlesungen VorNr Titel SWS gelesenvon Tag Raum 1001 Grundlagen 8 5213 Do 00.02.03 1002 Analysis 1 8 5321 Di 01.03.04 1005 Genetik 6 5321 Mi 01.03.04 {VorNr} {Titel,SWS,gelesenVon} {Titel} {SWS} {gelsenvon} {Raum} {VorNr,Raum} {Tag} Superschlüssel Ein Superschlüssel ist eine Teilmenge von Attributen, durch die man auf alle anderen Attribute der Menge schließen kann. Vorlesungen VorNr Titel SWS gelesenvon Tag Raum 1001 Grundlagen 8 5213 Do 00.02.03 1002 Analysis 1 8 5321 Di 01.03.04 1005 Genetik 6 5321 Mi 01.03.04 {VorNr} {Titel,SWS,gelesenVon} {Titel} {SWS} {gelsenvon} {Raum} {VorNr,Raum} {Tag} In diesem Beipiel ist jede Teilmenge von {VorNr,Titel,SWS,gelsenVon,Tag,Raum} die {VorNr} enthält ein Superschlüssel, weil {VorNr} selbst bereits ein Superschlüssel (und Kanidatenschlüssel) ist. Kanidatenschlüssel Ein Kanidatenschlüssel ist immer auch ein Superschlüssel. Ein Kanidatenschlüssel ist eine minimale Teilmenge von Attributen, durch die man auf alle anderen Attribute der Menge schließen kann. Vorlesungen VorNr Titel SWS gelesenvon Tag Raum 1001 Grundlagen 8 5213 Do 00.02.03 1002 Analysis 1 8 5321 Di 01.03.04 1005 Genetik 6 5321 Mi 01.03.04 {VorNr} {Titel,SWS,gelesenVon} {Titel} {SWS} {gelsenvon} {Raum} {VorNr,Raum} {Tag} {VorNr} bestimmt alle anderen Attribute und ist deshalb in diesem Fall der einzige Kanidatenschlüssel. (In anderen Fällen kann es mehrere geben!)

erste Normalform Nur atomare Domänen. Seite 16 / 22 nicht atomare Tabelle gleiche Tabelle in 1.NF Vorlesungen VorNr Titel SWS gelesenvon Tag Raum 1001 Grundlagen 8 {5213,5561} {Do,Mi} {00.02.03, 03.07.08} 1002 Analysis 1 8 {5321} {Di} 01.03.04 1005 Genetik 6 {5321} {Mi} 01.03.04 Vorlesungen VorNr Titel SWS gelesenvon Tag Raum 1001 Grundlagen 8 5213 Do 00.02.03 1001 Grundlagen 8 5561 Mi 03.07.08 1002 Analysis 1 8 5321 Di 01.03.04 1005 Genetik 6 5321 Mi 01.03.04 zweite Normalform Jede Spalte ist von allen Kanidatenschlüsseln funktional abhängig. Vorlesungen VorNr MatrNr Titel SWS gelesenvon Tag Raum 1001 47542 Grundlagen 8 5213 Do 00.02.03 1001 12246 Grundlagen 8 5561 Mi 03.07.08 1002 67893 Analysis 1 8 5321 Di 01.03.04 1005 18572 Genetik 6 5321 Mi 01.03.04 {VorNr} {Titel,SWS,gelesenVon} {Titel} {SWS} {gelsenvon} {Raum} {VorNr,Raum} {Tag} Kanidatenschlüssel ist {VorNr,MatrNr} Diese Tabelle ist nicht in 2.NF, weil zum Beispiel Titel nicht von MatrNr funktional abhängig ist. Vorlesungen VorNr Titel SWS gelesenvon Tag Raum 1001 Grundlagen 8 5213 Do 00.02.03 1001 Grundlagen 8 5561 Mi 03.07.08 1002 Analysis 1 8 5321 Di 01.03.04 1005 Genetik 6 5321 Mi 01.03.04 {VorNr} {Titel,SWS,gelesenVon} {Titel} {SWS} {gelsenvon} {Raum} {VorNr,Raum} {Tag} Ist in 2.NF weil {VorNr} Kanidatenschlüssel ist und alle Spalten von VorNr abhängig sind.

dritte Normalform Seite 17 / 22 Gegeben: Tabelle, Menge A mit Attributen a, Menge B mit Attributen b. Für jede funktionale Abhängigkeit A b, gilt eine der Folgenden drei Bedingungen: 1) A ist Superschlüssel 2) b ist in einem Kanidatenschlüssel enthalten (dann ist b prim) 3) b ist Element von A (dann ist die funktionle Abhängigkeit trivial) Vorlesungen VorNr Titel SWS gelesenvon Tag Raum 1001 Grundlagen 8 5213 Do 00.02.03 1001 Grundlagen 8 5561 Mi 03.07.08 1002 Analysis 1 8 5321 Di 01.03.04 1005 Genetik 6 5321 Mi 01.03.04 {VorNr} {Titel,SWS,gelesenVon} {Titel} {SWS} {gelsenvon} {Raum} {VorNr,Raum} {Tag} Einziger Kanidatenschlüssel ist {VorNr}. Dekompositionsregel 1) 2) 3) {VorNr} {Titel} Ja --- --- {VorNr} {SWS} Ja --- --- {VorNr} {gelesenvon} Ja --- --- {Titel} {SWS} Nein Nein Nein {gelsenvon} {Raum} Nein Nein Nein {VorNr,Raum} {Tag} Ja --- --- => Unsere Tabelle ist nicht in 3NF.

Synthesealgorithmus Seite 18 / 22 Eingabe: kanonische Überdeckung F C Linksreduktion Rechtsreduktion Funktionale Abhängigkeiten der Form A entfernen (falls vorhanden) Funktionale Abhängigkeiten mir gleicher linker Seite zusammenfassen Algorithmus: 1. Für jede funktionale Abhängigkeit A B in F C forme ein Unterschema R α = A B 2. Schreibe alle funktionalen Abhägigkeiten A B in F C als Relationen R α = {a 1,, a n, b 1,, b n } 3. Prüfe ob eine Relation einen Kanidatenschlüssel enthält. Ja, dann alles ok. Nein, dann erstelle neue Relation R k, die genau einen Kanidatenschlüssel enthält. 4. Verwerfe redundante Relationen, also wenn R i R j verwerfe R i 5. Unterstreiche alle a 1,, a n in den Relationen. Ausgabe: Eine Zerlegung des unsprünglichen Schemas, wo alle Schemata in 3.NF sind. Die Zerlegung ist abhängigkeitsbewahrend und verlustfrei. Beispiel: R : {[ A, B, C, D, E, F]} {B} {ACDEF} {EF} {BC} {A} {D} Kanonische Überdeckung F C : F: {B} {ACDEF} {EF} {BC} {A} {D} Linksreduktion: {B} {ACDEF} {EF} {BC} {A} {D} Rechtsreduktion: {B} {ACDEF} {EF} {BC} {A} {D} F C : {B} {AEF} {EF} {BC} {A} {D} Synthesealgorithmus: 1. Unterschema erstellen R 1, R 2, R 3, 2. Relationen erstellen R 1 = {BAEF}, R 2 = {EFBC}, R 3 = {AD} 3. Kanidatenschlüssel K 1 = {B}, K 2 = {EF} 4. Verwerfe gleiche R α R 1 = {BAEF}, R 2 = {EFBC}, R 3 = {AD} 5. Unterstreiche a n R 1 = {BAEF}, R 2 = {EFBC}, R 3 = {AD}

Boyce-Codd-Normalform Seite 19 / 22 Ein Relationenschema R i ist in BCNF, wenn es in 3NF ist unf für alle funktionalen Abhängigkeiten der Form {a 1,, a n } {b 1,, b n } gilt: {b 1,, b n } {a 1,, a n } {a 1,, a n } ist Superschlüssel Dekompositionsalgorithmus Der Dekompositionsalgorithmus erzeugt aus einem Relationenschema R i mit funktionalen Abhängigkeiten eine Zerlegung in BCNF. Der Dekompositionsalgorithmus ist verlustfrei aber nicht abhägigkeitsbewahrend. 1. Finde eine funktionale Abhängigkeit der Form {a 1,, a n } {b 1,, b n } für welche gilt: Nicht trivial: A B = {a 1,, a n } ist kein Superschlüssel 2. Falls es mehrere gibt, wähle diejenige für welche {b 1,, b n } alle R i - {a 1,, a n } enthält. 3. Zerlege R i in R 1 = A B und R 2 = R i - {b 1,, b n } 4. Ersetze R i durch R 1 und R 2. Beispiel R : {[ A, B, C, D, E, F]} Nicht trivial: A B = {a 1,, a n } ist kein Superschlüssel {B} {DA} Ja Ja {DEF} {B} Ja Ja {C} {EA} Ja Ja R 1 = {A, B, D} mit F 1 = {B} {DA} Ja Nein R 2 = {B, C, E, F} mit F 2 = {C} {E} Ja Ja R 2.1 = {C, E} mit F 2 = {C} {E} Ja Nein R 2.2 = {B, C, F} Ergebnis: R 1 = {A, B, D} R 2.1 = {C, E} R 2.2 = {B, C, F} vierte Normalform Ein Relationenschema R i ist in BCNF, wenn es in 3NF ist unf für alle mehrwertigen Abhängigkeiten der Form {a 1,, a n } {b 1,, b n } gilt: {b 1,, b n } {a 1,, a n } {a 1,, a n } ist Superschlüssel

RAID Seite 20 / 22 Redundant Array of Independent Disks Aufgabe: Organisation von mehreren physischen Festplatten Ziele: höhere Datenverfügbarkeit größere Datenübertragung RAID Level 0 : Striping A D C B RAID Level 1 : Mirroring A C B D A C B D RAID Level 2 : Striping auf Bit-Ebene A1 C1 B1 D1 A2 C2 B2 D2 RAID Level 3 : XOR auf Bit-Ebene Paritätsplatte A1 C1 B1 D1 A2 C2 B2 D2 XOR Ap Cp Bp Dp RAID Level 4 : XOR Paritätsplatte A G E D F C B H XOR P(A,B) P(C,D) P(E,F) P(G,H) RAID Level 5 : Striping, Verteilung der Paritätsinformation auf alle Blöcke Ap C1 B1 D1 XOR A2 C2 Bp D2 XOR A1 B2 Cp D3 XOR A3 C3 B3 Dp

Seite 21 / 22 B-Bäume Balancierte Mehrwege-Suchbäume Aufbau eines B-Baumes: Jeder B-Baum hat eine Kapazität, abgekürzt mit k. Die Kapazität k gibt an wie viele Schlüssel in einem Knoten mindestes sein müssen 2k ist die maximale Anzahl an Schlüsseln in einem Knoten. Ausnahme: Die Wurzel darf weniger als k Schlüssel haben. Einfügen in einen B-Baum Wir wollen die 5 in diesen B-Baum von Grad k=2 einfügen: 1 2 3 4 Lösung Wir spalten den Knoten auf: 3 1 2 4 5 Löschen in einen B-Baum Wir wollen die 5 löschen: 3 6 1 2 4 5 7 8 9 Lösung Wir nehmen einen Schlüssel aus dem Elternknoten um den Unterlauf auszugleichen: 3 7 1 2 4 6 8 9 Wir wollen die 6 löschen: 3 7 1 2 4 6 8 9 Lösung Wir mergen zwei Knoten: 3 1 2 4 7 8 9

Join-Trees Seite 22 / 22 Join-Trees bestimmen die Reihenfolge, in der die Joints ausgeführt werden. Es gibt drei verschiedene Arten von Join-Trees: Analog zum Left-Deep-Tree gibt es auch einen Right-Deep-Tree. Recovery Stürzt eine Datenbank ab, dann kann man die Daten der Datenbank mit einem Recovery-Prozess wiederherstellen. Beim Recovery-Prozess werden diejenigen Daten wiedehergestellt, die kurz vor dem Absturz der Datenk aktuell waren Um den Recovery-Prozess zu regeln, kann man verschiedene Strategien nutzen: steal steal force kein Redo kein Undo kein Redo Undo force Redo kein Undo Redo Undo Ersetzung von Seiten im Pufferspeicher mit Seiten aus dem Hauptspeicher steal: Alle nicht fixierten Seiten dürfen ausgelagert werden. steal: Wenn eine Transaktion eine Seite im Pufferspeicher modifiziert hat und noch läuft, darf diese Seite nicht ausgelagert werden. Speichern von Seiten in den Hauptspeicher, nachdem die Transaktion abgeschlossen wurde. force: Nach Abschluss einer Transaktion müssen die Seiten in den Hauptspeicher geschrieben werden. force: Nach dem Abschluss einer Transaktion können die geänderten Seiten im Pufferspeicher bleiben.