104
Einstieg in relationale Datenbanken mit MySQL Dr. Kerstin Puschke Workshop, Uni Salzburg September 2009 K. Puschke MySQL

Einstieg in relationale Datenbanken mit MySQL (Folien)

Embed Size (px)

DESCRIPTION

Folien zum Workshop "Einstieg in relationale Datenbanken mit MySQL", September 2009

Citation preview

Page 1: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einstieg in relationale Datenbankenmit MySQL

Dr. Kerstin Puschke

Workshop, Uni Salzburg

September 2009

K. Puschke MySQL

Page 2: Einstieg in relationale Datenbanken mit MySQL (Folien)

Lizenz

LizenzDieser Text steht unter einer Creative CommonsAttribution-Share Alike 3.0 Germany Lizenz, siehehttp://creativecommons.org/licenses/by-sa/3.0/de/

K. Puschke MySQL

Page 3: Einstieg in relationale Datenbanken mit MySQL (Folien)

Teil I: Einführung

1 Grundbegriffe

2 Architektur

3 MySQL

K. Puschke MySQL

Page 4: Einstieg in relationale Datenbanken mit MySQL (Folien)

Teil II: Datenbankabfragen

4 Überblick verschaffen

5 Einfache Abfragen

6 Ergebnisse einschränken

K. Puschke MySQL

Page 5: Einstieg in relationale Datenbanken mit MySQL (Folien)

Teil III: Datenbankdesign

7 Einführung in die theoretischen Grundlagen

8 Datenbankdesign in der Praxis

9 Qualitätssicherung

10 Datenbank definieren

K. Puschke MySQL

Page 6: Einstieg in relationale Datenbanken mit MySQL (Folien)

Teil IV: Datenbanksprachen

11 Allgemein

12 SQL

K. Puschke MySQL

Page 7: Einstieg in relationale Datenbanken mit MySQL (Folien)

Teil V: Datenbanken erzeugen und manipulieren

13 Daten eintragen, ändern, löschen

14 Tabellen verknüpfen

K. Puschke MySQL

Page 8: Einstieg in relationale Datenbanken mit MySQL (Folien)

Teil VI: Vor- und Nachteile von Datenbanken

15 Datenbanken vs. Dateien

16 Relationale Datenbanksysteme

K. Puschke MySQL

Page 9: Einstieg in relationale Datenbanken mit MySQL (Folien)

Teil VII: Datenbanken manipulieren - WeitereMöglichkeiten

17 Aggregierte Daten

K. Puschke MySQL

Page 10: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

Teil I

Einführung

K. Puschke MySQL

Page 11: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

Einführung

1 Grundbegriffe

2 Architektur

3 MySQL

K. Puschke MySQL

Page 12: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

DatenbanksystemDatenbank und Datenbankmanagementsystem

Datenbanksystem dient der Speicherung und Verwaltungvon Daten

besteht aus Datenbanken undDatenbankmanagementsystem (DBMS)

Datenbank: strukturiert abgelegte Datenzu verwaltende Daten, z.B. AdressenDatenbankschema: Metadaten zur Datenbankdefinition

Datenbankmanagementsystem: Software zur Verwaltungder Daten

Datenbank definieren, erzeugen, manipulieren

K. Puschke MySQL

Page 13: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

Einführung

1 Grundbegriffe

2 Architektur

3 MySQL

K. Puschke MySQL

Page 14: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

Client und Server

Datenbankserver : Software, die Datenbankdienste (einDatenbanksystem) anbietet

auch der Rechner, auf dem dieser Dienst läuft

Anwendung oder Client greift auf den Datenbankserver zu

K. Puschke MySQL

Page 15: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

Architektur

MainframeGroßrechner (Zugriff über Terminals)

Zwei-Schichten-ArchitekturDatenbankserverAnwendung, ClientAnwendungslogik und Darstellung/Benutzeroberfläche

