schul - Studentshelp.de

Werbung
TDO - Skript
RELATIONALE DATENBANKEN
RELATIONAL DATABASE
= Datenbank in Tabellenform / besteht aus Tabellen
Schüler
Spalte: Eigenschaften (Attribut/attribute)
SNr
3
18
12
.
.
Vn
Max
Peter
Herbert
Zn
A
.
.
16
17
16
.
.
Müller
Berger
Maier
.
.
Zeile: Datensatz
SQL
stuctured query language
(strukturierte Abfrage Sprache)
select
from
where
Bsp:
bestimmt, welche Felder anzuzeigen sind.
wählt aus der Datenbank eine Tabelle aus
gibt die Bedingung an, die die Datensätze erfüllen müssen
Alle Zunamen aus der Tabelle Schüler, die älter als 16 sind.
select Zn
from schüler
where A>16
Bsp:
Alle Zunamen aus der Tabelle Schüler, die älter als 16 sind und 'Josef' heißen.
select Zn
from schüler
where A>16 and Vn='Josef'
 by K. Zimmermann
Seite: 1
1994/95
TDO - Skript
Bsp:
Vn
pilot
Zn
Fst
.
.
.
.
.
.
I)
Alle Zunamen aus der Tabelle Piloten, deren Flugstunden mehr als 1000 beträgt.
select Zn
from pilot
where Fst>1000
II)
Alle Zunamen aus der Tabelle Piloten, die weniger als 500 Flugstunden haben
und 'Franz' heißen.
select Zn
from pilot
where Fst<500 and Vn='Franz'
III)
Alle Zunamen aus der Tabelle Piloten, bei denen Vor- und Zuname gleich sind oder mehr als
2000 Flugstunden haben.
select Zn
from pilot
where Vn=Zn or Fst>2000
S
V
Zn
Verein
Verein
Präsident
Herzog
Stanzl
Bremen
Austria
Bremen
Austria
Pfanner
Haym
bilden eines KARTESISCHEN PRODUKTS
from
S, V
S.Zn
S.Verein
V.Verein
V.Präsident
Herzog
Herzog
Stanzl
Stanzl
Bremen
Bremen
Austria
Austria
Bremen
Austria
Bremen
Austria
Pfanner
Haym
Pfanner
Haym
Datensatz 2, 3 unnötig, deshalb:
where S.Verein=V.Verein
 by K. Zimmermann
JOIN
Seite: 2
1994/95
TDO - Skript
Bsp:
SF
PF
Stew
A
Flugzeug
Roth
Blau
Grün
31
29
38
36
19
36
Pilot
A
Flugzeug
Maier
Müller
35
37
71
36
(from SF, PF)
SF.Stew
Roth
Roth
Blau
Blau
Grün
Grün
I)
SF.A
SF.Flugzeug
PF.Pilot
PF.A
PF.Flugzeug
31
31
29
29
36
36
36
36
19
19
36
36
Maier
Müller
Maier
Müller
Maier
Müller
35
37
35
37
35
37
71
36
71
36
71
36
Alle Stew. und Piloten mit gleicher Flugzeugnummer und mit älterer Stew. (als Pilot).
select SF.Stew, PF.Pilot
from SF, PF
where (SF.Flugzeug=PF.Flugzeug) and (SF.A>PF.A)
Bsp:
A
Autotyp
I)
S
Stadt
Stadt
Land
EW
Autotypen (und Land) die aus England kommen.
select A.Autotyp, S.Land
from A, S
where A.Stadt=S.Stadt and S.Land='England'
II)
Alle Autotypen die aus einer französischen Kleinstadt (EW<20000) kommen.
select A.Autotyp
from A, S
where A.Stadt=S.Stadt and S.Land='Frankreich' and S.EW<20000
Bsp:
Schüler
Kc
I)
Schüler
Klassen
Klasse
Kc
Abt
Lehrer
Kv
Lehrer
Fach
Alle Schüler aus der 3HBb.
select Schüler
from Schüler
where Klasse='3HBb'
 by K. Zimmermann
Seite: 3
1994/95
TDO - Skript
II)
Alle Schüler die als Klassenvorstand den Schellner haben.
select Schüler
from Schüler, Klassen
where Schüler.Kc=Klassen.Kc and Klassen.Kv='Schellner'
III)
Alle Schüler die einen Chemielehrer als Klassenvorstand haben.
select Schüler
from Schüler, Klassen, Lehrer
where Schüler.Kc=Klassen.Kc and Klassen.Kv=Lehrer.Lehrer and Fach='Chemie'
IV)
Alle Schüler aus der tech. Abteilung mit einem Physiklehrer als Klassenvorstand.
select Schüler
from Schüler, Klassen, Lehrer
where Abt='tech.' and Schüler.Kc=Klassen.Kc and Klassen.Kv=Lehrer.Lehrer and Fach='Physik'
Bsp:
A
Marke Stadt
I)
S
Stadt
Land
L
EWS
Land
Kontinent
EWL
Alle Automarken aus amerikanischen Großstädten.
select Marke
from A, S, L
where A.Stadt=S.Stadt and EWS>20000 and S.Land=L.Land and Kontinent='Amerika'
II)
Alle Automarken, die aus Städte kommen, in denen mehr als 1/10 der jeweiligen
Landesbevölkerung wohnt.
select Marke
from A, S, L
where A.Stadt=S.Stadt and S.Land=L.Land and EWS>(0.1*EWL)
SYNONYM
select L, S
from Landesschulinspektor L, Schu... S
where L.xxxx S.xxxx
 by K. Zimmermann
Seite: 4
1994/95
TDO - Skript
Bsp:
Alle Mitarbeiter samt Stellvertreter.
Mitarbeiter
MNr Zun
37
19
Maier
Müller
A
Stv
50
52
19
25
M.MNr
M.Zun
M.A
M.Stv
37
37
19
19
Maier
Maier
Müller
Müller
50
50
52
52
19
19
25
25
S.MNr S.Zun
37
19
37
19
select M.Zun, S.Zun
from Mitarbeiter M, Mitarbeiter S
where M.Stv=S.MNr
Maier
Müller
Maier
Müller
EQUIJOIN
S.A
S.Stv
50
52
50
52
19
25
19
25
(Verknüpfung innerhalb einer Tabelle)
Bsp:
Mensch
Kind
Vater
5
4
3
3
2
2
I)
M1.Kind
M1.Vater
M2.Kind
M2.Vater
5
5
5
4
4
4
3
3
3
3
3
3
2
2
2
2
2
2
5
4
3
5
4
3
5
4
3
3
2
2
3
2
2
3
2
2
Kind mit Großvater.
select M1.Kind, M2.Vater
from Mensch M1, Mensch M2
where M1.Vater=M2.Kind
II)
Geschwister.
select M1.Kind, M2.Kind
from Mensch M1, Mensch M2
where M1.Vater=M2.Vater and M1.Kind not M2.Kind
 by K. Zimmermann
