Datenbanktechnologie mit praktischen Übungen in MySQL und PHP Übung, Sommersemester 2013 29. April 2013 - MySQL 2 Sebastian Cuy sebastian.cuy@uni-koeln.de
Aufgaben
Anmerkungen Best practice: SQL Befehle in Texteditor (z.b. Notepad++) bearbeiten, einzeln nach phpmyadmin kopieren. Später Datei mit Endung.sql speichern. Kommentare mit #, -- oder /* [...] */ Eigenrecherche explizit erwünscht!
Aufgabe 1 Erstellen Sie (mit SQL) eine Datenbank bibliothek. Erstellen Sie eine Tabelle literatur, in die Sie die auf der Seminarseite verlinkten Daten importieren können und importieren Sie sie.
Lösung 1 CREATE TABLE literatur ( PS_LiteraturID INT(3) UNIQUE, A1Nachname VARCHAR(20), A1Vorname VARCHAR(20), Titel VARCHAR(75), Ort VARCHAR(20), Jahr INT(4), Reihe VARCHAR(10), Band VARCHAR(3) );
Aufgabe 2 Schreiben Sie SELECT-Queries für folgende Datenbankabfragen: Alle Datensätze der Reihe ASR Titel und Erscheinungsjahr aller vor 1900 publizierten Bücher Die Titel der von Carl Robert publizierten Bücher, sortiert in absteigender Reihenfolge nach dem Erscheinungsjahr Autoren, die (laut Titel) über Sarkophage schreiben
Lösung 2 SELECT * FROM literatur WHERE Reihe LIKE 'ASR'; SELECT Titel, Jahr FROM literatur WHERE Jahr < 1900; SELECT Titel FROM literatur WHERE A1Nachname LIKE 'Robert' AND A1Vorname LIKE 'Carl' ORDER BY Jahr DESC; SELECT A1Nachname, A1Vorname FROM literatur WHERE Titel LIKE '%Sarkophag%';
Anführungszeichen ' (einfaches Anführungszeichen): Markiert Anfang und Ende einer Zeichenkette ` (Akzent, Backtick): Markiert Anfang und Ende eines Tabellen- oder Spaltennamens und ist optional SELECT `Titel`, 'Erscheinungsjahr' FROM `literatur` WHERE 'Erscheinungsjahr' < 1900;
Aufgabe 3 Schreiben Sie einen oder mehrere INSERT- Befehle um die Bücher des Seminarapparats in die in Aufgabe 1 erstellte Tabelle einzufügen. Löschen Sie den Datensatz zum Buch Die dionysischen Sarkophage aus dem Jahr 1974.
Lösung 3 INSERT INTO literatur (PS_LiteraturID, A1Nachname, A1Vorname, Titel, Ort, Jahr) VALUES (70, 'Florence', 'Maurice', 'PHP 5.3 + MySQL 5.1. Der Einstieg in die...', 'München', 2009), (71, 'Kofler', 'Michael', 'PHP 5.3 & MySQL 5.1. Grundlagen,...', 'München', 2008), (72, 'Elmasri', 'Ramez', 'Fundamentals Of Database Systems. Third Edition', 'Boston', 2000), (73, 'Lerdorf', 'Rasmus', 'Programmieren mit PHP. Dynamische Webseiten erstellen', 'Köln', 2001), (74, 'Kofler', 'Michael', 'MySQL. Einführung, Programmierung, Referenz', 'München', 2001), (75, 'Günther', 'Ulrich', 'PHP. Ein praktischer Einstieg', 'Köln', 2003), (76, 'Goller', 'Heiko', 'Das LAMP-Buch: Webserver mit Linux,...', 'Nürnberg', 2002); DELETE FROM literatur WHERE Titel LIKE '%Die dionysischen Sarkophage%' AND Jahr = 1974;
Aufgabe 4 Formulieren Sie UPDATE-Kommandos für folgende Aufgaben: Setze alle Erscheinungsorte auf Köln Ersetze den Vornamen Carl durch Karl Addiere 1 zum Erscheinungsjahr aller Bücher von Clarac Ersetze Vaticanischen im Titel durch Vatikanischen
Lösung 4 UPDATE literatur SET Ort = 'Köln'; UPDATE literatur SET A1Vorname = 'Karl' WHERE A1Vorname LIKE 'Carl'; UPDATE literatur SET Jahr = Jahr + 1 WHERE A1Nachname LIKE 'Clarac'; UPDATE literatur SET Titel = REPLACE(Titel, 'Vaticanischen', 'Vatikanischen') WHERE Titel LIKE '%Vaticanischen%';
Datenbankdesign
Eine Datenbanktabelle Typ Name Preis Datum Mensa Vegetarisch Vollkorn-Nudelpfanne 2.20 22.04.2013 Mensa Robert Koch Str. Tellergericht XXL Knusperschnitzel 3.10 19.04.2013 Uni Mensa Biomenü Hirtenpfanne 3.10 29.04.2013 Uni Mensa............... Adresse Robert-Koch-Straße 10, 50931 Köln Zülpicher Straße 70, 50937 Köln Zülpicher Straße 70, 50937 Köln...
Zwei Datenbanktabellen Typ Name Preis Datum Mensa Vegetarisch Vollkorn-Nudelpfanne 2.20 22.04.2013 Mensa Robert Koch Str. Tellergericht XXL Knusperschnitzel 3.10 19.04.2013 Uni Mensa Biomenü Hirtenpfanne 3.10 29.04.2013 Uni Mensa............... Name Mensa Robert Koch Str. Uni Mensa Adresse Robert-Koch-Straße 10, 50931 Köln Zülpicher Straße 70, 50937 Köln......
Schlüssel Ein Schlüssel dient in einer relationalen Datenbank dazu, die Datensätze einer Tabelle eindeutig zu identifizieren. Er umfasst ein oder mehrere Felder. Typ Name Preis Datum Mensa Vegetarisch Vollkorn-Nudelpfanne 2.20 22.04.2013 Mensa Robert Koch Str. Tellergericht XXL Knusperschnitzel 3.10 19.04.2013 Uni Mensa Biomenü Hirtenpfanne 3.10 29.04.2013 Uni Mensa...............
Schlüssel In einer Tabelle können mehrere Felder Schlüsselkandidaten sein. Daher wählt man einen Primärschlüssel aus, der für die Abbildung von Beziehungen als Fremdschlüssel verwendet wird.
Schlüssel Fremdschlüssel Typ Name Preis Datum Mensa Vegetarisch Vollkorn-Nudelpfanne 2.20 22.04.2013 Mensa Robert Koch Str. Tellergericht XXL Knusperschnitzel 3.10 19.04.2013 Uni Mensa Biomenü Hirtenpfanne 3.10 29.04.2013 Uni Mensa............... Name Mensa Robert Koch Str. Uni Mensa Adresse Robert-Koch-Straße 10, 50931 Köln Zülpicher Straße 70, 50937 Köln...... Primärschlüssel Schlüsselkandidat?
Schlüssel ID Typ Name Preis Datum Mensa 1 Vegetarisch Vollkorn-Nudelpfanne 2.20 22.04.2013 1 2 Tellergericht XXL Knusperschnitzel 3.10 19.04.2013 2 3 Biomenü Hirtenpfanne 3.10 29.04.2013 2............... ID Name Adresse 1 Mensa Robert Koch Str. Robert-Koch-Straße 10, 50931 Köln 2 Uni Mensa Zülpicher Straße 70, 50937 Köln......
Normalformen
1. Normalform Eine Relation ist in der Ersten Normalform, wenn jeder Attributwert atomar ist. Ein Attributwert ist atomar, wenn er nicht aus mehreren Werten zusammengsetzt ist.
1. Normalform GID Name Ort Öffnungszeiten Zutaten 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 Nudeln, Möhren, Zucchini 2 XXL Knusperschnitzel EG Nord ab 17:30 Schnitzel, Pommes 3 Hirtenpfanne MG Nord 11.30-14.15 Kartoffeln, Hirte............... GID Name Ort Öffnungszeiten Zutatnr Zutat 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 1 Nudeln 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 2 Möhren 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 3 Zucchini 2 XXL Knusperschnitzel EG Nord ab 17:30 1 Schnitzel 2 XXL Knusperschnitzel EG Nord ab 17:30 2 Pommes 3 Hirtenpfanne MG Nord 11.30-14.15 1 Kartoffeln 3 Hirtenpfanne MG Nord 11.30 Universität - 14.15zu Köln 2 Hirte..................
2. Normalform Eine Relation ist in der Zweiten Normalform, wenn sie in der Ersten Normalform ist und jedes Nicht-Schlüsselattribut von jedem Schlüsselkandidaten vollständig funktional abhängig ist. Ein Attribut Y ist von einem Attribut X funktional abhängig, wenn es zu jedem X genau ein Y gibt, also wenn der Wert von X den Wert von Y bestimmt.
2. Normalform GID Name Ort Öffnungszeiten Zutatnr Zutaten 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 1 Nudeln 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 2 Möhren 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 3 Zucchini 2 XXL Knusperschnitzel EG Nord ab 17:30 1 Schnitzel 2 XXL Knusperschnitzel EG Nord ab 17:30 2 Pommes.................. GID Name Ort Öffnungszeiten 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 2 XXL Knusperschnitzel EG Nord ab 17:30............ GID Zutatnr Zutaten 1 1 Nudeln 1 2 Möhren 1 3 Zucchini 2 1 Schnitzel 2 2 Pommes.........
3. Normalform Eine Relation ist in der Dritten Normalform, wenn Sie in der Zweiten Normalform ist und jedes Nicht-Schlüssel-Attribut von keinem Schlüsselkandidaten transitiv abhängig ist. Seien X, Y und Z Attribute. Ist Y von X funktional abhängig und Z von Y, so ist Z von X funktional abhängig. Diese Abhängigkeit ist transitiv.
3. Normalform GID Name Ort Öffnungszeiten 1 Vollkorn-Nudelpfanne MG Nord 11.30-14.15 2 XXL Knusperschnitzel EG Nord ab 17:30 3 Hirtenpfanne MG Nord 11.30-14.15............ GID Name OID 1 Vollkorn-Nudelpfanne 1 2 XXL Knusperschnitzel 2 3 Hirtenpfanne 1......... OID Ort Öffnungszeiten 1 MG Nord 11.30-14.15 2 EG Nord ab 17:30.........
Normalisierung Prinzip: Jeder Objektart ihre eigene Tabelle! Normalisierung kann z.b. aus Performance- Erwägungen unerwünscht sein.
SQL Abfragen über mehrere Tabellen: SELECT col_names FROM table_name1, table_name2 WHERE primary_key = foreign_key...; SELECT gericht.name FROM gericht, ort WHERE gericht.oid = ort.oid AND ort.öffnungszeiten = 'ab 17:30';
Aufgaben
Aufgabe 1 Betrachten Sie die auf der Seminarseite verlinkte Excel-Datei als Tabelle in einer relationalen Datenbank und überführen Sie sie in die erste Normalform. Markieren Sie den Primärschlüssel Speichern Sie das Ergebnis als Excel-Datei.
Aufgabe 2 Überführen Sie die Tabelle aus Aufgabe 1 in die zweite Normalform. Markieren Sie die Primärschlüssel Speichern Sie das Ergebnis als Excel-Datei.
Aufgabe 3 Überführen Sie die Tabellen aus Aufgabe 2 in die dritte Normalform. Markieren Sie die Primärschlüssel Speichern Sie das Ergebnis als Excel-Datei.
Aufgabe 4 Importieren Sie die Tabellen aus Aufgabe 3 in MySQL und führen Sie darauf folgende Abfrage aus: Zeige die email-adressen von allen Mitarbeitern, deren Projekt vor dem 31.07.2013 endet, sortiert nach dem Nachnamen.