Drei-Schichten-ArchitekturDatenbankserverAnwendung (Anwendungslogik)Webserver oder Anwendungsserver (Darstellung)Browser oder Client des Anwendugnsservers

K. Puschke MySQL

Page 16: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

Einführung

1 Grundbegriffe

2 Architektur

3 MySQL

K. Puschke MySQL

Page 17: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

MySQL

DBMSsehr verbreitet in Webanwendungenauch eingebettet in anderen Anwendungenschwedische Firma MySQL AB, jetzt Sun Microsystems,Übernahme durch Oraclekostenlose Community-Version, freie Software (GPL)kostenpflichtige Enterprise-Version

K. Puschke MySQL

Page 18: Einstieg in relationale Datenbanken mit MySQL (Folien)

GrundbegriffeArchitektur

MySQL

MySQLClients und Anwendungen

Kommandozeilenclient mysqlWebinterface phpmyadmin

MySQL GUI Tools

. . .Webanwendungen

MediaWikiWordPress. . .

Anwendungen mit eingebetteter DatenbankZimbra. . .

K. Puschke MySQL

Page 19: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Teil II

Datenbankabfragen

K. Puschke MySQL

Page 20: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Datenbankabfragen

4 Überblick verschaffen

5 Einfache Abfragen

6 Ergebnisse einschränken

K. Puschke MySQL

Page 21: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Aufgaben

Überblick verschaffenSHOW DATABASES, USE datenbank, SHOW TABLES,DESCRIBE tabelle

K. Puschke MySQL

Page 22: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Erste Befehle

SHOW DATABASES zeigt alle DatenbankenUSE datenbank wählt Datenbank datenbank ausSHOW TABLES zeigt Tabellen der gewählten DatenbankDESCRIBE tabelle zeigt Spalten der Tabelle an

K. Puschke MySQL

Page 23: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Datenbankabfragen

4 Überblick verschaffen

5 Einfache Abfragen

6 Ergebnisse einschränken

K. Puschke MySQL

Page 24: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Aufgaben

Einfache AbfragenSELECT, ORDER BY, LIMIT, NULL

K. Puschke MySQL

Page 25: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Abfragen I

SELECT

verlangt Angabe von Spalte(n) und Tabellen, dieauszugeben sind

* bedeutet alle Spalten der TabelleSELECT Name,Vorname FROM KundInnen

SELECT * FROM KundInnen

ORDER BY

sortiert AusgabeSELECT Name,Vorname FROM KundInnen ORDER BYName

K. Puschke MySQL

Page 26: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Abfragen II

LIMIT

beschränkt die Zahl der ausgegeben Einträgehäufig mit ORDER BY kombiniertSELECT Name,Vorname FROM KundInnen LIMIT 5

NULL

Kein Eintrag (z.B. für Kundin Müller keine Telefonnummervermerkt): NULL

NULL

NULL ist etwas anderes als die Zahl Null oder ein leererString!

K. Puschke MySQL

Page 27: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Datenbankabfragen

4 Überblick verschaffen

5 Einfache Abfragen

6 Ergebnisse einschränken

K. Puschke MySQL

Page 28: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Aufgaben

Ergebnisse einschränkenWHERE, AND, OR, UNION,DISTINCT

K. Puschke MySQL

Page 29: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Ergebnisse einschränken I

WHERE

schränkt Ergebnisse einSELECT Name FROM KundInnen WHERE Stadt =’Salzburg’

SELECT Name FROM KundInnen WHERE Vorname ISNULL

K. Puschke MySQL

Page 30: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Ergebnisse einschränken II

AND und OR

verknüpfen mehrere BedingungenSELECT Name FROM KundInnen WHERE Stadt =’Salzburg’ AND Vorname=’Clara’

K. Puschke MySQL

Page 31: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Abfragen einschränken III

UNION

vereinigt Ergebnisse(SELECT Name FROM KundInnen WHERE Stadt=’Salzburg’) UNION (SELECT Name FROMKundInnen WHERE Stadt = ’Wien’)