Seite: 5
1994/95
TDO - Skript
Gruppenfunktionen (nur in select):
15, 5, 25
sum
max
min
avg
count
45
25
5
15
3
Summe
Maximalwert
Minimalwert
Durchschnitt (=sum/count)
Anzahl
Bsp:
Schüler
S#
Vn
I)
Alter des ältersten Schülers der 3HBc.
Zn
A
Kl
Schnitt
select max(A)
from Schüler
where Kl='3HBc'
II)
Zunamen aller 17-jährigen der 3HBc.
select Zn
from Schüler
where Kl='3HBc' and A=17
III)
Durchschnittsalter der Schüler aus der 3HBc.
select avg(A)
from Schüler
where Kl='3HBc'
IV)
größte Schülernummer der 3HBc.
select max(S#)
from Schüler
where Kl='3HBc'
V)
Zunamen der ältesten Schüler der 3HBc.
select Zn
from Schüler
where A=
(select max(A)
from Schüler
where Kl='3HBc')
 by K. Zimmermann
SUBSELECT
Seite: 6
1994/95
TDO - Skript
Bsp:
Konzern
MNr Unternehmen MName Einkommen
I)
Ort
Unternehmen Land
Maximaleinkommen.
select max(Einkommen)
from Konzern
II)
Mitarbeiter mit dem maximalsten Einkommen.
select MName
from Konzern
where Einkommen= (select max(Einkommen)
from Konzern)
III)
Mitarbeiter mit Land.
select MName, Land
from Konzern, Ort
where Konzern.Unternehmen=Ort.Unternehmen
GRUPPENFUNKTION
macht aus Gruppe von Werten EINEN Wert.
MAIER
MÜLLER
MAIER
ROTH
ROTH
DISTINCT
→
select distinct
MAIER
MÜLLER
ROTH
ZUNAME
KEINE KLAMMERN
Bsp:
Welche Klassen gibt es an der Schule?
select distinct Kl
from Schule
I)
Alter der Ältesten der Schule.
select max(A)
from Schule
where Geschlecht='weiblich'
II)
Wie heißen die 19-jährigen an der Schule?
select Zun
from Schule
where A=19
 by K. Zimmermann
Seite: 7
1994/95
TDO - Skript
III)
Wie heißen die ältesten Schüler der Schule?
select Zun
from Schüler
where A=
(select max(A)
from Schüler)
IV)
Welche Schüler sind älter als der Schuldurchschnitt?
select Zun
from Schüler
where A>
(select avg(A)
from Schüler)
V)
Welche Schüler der 3HBb sind jünger als der Jüngste der 4HBb?
select Zun
from Schüler
where Kl='3HBb' and A<
(select min(A)
from Schüler
where Kl='4HBb')
Bsp:
select Zun
from Schüler
where Kl='4HBa' and
A<
(select avg(A)
from Schüler
where Kl='4HBa')
a)
Was ergibt dieses select-Statement?
Alle Schüler der 4HBa, die jünger sind als ihr Klassendurchschnitt.
b)
Was ergibt es, wenn der rote Teil weggelassen wird?
Alle Schüler der 4HBa, die jünger sind als der Schuldurchschnitt.
c)
Was ergibt es, wenn nur der blaue Teil fehlt?
Alle Schüler der Schule, die jünger sind als der Durchschnitt der 4HBa.
Bsp:
Schüler (Name, Alter, Größe, Klasse)
Ort (Klasse, Stock)
I)
Wie groß ist der größte Schüler der Schule?
select max(Größe)
from Schüler
II)
Wie heißt er?
select Name
from Schüler
where Größe= (select max(Größe)
from Schüler)
 by K. Zimmermann
Seite: 8
1994/95
TDO - Skript
III)
Was passiert, wenn mehrere Schüler mit 2,03m am größten sind?
Abfrage1
Abfrage2
ergibt 2,03
ergibt die Namen dieser Schüler
Es werden also alle 2,03m große Schüler (und nicht bloss einer davon) ausgegeben.
IV)
In welcher Klasse sitzt der größte Schüler der Schule?
select Klasse
from Schüler
where Größe=(select max(Größe)
from Schüler)
KÖNNEN NATÜRLICH AUCH MEHRERE SEIN!
V)
In welchem Stock/welchen Stöcken sitzen 1,77m größe Schüler?
select distinct Stock
from Schüler, Ort
where Ort.Klasse=Schüler.Klasse and Größe='1,77'
VI)
In welchem Stock/welchen Stöcken sitzen die größten der Schule?
select distinct Stock
from Schüler, Ort
where Ort.Klasse=Schüler.Klasse
and Größe=
(select max(Größe)
from Schüler)
VII)
Angenommen, alle Schüler sind verschieden groß. Wie groß ist der Zweitgrößte?
select max(Größe)
from Schüler
where Größe<(select max(Größe)
from Schüler)
VIII) Name des zweitgrößten Schülers.
select Zun
from Schüler
where Größe=(select max(Größe)
from Schüler
where Größe<(select max(Größe)
from Schüler)
)
 by K. Zimmermann
Seite: 9
1994/95
TDO - Skript
SUBSELECTS UND LISTEN
SUBSELECT
LIEFERT
sicher nur 1 Wert
select max(Alter)
from Schüler
vielleicht mehrere
select Alter
from Schüler
NUR 1 WERT WEGEN
GRUPPENFUNKTION
SELECT HOLT SPALTE AUS
TABELLE → MEHRERE WERTE
LISTENFUNKTIONEN
VERGLEICHEN EINEN
WERT MIT LISTE VON WERTEN
Bsp:
'MAIER'
'MAIER'
'MAIER'
12
12
12
17
17
17
Bsp:
IN
IN
NOT IN
IN
> MAX
< MAX
< MIN
< MAX
> MIN
EXISTS
EXISTS
('MÜLLER', 'MAIER', 'BLAU')
('FISCHER', 'BERGER')
('FISCHER', 'BERGER')
(8, 12, 13, 20)
(8, 12, 13, 20)
(8, 12, 13, 20)
(9, 15, 100)
(9, 30, 32, 80)
(9, 13)
(9, 13)
()
Alle Schüler, die so heißen wie jemand aus der 3HBc.
select Zun, Klasse
from Schüler
where Klasse not '3HBc' and Zun in
Bsp:
true/
false
t
f
t
t
f
t
f
t
t
t
f
(select Zun
from Schüler
where Klasse='3HBc')
Alle Schüler die älter sind als der jüngste der 3HBa.
select Zun
from Schüler
where Alter>min
(select Alter
from Schüler
where Klasse='3HBa')
min (select Alter) == select min (Alter)
Schüler
1)
2)
3)
4)
Name
Alter
Größe
Klasse
Maier
Müller
Gruber
Berger
17
17
18
18
1,86
1,82
1,90
1,70
4HBa
3HBa
4HBa
3HBa
 by K. Zimmermann
