SQL – TABELLEN N ORMALISIEREN UND MIT JOIN VERKNÜPFEN Tim Rosenbecker und Tobias Spangenberg Berufliche Schule des Wetteraukreises in Butzbach Emil-Vogt-Straße 8 35510 Butzbach Butzbach, den 06.04.2017 SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Inhalt Arbeitsauftrag.......................................................................................................................................... 3 Vorbereitung ........................................................................................................................................... 4 1. Normalisierung ................................................................................................................................ 4 2. Normalisierung ................................................................................................................................ 6 Datenbanken und Tabellen erstellen ...................................................................................................... 9 1. Datenbank erstellen ........................................................................................................................ 9 2. Tabellen erstellen .......................................................................................................................... 10 Einfügen der Werte ............................................................................................................................... 13 Ausgabe der Werte................................................................................................................................ 16 Seite 2 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Arbeitsauftrag „Planen Sie den Umfang der Bücher-Datenbank: Legen Sie die Anzahl und die Bezeichnung aller Attribute (Merkmale) fest, die zu jedem Buch/ jedem zu erfassenden Druckmedium etc. notwendig sind. Ordnen Sie alle Attribute zunächst mit Hilfe einer einzigen Datenbanktabelle und teilen Sie diese Schritt für Schritt in Untertabellen auf, so dass sie der dritten Normalform (3NF) entsprechen. Vergeben Sie für jede Tabelle einen Primärschlüssel und legen Sie die erforderlichen Fremdschlüssel fest. Stellen Sie die Relationen innerhalb der Datenbank mit Hilfe des E/R-Modells grafisch dar. Denken Sie dabei auch an die Zwischentabellen (Brückentabellen), wenn n:m-Relationen vorliegen. Weisen Sie jedem Attribut einen geeigneten Datentyp zu. Achtung: unmittelbar miteinander verknüpfte Schlüsselattribute müssen denselben Datentyp aufweisen! Legen Sie die Datenbank nun mit Hilfe von phpMyAdmin an und befüllen Sie diese mit den auf der CD vorhandenen Daten. Überprüfen Sie die Funktionalität der Datenbank mit Hilfe einfacher Abfragen: Sortieren Sie alle Bücher/Medien nach den Verlagen. Sortieren Sie alle Bücher/Medien nach Themengebieten. Lassen Sie sich die in einem bestimmten Jahr erschienenen Bücher/ Medien jeweils gesammelt anzeigen usw.“ Seite 3 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Vorbereitung 1. Normalisierung Als Vorlage, die drei Schritte der Normalisierung von Datenbanken durchzuführen, dient eine Excel – Tabelle. Ausgangspunkt ist der folgende: Bild 1: Ausgangspunkt Seite 4 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Zuerst werdend die Einträge atomarisiert. Erst wurden in der Spalte „Verlag“ das Erscheinungsjahr entfernt und eine seperate Spalte mit dem Titel „Erscheinungsjahr“ angelegt. Die Spalte „Medienart“ besitzt in manchen Fällen mehrere Attribute, diese haben wir einzeln aufgelistet. Bild 2: 1. Normalform Seite 5 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN 2. Normalisierung Jeder Titel eines Buches ist eindeutig und ist durch die dazugehörige „id“ mit einem Primärschlüssel gekennzeichnet. Die Spalten „Medienart“ ; „Verlag“ und „Erscheinungsjahr“ werden in eigene Tabellen ausgelagert. Diese Spalten sind nicht vom Primärschlüssel abhängig. Bild 3: 2. Normalform Seite 6 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN 3.Normalisierung Zuletzt haben wir eine Tabelle mit dem Namen „buecher“ erstellt. Dort wird die Spalte „Medienart“ der Tabelle „buecher“mit „id“ der Tabelle „Medienart“ verknüpft. So ergibt sich ein Bezug zu den Buchtiteln und den Medienarten. Desweiteren wird „id“ der Tabelle „Verlag“ und „id“ der Tabelle „Erscheinungsjahr“ mit den zugehörigen Spalten in der Tabelle „buecher“ verknüpft. Seite 7 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Dies sieht dann wie folgt aus: Tabelle „buecher“ id Autor Titel Verlag Medienart Erscheinungsjahr 1 …. …. 1 3 2 2 … …. 2 1 3 Tabelle „verlag“ id Verlag 1 Verlag 1 2 Verlag 2 3 Verlag 3 4 Verlag 4 Tabelle „medienart“ id Medienart 1 Medienart 1 2 Medienart 2 3 Medienart 3 4 Medienart 4 Tabelle „Erscheinungsjahr“< id Erscheinungsjahr 1 …. 2 …. 3 …. 4 …. Seite 8 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Nach der Verknüpfung sollte dies so aussehen. Id Autor Titel Verlag Medienart Erscheinungsjahr 1 …. …. Verlag 1 Medienart Erscheinungsjahr 2 3 2 … …. Verlag 2 Medienart Erscheinungsjahr 3 1 Datenbanken und Tabellen erstellen 1. Datenbank erstellen Die Datenbank „buecherhandel“ wurde mit den folgenden Befehlen erstellt: mysql> create database buecherhandel; Im Anschluss daran wurde diese mit dem Befehl: mysql> use buecherhandel; zur Nutzung ausgewählt. Seite 9 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN 2. Tabellen erstellen Nun werden in der Datenbank „buecherhandel“ 4 Tabellen angelegt, dazu zählen: buecher verlage medienart erscheinungsjahr Die Erstellung der Tabelle „buecher“ erfolgte mit folgendem Befehl: mysql> create table buecher (id integer auto_increment, autor varchar(120), titel varchar(255), verlag varchar(120), medienart int, erscheinungsjahr int, primary key (id)); Bild 4: Tabelle buecher Die Tabelle “verlage” wurde durch den folgenden Befehl angelegt: mysql> create table verlage (id integer auto_increment, verlag varchar(255), primary key(id), unique(verlag)); Bild 5: Tabelle verlage Seite 10 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Die Tabelle “medienart” wurde durch den folgenden Befehl angelegt: mysql> create table medienart (id integer auto_increment, medienart varchar(120) , primary key (id),unique(medienart)); Bild 6: Tabelle Medienart Seite 11 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Die Tabelle “erscheinungsjahr” wurde durch den folgenden Befehl angelegt: mysql> create table erscheinungsjahr (id integer auto_increment, erscheinungsjahr int, primary key (id),unique(erscheinungsjahr)); Bild 7: Tabelle Erscheinungsjahr Seite 12 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Einfügen der Werte Nun wurden in die angelegten Tabellen mit Befehl oder über phpmyadmin eingefügt. Wir habend dies per Befehl gemacht. Die Befehle sind die folgenden: INSERT INTO buecher VALUES (1, 'Mark Gatter', 'Frei zum Druck: Was Grafikdesigner über Druck und Vorstufe wissen sollten', '7', '1', '1'); INSERT INTO buecher VALUES (2, 'Christian Fries', 'Aufs Ganze: Mediengestaltung im Zeitalter der Unaufmerksamkeit: Basiswissen Medien: Funktion und Wirkung Konzeption und Gestaltung für alle Sinne im Zeitalter der Aufmerksamkeit', '4', '1', '2'); INSERT INTO buecher VALUES (3, 'Rainer Witt', 'Aufs Ganze: Mediengestaltung im Zeitalter der Unaufmerksamkeit: Basiswissen Medien: Funktion und Wirkung Konzeption und Gestaltung für alle Sinne im Zeitalter der Aufmerksamkeit', '4', '1', '2'); INSERT INTO buecher VALUES (4, 'David Bann', 'Die moderne Druckproduktion: Ein Leitfaden', '7', '1', '2'); INSERT INTO buecher VALUES (5, 'Gavin Ambrose', 'Druck & Veredelung: Moderne Methoden der Bild und Textreproduktion und der Aufwertung von Printprodukten', '7', '1', '2'); INSERT INTO buecher VALUES (6, 'Paul Harris', 'Druck & Veredelung: Moderne Methoden der Bild und Textreproduktion und der Aufwertung von Printprodukten', '7', '1', '2'); INSERT INTO buecher VALUES (7, 'Karl Giesriegel', 'Druckwerke und Werbemittel herstellen. Was Sie schon immer über Print wissen wollten', '9', '1', '2'); INSERT INTO buecher VALUES (8, 'Annja Weinberger', 'Flyer optimal texten, gestalten, produzieren', '7', '1', '2'); INSERT INTO buecher VALUES (9, 'Corel Corporation', 'Ulead Photo ImpactXS', '12', '2', '3'); Seite 13 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN INSERT INTO buecher VALUES (10, 'Nick Weschkalnies', 'Adobe Flash CS4: Das umfassende Handbuch', '1', '1', '4'); INSERT INTO buecher VALUES (11, 'Richard Beer', 'Adobe Dreamweaver CS4: Webseiten programmieren und gestalten mit (X)HTML, Ajax, CSS, PHP und MySQL: Webseiten entwickeln mit (X)HTML, Ajax, CSS, PHP und MySQL', '1', '1', '4'); INSERT INTO buecher VALUES (12, 'Susanne Gailus', 'Adobe Dreamweaver CS4: Webseiten programmieren und gestalten mit (X)HTML, Ajax, CSS, PHP und MySQL: Webseiten entwickeln mit (X)HTML, Ajax, CSS, PHP und MySQL', '1', '1', '4'); INSERT INTO buecher VALUES (13, 'Monika Gause', 'Adobe Illustrator CS4: Das Praxisbuch zum Lernen und Nachschlagen', '1', '1', '4'); INSERT INTO buecher VALUES (14, 'Sibylle Mühlke', 'Adobe PhotoShop CS4Das Praxisbuch zum Lernen und Nachschlagen', '3', '1', '4'); INSERT INTO buecher VALUES (15, 'Andreas Mylius', 'Animation mit Flash CS 4', '3', '1', '4'); INSERT INTO buecher VALUES (16, 'Heinz Kessler', 'Animation mit Flash CS 4', '8', '1', '4'); INSERT INTO buecher VALUES (17, 'Susanne Rupp', 'Dreamweaver CS4: Professionelle Webseiten entwickeln', '10', '1', '4'); INSERT INTO buecher VALUES (18, 'Böhringer', 'Kompendium der Mediengestaltung Digital und Print: Konzeption Gestaltung Produktion Technik', '10', '1', '4'); INSERT INTO buecher VALUES (19, 'Bühler', 'Kompendium der Mediengestaltung Digital und Print: Konzeption Gestaltung Produktion Technik', '10', '1', '4'); INSERT INTO buecher VALUES (20, 'Schlaich', 'Kompendium der Mediengestaltung Digital und Print: Konzeption Gestaltung Produktion Technik', '13', '1', '5'); INSERT INTO buecher VALUES (21, 'Tom Striewisch', '100 clevere Tipps: Digitalfotografie: Aufnahmetechnik Bildgestaltung Bildbearbeitung', '5', '1', '5'); INSERT INTO buecher VALUES (22, 'LG Electronics Deutschland GmbH', 'Bedienungsanleitung: LG Flatron W2220P, 22"', '5', '3', '5'); INSERT INTO buecher VALUES (23, 'LG Electronics Deutschland GmbH', 'Bedienungsanleitung: LG Flatron W2220P, 22"', '6', '4', '5'); Seite 14 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN INSERT INTO buecher VALUES (24, 'Dell', 'Bedienungsanleitung: Dell UltraSharp U2410, 24"', '6', '3', '5'); INSERT INTO buecher VALUES (25, 'Dell', 'Bedienungsanleitung: Dell UltraSharp U2410, 24"', '1', '4', '5'); INSERT INTO buecher VALUES (26, 'Tobias Gräning', 'Einstieg in Adobe Flash CS5: Eigene FlashFilme erstellen. Schritt für Schritt', '1', '1', '5'); INSERT INTO buecher VALUES (27, 'Patrick Jean', 'Einstieg in Adobe Flash CS5: Eigene FlashFilme erstellen. Schritt für Schritt', '11', '1', '5'); INSERT INTO buecher VALUES (28, 'Beste vom Hove', 'Medien gestalten, Lernsituationen und Fachwissen zur Gestaltung und Produktion von Digital und Printmedien', '11', '1', '5'); INSERT INTO buecher VALUES (29, 'Reif', 'Medien gestalten, Lernsituationen und Fachwissen zur Gestaltung und Produktion von Digital und Printmedien', '11', '1', '5'); INSERT INTO buecher VALUES (30, 'Werth', 'Medien gestalten, Lernsituationen und Fachwissen zur Gestaltung und Produktion von Digital und Printmedien', '4', '1', '5'); INSERT INTO buecher VALUES (31, 'Herwig Hörn', 'Spickzettel: Prüfungswissen für Mediengestalter digital & print. 660 Lernkarten mit aktuellen Fragen und kompakten Antworten', '4', '5', '5'); INSERT INTO buecher VALUES (32, 'Inka.Gabriela Schmidt', 'Spickzettel: Prüfungswissen für Mediengestalter digital & print. 660 Lernkarten mit aktuellen Fragen und kompakten Antworten', '4', '5', '5'); INSERT INTO buecher VALUES (33, 'Henrik Wolf', 'Spickzettel: Prüfungswissen für Mediengestalter digital & print. 660 Lernkarten mit aktuellen Fragen und kompakten Antworten', '4', '5', '5'); INSERT INTO buecher VALUES (34, 'Adobe', 'Adobe Creative Suite 5 Master Collection deutsch', '2', '2', '6'); INSERT INTO buecher VALUES (35, 'Adobe', 'Adobe Creative Suite 5 Master Collection deutsch', '2', '6', '6'); Seite 15 von 16 © Tim Rosenbecker und Tobias Spangenberg SQL – TABELLEN NORMALISIEREN UND MIT JOIN VERKNÜPFEN Ausgabe der Werte Nachdem nun alle Werte erfolgreich eingetragen wurden können wir die Tabellen verknüpfen lassen und uns deren Inhalte ausgeben lassen, dies wird mit folgendem Befehl getan: mysql> select buecher.autor, buecher.titel, verlage.verlag, medienart.medienart, erscheinungsjahr.erscheinungsjahr from buecher join verlage on buecher.verlag = verlage.id join medienart on buecher.medienart = medienart.id join erscheinungsjahr on buecher.erscheinungsjahr = erscheinungsjahr.id; Bild 8: Ausgabe der verknüpften Tabellen Seite 16 von 16 © Tim Rosenbecker und Tobias Spangenberg