K. Puschke MySQL

Page 32: Einstieg in relationale Datenbanken mit MySQL (Folien)

Überblick verschaffenEinfache Abfragen

Ergebnisse einschränken

Ergebnisse einschränken IV

SELECT DISTINCT

gibt nur unterschiedliche Ergebnisse ausSELECT DISTINCT Stadt FROM KundInnen

K. Puschke MySQL

Page 33: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Teil III

Datenbankdesign

K. Puschke MySQL

Page 34: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Datenbankdesign

7 Einführung in die theoretischen GrundlagenDatenbankmodellDatenbankschema

8 Datenbankdesign in der Praxis

9 Qualitätssicherung

10 Datenbank definieren

K. Puschke MySQL

Page 35: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Datenbankmodell

Konzept zur Beschreibung der Struktur einer Datenbankkonzeptionelles Modell: formale Beschreibung eines Teilsder Realität

K. Puschke MySQL

Page 36: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Konzeptionelles Modell

formale Beschreibung eines Ausschnittes der Realitätverbreitet: Entity-Relationship-Model(Gegenstand-Beziehungs-Modell)

K. Puschke MySQL

Page 37: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Datenbankmodell

Konzept zur Beschreibung der Struktur einer Datenbankkonzeptionelles Modell: formale Beschreibung eines Teilsder Realitätlogisches Modell: Beschreibung der Implementierung

K. Puschke MySQL

Page 38: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Logisches Modell

Beschreibung der Implementierungverbreitete Modelle:

netzwerkartighierarchischrelationalobjektorientiertobjektrelational...

K. Puschke MySQL

Page 39: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Relationales Modell

E.F. Codd (1970)hohe Verbreitung seit den 80er Jahren, z.B.

MySQLPostgreSQLOracle. . .

Datenbank als Sammlung von Relationen (Tabellen)Relation: Menge von Tupeln (Datensätzen, Zeilen)

unsortiertkeine Duplikate

Schema einer Relation (Tabellenstruktur) besteht ausAttributen (Spalten)

K. Puschke MySQL

Page 40: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Datenbankmodell

Konzept zur Beschreibung der Struktur einer Datenbankkonzeptionelles Modell: formale Beschreibung eines Teilsder Realitätlogisches Modell: Beschreibung der Implementierungphysisches Modell: Datenspeicherung, Zugriffspfade

K. Puschke MySQL

Page 41: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Physisches Modell

Wie werden die Daten gespeichert?Auf Platte geschrieben oder nur im Speicher gehalten?Wie auf Dateien aufgeteilt? Was für Dateien?Indizierung

K. Puschke MySQL

Page 42: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Datenbankschema

DatenbankschemaBeschreibung der Datenbankstrukturgespeichert als Metadaten in der Datenbankfolgt gewählten Datenmodellen

konzeptionelles SchemaER-Modell: ER-Diagrammlogisches Schemarelationales Modell: Tabellen, Spalten, . . .physische Schema:Storage Engine und Indizierung

K. Puschke MySQL

Page 43: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

DatenbankmodellDatenbankschema

Datenbankzustand

DatenbankzustandDaten zu einem bestimmten Zeitpunkt

K. Puschke MySQL

Page 44: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Datenbankdesign

7 Einführung in die theoretischen Grundlagen

8 Datenbankdesign in der PraxisAblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

9 Qualitätssicherung

10 Datenbank definieren

K. Puschke MySQL

Page 45: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

DatenbankdesignRelationale Datenbanken entwerfen

AnforderungsanalyseGeschäftsprozesse analysieren,. . .

Konzeptionelles Design: konzeptionelles Schemaentwerfen

Anforderungen in formale Struktur überführenEntitiy-Relationship-Diagramm entwickeln