Seite: 10
1994/95
TDO - Skript
GROUP BY
GROUP BY KLASSE
1)
Maier
Gruber
17
18
1,86
1,90
4HBa
2)
Müller
Berger
17
18
1,82
1,70
3HBa
Blaue Kästchen können am Bildschirm nicht ausgegeben werden, sondern nur Gruppenfunktionen davon.
min
17
18
count 17
18
avg
=17
avg
=2
count Maier =2
Gruber
=1,88
Maier
Gruber
Zahlengruppen:
Textgruppen:
Bsp:
1,86
1,90
alle Funktionen (min, max, count, avg, sum)
nur count
Älteste, Durchschnittsgröße, Klasse.
18
18
1,88
1,76
4HBa
3HBa
select max(Alter), avg(Größe), Klasse
from Schüler
group by Klasse
Bsp:
Liste aller Klassen mit Durchschnittsalter und Größe des größten Schülers.
select Klasse, avg(Alter), max(Größe)
from Schüler
group by Klasse
Bsp:
Liste aller Altersgruppen mit Durchschnittsgröße.
select Alter, avg(Größe)
from Schüler
group by Alter
Bsp:
Liste aller Klassen mit Zahl der Schüler über 18 Jahre.
select Klasse, count(Name)
from Schüler
where Alter>18
group by Klasse
 by K. Zimmermann
Seite: 11
1994/95
TDO - Skript
Bsp:
Liste aller Altersgruppen in den fünften Klassen mit Durchschnittsgröße.
select Alter, avg(Größe)
from Schüler
where Klasse like ('5*')
group by Alter
Bsp:
oder
Klasse in ('5HBa', '5HBb', '5HBc')
Liste aller Stockwerke mit Durchschnittsalter, Schülerzahl und Größe des größten Schülers.
select Stock, avg(Alter), count(Name), max(Größe)
from Schüler, Ort
where Schüler.Klasse=Ort.Klasse
group by Stock
Bsp:
Liste aller Klassen und deren Durchschnittsalter, die über 20 Schüler haben.
select Klasse, avg(Alter)
from Schüler
group by Klasse
having count(*)>20
WHERE:
HAVING:
Bsp:
having == where
KEINE GRUPPENFUNKTIONEN!
SCHON!
Altersklassen (nur die, in denen die Schüler im Durchschnitt größer 1,80 sind) mit Schülerzahl.
select Alter, count(*)
from Schüler
group by Alter
having avg(Größe)>1,80
Bsp:
Alter sortiert ausgeben.
select Name
from Schüler
order by Alter (desc)
Alter aufsteigend sortiert
Bsp:
Pilot
PNr
I)
Name
KF
CNr Fstd
PNr
Typ
Name aller Piloten, mit maximaler Flugstundenanzahl.
select Name
from Pilot
where Fstd= (select max(Fstd)
from Pilot)
II)
Name des Piloten mit Copilot.
select P1.Name, P2.Name
from Pilot P1, Pilot P2
where P1.CNr=P2.PNr
 by K. Zimmermann
Seite: 12
1994/95
TDO - Skript
III)
Alle Flugzeugtypen, dessen Piloten Berger heißen.
select Typ
from Pilot, KF
where Pilot.PNr=KF.PNr and Name='Berger'
IV)
Namen der Piloten, die eine B747 fliegen können.
select Name
from Pilot, KF
where Pilot.PNr=KF.PNr and Typ='B747'
V)
Flugzeugtyp mit erfahrensten Pilot.
select Typ, Name
from Pilot, KF
where Pilot.PNr=KF.PNr
group by Typ
having max(FStd)
VI)
Zu jedem Flugzeugtyp die maximalste Flugstundenanzahl.
select max(Fstd), Typ
from Pilot, KF
where Pilot.PNr=KF.PNr
group by Typ
HAVING
ist die WHERE-BEDINGUNG für Gruppen.
Bsp:
Alle Klassen, in denen das Durchschnittsalter>16 Jahre ist.
select Klasse
from Schüler
group by Klasse
having avg(Alter)>16
↑
HAVING kann nur Gruppenfunktionen enthalten,
WHERE darf keine enthalten.
Bsp:
Alle Altersgruppen, in denen es mind. einen über 2 Meter großen Schüler gibt
und Größe (des größten) dieses Schülers.
select max(Größe), Alter
from Schüler
group by Alter
having max(Größe)>2.00
 by K. Zimmermann
Seite: 13
1994/95
TDO - Skript
ORDER BY
Bsp:
Gib die Schüler der 3HBc nach dem Alter geordnet aus.
select Name
from Schüler
where Klasse='3HBc'
order by Alter
Im ORDER-BY Teil können die Attribute oder Gruppenfunktionen von Attributen
stehen,die auch im SELECT-Teil stehen oder stehen können.
select Name
from Schüler
order by avg(Alter)
Bsp:
avg(Alter) könnte auch nicht
im SELECT stehen,
weil nicht gruppiert wird.
FALSCH !!
Gib alle Klassen nach dem Durchschnittsalter geordnet aus.
select Klasse
from Schüler
group by Klasse
order by avg(Alter)
Man kann im ORDER-BY Teil auch mehrere Attribute angeben.
select Name
from Schüler
order by Klasse, Alter
→
14
15
14
15
Liste aller Schüler nach Klassen geordnet, innerhalb einer Klasse sind sie nach ihrem
Alter geordnet.
select Name
from Schüler
order by Alter, Klasse
→
1HBa
1HBa
1HBb
1HBb
1HBa
1HBb
1HBa
1HBb
14
14
15
15
Liste aller Schüler nach dem Alter geordnet. Gleichalte werden nach der Klasse geordnet.
 by K. Zimmermann
Seite: 14
1994/95
TDO - Skript
NULL-VALUES
NULL bedeutet "GIBT ES NICHT"
Mitarb#
3
5
2
0
Name Chef#
Maier
Müller
Huber
Berger
5
NULL
0
3
Müller hat keinen
Chef.
Huber hat einen Chef.
Er hat Nummer 0.
NULL ist nicht dasselbe wie 0!
Bsp:
Alle Mitarbeiter ohne Chef.
select Name
from Mitarbeiter
where Chef# is null
Bsp:
es gibt auch:
... is not null
Alle Untergebenen von Berger.
select Name
from Mitarbeiter
where Chef#=0
select count(*)
from Mitarbeiter
↓
4
select count(Chef#)
from Mitarbeiter
↓
3
Datensätze mit
NULL gezählt
NULL nicht gezählt
 by K. Zimmermann
Seite: 15
1994/95
TDO - Skript
SQL-REIHENFOLGE
1.) BILDE KARTESISCHES PRODUKT ALLER TABELLEN
AUS DEM FROM.
2.) ENTFERNE ALLE ZEILEN, DIE DAS WHERE NICHT
ERFÜLLEN.
3.) FASSE ALLE DATENSÄTZE, FÜR DIE DAS GROUP BY
ATTRIBUT DENSELBEN WERT HAT IN JE EINEN
ZUSAMMEN.
4.) ENTFERNE ALLE DIESER GRUPPENDATENSÄTZE,
DIE DIE HAVING BEDINGUNG NICHT ERFÜLLEN.
5.) SORTIERE DAS ERGEBNIS NACH ORDER BY.
6.) GIB NUR DIE ATTRIBUTE / GRUPPENFUNKTIONEN VON
ATTRIBUTEN AUS, DIE IM SELECT VORKOMMEN.
 by K. Zimmermann
