Dr. Karsten Tolle – PRG2 – SS 2019 2
Bisher …
SQL:
• create
• insert
• select
(0,n) (0,n) Person
AusweisNr. Name Vorname
lebt_in
von bis
Ort
PLZ Ortsname
Dr. Karsten Tolle – PRG2 – SS 2019 3
Heute …
SQL:
• create
• insert
• select
(0,n) (0,n) Person
AusweisNr. Name Vorname
lebt_in
von bis
Ort
PLZ Ortsname
• 1. Normalform
• Schlüssel und Funktionale Abhängigkeiten
DatenaustauschformateViews
Dr. Karsten Tolle – PRG2 – SS 2019 4
CSV (Comma Separated Values)
CSV-Dateien dienen zum Speichern/Austausch einer Tabelle
id,vorname,nachname,telefon1,Max,Mustermann,938479283472,Peter,Mustermann,92378409238473,Miss,Mustermann,9832488
Daten(austausch)formate
eXtensible Markup Language (XML) – a simple example
<?xml version="1.0" ?>
<contact>
<address type="business">
<name>Tolle</name>
<firstname>Karsten</firstname>
<street>Robert-Mayer-Str.</street>
<town>Frankfurt</town>
</address>
</contact>
… erste W3C Recommendation von 1998!
Dr. Karsten Tolle – PRG2 – SS 2019 7
XML Syntax and Grammar
[1] document ::= prolog element Misc*
...
[3] S ::= (#x20 | #x9 | #xD | #xA)+ | space, carriage returns, line feeds, or tabs
[4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender
[5] Name ::= (Letter | '_' | ':') (NameChar)*
[6] Names ::= Name (#x20 Name)*
[7] Nmtoken ::= (NameChar)+
[8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*
...
[89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46
| #x0EC6 | #x3005 | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]
Siehe auch: https://www.w3.org/TR/xml/
Dr. Karsten Tolle – PRG2 – SS 2019 8
JavaScript Object Notation (JSON)
{"contact": {"address": {"-type": "business","name": "Tolle","firstname": "Karsten","street": "Robert-Mayer-Str.","town": "Frankfurt"
}}
}
<?xml version="1.0" ?>
<contact>
<address type="business">
<name>Tolle</name>
<firstname>Karsten</firstname>
<street>Robert-Mayer-Str.</street>
<town>Frankfurt</town>
</address>
</contact>
http://www.utilities-online.info/xmltojson/
… erstmals 2005 vorgestellt!
eXtensible Markup Language (XML) – example multiple phones
<?xml version="1.0" ?>
<contact>
<address type="business">
<name>Tolle</name>
<firstname>Karsten</firstname>
<street>Robert-Mayer-Str.</street>
<town>Frankfurt</town>
<phone>98237498273</phone>
<phone>098234</phone>
<phone>09802347</phone>
</address>
</contact>
https://www.wikidata.org/wiki/Wikidata:Database_download
JSON dumpsRDF dumpsXML dumps
Dr. Karsten Tolle – PRG2 – SS 2019 13
Resource Description Framework (RDF)
• Ausgangspunkt: Menschliche Sprache – Subjekt, Prädikat, Objekt
Objekt (Literal)Subjekt
Prädikat
Subjekt
Prädikat
Objekt (mit URI)
Dr. Karsten Tolle – PRG2 – SS 2019 14
Resource Description Framework (RDF)
• Basiert auf einen gerichteten, benannten Graphen
• Knoten, welche durch einen Uniform ResourceIdentifier (URI) identifiziert werden, können als Subjekt oder Objekt verwendet werden
• Knoten, welche keine URI besitzen (Literals) können nur als Objekte verwendet werden
• Prädikate (Properties) werden ebenfalls durch URIs identifiziert
Tripeldarstellung:
[http://publikationen.ub.uni-frankfurt.de/frontdoor/index/index/docId/2492 http://www.my.de/vok#creator „Karsten Tolle“ ]
Graf:
RDF/XML:<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:my="http://www.myns.de/vok#" >
<rdf:Description rdf:about="http://publikationen.ub.uni-frankfurt.de/frontdoor/index/index/docId/2492">
<my:creator>Karsten Tolle</my:creator>
</rdf:Description>
</rdf:RDF>
Karsten Tollehttp://publikationen.ub.uni-frankfurt.de/frontdoor/index/index/docId/2492
my:creator
Tripeldarstellung:
[ http://publikationen.ub.uni-frankfurt.de/frontdoor/index/index/docId/2492 my:creator _:1 ]
[ _:1 rdf:type my:Person ]
[ _:1 my:name “Karsten Tolle” ]
Graf:
Karsten Tolle
http://publikationen.ub.uni-frankfurt.de/frontdoor/index/index/docId/2492
my:creator
my:Person
my:name
rdf:type
UnterschiedeCSV JSON XML RDF
Datenstruktur Tabelle Baum Baum gerichteter, benannter Graph
Attribut/Element gleich gleich unterschiedlich gleich
Sonst - JSON Schema
(Struktur)
XML Schema Definition (XSD)
(Struktur)
Ontology(Bedeutung)
…
Dr. Karsten Tolle – PRG2 – SS 2019 18
Tools … ?• MySQL Workbench
• Heidi SQL
• OpenRefine (Google)
• …
Dr. Karsten Tolle – PRG2 – SS 2019 19
FIRSTNME LASTNME BIRTH STREET NUMBER TOWN ZIP
Jon Lucas 12.03.1969 {Zeil, Lange Str.}
{12, 114} {Frankfurt, Frankfurt}
{60313,60313}
Lucas Jon 24.12.1980 Gräfstr. 27 Frankfurt 60325
… … … … … … …
Dr. Karsten Tolle – PRG2 – SS 2019 20
1. Normalform
Definition:
Ein Relationenschema R ist in 1. Normalform (1NF), wenn die Wertebereiche aller Attribute von R atomar sind.
1.NF
Wertebereiche atomar
Dr. Karsten Tolle – PRG2 – SS 2019 21
1. Normalform
FIRSTNME LASTNME BIRTH STREET NUMBER TOWN ZIP
Jon Lucas 12.03.1969 Zeil 12 Frankfurt 60313
Jon Lucas 12.03.1969 Lange Str. 114 Frankfurt 60313
Lucas Jon 24.12.1980 Gräfstr. 27 Frankfurt 60325
… … … … … … …
FIRSTNME LASTNME BIRTH STREET NUMBER TOWN ZIP
Jon Lucas 12.03.1969 {Zeil, Lange Str.}
{12, 114} {Frankfurt, Frankfurt}
{60313,60313}
Lucas Jon 24.12.1980 Gräfstr. 27 Frankfurt 60325
… … … … … … …
Dr. Karsten Tolle – PRG2 – SS 2019 23
Nachteile nicht 1. NF
• Finden wird erschwert bis unmöglich
• Sortierungen werden sinnlos bis unmöglich
Dr. Karsten Tolle – PRG2 – SS 2019 24
Nutzung von Views
Empno Vorname Nachname Gehalt
1 Ines Müller 75000
2 Fred Wagner 60000
3 Ingo Meyer 72000
4 Max Müller 26000
Mitarbeiter
select Vorname, Nachname from Mitarbeiter;
Vorname Nachname
Ines Müller
Fred Wagner
Ingo Meyer
Max Müller
Ergebnis einer SQL-Select-Anfrage istimmer wieder eine Relation (Tabelle)!
CREATE VIEW Mitarbeiter_Namen ASselect Vorname, Nachname from Mitarbeiter;
Dr. Karsten Tolle – PRG2 – SS 2019 25Mitarbeiter_Dept
Empno Vorname Nachname Gehalt
1 Ines Müller 75000
2 Fred Wagner 60000
3 Ingo Meyer 72000
4 Max Müller 26000
Depno Name Head …
1 Finanzen 2
2 Einkauf 1
3 HR 1
Empno Depno …
1 2
1 3
2 1
3 3
4 2
CREATE VIEW Mitarbeiter_Dept ASselect m.Empno, m.Nachname, d.Name as Abtfrom Mitarbeiter m, Abteilung d, Arbeitet_in awhere m.Empno = a.Empnoand a.Depno = d.Depno;
Mitarbeiter Abteilung
Arbeitet_in
Empno Nachname Abt
1 Müller Einkauf
1 Müller HR
2 Wagner Finanzen
3 Meyer HR
4 Müller Einkauf
Mitarbeiter_Dept
Dr. Karsten Tolle – PRG2 – SS 2019 26
Schlüssel ?
PLZ ORT STRASSE NR
30419 Hannover Schaumburgstr. 2
30419 Hannover Quetlinburger Weg 12
37308 Bodenrode Hauptstraße 12
35279 Neustadt Gartenstraße 7
Dr. Karsten Tolle – PRG2 – SS 2019 27
Schlüssel ?
PLZ ORT STRASSE NR
30419 Hannover Schaumburgstr. 2
30419 Hannover Quetlinburger Weg 12
37308 Bodenrode Hauptstraße 12
37308 Geismar Bergstraße 1
35279 Neustadt Gartenstraße 7
Dr. Karsten Tolle – PRG2 – SS 2019 28
Schlüssel ?
keine Abhängigkeiten
Schlüssel: PLZ, ORT, STRASSE, NR
PLZ ORT STRASSE NR
30419 Hannover Schaumburgstr. 2
30419 Hannover Quetlinburger Weg 12
37308 Schirmberg Bergstraße 1
37308 Bodenrode Hauptstraße 12
37308 Geismar Bergstraße 1
35279 Neustadt Gartenstraße 7
53577 Neustadt Gartenstraße 7
Dr. Karsten Tolle – PRG2 – SS 2019 29
Fahrzeuge der Firma AB
HERSTELLER KENNZEICHEN ZUGEL_GES_GEW FÜHRERSCHEIN
VW F-AB 123 bis 3.5t B
MB F-AB 234 bis 7.5t C1
MB F-AB 235 bis 7.5t C1
MAN F-AB 236 bis 12t C
MB F-AB 239 bis 12t C
… … …
Abhängigkeiten?
Dr. Karsten Tolle – PRG2 – SS 2019 30
Fahrzeuge der Firma AB
HERSTELLER KENNZEICHEN ZUGEL_GES_GEW FÜHRERSCHEIN
VW F-AB 123 3.5 B
MB F-AB 234 7.5 C1
MB F-AB 235 7.5 C1
MAN F-AB 236 12 C
MB F-AB 239 12 C
MB F-AB 230 17 C
… … … …
… aus ZUGEL_GES_GEW folgt hier FÜHRERSCHEIN:ZUGEL_GES_GEW FÜHRERSCHEIN… umgekehrt nicht! bis 17 Tonnen
Dr. Karsten Tolle – PRG2 – SS 2019 31
Seien X und Y Teilmengen von R.
Eine Relation r(R) erfüllt (satisfies) die funktionale Abhängigkeit(functional dependency) FD X Y, wenn für je zwei (beliebige) Tupel u, v r(R) gilt:
u(X) = v(X) u(Y) = v(Y).
X Y u(X) = v(X) u(Y) = v(Y)
Funktionale Abhängigkeit (FD)
Dr. Karsten Tolle – PRG2 – SS 2019 32
Beispiel
Gegeben ist die Relation r(R):
Geben Sie an, welche der folgenden Abhängigkeiten r nicht widerspricht:
A B C D E
a1 b1 c1 d1 e1
a1 b2 c2 d2 e1
a2 b1 c3 d2 e1
a2 b1 c4 d3 e1
a3 b2 c5 d1 e1
A DAB DC BDEE AA EA BC
Dr. Karsten Tolle – PRG2 – SS 2019 33
Axiome von Armstrong
1. β ⊆ α ⇛ 𝛼 → 𝛽 (Reflexivität)
2. 𝛼 → 𝛽 ⇛ 𝛼𝛾 → 𝛽𝛾 (Erweiterungsregel)
3. 𝛼 → 𝛽 ∧ 𝛽 → 𝛾 ⇛ 𝛼 → 𝛾 (Transitivität)
Dr. Karsten Tolle – PRG2 – SS 2019 34
FDs?
Stadt Stadt Kreis, Stadt Kreis, Stadt…Stadt KreisKreis BundeslandStadt Bundesland
Stadt Kreis Bundesland
Rüsselsheim Groß-Gerau Hessen
Mörfelden-Walldorf Groß-Gerau Hessen
Dietzenbach Offenbach Hessen
Dreieich Offenbach Hessen
Walldorf (Baden) Rhein-Neckar-Kreis Baden-Württemberg
Dr. Karsten Tolle – PRG2 – SS 2019 35
Übung FDs – Situation welche FDs gelten?
• Briefe und Porto
Brief_ID Gewicht_in_gr Porto_in_euro
1 18 0,80
2 12 1,55
3 7 0,80
4 19 0,95
5 75 1,55
Brief_ID Gewicht_in_gr Porto_in_euro
1 18 0,80
2 12 1,55
3 7 0,50
4 19 0,95
5 75 1,55
6 ?? 0,80
7 23 ??
Dr. Karsten Tolle – PRG2 – SS 2019 36
Übung FDs – Situation welche FDs gelten?
• Briefe und Porto
Brief_ID L_in_cm B_in_cm H_in_cm Gewicht_in_gr Porto_in_euro
1 15 11,5 0,1 18 0,80
2 15 11,5 1,5 12 1,55
3 15 11,5 0,2 7 0,80
4 15 11,5 0,4 23 0,95
5 15 11,5 1,5 75 1,55
Dr. Karsten Tolle – PRG2 – SS 2019 38
Schlüssel
Ein Schlüssel identifiziert eine Entität. Er besteht aus einer Menge von Attributen, deren Werte alle Instanzen einer Entität eindeutig bestimmen.
Ein Schlüssel (key) einer Relation r(R) ist eine minimale Teilmenge Kvon R, so dass für je zwei verschiedene Tupel t1, t2 r gilt:
t1(K) t2(K) und
keine echte Teilmenge K' von K hat diese Eigenschaft.
Ein Schlüssel kann als Integritätsbedingung angesehen werden. Falls K Schlüssel von r(R), t1 r, t1(K) = t2(K), t1 t2 dann dürfte t2 nicht in r(R) eingefügt werden.
Dr. Karsten Tolle – PRG2 – SS 2019 39
Schlüssel
Gegeben seien ein Relationenschema R und eine Menge F von FDs.
X R ist ein Oberschlüssel für R
X R
X ist ein Schlüssel für R
X R und X minimal (AX: X\A R)
Dr. Karsten Tolle – PRG2 – SS 2019 40
Wie finde ich alle Schlüssel wenn FDs gegeben?
Gegeben Relationschema R und eine Menge F von FDs
z.B. R = (A, B, C, D, E) und FD = {AB, CDAC}
Gibt es Attribute, die nicht auf der rechten Seite der FDs vorkommen?Falls ja, gehören diese zu jedem Schlüssel!
Hier: D und E
… ist dies bereits ein Schlüssel, sind wir fertig!
Dr. Karsten Tolle – PRG2 – SS 2019 41
Gegeben Relationschema R und eine Menge F von FDs
z.B. R = (A, B, C, D, E) und FD = {AB, CDAC}
Gibt es Attribute, die nicht auf der rechten Seite der FDs vorkommen?Falls ja, gehören diese zu jedem Schlüssel!
Hier: D und E (kann aber auch ∅ sein)
… ist dies kein Schlüssel kombinatorisch ausprobieren. Bem.: Auch C gehört hier zu allen Schlüsseln!
Es steht zwar auf der rechten Seite, jedoch auch links.In diesem Fall darf man das C rechts streichen (nicht aber links).
Schlüssel = {CDE}
Dr. Karsten Tolle – PRG2 – SS 2019 42
Übung
R = (A, B, C, D, E)
a. FD = {ABD, CDAC, ED}
b. FD = {AEBD, CDAC, ED}
a. Schlüssel = {CE}b. Schlüssel = {AC, CD, CE}
Dr. Karsten Tolle – PRG2 – SS 2019 43
Wie viele Eintragungen gibt für die PLZ = 37308 ?
PLZ ORT STRASSE_NR
30419 Hannover Schaumburgstr. 2
30419 Hannover Quetlinburger Weg 12
37308 Schirmberg Bergstraße 1
37308 Bodenrode Hauptstraße 12
37308 Geismar Bergstraße 1
35279 Neustadt Gartenstraße 7
53577 Neustadt Gartenstraße 7
Wie viele Eintragungen gibt es pro PLZ?
select PLZ, count(*) from Adresse where PLZ = 37308;
PLZ count(*)
37308 3
Adresse
Dr. Karsten Tolle – PRG2 – SS 2019 44
SQL - Anfragen
• group by PLZ
select A1,A2, ... ,An
from R1, R2, ... ,Rm
[where conditions]
[group by clause]
[having clause]
[order by clause];
PLZ ORT STRASSE_NR
30419 Hannover Schaumburgstr. 2
30419 Hannover Quetlinburger Weg 12
37308 Schirmberg Bergstraße 1
37308 Bodenrode Hauptstraße 12
37308 Geismar Bergstraße 1
35279 Neustadt Gartenstraße 7
53577 Neustadt Gartenstraße 7
Dr. Karsten Tolle – PRG2 – SS 2019 45
Group by …• zum Gruppieren nach Spaltenwerte
Wie viele Eintragungen gibt es pro PLZ?
select PLZ, count(*) from Adresse group by PLZ;
PLZ count(*)
30419 2
37308 3
35279 1
53577 1
Adresse
PLZ ORT STRASSE_NR
30419 Hannover Schaumburgstr. 2
30419 Hannover Quetlinburger Weg 12
37308 Schirmberg Bergstraße 1
37308 Bodenrode Hauptstraße 12
37308 Geismar Bergstraße 1
35279 Neustadt Gartenstraße 7
53577 Neustadt Gartenstraße 7
Dr. Karsten Tolle – PRG2 – SS 2019 46
Group by …• zum Gruppieren nach Spaltenwerte
PLZ ORT STRASSE_NR
30419 Hannover Schaumburgstr. 2
30419 Hannover Quetlinburger Weg 12
37308 Schirmberg Bergstraße 1
37308 Bodenrode Hauptstraße 12
37308 Geismar Bergstraße 1
35279 Neustadt Gartenstraße 7
53577 Neustadt Gartenstraße 7
Wie viele Eintragungen gibt es pro Kombination aus PLZ und ORT?
select PLZ, Ort, count(*) from Adresse group by PLZ, Ort;
PLZ ORT count(*)
30419 Hannover 2
37308 Schirmberg 1
37308 Bodenrode 1
37308 Geismar 1
35279 Neustadt 1
53577 Neustadt 1
Dr. Karsten Tolle – PRG2 – SS 2019 47
Group by … having …• zum Gruppieren nach Spaltenwerte mit
Bedingung an die Gruppe!PLZ ORT STRASSE_NR
30419 Hannover Schaumburgstr. 2
30419 Hannover Quetlinburger Weg 12
37308 Schirmberg Bergstraße 1
37308 Bodenrode Hauptstraße 12
37308 Geismar Bergstraße 1
35279 Neustadt Gartenstraße 7
53577 Neustadt Gartenstraße 7
Wie viele Eintragungen gibt es pro Kombination aus PLZ und ORT,beschränkt auf die Gruppen mit mindestens 2 Einträgen?
select PLZ, Ort, count(*) from Adresse group by PLZ, Ort having count(*) >= 2;
PLZ ORT count(*)
30419 Hannover 2
Dr. Karsten Tolle – PRG2 – SS 2019 48
Funktionen …
Wie viele Arbeitslose gibt es pro Bundesland?-- Summe aller AL pro Bundeslandselect name, sum(arbeitslose) as 'Anzahl der Arbeitslosen' from bundeslaender b, gemeindedaten g where b.ags = substring(g.ags from 1 for 2)group by b.ags;
gemeindedaten bundeslaender
MySQL Funktion: SUBSTRING(<attribut> FROM <start> FOR <anzahl>)SUBSTRING(AGS FROM 1 FOR 2) liefert die ersten beiden Zeichen
Dr. Karsten Tolle – PRG2 – SS 2019 49
Funktionen MySQL:https://dev.mysql.com/doc/refman/8.0/en/functions.html
• Blatt 8: DAYOFWEEK(date) (https://dev.mysql.com/doc/refman/8.0/en/date-and-time-
functions.html#function_dayofweek)
• Funktionen unterscheiden sich zwischen den verschiedenen DBMS!