Logisches Design: logisches Schema entwerfenRelationales Datenbankschema entwerfenER-Diagramm in Tabellen, Spalten usw. übersetzenmanuell oder softwaregestützt

Physisches Design: Physische Schema entwerfenStorage Engine wählenIndizierung festlegen

K. Puschke MySQL

Page 46: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Entity-Relationship-Model

Entitiy-Relationship-Model, ER-Modell, ERM,Gegenstand-Beziehungs-Modell:konzeptionelles Datenmodell zur formalen Beschreibungeines Ausschnitts der realen WeltP.P. Chen (1976)

K. Puschke MySQL

Page 47: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Entity-Relationship-ModelElemente eines Schemas

Entitäten: Gegenstände, Personen,. . .Beziehungen: Verknüpfungen von EntitätenAttribute: Eigenschaften von Entitäten oder BeziehungenAttribute haben Werte (nicht modelliert)Primärschlüssel : Attribut (oder Kombination mehrererAttribute), welches eine Entität oder Beziehung eindeutigkennzeichnetKardinalität von Beziehungen: (mögliche) Anzahlbeteiligter Entitäten

K. Puschke MySQL

Page 48: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

ER-Diagramm

ER-Diagramm: grafische Darstellung einesER-modellierten Schemasverschiedene Notationen vorhanden

K. Puschke MySQL

Page 49: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Erstellen von ER-DiagrammenSoftwaretools

DiaMicrosoft VisioMySQL Workbench. . .

K. Puschke MySQL

Page 50: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Elemente eines ER-Diagramms

Entität: RechteckAttribut: KreisBeziehung: RautePrimärschlüssel: unterstrichenKardinaliäten:

Chen-Notation: 1 oder NMin-Max-Notation: Paare mit Einträgen 0,1 oder N, z.B.(1,N)

K. Puschke MySQL

Page 51: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

ER-Diagramm

K. Puschke MySQL

Page 52: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Aufgaben

DatenbankentwurfAnforderungsanalyse, ER-Diagramm

K. Puschke MySQL

Page 53: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Vom ER-Diagramm zum Relationalen Schema

ein Primärschlüssel für jede Tabelleeine Tabelle für jede Entitäteine Tabelle für jede n-m-BeziehungAttribute sind Spalten der jeweiligen Tabellen-eins-Beziehung als Fremdschlüssel (in der Tabelle derEntität auf der n-Seite)

K. Puschke MySQL

Page 54: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Aufgaben

DatenbankentwurfRelationales Schema, ER-Diagramm in Tabellen überführen

K. Puschke MySQL

Page 55: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

AblaufKonzeptionelles Design: Entity-Relationship-ModelLogisches Design: Relationales SchemaPhysisches Design: Storage Engine

Storage EnginePhysisches Schema

zuständig für Datenspeicherungsetzt physisches Modell umMySQL bringt mehrere Storage Engines mitweitere Engines können eingebunden werdenStandard Engine in MySQL: MyISAMIndex Sequential Access Methodzunehmend verbreitet: InnoDBwir verwenden die Standardeinstellungen

K. Puschke MySQL

Page 56: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Normalform

Datenbankdesign

7 Einführung in die theoretischen Grundlagen

8 Datenbankdesign in der Praxis

9 QualitätssicherungNormalform

10 Datenbank definieren

K. Puschke MySQL

Page 57: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Normalform

Aufgabe

NormalformNegativbeispiel diskutieren

K. Puschke MySQL

Page 58: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Normalform

Normalform

NormalformJedes Attribut, das kein Schlüssel ist, hängt direkt vomSchlüssel ab, vom gesamten Schlüssel, und zwar nur vomSchlüssel

K. Puschke MySQL

Page 59: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Normalform

Daten in Normalform

keine AnomalienKonsistenz der Datenkeine Redundanzeneinfache Wartungeffizientes Suchen und Bearbeiten

K. Puschke MySQL

Page 60: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Normalform

Normalisierung