Seite: 16
1994/95
TDO - Skript
SUBSELECTS, DIE PAARE ERGEBEN
Bsp:
Größe + Alter aller Schüler der 3HBb.
select Größe, Alter
from Schüler
where Klasse='3HBb'
Bsp:
1,87
1,72
1,78
16
16
15
1 Schüler
1 Schüler
1 Schüler
Welche Schüler sind genauso groß und alt wie jemand aus der 3HBb?
select Name
from Schüler
where (Größe, Alter) in ( select ...
Bsp:
IAAF
Sportler
Name Nr
I)
Alter
Meetings
Disziplin Bestleistung
Ort
Datum
38 W.
Teilnehmer
Nr
Ort
Die Namen der Sportler mit der Disziplin Weitsprung sollen geordnet ausgegeben werden.
select Name
from Sportler
where Disziplin='Weitsprung'
order by Name
II)
Namen aller 100m-Läufer mit Bestleistung unter 10 sek. nach Bestleistung geordnet.
select Name
from Sportler
where Disziplin='100m Lauf' and Bestleistung <10
order by Bestleistung
III)
Nach Disziplin geordnet, die Ausgabe der besten & schlechtesten Leistung der über 40-jährigen.
select Disziplin, max(Bestleistung), min(Bestleistung)
from Sportler
where Alter>40
group by Disziplin
IV)
Namen aller Sportler die in Oslo dabei waren.
select Name
from Sportler, Teilnahme
where Sportler.Nr=Teilnahme.Nr and Ort='Oslo'
 by K. Zimmermann
Seite: 17
1994/95
TDO - Skript
V)
Alle Orte gruppiert ausgeben, dessen Teilnehmerdurchschnittsalter größer als 30 ist und
dessen Meeting in der 52-sten Woche stattgefunden hat.
select Ort
from Sportler, Meetings, Teilnahme
where Sportler.Nr=Teilnahme.Nr and Teilnahme.Ort=Meetings.Ort and Datum=52
group by Ort
having avg(Alter)>30
VI)
Namen aller Weitspringer, dessen Leistung von der Bestleistung maximal 1m abweicht.
select Name
from Sportler
where Disziplin='Weitsprung' and Bestleistung+1 >(select
from
where
max(Bestleistung)
Sportler
Disziplin='Weitsprung')
Bsp:
nicht Katnr., sondern eindeutig
Schüler (S#, Zuname, Vorname, Alter, Geschlecht, Klassencode)
M/W
Klasse (Klassencode, Stock, Sprecher#)
eine S#
I)
Liste aller Klassensprecher (Namen !) aus dem 2. Stock, geordnet nach dem Alter.
select Name
from Schüler, Klasse
where Schüler.S#=Sprecher.S# and Stock=2
group by Alter
-)
Im Subselect.
select Name
from Schüler
where Schüler.S# in
II)
(select Sprecher.S#
from Klasse
where Stock=2
order by Alter)
Wieviele Klassensprecherinnen gibt es?
select count(*)
from Schüler, Klasse
where Geschecht='W' and Schüler.S#=Klasse.Sprecher#
III)
Wer ist um 1 Jahr älter als der Klassensprecher?
select S.Zuname
from Schüler S, Schüler Spr, Klasse K
where Spr.S#=K.Sprecher# and
S.Klassencode=K.Klassencode and
S.Alter=Spr.Alter+1
 by K. Zimmermann
Seite: 18
1994/95
TDO - Skript
IV)
Klassen mit mehr als 3 Volljährige.
select Klassencode
from Schüler
where Alter>18
group by Klaseencode
having count(*)>3
V)
Klasse mit 5 gleiche Vornamen.
select distinct S1.Klassencode
from Schüler S1, Schüler S2, Schüler S3, Schüler S4, Schüler S5
where S1.Vorname=S2.Vorname and S2.Vorname=S3.Vorname and
S3.Vorname=S4.Vorname and S4.Vorname=S5.Vorname
VI)
In welchen Klassen sitzen mehr als 3 Minderjährige?
select Klassencode
from Schüler
where Alter <= 18
group by Klassencode
having count (*)>3
VII)
Liste aller Klassenschülerzahlen.
select count(*) ♣
from Schüler
group by Klasse
VIII) Welche Klasse ist am größten?
select Klassencode
from Schüler
group by Klassencode
having count (*) = max( ♣ )
IX)
Welche Nummer hat der Sprecher der größten Klasse?
select Sprecher#
from Klasse
where Klassencode = ( ♥ )
X)
♥
♠
Wie heißt der Sprecher der größten Klasse?
select Zuname, Vorname
from Schüler
where S# = ( ♠ )
 by K. Zimmermann
Seite: 19
1994/95
TDO - Skript
VERGLEICHE IN SQL
=
(nicht == wie in C)
>
<
>=
<>
(nicht != wie in C)
AND
OR
NOT
BETWEEN:
where Alter between 16 and 17
IN:
where Klasse in ('5a', '5b', '5c')
LIKE:
%
_
beliebig viele Zeichen
1 beliebiges Zeichen
<=
(DOS: *)
(DOS: ?)
where Name like '%MANN'
→
BAUMANN, AMANN, MANN
where Name like '_MANN'
→
AMANN
FUNKTIONEN IN SQL
+, -, /, *
|| hängt Zeichenfolgen zusammen
NVL (a, b) = a, falls a nicht NULL
b, sonst
↓
≠0 !!!
LENGTH ('ROSE') = 4
ABS (-7) = 7
SIGN (-7) = -1
SUBSTR ('VOLLMOND', 5, 4) = 'MOND'
↓
5.
 by K. Zimmermann
