AusweisNr Name Vorname

Werbung
Daten – Bank
3. Vorlesung
Dr. Karsten Tolle – PRG2 – SS 2012
Bisher …
SQL:
•
•
•
•
create
insert
select
alter
GeoPosition
von
Person
AusweisNr.
(0,n)
Name Vorname
Dr. Karsten Tolle – PRG2 – SS 2012
lebt_in
bis
(0,n)
Ort
PLZ
Ortsname
2
ER-Modell gegeben
von
Person
AusweisNr.
(0,n)
Name Vorname
lebt_in
bis
(0,n)
Ort
PLZ
Ortsname
Frage 1: Wie daraus Tabellen (Relationen) bauen?
Frage 2: Welche Alternativen habe ich?
… später heute:
Wie baue ich diese Tabellen in SQL?
Dr. Karsten Tolle – PRG2 – SS 2012
3
ER-Abbildung zu Relationen
Entitätstypen
• Ein Entitätstyp wird zu einer Relation (Tabelle), dessen Relationenschema
aus allen Attributen des Entitätstyps besteht.
• Jedes Tupel der Tabelle entspricht dann genau einer Entität des
Entitätstyps.
• Etwaige Schlüssel werden übernommen und üblicherweise an den Anfang
des Relationenschemas gestellt.
„Regel“:
Schlüssel
Attribut_A
Attribut_B
Entitätstyp E
E (Schlüssel, Attribut_A, Attribut_B)
Dr. Karsten Tolle – PRG2 – SS 2012
4
Beispiel
Angestellter
PersNr
Name Vorname
ANGESTELLTER (PersNr, Name, Vorname)
ANGESTELLTER
Dr. Karsten Tolle – PRG2 – SS 2012
PersNr
Name
Vorname
001
Jon
Lucas
003
Jon
Smith
103
Lucas
Jon
5
Beziehungstyp
B1
B2
Schlüssel1
A_1
Schlüssel2
A_2
Entität_1
Beziehung
ENTITÄT_1 (Schlüssel1, A_1)
Entität_2
ENTITÄT_2 (Schlüssel2, A_2)
BEZIEHUNG (Schlüssel1, Schlüssel2, B1, B2)
Schlüssel für die Tabelle/Relation Beziehung?
Dr. Karsten Tolle – PRG2 – SS 2012
6
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. (aus ER!)
• Ein Schlüssel (key) einer Relation r(R) ist eine minimale
Teilmenge K von 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 2012
7
Schlüssel?
Raum
Tutorium
Name
TutorName
Raum
Wochentag
Startzeit
NM103
Sadik
NM117
Montag
08:15
NM117
Alina
NM117
Montag
12:15
NM123
Max
NM117
Donnerstag
14:15
SR9
Max
SR9
Donnerstag
12:15
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 2012
8
Oberschlüssel
• K ist ein Oberschlüssel (super key) der
Relation, falls K einen Schlüssel enthält.
• … also aus Schlüssel
Oberschlüssel
(aber nicht umgekehrt)
Oberschlüssel
Schlüssel
Dr. Karsten Tolle – PRG2 – SS 2012
9
Wichtig!!!!!!!!!
• Eine Relation kann mehrere Schlüssel besitzen. Man spricht
dann auch von Schlüsselkandidaten.
• Im Allgemeinen wird ein Schlüssel als Primärschlüssel
ausgezeichnet. Dieser wird im Relationenschema durch
Unterstreichen gekennzeichnet.
Dr. Karsten Tolle – PRG2 – SS 2012
10
Beispiel
von
Person
AusweisNr
(0,n)
Name Vorname
PERSON
ORT
LEBT_IN
Dr. Karsten Tolle – PRG2 – SS 2012
lebt_in
bis
(0,n)
Ort
PLZ
Ortsname
(AusweisNr, Name, Vorname)
(PLZ, Ortsname)
(AusweisNr, PLZ, von, bis)
11
Beispiel mit Instanzen
PERSON
ORT
AusweisNr
Name
Vorname
PLZ
Ortsname
001
Jon
Lucas
501
Buli
003
Jon
Smith
503
Wali
103
Lucas
Jon
603
Kali
LEBT_IN
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
Jon Lucas (001) lebt(e)_in Buli (501), vom 23.12.2000 bis zum 25.12.2010!
Dr. Karsten Tolle – PRG2 – SS 2012
12
PERSON
ORT
AusweisNr
Name
Vorname
PLZ
Ortsname
001
Jon
Lucas
501
Buli
003
Jon
Smith
503
Wali
103
Lucas
Jon
603
Kali
LEBT_IN
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
001
501
01.01.2012
Null
Jon Lucas (001) lebt(e)_in Buli (501), vom 23.12.2000 bis zum 25.12.2010!
Jon Lucas (001) lebt(e)_in Buli (501), vom 01.01.2012 bis heute!
Dr. Karsten Tolle – PRG2 – SS 2012
Attribut „von“ der Relation
muss auch Teil des Schlüssels
sein!
13
(0,n) und (0,n)
B1
B2
Schlüssel1
A_1
Entität_1
Schlüssel2
A_2
(0,n)
Beziehung
ENTITÄT_1 (Schlüssel1, A_1)
(0,n)
Entität_2
ENTITÄT_2 (Schlüssel2, A_2)
BEZIEHUNG (Schlüssel1, Schlüssel2, B1, B2)
Dr. Karsten Tolle – PRG2 – SS 2012
14
(0,1) und (0,n)
B
Schlüssel1
A_1
Entität_1
Schlüssel2
A_2
(0,1)
Beziehung
(0,n)
Entität_2
ENTITÄT_1 (Schlüssel1, A_1)
ENTITÄT_2 (Schlüssel2, A_2)
BEZIEHUNG (Schlüssel1, Schlüssel2, B)
Dr. Karsten Tolle – PRG2 – SS 2012
15
Beispiel
Datum
(0,1)
Buch
BuchNr
Titel
Autor
verliehen
an
(0,n)
Entleiher
Nummer
Name
BUCH
(BuchNr, Titel, Autor)
ENTLEIHER
(Nummer, Name)
VERLIEHEN_AN(BuchNr, Nummer, Datum)
Dr. Karsten Tolle – PRG2 – SS 2012
16
Beispiel mit Instanzen
BUCH
ENTLEIHER
BuchNr
Titel
Autor
Nummer
Name
001
Vom Winde
Lucas
501
Bully
003
Per Anhalter
Smith
503
Wally
103
Vom Winde
Lucas
603
Kally
VERLIEHEN_AN
BuchNr
Nummer
Datum
001
501
23.12.2011
103
603
17.08.2011
003
503
01.01.1999
Das Buch (001) wurde verliehen an Bully am 23.12.2011.
Dr. Karsten Tolle – PRG2 – SS 2012
17
Beispiel (besser!)
RückgabeDatum
(0,1)
Buch
BuchNr
Titel
Autor
verliehen
an
(0,n)
Entleiher
EntleiherNr Nachname
BUCH
(BuchNr, Titel, Autor)
ENTLEIHER
(EntleiherNr, Name)
VERLIEHEN_AN(BuchNr, EntleiherNr, RückgabeDatum)
Dr. Karsten Tolle – PRG2 – SS 2012
18
Beispiel (besser!)
RückgabeDatum
(0,1)
Buch
Nr
Titel
Autor
verliehen
an
(0,n)
Entleiher
Nr Nachname
BUCH
(Nr, Titel, Autor)
ENTLEIHER
(Nr, Name)
VERLIEHEN_AN(BuchNr, EntleiherNr, RückgabeDatum)
Dr. Karsten Tolle – PRG2 – SS 2012
19
(1,1)
B
Schlüssel1
A_1
Schlüssel2
A_2
(1,1)
Entität_1
ENTITÄT_1
ENTITÄT_2
Beziehung
(0,n)
Entität_2
(Schlüssel1, A_1, Schlüssel2, B)
(Schlüssel2, A_2)
Hier sind nur noch zwei Relationen notwendig!
Dr. Karsten Tolle – PRG2 – SS 2012
20
Beispiel
Datum
Person
AusweisNr.
(1,1)
Name Vorname
geboren
in
(0,n)
Ort
PLZ
Ortsname
PERSON (AusweisNr., Name, Vorname, PLZ, Datum)
ORT
(PLZ, Ortsname)
Dr. Karsten Tolle – PRG2 – SS 2012
21
… aber auch möglich! (geht immer☺)
B
Schlüssel1
A_1
Entität_1
Schlüssel2
A_2
(1,1)
Beziehung
(0,n)
Entität_2
ENTITÄT_1(Schlüssel1, A_1)
ENTITÄT_2 (Schlüssel2, A_2)
Datum
BEZIEHUNG (Schlüssel1, Schlüssel2, B)
Person
AusweisNr.
(1,1)
Name Vorname
geboren
in
(0,n)
Ort
PLZ
Ortsname
PERSON (AusweisNr., Name, Vorname)
ORT (PLZ, Ortsname)
GEBOREN_IN (AusweisNr., PLZ, Datum)
Dr. Karsten Tolle – PRG2 – SS 2012
22
… Unterschied?
Datum
Person
AusweisNr.
(1,1)
Name Vorname
PERSON (AusweisNr., Name, Vorname, PLZ, Datum)
ORT (PLZ, Ortsname)
Dr. Karsten Tolle – PRG2 – SS 2012
geboren
in
(0,n)
Ort
PLZ
Ortsname
PERSON (AusweisNr., Name, Vorname)
ORT (PLZ, Ortsname)
GEBOREN_IN (AusweisNr., PLZ, Datum)
23
(1,1) und (0,1)
Sind beide min-Kardinalitäten = 0, so muss das allgemeine Verfahren ((o,n)
und (0,n)) angewendet werden.
Ist nur eine min-Kardinalität = 1, so wendet man die Abbildung der one-tomany bzw. many-to-one Beziehung an.
B
Schlüssel1
A_1
Entität_1
ENTITÄT_1
ENTITÄT_2
Dr. Karsten Tolle – PRG2 – SS 2012
Schlüssel2
A_2
(1,1)
Beziehung
(0,1)
Entität_2
(Schlüssel1, A_1, Schlüssel2, B)
(Schlüssel2, A_2)
24
Beispiel
seit
Abteilung
AbteilungsNr.
(1,1)
Bezeichnung
geleitet
von
(0,1)
Mitarbeiter
Pers.Nr.
Name
ABTEILUNG (AbteilungsNr., Bezeichnung, Pers.Nr., seit)
MITARBEITER (Pers.Nr., Name)
Dr. Karsten Tolle – PRG2 – SS 2012
25
(1,1) und (1,1)
B
Schlüssel1
A_1
Entität_1
Schlüssel2
A_2
(1,1)
Beziehung
(1,1)
Entität_2
ENTITÄT_1_2 (Schlüssel1, A_1, Schlüssel2, A_2, B)
oder
ENTITÄT_1_2 (Schlüssel1, A_1, Schlüssel2, A_2, B)
Nur noch eine Relation notwendig!
Dr. Karsten Tolle – PRG2 – SS 2012
26
Beispiel
AblaufDatum
Ausweis
AusweisNr. Behörde
(1,1)
gehört
(1,1)
Person
ID
Nachname
PERSON (AusweisNr., Behörde, Ablaufdatum, ID, Nachname)
Dr. Karsten Tolle – PRG2 – SS 2012
27
Sonderfälle
(3,5)
Auto
KFZ-Kennzeichen
Hersteller
hat_Räder
(0,1)
Rad
Fabr.-Nr.
Breite
(Hier sind RAD1 – RAD3 verbindlich, also NOT NULL, während
RAD4 und RAD5 durchaus Nullwerte beinhalten dürfen.)
AUTO (KFZ-Kennzeichen, Hersteller, RAD1, ... RAD5)
RAD (Fabr.-Nr., Breite)
Dr. Karsten Tolle – PRG2 – SS 2012
28
Überführung in SQL
von
Person
AusweisNr.
(0,n)
Name Vorname
PERSON
ORT
LEBT_IN
Dr. Karsten Tolle – PRG2 – SS 2012
lebt_in
bis
(0,n)
Ort
PLZ
Ortsname
(AusweisNr., Name, Vorname)
(PLZ, Ortsname)
(AusweisNr., PLZ, von, bis)
29
PERSON
ORT
AusweisNr
Name
Vorname
PLZ
Ortsname
001
Jon
Lucas
501
Buli
003
Jon
Smith
503
Wali
103
Lucas
Jon
603
Kali
LEBT_IN
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
001
501
01.01.2012
Null
Fragen:
1. Welche Datentypen für die Attribute?
2. Welche Attribute dürfen Null-Values enthalten?
3. Wie erzeuge ich die referenzielle Integrität?
Dr. Karsten Tolle – PRG2 – SS 2012
30
LEBT_IN
ORT
PLZ
Ortsname
501
Buli
503
Wali
603
Kali
z.B. varchar(40)
oder besser
varchar(45)? …
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
001
501
01.01.2012
Null
Ist auch „01“ ein gültiger Wert?
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch ist ein
walisischer Ortsname in Irland mit 58 Zeichen.
Dr. Karsten Tolle – PRG2 – SS 2012
31
LEBT_IN
ORT
PLZ
Ortsname
501
Buli
503
Wali
603
Kali
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
001
501
01.01.2012
Null
Werte hier sollen eine Referenz
auf Objekte darstellen. Sie sollten
enthalten sein in der Tabelle ORT!
Solche Verweise auf Schlüssel anderer Tabellen nennt man „Fremdschlüssel“!
Dr. Karsten Tolle – PRG2 – SS 2012
32
LEBT_IN
ORT
PLZ
Ortsname
501
Buli
503
Wali
603
Kali
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
001
501
01.01.2012
Null
CREATE TABLE lebt_in (
AusweisNr INT NOT NULL ,
PLZ INT NOT NULL ,
von DATE NOT NULL ,
bis DATE NULL ,
PRIMARY KEY (AusweisNr, PLZ, von) ,
FOREIGN KEY (PLZ) REFERENCES ort (PLZ),
FOREIGN KEY (AusweisNr) REFERENCES person (AusweisNr));
Dr. Karsten Tolle – PRG2 – SS 2012
33
Definition
Referenzielle Integrität bedeutet die Konsistenz
zwischen verbundenen Tabellen. Referenzielle
Integrität wird durch die Kombination von
Primärschlüssel und Fremdschlüssel erzwungen.
Um die referenzielle Integrität zu erhalten darf
jedes Feld einer Tabelle, das als Fremdschlüssel
deklariert worden ist, nur Werte des
entsprechenden Primärschlüssels der „Eltern
Tabelle“ annehmen.
Dr. Karsten Tolle – PRG2 – SS 2012
34
Abbildung der Generalisierung
Schlüssel
Attribut_A
Attribut_B
Oberklasse
Subklasse_1
Attribut_A_1
Attribut_B_1
Subklasse_2
Attribut_A_2
Es gibt unterschiedliche Möglichkeiten
dies ins rel. Modell abzubilden.
nicht klausurrelevant
Dr. Karsten Tolle – PRG2 – SS 2012
35
Generalisierung ER
rel. Modell
Möglichkeit 1:
KONTO (Kto.Nr., Kunde, Kto.Stand)
GIROKONTO (Kto.Nr., Kunde, Kto.Stand, Kreditrahmen)
SPARKONTO (Kto.Nr., Kunde, Kto.Stand, Zinssatz)
Verknüpfung zwischen
Kto.Nr. über Fremdschlüssel!
Kto.-Nr.
Kunde
Kto.Stand
Möglichkeit 2:
KONTO (Kto.Nr., Kunde, Kto.Stand)
GIROKONTO (Kto.Nr., Kreditrahmen)
SPARKONTO (Kto.Nr., Zinssatz)
Konto
Girokonto
Kreditrahmen
Sparkonto
Zinssatz
Möglichkeit 3:
KONTO (Kto.Nr., Kunde, Kto.Stand, Kreditrahmen, Zinssatz)
Dr. Karsten Tolle – PRG2 – SS 2012
nicht klausurrelevant☺
☺
36
Mitarbeiter
(0,n)
Woche
Jahr
(1,1)
gehört
Dienstplan
(0,n)
(0,n)
Mitarbeiter
SteuerungsAbt
legt_fest
A
B
Facharzt
(1,1)
zugeordnet
(0,n)
Abteilung
(1,1)
(0,n)
leitet
Abteilungsleiter
(2,n)
hat
(0,n)
StvAbtleiter
(1,n)
ausgebildet
in
Note
(0,n)
Nr
Fachausrichtung
Patient
C
Nachname
(1,n)
auf
nehmen
Aufnahme
(0,n)
Krankenhaus
Entlassung
SQL
• select * from ort o where o.PLZ = 501; - - Verwendung eines Alias
• select ortsname as Name from ort; -- Umbenennung der Ausgabe
Dr. Karsten Tolle – PRG2 – SS 2012
38
Wieder verbinden in Anfragen?
PERSON
ORT
AusweisNr
Name
Vorname
PLZ
Ortsname
001
Jon
Lucas
501
Buli
003
Jon
Smith
503
Wali
103
Lucas
Jon
603
Kali
LEBT_IN
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
001
501
01.01.2012
Null
Welche Personen leben aktuell in Buli?
Dr. Karsten Tolle – PRG2 – SS 2012
select
A1,A2, ... ,An
from
R1, R2, ... ,Rm
[where
conditions]
[group by clause]
[having
clause]
39
[order by clause];
Wieder verbinden in Anfragen?
PERSON
ORT
AusweisNr
Name
Vorname
PLZ
Ortsname
001
Jon
Lucas
501
Buli
003
Jon
Smith
503
Wali
103
Lucas
Jon
603
Kali
LEBT_IN
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
001
501
01.01.2012
Null
Welche Personen leben aktuell in Buli?
SELECT p.* FROM lebt_in l, person p, ort o
where
o.Ortsname = 'Buli' and
o.plz = l.plz and
p.ausweisnr = l.ausweisnr and
l.bis is null;
Dr. Karsten Tolle – PRG2 – SS 2012
40
Wieder verbinden in Anfragen?
PERSON
ORT
AusweisNr
Name
Vorname
PLZ
Ortsname
001
Jon
Lucas
501
Buli
003
Jon
Smith
503
Wali
103
Lucas
Jon
603
Kali
LEBT_IN
AusweisNr
PLZ
von
bis
001
501
23.12.2000
25.12.2010
003
501
17.08.2004
Null
001
503
01.01.1999
01.01.2012
001
501
01.01.2012
Null
Welche Personen leben aktuell in Buli?
SELECT p.* FROM lebt_in l
join person p on (l.ausweisnr=p.ausweisnr)
join ort o on (o.plz=l.plz)
where
o.Ortsname = 'Buli' and l.bis is null;
Dr. Karsten Tolle – PRG2 – SS 2012
41
Zusammenfassung
• Übersetzung ER-Modell ins Relationenmodell
(nicht eindeutig!)
• Referenzielle Integrität mit Fremdschlüssel
• Joins mit SQL
Dr. Karsten Tolle – PRG2 – SS 2012
42
Wichtiges
• Bachelor Informatik-Studenten:
Onlineanmeldung zu Klausur B-PRG2 im LFS ist
freigeschaltet.
• Zusätzlich zur Klausur anmelden unter:
http://www.dbis.informatik.uni-frankfurt.de/anmeldung/prg2/klausur/
Achtung: Dies ersetzt nicht eine Anmeldung
beim zuständigen Prüfungsamt, wenn dies
nötig ist!!!!
Dr. Karsten Tolle – PRG2 – SS 2012
43
Diesen Freitag!
Auch mit Public Viewing des EM-Spiels!
Herunterladen