Normalisierung = in Normalform bringenverschiedene AlgorithmenER-Diagramme und daraus abgeleitete relationaleSchemata:

häufig schon in Normalformggf. “nachbessern”

K. Puschke MySQL

Page 61: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Normalform

Normalform

HinweisDie Darstellung zum Thema Normalisierung/Normalform istsehr vereinfacht. Wer mehr wissen möchte, findet links im Wiki.

K. Puschke MySQL

Page 62: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Exkurs: Die MySQL-DokumentationTabellen anlegen

Datenbankdesign

7 Einführung in die theoretischen Grundlagen

8 Datenbankdesign in der Praxis

9 Qualitätssicherung

10 Datenbank definierenExkurs: Die MySQL-DokumentationTabellen anlegen

K. Puschke MySQL

Page 63: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Exkurs: Die MySQL-DokumentationTabellen anlegen

Umgang mit der MySQL-Doku

eckige Klammern umschliessen optionale Klauseln| bedeutet odernur eine der genannten Alternativen kann/muss benutztwerdengeschweifte Klammern: eine der Alternativen muss benutztwerdeneckige Klammern: eine oder keine der Alternativen kannbenutzt werdenBeispiel 1: DROP TABLE [IF EXISTS] tbl_name

Beispiel 2: {DESCRIBE | DESC} tbl_name[col_name | wild]}

K. Puschke MySQL

Page 64: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Exkurs: Die MySQL-DokumentationTabellen anlegen

Datenbank definierenTabellen anlegen

Name der TabelleStorage EngineBeschreibung der Spalten

Name der SpalteDatentyp (INT Integer, VARCHAR(20) String mit max. 20Zeichen)Eintrag obligatorisch? (NULL/NOT NULL)Eintrag eindeutig? (UNIQUE)Schlüssel? (PRIMARY KEY, impliziert NOT NULL undUNIQUE)Default-Wert? (DEFAULT)Extras? (z.B. AUTO_INCREMENT;AUTO_INCREMENT ist kein Standard-SQL!)

K. Puschke MySQL

Page 65: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Exkurs: Die MySQL-DokumentationTabellen anlegen

Tabellen verwalten ITabelle anlegen

CREATE TABLE

CREATE TABLE KundInnen (KundNr INT PRIMARY KEYAUTO_INCREMENT, Name VARCHAR(50) NOT NULL,Vorname VARCHAR(25))

K. Puschke MySQL

Page 66: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Exkurs: Die MySQL-DokumentationTabellen anlegen

Tabellen verwalten IIInformationen über Tabellen

DESCRIBE und SHOW CREATE TABLE

DESCRIBE KundInnenSHOW CREATE TABLE KundInnen

K. Puschke MySQL

Page 67: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Exkurs: Die MySQL-DokumentationTabellen anlegen

Tabellen verwalten IIITabellenstruktur ändern

ALTER TABLE

ALTER TABLE KundInnen DROP COLUMN Vorname. . .

ALTER TABLE

Vorsicht! Viele Stolperfallen!

K. Puschke MySQL

Page 68: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Exkurs: Die MySQL-DokumentationTabellen anlegen

Tabellen verwalten IVTabellen löschen

DROP TABLE

DROP TABLE KundInnen

K. Puschke MySQL

Page 69: Einstieg in relationale Datenbanken mit MySQL (Folien)

Einführung in die theoretischen GrundlagenDatenbankdesign in der Praxis

QualitätssicherungDatenbank definieren

Exkurs: Die MySQL-DokumentationTabellen anlegen

Aufgaben

Datenbank definierenCREATE TABLE, DROP TABLE, SHOW CREATE TABLE

K. Puschke MySQL

Page 70: Einstieg in relationale Datenbanken mit MySQL (Folien)

AllgemeinSQL

Teil IV

Datenbanksprachen

K. Puschke MySQL

Page 71: Einstieg in relationale Datenbanken mit MySQL (Folien)