4
Seite: 20
1994/95
TDO - Skript
SQL DETAILS
-
select count(*)
from Schüler
Anzahl aller Schüler
-
select count (Religion)
from Schüler
Anzahl aller religiösen Schüler
(NULL-Values werden nicht gezählt)
-
select count (distinct Religion)
from Schüler
Anzahl aller Religionen an der Schule
(NULL-Values werden nicht, alle anderen nur 1x gezählt)
-
SName
Religion
Maier
Müller
Berger
Ranzo
kath
prot
kath
NULL
select avg (sum (Alter)), sum (avg (Alter))
from Schüler
group by Klasse
avg (sum (Alter)):
1.)
pro Klasse Gesamtalter
2.)
davon Durchschnitt über alle Klassen
sum (avg (Alter)):
1.)
pro Klasse Durchschnittsalter
2.)
davon Summe über alle Klassen
 by K. Zimmermann
Seite: 21
1994/95
TDO - Skript
OUTER JOIN
S
V
Spieler
Verein
Verein
Präsident
Herzog
Matthäus
Schachner
Bremen
München
NULL
Bremen
München
Lemke
Beckenb.
select *
from S, V
where S.Verein=V.Verein
S.Spieler
S.Verein
V.Verein
V.Präsident
Herzog
Matthäus
Bremen
München
Bremen
München
Lemke
Beckenb.
3. Datensatz aus S hat keinen Partner aus V → wird ignoriert
select *
from S, V
where S.Verein=V.Verein (+)
Herzog
Matthäus
Schachner
Bremen
München
NULL
Bremen
München
NULL
Lemke
Beckenb.
NULL
(+) auch Datensätze ohne Partner werden ausgegeben
 by K. Zimmermann
Seite: 22
1994/95
TDO - Skript
DATENBANKENTWURFSREGEL #1
KEINE VERSTECKTEN JOINS !!!
Mitarbeiter
Mitarb.# Mitarbname Abt.#
7
12
14
.
.
.
Müller
Maier
Fischer
.
.
.
3
2
3
.
.
.
Abtname
Verkaufsabt.
Produktionsabt.
Verkaufsabt.
.
.
.
statt dieser Tabelle könnte man auch
Employee
Abteilung
Mitarb.# Mitarbname Abt#
7
12
14
.
..
Müller
Maier
Fischer
.
..
3
2
3
.
..
Abt#
Abtname
3
2
.
..
Verkaufsabt
Produktionsabt
.
..
entwerfen.
SCHLÜSSEL
(engl.: KEY)
Steht die Postleitzahl fest, so ergibt sich daraus eindeutig der Bezirk
Bezirk ist von PLZ funktional abhängig.
PLZ → BEZIRK
Sozialversicherungs# → Geburtsdatum
Katalognr. → Name, aber
Schuljahr, Schule, Klasse, Kat# → Name
Schuljahr, Schule, Klasse, Woche → Klassenordner
Schuljahr, Schule, Klasse, Fach → Lehrer
Bestellnr., Produkt → Menge
Datum, Ort → Niederschlagsmenge
Beistrich bedeutet: UND
Ein Attribut oder eine UND-Verknüpfung von Attributen, von dem/der alle anderen Attribute
der Tabelle abhängen, heißt:
Schlüsselkandidat (candidate key)
Mitarb#
Name
 by K. Zimmermann
Adresse
Abteilung
Seite: 23
1994/95
TDO - Skript
Der Schlüsselkandidat, der gewählt wird, heißt:
Primärschlüssel (primary key)
Tabelle "Mitarbeiter" ist Join von "Employee" und "Abteilung"
Mitarbeiter =
select Mitarb#, Mitarbname, ...
from Employee, Abteilung
where Employee.Abt# = Abteilung.Abt#
Eine informationsverlustfreie Zerlegung (lossless decomposition / nonloss decomposition)
von "Mitarbeiter" in "Employee" und "Abteilung" ist daher möglich.
→ Nachteile von zerlegbaren Tabellen
I)
Bürohilfe vertippt sich und schreibt bei Fischer "Einkaufsabt" statt "Verkaufsabt"
→ laut Datenbank ist Abt. 3 mal die Einkaufs-, mal die Verkaufsabt.
→ Widerspruch (inconsistency). Vertippt sie sich in Tabelle "Abteilung",
so ist die Datenbank falsch, aber nicht widersprüchlich
II)
Zu hoher Speicherverbrauch (redundancy)
III)
Werden alle Mitarbeiter der Produktion gelöscht, so weiss man nicht mehr,
welche Abteilungs# sie hat. (deletion anomaly)
→
läßt sich Tabelle x verlustfrei in die Tabellen y und z zerlegen, so wirft man x weg und
nimmt y und z in die Datenbank auf.
Angenommen, es kommt noch Berger - Cessna - Hong Kong zu Flug1 dazu, wie kann Flug1 dann zerlegt werden?
GAR NICHT !
Wie sollen wir beim Entwurf entscheiden, ob die Datenbank Flug1 oder die 3 anderen Tabellen enthalten soll?
Wir fragen Kunden:
wenn
und
und
Pilot x Flugzeug y fliegen darf
Pilot x Flughafen z kennt
Flugzeug y auf Flughafen z landen darf
Darf dann x mit y automatisch auf z landen?
JA → 3 Tabellen
NEIN → 1 Tabelle
Schüler 4
Name
Maier
Müller
Maier
Berger
Müller
Sport
Schüler 5
Fremdspr.
Fußball
Englisch
Schach Italienisch
Tennis
Englisch
Golf
Spanisch
Schach Französisch
Name
Sport
Maier
Müller
Maier
Berger
Müller
Fußball
Schach
Tennis
Golf
Schach
Schüler 6
Sport
Fremdspr.
Fußball
Englisch
Schach Italienisch
Tennis
Englisch
Golf
Spanisch
Schach Französisch
Sport und Fremdsprachen haben nichts miteinander zu tun → man kann die Tabelle ohne
Informationsverlust aufspalten.
 by K. Zimmermann
Seite: 24
1994/95
TDO - Skript
DATENBANKENTWURF
(engl.: DATA BASE DESIGN)
ENTITY:
Alle Menschen, Sachen, Orte, ... über die wir Informationen speichern wollen.
Bsp:
Schüler Maier, 3hbc, TDO, Schüler Müller, 2. Stock, 5hba, 1.Stock, PR
ENTITY TYPE:
Zusammenfassung gleichartiger Entities
Bsp:
Schüler, Klasse, Fach, Stock
RELATIONSHIP:
Beziehung zwischen Entities
Bsp:
3hbc hat_Klassenzimmer_in 2. Stock
Hasitschka unterrichtet 4hba in TDO
4hba hat_Klassenzimmer_in 2. Stock
RELATIONSHIP TYPE:
Beziehung zwischen Entitiytypes
Bsp:
Klasse hat_Klassenzimmer_in Stock
Lehrer unterrichtet Klasse in Fach
ATTRIBUTE:
Eigenschaft einer Entity
Bsp:
Maier: 17 Jahre, katholisch, Eishockey
ATTRIBUTE TYPE:
Zusammenfassung der Attributes
Bsp:
ENTITY TYPE
ENTITY
ATTRIBUTE TYPE
ATTRIBUTE
 by K. Zimmermann