AllgemeinSQL

Datenbanksprachen

11 Allgemein

12 SQL

K. Puschke MySQL

Page 72: Einstieg in relationale Datenbanken mit MySQL (Folien)

AllgemeinSQL

Datenbanksprachen

Data Definition Language (DDL)Definition des DatenbankschemasData Manipulation Language (DML)Daten abfragen und verändernData Control Language (DCL)ZugriffsrechteData Administration Language (DAL)finetuning, Zugriffspfad

K. Puschke MySQL

Page 73: Einstieg in relationale Datenbanken mit MySQL (Folien)

AllgemeinSQL

Datenbanksprachen

11 Allgemein

12 SQL

K. Puschke MySQL

Page 74: Einstieg in relationale Datenbanken mit MySQL (Folien)

AllgemeinSQL

SQL

Structured Query LanguageVorgänger: SEQUELSprache relationaler DBMSbeinhaltet DDL, DML, DCL, DALdeklarative Sprachebeschreibt, was zu tun ist, nicht wieerweitert um prozedurale Funktionalitäten(Ablaufsteuerung)Konvention: Befehle und Co. in Großbuchstaben schreibenSELECT * FROM kurse

K. Puschke MySQL

Page 75: Einstieg in relationale Datenbanken mit MySQL (Folien)

AllgemeinSQL

SQLImplementierungen

sehr verbreitet, z.B. MySQL, PostgreSQL, Oracle u.v.a.fast alle Systeme

implementieren nicht den kompletten Standardimplementieren eigene Erweiterungen

daher: Kompatibilität der Systeme eingeschränkt

K. Puschke MySQL

Page 76: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Teil V

Datenbanken erzeugen und manipulieren

K. Puschke MySQL

Page 77: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Datenbanken erzeugen und manipulieren

13 Daten eintragen, ändern, löschen

14 Tabellen verknüpfen

K. Puschke MySQL

Page 78: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Aufgaben

Datenbank erzeugen und manipulierenINSERT, UPDATE, DELETE

K. Puschke MySQL

Page 79: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Datenbank erzeugen und manipulierenDaten eintragen

INSERT

INSERT INTO KundInnen (Name,Vorname) VALUES(’Example’,’Erna’)

K. Puschke MySQL

Page 80: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Datenbank erzeugen und manipulierenDaten ändern

UPDATE

UPDATE KundInnen SET TelefonNr=’1234567’ WHEREKundNr=’666’

K. Puschke MySQL

Page 81: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Datenbank erzeugen und manipulierenDaten entfernen

DELETE

DELETE FROM KundInnen WHERE Stadt=’Wien’

K. Puschke MySQL

Page 82: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Datenbanken erzeugen und manipulieren

13 Daten eintragen, ändern, löschen

14 Tabellen verknüpfen

K. Puschke MySQL

Page 83: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Deskriptoren für Objekte in SQL

Objekt : Tabelle, Spalte,. . .kein Objekt im Sinne von OO-Programmierung!

Deskriptor : identifiziert das Objekt (z.B. Spaltenname)unterschiedlich für die verschiedenen Datenbanksystem

K. Puschke MySQL

Page 84: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Deskriptoren für Objekte in MySQL

VollständigTabelle: Datenbank.TabelleSpalte: Datenbank.Tabelle.Spalte

Abkürzung

Angabe der Datenbank kann entfallen, wenn die mit USEvoreingestellte benutzt werden sollAngabe der Tabelle kann zusätzlich entfallen, wennSpaltenname innerhalb der verwendeten Tabelleneindeutig

K. Puschke MySQL

Page 85: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Tabellen verknüpfenJOIN

Abfragen über mehrere TabellenTabellen verknüpfen (JOIN)verknüpfe Zeilen, ggf. gemäß einer Bedingung (angemeinsame Attribute)über verknüpften Tabellen SELECT durchführen

K. Puschke MySQL

Page 86: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Tabellen verknüpfenBeispiel

KundInnenKundNr Name Vorname1 Example Erna2 Kundin Karla

BestellungenKundNr ArtikelNr2 51 42 6

K. Puschke MySQL

Page 87: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Tabellen verknüpfenCross Join, Cartesisches Produkt

KundNr Name Vorname KundNr ArtikelNr1 Example Erna 1 41 Example Erna 2 51 Example Erna 2 62 Kundin Karla 2 62 Kundin Karla 2 52 Kundin Karla 2 6

K. Puschke MySQL

Page 88: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Tabellen verknüpfenTheta Join

Verknüpfungsbedingung:KundInnen.KundNr = Bestellungen.KundNr

KundNr Name Vorname KundNr ArtikelNr1 Example Erna 1 42 Kundin Karla 2 52 Kundin Karla 2 6

K. Puschke MySQL

Page 89: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

Aufgaben

Tabellen verknüpfenJOIN

K. Puschke MySQL

Page 90: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

JOIN-SyntaxINNER JOIN

Zeilen ohne Entsprechung in der anderen Tabelle entfallenSELECT Name, Vorname, ArtikelNr FROMKundInnen INNER JOIN Bestellungen ONKundInnen.KundNr = Bestellungen.KundNr

K. Puschke MySQL

Page 91: Einstieg in relationale Datenbanken mit MySQL (Folien)

Daten eintragen, ändern, löschenTabellen verknüpfen

JOIN-SyntaxOUTER JOIN

Zeilen ohne Entsprechung in der anderen Tabelle werdenmit NULL-Einträgen ergänztLEFT JOIN: alle Zeilen der linken Tabelle, dazu nur Zeilender rechten Tabelle, die eine Entsprechung in der linkenTabelle habenSELECT Name, Vorname, ArtikelNr FROMKundInnen INNER JOIN Bestellungen ONKundInnen.KundNr = Bestellungen.KundNr zeigtauch KundInnen, die nichts bestellt haben

K. Puschke MySQL

Page 92: Einstieg in relationale Datenbanken mit MySQL (Folien)

Datenbanken vs. DateienRelationale Datenbanksysteme

Teil VI

Vor- und Nachteile von Datenbanken

K. Puschke MySQL

Page 93: Einstieg in relationale Datenbanken mit MySQL (Folien)

Datenbanken vs. DateienRelationale Datenbanksysteme

Vorteile von DatenbanksystemenNachteile von Datenbanksystemen

Vor- und Nachteile von Datenbanken

15 Datenbanken vs. DateienVorteile von DatenbanksystemenNachteile von Datenbanksystemen

16 Relationale Datenbanksysteme

K. Puschke MySQL

Page 94: Einstieg in relationale Datenbanken mit MySQL (Folien)

Datenbanken vs. DateienRelationale Datenbanksysteme

Vorteile von DatenbanksystemenNachteile von Datenbanksystemen

Vorteile von Datenbanksystemen

Daten und Datenstruktur enthaltenDatenstruktur als Metadaten im DBS gespeichertkonkurrierende, gleichzeitige Zugriffe handhabenFehlertoleranzSicherheit (Zugriffsschutz) und Flexibilität durchTrennung von Anwendung und Datengroße Datenmengen beherrschbar

K. Puschke MySQL

Page 95: Einstieg in relationale Datenbanken mit MySQL (Folien)

Datenbanken vs. DateienRelationale Datenbanksysteme

Vorteile von DatenbanksystemenNachteile von Datenbanksystemen

Trennung von Anwendung und DatenExterne Sichten

Trennung von physischer Ebene, logischer Ebene undexterner Ebene (Sicht)Sicht : user-abhängige Zugriffsmöglichkeit undPräsentation der DatenBeispiel:

ZugriffsschutzBeispiel: Prüfungsbüro hat Zugriff auf andere Daten alsStudierendenverwaltungangepaßte Präsentation der Daten