Schüler: Alter, Religion, Sport
→
→
→
→
TABELLE
DATENSATZ = TABELLENZEILE
SPALTE
TABELLENZELLE
Seite: 25
1994/95
TDO - Skript
Bsp:
Schraubenhersteller
I)
Suche alle Entity Types, über die Information gespeichert werden soll.
Schraubentyp, Mitarbeiter, Kunde, Fabrik
II)
Suche zu jedem die zu speichernden Attribute.
Schraubentyp (Typbezeichnung, Länge, Ganghöhe)
Mitarbeiter (Name, Einstellungsdatum)
Kunde (Name, Adresse)
Fabrik (Adresse, Kapazität)
III)
Wähle oder erfinde Schlüssel.
Schraubentyp (Typbez., Länge, Ganghöhe)
Mitarbeiter (M#, Name, Einstellungsdatum)
Kunde (K#, Name, Adresse)
Fabrik (Adresse, Kapazität)
IV)
Mache aus jeder Entity Type eine Tabelle.
SQL: create table Schraubentyp ...
V)
Suche alle Relationship Types, über die Information gespeichert werden soll.
Mitarbeiter arbeitet_in Fabrik
Schraubentyp wird_hergestellt_in Fabrik
Kunde bestellt Schraubentyp bei Mitarbeiter
VI)
Suche speicherungswürdige Attribute der Beziehungen:
arbeitet_in:
wird_hergestellt_in:
bestellt_bei:
VII)
Dienstbeginn, Funktion
max. Tagesproduktion
Bestellmenge, Datum
Welche der Beziehungen sind 1:n ?
Jeder Mitarbeiter arbeitet_in (<=) einer Fabrik
In jeder Fabrik arbeiten (<=) mehrere Mitarbeiter
Einer : Mehrere = 1 : n
Beziehung
Welche Beziehungen sind m : n ?
Jeder Schraubentyp wird_hergestellt_in (<=) mehreren Fabriken
In jeder Fabrik werden_hergestellt (<=) mehrere Schraubentypen
Mehrere : Mehrere = m : n
 by K. Zimmermann
Beziehung
Seite: 26
1994/95
TDO - Skript
Welche sind Mehrfachbeziehungen ?
Kunde bestellt Schraubentyp bei Mitarbeiter
3 Entity Types an Beziehung beteiligt
3: TRITÄR
VII)
4: QUATERNÄR
Trage 1 : n Beziehungen in die Datenbank ein.
Wie halte ich in der Datenbank fest, wer in welcher Fabrik arbeitet ?
a)
Spalte "Mitarbeiter" in Tabelle Fabrik.
schlecht:
können beliebig viele sein → wieviel Byte sollen für dieses Attribut
pro Zeile reserviert werden ?
b)
Spalte "Fabrik" in Tabelle Mitarbeiter.
gut:
kann immer nur eine sein
Aber was wird dort eingetragen ?
Kapazität, Adresse, beides ?
Etwas, was eindeutig klarmacht, in welcher Fabrik der Mitarbeiter arbeitet
→ Mitarbeiter bekommt neue Spalte mit dem Schlüssel von Fabrik.
IX)
Wie halte ich m : n Beziehungen fest ?
(z.B.: welcher Schraubentyp wird in welcher Fabrik gefertigt ?)
a)
Ich speichere bei Fabrik die Schraubentypen.
schlecht: siehe VIII)
umgekehrt.
→ neue Tabelle Fertigung.
b)
schlecht: siehe VIII)
Fertigung
STyp
Fabrik
Schlüssel → H8/1 Wien 23 ← Schlüssel aus
aus
H8/1
Linz
Fabrikstabelle
Schr.Typ
M15/2.5 Wien 23
 by K. Zimmermann
Seite: 27
1994/95
TDO - Skript
X)
Mehrfachbeziehungen → eigene Tabelle
Bestellung
Kunde Mitarbeiter Produkt
27
15
↑
12
10
↑
H8/1
M15/2.5
↑
Schlüssel Schlüssel Schlüssel
aus
aus
aus
Kunde Mitarbeiter Schraubentyp
XI)
Füge Beziehungsattribute zur Datenbank.
Bestellmenge, Datum neue Spalten der Tabelle "Bestellung"
max. Tagesproduktion Spalte von "Fertigung"
Dienstbeginn, Funktion neue Spalten unter "Mitarbeiter"
XII)
Entferne
- ableitbare Beziehungen
DERIVABLE RELATIONSHIP
(Spitalsbeispiel)
- ableitbare Attribute
DERIVABLE ATTRIBUTE
(Geburtsdatum, Alter) → Geburtsdatum
- zerlegbare Tabellen
XIII)
TABELLEN BAUEN:
CREATE TABLE KUNDE (KNR NUMBER(4) NOT NULL, NAME CHAR(30))
DATENSÄTZE EINFÜGEN:
INSERT INTO KUNDE VALUES (3276, "MAIER")
DATENSÄTZE ÄNDERN:
UPDATE KUNDE
SET KNR = 5000
WHERE NAME = 'BERGER'
DATENSÄTZE LÖSCHEN:
DELETE FROM KUNDE
WHERE NAME = 'MÜLLER'
TABELLEN LÖSCHEN:
DROP TABLE KUNDE
 by K. Zimmermann
Seite: 28
1994/95
TDO - Skript
ENTITY - RELATIONSHIP DIAGRAMME
(ERD)
Helfen / Stören beim Datenbankdesign.
Zeigen keine Entities & Relationships, sondern Entity Types und Relationship Types.
KARDINALITÄTEN:
1 : n, m : n Höchstkardinalitäten entscheiden
Jeder Lehrer unterrichtet mind. 0, höchstens mehrere Schüler. Jeder Schüler wird von mind. 1,
höchstens mehreren Lehrern unterrichtet.
ERD - SCHRAUBENHERSTELLER
(ohne Attribute)
1
2
3
kann_bedienen
steht_in
arbeitet_in
Wichtigste ERD - Regel: keine ableitbaren Beziehungen !
 by K. Zimmermann
Seite: 29
1994/95
TDO - Skript
1
2
3
liegt_in
steht_in
belegt
1 ist überflüssig: 2, 3 rechen, um herauszufinden, in welchem Spital Patient x liegt
→ 1 könnte gestrichen werden.
Könnte man auch 1 lassen und 2 streichen ?
1
3
JA
NEIN
VORÜBUNGEN DATENBANKENTWURF
Man gebe einen Schlüssel an für
- eine Tabelle der Schüler der 4 Hbc
Kat#
- eine Tabelle aller derzeitigen Wiener Schüler
Kat#, Schulcode, Klassencode
- eine Tabelle aller Schüler, die jemals die Ungargasse besucht haben
Eintrittsjahr, Klassencode i. d. 1. Kl., Kat# in der 1. Klasse
Man gebe Kardinalitäten, Beziehungstyp an
- Mieter bewohnen Haus
m : n
- Patient bekommt vom Arzt eine Medizin verschieben
- Mutter hat Kinder
1 : n
- Programmierer schreibt Programm in Sprache
Programmierer
Programm
Sprache
Das sind 2 m : n Beziehungen → neue Tabellen
- Mensch übt Beruf aus
 by K. Zimmermann