kleinere Änderung auf einer Ebene beeinflußt andereEbenen nicht

K. Puschke MySQL

Page 96: Einstieg in relationale Datenbanken mit MySQL (Folien)

Datenbanken vs. DateienRelationale Datenbanksysteme

Vorteile von DatenbanksystemenNachteile von Datenbanksystemen

Nachteile von Datenbanksystemen

nicht alle Datenbanksysteme bieten die genannten VorteileAufwand nicht immer gerechtfertigtinsbesondere unterschiedliche Sichten aufwändigBeherrschbarkeit großer Datenmengen verleitet zuausufernder Datensammlung oder Verknüpfung von Daten

Mißachtung des Datenschutzes, insbesondere dergebotenen Datensparsamkeit drängt sich u.U. auf

K. Puschke MySQL

Page 97: Einstieg in relationale Datenbanken mit MySQL (Folien)

Datenbanken vs. DateienRelationale Datenbanksysteme

Vor- und Nachteile von Datenbanken

15 Datenbanken vs. Dateien

16 Relationale Datenbanksysteme

K. Puschke MySQL

Page 98: Einstieg in relationale Datenbanken mit MySQL (Folien)

Datenbanken vs. DateienRelationale Datenbanksysteme

Relationale Datenbanksysteme

Daten stark strukturiertnachträgliche Änderung des Schemas problematisch

gut geeignet für stark strukturierte Datenz.B. Adressdatenweniger geeignet für flexible Strukturenz.B. user generated content

nicht für verteilte Systeme optimierthohe Verbreitung auch in diesen Bereichenlange Zeit quasi alternativlos

K. Puschke MySQL

Page 99: Einstieg in relationale Datenbanken mit MySQL (Folien)

Aggregierte Daten

Teil VII

Datenbank manipulieren - WeitereMöglichkeiten

K. Puschke MySQL

Page 100: Einstieg in relationale Datenbanken mit MySQL (Folien)

Aggregierte Daten

Datenbank manipulieren - Weitere Möglichkeiten

17 Aggregierte Daten

K. Puschke MySQL

Page 101: Einstieg in relationale Datenbanken mit MySQL (Folien)

Aggregierte Daten

Aufgaben

Aggregierte DatenCOUNT, SUM, MAX,...GROUP BY, HAVING

K. Puschke MySQL

Page 102: Einstieg in relationale Datenbanken mit MySQL (Folien)

Aggregierte Daten

Aggregierte Daten

COUNT

gibt Anzahl der Datensätze ausSELECT COUNT(*) FROM KundInnen WHEREStadt=’WIEN’liefert Anzahl der KundInnen aus Wien

SUM,AVG,MAX,MIN

Summe, Durchschnitt, Maximum, MinimumSELECT SUM(Rechnungsbetrag) FROM Rechnungen

K. Puschke MySQL

Page 103: Einstieg in relationale Datenbanken mit MySQL (Folien)

Aggregierte Daten

GROUP BY und HAVING

GROUP BY

läßt Zeilen mit gemeinsamem Attributwert aggregierenSELECT Name, COUNT(*) FROM KundInnengibt aus, wieviele KundInnen jeweils den gleichenNachnamen haben

HAVING

schränkt Ergebnisse einSELECT Name, COUNT(*) FROM KundInnen HAVINGCOUNT(*) > 1zeigt nur Namen, die mehrfach vorkommen

K. Puschke MySQL

Page 104: Einstieg in relationale Datenbanken mit MySQL (Folien)

Aggregierte Daten

GROUP BY und HAVING

HAVING vs. WHEREWHERE stellt Bedingungen an die Spalten, die in dieBerechnung eingehenHAVING stellt Bedingungen an die Ergebnisse derBerechnung

SpaltenKeine Spalten in SELECT und HAVING eintragen, die nicht inGROUP BY stehen!

K. Puschke MySQL