m : n
Seite: 30
1994/95
TDO - Skript
Bsp:
Firma beliefert Baustelle mit Bauteile. Baustelle und Lieferfirma sind in einer bestimmten Stadt.
Die Bauteile können auch aus mehrere Bauteiltypen bestehen.
Baustelle (Baustellen#, Kbez, Name, Land,
Bauteiltyp (Typ#,
Stadt (Name, Land)
Lieferant (Lieferanten#, Name, Land,
LF (Lieferanten#, Typ#,
Bedarf (Baustellen#, Typ#, Menge,
Teil (Typ#1, Typ#2, Menge,
Bsp:
Kinokette (siehe Kopie)
KINO :
SAAL :
REIHE :
SITZ :
FILM :
MITWIRK :
Kname, Adresse
Kname, S#, Größe
Kname, S#, R#, Szfußfr
Kname, S#, R#, Sz#
F#, K#, Titel
F#, K#
 by K. Zimmermann
Seite: 31
1994/95
TDO - Skript
ZUSAMMENGESETZTER SCHLÜSSEL
(engl.: COMPOSITE KEY)
1) Wieviele Pizze 23.2. ausgeliefert?
2) Was ist auf einer Margarita drauf?
3) Wieviele Pizze hat Hr. Pfannh. bestellt?
4) Wieviele kg Paradeiser wurden am 14.5. verbraucht?
5) Wer ist der fleißigste Mitarbeiter?
Mitarb. (M#, Mname,
Lieferung (L#,
.
.
.
Bsp:
Bankomat
Konto
Ko#
Inh
BKM-KARTE
Stand
Ka#
Code
Konto
Ko#
Inh
Stand
Karte
Ka#
K#
Inh
 by K. Zimmermann
Code
Ko#
Stand Code
Seite: 32
1994/95
TDO - Skript
SCHUL - ERD (XESAS)
Um etwas vertrauter mit ERDs zu werden hier noch ein kleines Beispiel der HTL Ungargasse.
Folgende Tabellen werden erstellt:
Schüler (Name, Vname, Aufnahme#, Gebdatum, Staatsbürgerschaft, Muttersprache, Quartier, Adresse, Plz, Ort,
Land, Erziehungsberechtigter, Privatnummer, Firmennummer, Status, Behinderung, Vorschule, KKZ,
Abtcode, PKZ)
Laufbahn (Name, Vname, Gebdatum, Sjahr, KKZ, Abtcode, PKZ)
Klasse (KKZ, Abtcode, PKZ, KV, Raum)
Fach (Fbezl, Fbezk, Fbezaltern)
Stundentafel (KKZ, Abtcode, Fbezk, Std)
Lehrer (Lehrer#, Name, Vname, Akgrad, Staatsbürgerschaft, Muttersprache, Adresse, Plz, Land, Privnummer,
Firmennummer)
Stundenplan (KKZ, Abtcode, PKZ, Fbezk, Raum, Ausweichraum, Tag, Stunde, L#, Unterrichts#)
Zeugnis (Aufnahme#, KV, Snote, Enote)
usw. usw. usw.
 by K. Zimmermann
Seite: 33
1994/95
TDO - Skript
TRANSAKTIONEN
ZENTRALE
Filiale 1
B 20/10
L 40/50
read B
B = B-10
write B
read L
L = L+10
write L
Filiale 2
B 20/10
L 40/50
10
B
read B
B = B+5
write B
ATOMAR (atomic)
Atomizität
Die zeitliche Reihenfolge in der die Transaktionen ablaufen, heißt SCHEDULE .
SERIELLE SCHEDULE
Transaktion 1
Transaktion 2
Transaktion 1
read B
.
.
.
write L
read B
.
.
.
write B
read B
.
.
.
write B
read B
.
.
.
write L
B → B-5
L → L+10
 by K. Zimmermann
Transaktion 2
B → B-5
L → L+10
Seite: 34
1994/95
TDO - Skript
NICHT SERIELLE SCHEDULE
Transaktion 1
Transaktion 2
read B
B = B-10
T1:
read B
T2:
T1:
write B
read L
B = B+5
write B
B = 20
B = 10
B = 20
B = 10
L = 40
T2:
L = L+10
write L
T1:
B = 25
B = 25
L = 50
L = 50
B → B+5
L → L+10
Eine Schedule ist dann serialisierbar, wenn sie die Wirkung einer seriellen Schedule hat.
nicht serielle Schedule → serialisieren
Transaktion 1
Transaktion 2
read B
B = B-10
write B
read L
read B
B = B+5
write B
L = L+10
write L
B → B-10+5
L → L+10
serialisierbar
nicht seriell
seriell
 by K. Zimmermann
Seite: 35
1994/95
TDO - Skript
LOCKING (SPERREN)
(LOCK = SPERRE)
Flug Platz S304 ist schon vergeben, wenn 1 sonst 0
Server
S300
S301
S302
S303
S304
S305
Workstation
Workstation
read S304
if (S304==1) sorry
else
Buchungsplan
Beleg drucken
S304=1
while S304
read S304
if (S304==1) sorry
else
Buchungsplan
Beleg drucken
S304=1
while S304
Langt Transaktion 1 vor Transaktion 2 ein, bekommt Edlauer das Ticket.
Langt Transaktion 2 vor Transaktion 1 ein, bekommt Haselberger das Ticket.
Transaktion 1
Transaktion 2
Transaktion 1
read S304
if (S304==1) sorry
else {
Buchung vornehmen
Beleg drucken
S304=1
write S304
}
read S304
if ( .....
.
.
.
read A
A = A+1
write A
Transaktion 2
read A
A = A*2
write A
read A
A = A+1
write A
A → 2A+3
komplet hintereinander:
 by K. Zimmermann
Seite: 36
T1, T2 A → 2A+4
T2, T1 A → 2A+2
1994/95
TDO - Skript
Um zu verhindern, daß zwei Prozesse auf ein und denselben Datensatz zugreifen können, muß man locken.
Unter locking versteht man das Sperren der Daten um anderen Transaktionen den Zugriff auf den gesperrten
Datensatz zu verwehren.
Ein Beispiel wären die 80x86 Prozessoren. Will man verhindern, daß Interrupts während einer bestimmten
Transaktion zugelassen werden, so wird das Interrupt enable - Flag gelöscht (cli).
Um Interrupts wieder zuzulassen, wird das Kommando (der Befehl) sti benutzt.
lock B
read B
B = B-10
write B
unlock B
A gelockt
Filiale 1
Filiale 2
cli
A anschauen
A setzen
sti
lock L
read L
L = L+10
write L
unlock L
cli
A anschauen
A setzen
sti
Es ist möglich, daß Transaktionen nicht nach Reihenfolge des Eintrettens, sondern nach Prioritäten abgearbeitet
werden. Dies ist manchmal erforderlich, wie beispielsweise bei einem Space Shuttle die Sauerstoffversorgung, die
die höchste Priorität zugewiesen bekommt, da sie immer aufrecht erhalten werden muß. Bei dieser Lösung besteht
jedoch die Gefahr, daß eine Transaktion mit geringer Priorität immer nach hinten gereiht wird, da wichtigere
Transaktionen auszuführen sind. Ist dies der Fall, so spricht man von einem
LIVELOCK (STARVATION)
Wartet eine Transaktion T1 auf den Datensatz B und eine andere Transaktion T2 auf den Datensatz A, wobei die
beiden Datensätze von der jeweilig anderen Transaktion gelockt wurden, so nennt man diese Situation einen
DEADLOCK
lock A
lock B
lock B
lock A
Eine andere Möglichkeit um Live/Deadlocks zu verhindern, ist es einen Graphen (Dead Lock Graph) zu zeichnen.
Transaktion 1
Transaktion 1
Transaktion 2
Transaktion 2
 by K. Zimmermann
Seite: 37
Transaktion 3
1994/95
TDO - Skript
Ein Deadlock ist dann vorhanden, wenn man einen geschlossenen Kreis zeichnen kann. Ist das der Fall, so muß ein
Knoten gelöscht werden, um den Deadlock aufzulösen.
Regeln:
I)
LOCKEN
II) REIHENFOLGE BEIM LOCKEN
III) 2 - PHASEN LOCKEN
!!! 2 - Phasen Locken verhindert keinen Deadlock →
Transaktion 1
Transaktion 2
lock A
lock B
Transaktion 1
lock B
Transaktion 2
lock A
unlock A
unlock B
circle
unlock A
unlock B
cycle
ROLLBACK
Läuft eine Transaktion nicht bis zum Ende, aus welchem Grund auch immer, so sollen die bis dahin eingegebenen
Daten nicht geändert bleiben, sondern müssen zurückgesetzt werden. Dieses Zurücksetzen wird im allgemeinen
Rollback bezeichnet. Ein Rollback kann aus vielen verschiedenen Gründen notwendig werden. Zum Beispiel wenn
der User am Ende der Dateneingabe auf „Cancel“ drückt, so sollen die Änderungen nicht gesichert werden oder
wenn das System abstürzt oder andere Komplikationen auftreten.
Transaktion 1
lock E
lock H
read E
read H
H = H+1Mio.
write H
unlock H
if (E>=1Mio.) E = E-1Mio.
else write E
unlock E
CASCADING ROLLBACK
Rollback
es entsteht eine
Rollback - Lawine
COMMIT POINT
= an keinem Deadlock beteiligt,
wenn die OK - Taste betätigt, keine
Division durch 0, keine falschen
Berechnungen, ...
2 - Phasen Commit:
 by K. Zimmermann
Seite: 38
1994/95
TDO - Skript
I)
COMMIT POINT
II) WRITES
III) UNLOCKS
PROTOKOLLE (PROTOCOLS)
Unter einem Protokoll versteht man allgemein gültige Regeln an die sich alle zu halten haben.
Transaktion 1
lock A, B, C
read A, B, C
A = A+12
B = B*2
C = C*C
write A
write B
write C
unlock A
unlock B
unlock C
Z
HD
Absturz macht nichts
Ich bin T1
ich plane:
write A = 19
write B = 30
write C = 4
Ende
Commit Point
Absturz fatal
Absturz macht nichts
Ich bin T3
ich plane:
write X = 4
LOG
...
... wenn kein Ende,
dann ist nichts
passiert
Um auch das Risiko noch weiter zu verringern werden sogenannte LOGs angelegt. In diesen LOGs steht welche
Transaktion, welche Veränderungen plant. Tritt nun eine unvorhergesehene Unterbrechung auf, so kann man
anhand des LOGs rekonstruieren was geplant, bzw. mit Vergleich der aktuellen Daten, was verändert wurde. Jedes
LOG wird sicherheitshalber 2x auf lokale Speichermedien gesichert, die womöglich noch räumlich getrennt sein
sollten.
GRANULARITÄT (GRANULARITY)
Dieses Kapitel beschäftigt sich damit was gesperrt werden soll (Tabelle, Datensatz, Zelle), d.h. mit der richtigen
Größe der zu sperrenden Objekte (= Feinkörnigkeit).
Access Optionen zu diesem Thema sind z.B. exlusiv öffnen, Tabelle locken.
Access Basic Befehle zu diesem Thema sind z.B. Move First, Move Last (Bewegt Bleistift), Lock Edits,
Begin Trans, Commit Trans, Rollback.
...
19
19
 by K. Zimmermann
Seite: 39
1994/95
TDO - Skript
SUCHEN (SEARCHING)
SEQUENTIELLE SUCHE
BINÄRE SUCHE
(SEQUENTIAL SEARCH)
(BINARY SEARCH)
a[0]
a[1]
a[2]
Zelle für
Zelle
durchgehen
halbieren
und Element
zuordnen
wieder halbieren
a[0]
a[1]
a[2]
7
19
112
a[127]
a[127]
Elemente
2
4
8
16
32
1Mio.
sequentiell
1
3
7
15
31
ca. 1Mio.
binär
1
2
3
4
5
20 (220)
INDEXDATEI
1:
2:
3:
4:
7
19
244
12
MÜLLER
MAIER
ABRAHAM
BERGER
ABRAHAM
BERGER
MAIER
MÜLLER
KURZ
PREM
3
4
2
1
7000001
7000002
1000
5000
2500
10000
select *
from Kunde K, Bestellung B
where K.K# = B.K#
KUNDE - BESTELLUNG
7
12
8
MAIER
MÜLLER
ABRAHAM
B#
303
528
119
404
7
8
 by K. Zimmermann
K#
8
7
8
23
SCHRAUBEN
MUTTERN
SCHEIBEN
NÄGEL
MAIER
ABRAHAM
528
303
Seite: 40
7
8
MUTTERN
SCHRAUBEN
5000
1000
INNER
1994/95
TDO - Skript
LEFT OUTER JOIN
RIGHT -
 by K. Zimmermann
8
ABRAHAM
119
8
SCHEIBEN
2500
12
MÜLLER
NULL
NULL
NULL
NULL
NULL
NULL
404
23
NÄGEL
10000
JOIN
+
+
Seite: 41
1994/95
Herunterladen