TDO Skriptum

SQL (Structured Query Language)

1.1 Relationeale Datenbanken - Relational database

Bei einer relationalen Datenbank sind die Daten in Tabellenform gespeichert.

Tabelle









SNr.
Vorname
Zuname
Alter

3
Max
M├╝ller
16

18
Peter
Berger
17
Datensatz
12
Herbert
Maier
16

13
Gunther
M├╝ller
16

5
Sigfried
Gunaker
18


Spalte (Attribut)




SQL steht f├╝r structured query language (Strukturierte Abfragesprache)

select ZN, SNR bestimmt aus welcher Tab. Daten gehohlt werden
from sch├╝ler gibt an welche Zeile
where A>16 and ... gibt an welche Spalte


BEISPIEL 1.01 (Alle Sch├╝ler mit dem Vorname Josef die ├Ąlter als 16 sind)
select ZN
from sch├╝ler
where VN=┬┤Josef┬┤and A>16


BEISPIEL 1.02 (Alle Piloten mit mehr als 1000 Flugstunden)
Vorname
Zuname
Flugstunden
Max
M├╝ller
16
Peter
Berger
17
Herbert
Maier
16
Gunther
M├╝ller
16
Sigfried
Gunaker
18

select ZN
from pilot
where Flugstunden> 1000

Karthesische Produkt und die Join Bedingung

Tabelle: Spieler

Tabelle: Verein

ZN
Verein

Verein
Pr├Ąsident

Herzog
Bremen

Bremen
Pfanner

Stanzl
Austria

Austria
Haym













SQL bildet eine neue Tabelle mit allen Atributen












Spieler.ZN
Spieler.Verein
Verein.Verein
Verein.Pr├Ąsident

Herzog
Bremen
Bremen
Pfanner
├╝
Herzog
Bremen
Austria
Haym
├╗
Stanzl
Austria
Bremen
Pfanner
├╗
Stanzl
Austria
Austria
Haym
├╝


Um alle "richtigen" Daten herauszufiltern muss man von der Join Bedingung gebrauch machen: where S.Verein=V.Verein


BEISPIEL 2.01 (Alle Stewardes mit deren Piloten)

Tabelle: SF


Tabelle: PF
Stewardes
Flugzeug
Alter

Pilot
Flugzeug
Alter
Roth
36
31

Mayer
71
35
Blau
19
29

M├╝ller
36
37
Gr├╝n
36
34





select SF.Stewardes, PF.Pilot
from SF, PF
where SF.Flugzeug= PF.Flugzeug

bei dem Befehl from SF, PF bildet SQL folgende Tabelle

SF.Stewardes
SF.Flugzeug
SF.Alter
PF.Pilot
PF.Flugzeug
PF.Alter
Roth
36
31
Mayer
71
35
Roth
36
31
M├╝ller
36
37
Blau
19
29
Mayer
71
35
Blau
19
29
M├╝ller
36
37
Gr├╝n
36
34
Mayer
71
35
Gr├╝n
36
34
M├╝ller
36
37


BEISPIEL 2.02 (Alle Stewardessen, die ├Ąlter sind als ihre Piloten)
select SF.Stewardes, PF.Pilot
from SF, PF
where SF.Flugzeug= PF.Flugzeug and SF.Alter> PF.Alter


BEISPIEL 2.03 (Alle Autotypen aus England u. einer Kleinstadt)
Tabelle: A

Tabelle: S
Autotyp
Stadt

Stadt
Land
EW
Vauxhall
Birmingham

Birmingham
England
1 200 000
Renault
Paris

Paris
Frankreich
12 000 000
BMW
M├╝nchen

M├╝nchen
Deutschland
1 500 000

select A.Autotyp, S.Land
from A, S
where A.Stadt= S.Stadt and Land= "England" and EW< 20001


BEISPIEL 2.04 (Welche Sch├╝ler sind in 4HB/a)
Tabelle: Sch├╝ler

Tabelle: Klasse

Tabelle: Lehrer
Sch├╝ler
Klasse

Klasse
KV
Abteilung

Hauptfach
Name
Dunst
4HB/a

4HB/a
Mercury
TA

Vauxhall
Novotny
Rauch
4HB/a

1FT/b
Novotny
TA

Renault
Mercury
Schall
5HW/c

5HW/c
Schl├Ąfer
TA

BMW
Reichel

select S.Sch├╝ler
from S
where S.Klasse= ┬┤4HB/a┬┤


BEISPIEL 2.05 (Welche Sch├╝ler haben Mercury als KV)
select S.Sch├╝ler
from S, K
where S.Klasse= K.Klasse and KV= ┬┤Mercury┬┤


BEISPIEL 2.06 (Welche Sch├╝ler haben einen Chemielehrer als KV)
select S.Sch├╝ler
from S, K, L
where S.Klasse= K.Klasse and K.KV= L.Name and L.Hauptfach= ┬┤Chemie┬┤


BEISPIEL 2.07 (Welche Sch├╝ler aus der Ta haben einen Pysiklehrer als KV)
select S.Sch├╝ler
from S, K, L
where S.Klasse= K.Klasse and K.KV= L.Name and K.Abteilung= ┬┤TA┬┤and L.Hauptfach= ┬┤Physik┬┤



BEISPIEL 2.08 (Autotypen einer Stadt mit mind. 1/10 der Bev. d. Landes)
Tabelle: A

Tabelle: S

Tabelle:L
Autotyp
Stadt

Stadt
Land
EW

Land
Kontinent
Vauxhall
Birmingham

Birmingham
England
1 200 000

England
Europa
Renault
Paris

Paris
Frankreich
12 000 000

Frankreich
Europa
BMW
M├╝nchen

M├╝nchen
Deutschland
1 500 000

Deutschland
Europa
Rikscha V8
Phnom Penh

Phnom Penh
Kambodscha
500 000

Kambodscha
Asien

select A.Autotyp
from A, S, L
where A.Stadt= S.Stadt and S.Land= K.Land and S.EW> (L.EW* 0,1)

Bei langen Tebellennamen k├Ânnen Synonyme verwendet werden

select L, S
from Landesschulinspektor L, Stadtschulrat S
where L.Name= S.Name


1.3 Equijoin

Joint man eine Tabelle mit sich selbst so hei├čt das Equijoin

BEISPIEL 3.01 (Alle Menschen und Gro├čv├Ąter sind gesucht)
Tabelle: Mensch
Kind
Vater
Josef
Peppi
Peppi
Hans
Susi
Peppi
Peter
Peppi

select K.Kind, V.Vater
from Mensch K, Mensch V
where K.Vater= V.Kind


BEISPIEL 3.01 (Alle Menschen und ihre Geschwister sind gesucht)
select K.Kind, V.Vater
from Mensch K, Mensch V
where K.Vater= V.Vater and K.Kind not(V.Kind)


1.4 Gruppenfunktionen

Tabelle:
Zahl
15
5
25
max 25 count 3
min 5 sum 45
avg 15






1.5 Subselect

select ZN
from sch├╝ler
where Klasse=┬┤3Hba┬┤
and A=( select max(a)
from sch├╝ler
where Klasse=┬┤3Hba┬┤)

Der Befehl Distinct dient zur Duplicatenunterdr├╝ckung

select distinct Name
from Sch├╝ler
macht aus Tab1, Tab2

Tab1

Tab2
Maier

Maier
Maier

Roth
Roth


Roth


Maier




BEISPIEL 4.01 (Das Alter des ├Ąltesten der Schule ist gesucht)
select Alter
from Sch├╝ler
where Alter=( select max(Alter)
from Sch├╝ler)


BEISPIEL 4.02 (Wie hei├čen die 15 j├Ąhrigen der Schule)
select ZN
from Sch├╝ler
where Alter=19



BEISPIEL 4.03 (Wie hei├čen die ├Ąltesten der Schule)
select ZN
from Sch├╝ler
where Alter=( select max(Alter)
from Sch├╝ler)


BEISPIEL 4.04 (Welche Sch├╝ler der 3Hb/b sind j├╝nger als die S. d. 4Hb/b)
select ZN
from Sch├╝ler
where Klasse=┬┤3Hbb/b┬┤and
Alter=( select min(Alter)
from Sch├╝ler
where Klasse)┬┤4Hb/b)
BEISPIEL 4.05 (Namen der Sch├╝ler die ├Ąlter sind als der Druchschnitt)
select ZN
from Sch├╝ler
where Alter=( select avg(Alter)
from Sch├╝ler)


BEISPIEL 4.06 (In welcher Klasse sitzt der gr├Â├čte Sch├╝ler d. Schule)
select distinct Klasse
from Sch├╝ler
where Gr├Â├če=( select max(Gr├Â├če)
from Sch├╝ler)


BEISPIEL 4.07 (In welchem Stock/St├Âcken sitzen 1,77m gro├če Sch├╝ler)
Tabelle:Sch├╝ler

Tabelle: Ort
SNr.
Vorname
Zuname
Alter
Gr├Â├če

Klasse
Stock
3
Max
M├╝ller
16
178

4Hb/a
2
18
Peter
Berger
17
156

3HB/a
2
12
Herbert
Maier
16
172

4HB/c
1
13
Gunther
M├╝ller
16
189

1FL
0
5
Sigfried
Gunaker
18
202

3Hak/a
3

select distinct Ort, Stock
from Sch├╝ler, Ort
where Sch├╝ler.Gr├Â├če=177 and Sch├╝ler.Klasse=Ort.Klasse


BEISPIEL 4.08 (Angenommen, alle Sch├╝ler sind verschieden gro├č, wie gro├č ist der zweitgr├Â├čte?)
select ZN
from Sch├╝ler
where Gr├Â├če=( select max(Gr├Â├če)
from Sch├╝ler
where Gr├Â├če<( select max(Gr├Â├če)
from Sch├╝ler)




┬┤Maier┬┤in (M├╝ller, Maier, Huber,...) ├╝
┬┤Maier┬┤in (M├╝ller, Huber, Fischer,...) ├╗
12>max(8,12,13,20) ├╝
Exists(9,13); ├╝
Exists() ├╗


BEISPIEL 4.09(Alle Sch├╝ler, die so hei├čen wie jemand aus der 3HB/c)
select ZN
from Sch├╝ler
where Name in( select Name
from Sch├╝ler
where Klasse=3HB/c)


Group by

Tabelle: Sch├╝ler

Name
Alter
Gr├Â├če

Klasse
Maier
17
1,86

4HB/a
M├╝ller
17
1,82

3HB/a
Gruber
18
1,9

4HB/a
Berger
18
1,7

3HB/a

Die Befehlszeile Group by Klasse ergibt folgendes

Maier

17

1,86

4HB/a
Gruber

18

1,9









M├╝ller

17

1,82

3HB/a
Berger

18

1,7



Die Werte in den K├Ąstchen k├Ânnen nicht am Bildschirm ausgegeben werden, sondern nur durch Gruppenfunktionen.


17



1,86


18



1,9

min
19
ist 17

avg
1,86
ist 1,88

20



1,9


21



1,88






BEISPIEL 5.01
select count name, klasse
from sch├╝ler
group by klasse


BEISPIEL 5.02
select max(Alter), avg(Gr├Â├če), Klasse
from sch├╝ler
group by klasse


BEISPIEL 5.03(Alle Klassen, avg alter, gr├Â├če der Gr├Â├čten)
select KLasse, avg(alter), max(gr├Â├če)
from Sch├╝ler
group by Klasse




BEISPIEL 5.04(Liste aller Altersgruppen mit durchschnittlicher Gr├Â├če)
select alter, avg(gr├Â├če)
from Sch├╝ler
group by alter


BEISPIEL 5.05(Liste aller Klassen und Anzahl der ├╝ber 18 j├Ąhrigen)
select alter, count(alter)
from Sch├╝ler
where alter>18
group by alter


BEISPIEL 5.06(Liste aller Altersgruppen in d. 5.Klasse mit dschn. Gr├Â├če)
select alter, avg(gr├Â├če)
from Sch├╝ler
where klasse like(┬┤5*┬┤)
group by alter


BEISPIEL 5.07 (Liste aller Stcokwerke mit dschn. Alter, Sch├╝lerzahl u. Gr├Â├če des gr├Â├čten Sch├╝lers)
select avg(alter), count(alter), max(gr├Â├če)
from Sch├╝ler, Ort
where S.klasse= O.Klasse
group by O.Stock


1.7 Having

Im Gegensatz zu where, kann man mit having auch Gruppenfunktionen verwenden

BEISPIEL 6.01 (Liste aller Klassen, deren dschn. Alter, die mehr als 20 Sch├╝ler haben)
select Klasse, avg(alter)
from Sch├╝ler
group by Klasse
having count(*)>20


BEISPIEL 6.02(Liste aller Klassen, mit Sch├╝lerzahlen und der dsch.Gr├Â├če)
select alter, count(sch├╝ler)
from Sch├╝ler
group by Alter
having avg(gr├Â├če)>180







BEISPIEL 6.03(Liste aller Klassen, mit Sch├╝lerzahlen und der dsch.Gr├Â├če)
select alter, count(sch├╝ler)
from Sch├╝ler
group by Alter
having avg(gr├Â├če)>180

BEISPIEL 6.04(Den Piloten mit den meisten Flugstunden)
Pilot

KF
Piloten#
Name
Copiloten#
Flugstunden

Piloten#
Typ
12
M├╝ller
5
16

12
DC10
14
Berger
1
17

32
Boing747
2
Maier
21
16

2
Boing747
17
M├╝ller
N
16

11
Fokker110
8
Gunaker
N
18

1
DC10

select P.Name
from Pilot
where h=( select max(Flugstunden)
from Pilot)


BEISPIEL 6.05(Alle Piloten und ihre Copiloten)
select T1.Name, T2.Name
from Pilot T1, Pilot T2
where T1.CNR=T2.PNR


BEISPIEL 6.06(Welche Typen kann Berger fliegen?)
select KF.Typ
from Pilot, KF
where P.PNR=KF.PNR and Name=┬┤Berger┬┤


BEISPIEL 6.07(Alle Klassen, in denen avg alter>16 ist)
select Klasse
from Sch├╝ler
group by klasse
having avg(alter)>16


BEISPIEL 6.08(Alle Altersgruppen in denen mind einer ├╝ber 2m gro├čen Sch├╝ler gibt und die Gr├Â├če dieses Sch├╝lers)
select Alter,max(Gr├Â├če)
from Sch├╝ler
group by alter
having max(gr├Â├če)>2

Order by

BEISPIEL 7.01(Gib die Sch├╝ler der 3Hbc dem Alter geordnet nach 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├Ânnten.

select name avg(alter) k├Ânnte auch nicht
from sch├╝ler im select Teil stehen, weil
order by avg(alter) nicht gruppiert wird

BEISPIEL 7.02(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
├░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
├░Liste aller Sch├╝ler nach dem Alter geordnet, gleich alte werden nach der Klasse geordnet


NULL - Values

NULL bedeuted "gibt es nicht"

Mitarbeiter#
Name
Chef#




3
Maier
5

M├╝ller hat keinen Chef

5
M├╝ller
NULL




2
Huber
0




0
Berger
3

Huber hat den Chef mit Nummer 0

NULL ≠ 0

BEISPIEL 8.01(Alle Mitarbeter ohne Chef)
select name
from Mitarbeiter
where Chef is NULL
Es gibt auch not NULL


BEISPIEL 8.02(Alle Untergebenen von Berger )
select count(Name) select count(Chef#)
from Mitarbeiter from Mitarbeiter
├▓ ├▓
4 3
Datens├Ątze mit Null Null wird nicht
werden mitgez├Ąhlt mitgez├Ąhlt



1.10 Reihenfolge der Abarbeitung

from
where
group by
having
order by
select


Subselects, die Paare ergeben

BEISPIEL 9.01(Gr├Â├če+ Alter der Sch├╝ler der 3hbb)
select gr├Â├če, alter
from sch├╝ler
where klasse=┬┤3hbb┬┤

BEISPIEL 9.02(alle S. die so gro├č und so alt sind wie jemand aus 3Hbb)
select name
from sch├╝ler
where (gr├Â├če, alter) in (select ...

BEISPIEL 9.03(Alle Weitspringer)


Sportler



Name
VName
Alter
Disziplin
Bestleitsung
Nr
Berger
Gerhard
32
100m Sprint
9,91
12423
Glas
Uschi
99
Schuplattln┬┤
126 pro sek
00000
Mercury
Frederick
43
???
???
00001
Polster
Anton Jesus
36
talking
2 words/sec
23167
Duck
Daffy
23
shaking
34
17834

select name
from sportler
where disziplin=┬┤weitsprung┬┤
order by name

BEISPIEL 9.04(Alle 100m L├Ąufer unter 10sec)
select name
from sportler
where disziplin=┬┤100m┬┤ and bestleistung<10
order by bestleistung


1.12 Vergleiche in SQL

= (nicht == wie in C)
<>(nicht != wie in C
<
>
>=
<=
Between: where alter between 14 and 16
in: where klasse in(┬┤5a┬┤,┬┤5c┬┤)
like: % beliebig viele Zeichen (* in DOS)
- 1 Zeichen (? in DOS)


1.13 Funktionen in SQL

+: addieren
- : subtrahieren
/: dividieren
*: multiplizieren
|| h├Ąngt Zeichenfolge zusammen
nvl(a,b) falls a dann b
length gibt die L├Ąnge einer Zeichenkette aus
abs Absolutbetrag (z.B. abs( - 7)=7)
sign Vorzeichen (z.B. sign( - 7)= - 1)
substr


1.14 Outer Join

Tabelle: Spieler

Tabelle: Verein

ZN
Verein

Verein
Pr├Ąsident

Herzog
Bremen

Bremen
Pfanner

Stanzl
Sahne
Austria
NULL

Austria
Haym


select *
from spieler,verein Ergibt 2 Datens├Ątze
where s.verein=v.verein

select *
from spieler,verein Ergibt 3 Datens├Ątz
where s.verein=v.verein (+)

Vor├╝bungen f├╝r Datenbankentwurf

Datenbankentwurfsregel Nummer 1:
KEINE VERSTECKTEN JOINS !!!

    Bei Vertippen wiederspr├╝chlich (inkonsistent) Unn├Âtig viel Speicherverbrauch (Reduntant) Wenn kein Mitarbeiter, keine Abteilung (deletion anonaly)

Mitarbeiter


Mitarb#
Mitarbname
Abt#
Abtname


7
M├╝ller
3
Verkauf


12
Maier
2
Einkauf


14
Fischer
3
Verkauf


13
Huber
1
Leitung


11
Reinauer
3
Verkauf








Statt dieser Tabelle k├Ânnte man auch








Employee

Abteilung
Mitarb#
Mitarbname
Abt#

Abt#
Abtname
7
M├╝ller
3

3
Verkauf
12
Maier
2

2
Einkauf
14
Fischer
3

1
Leitung
13
Huber
1



11
Reinauer
3









entwerfen




Die Tabelle ┬┤Mitarbeiter┬┤ ist somit 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 also m├Âglich

Nachteile von zerlegbaren Tabellen

    B├╝rohilfe vertippt sich und schreibt bei Fischer ┬┤Einkauf┬┤ statt ┬┤Verkauf┬┤. Laut Datenbank ist Abt.3 mal der Einkauf, mal der Verkauf - - - > Widerspruch (Inconsistency) Vertippt sie sich in Tabelle ┬┤Abteilung┬┤, so ist die Datenbank falsch, aber nicht widerspr├╝chlich Zu hoher Speicherverbrauch Werden alle Mitarbeiter der Produktion gel├Âscht, so wei├č man nicht mehr, welche Abteilungsnr. 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.


4 Datenbankentwurf

ENTITY: alle Menschen, Sachen, Orte,... ├╝ber die wir Informationen speichern wollen.
Bsp.: Sch├╝ler Maier, 3Hbc, TDO, Sch├╝ler M├╝ller, .Stock,...

ENTITY TYPE: Zusammenfassung gleicher Entities
Bsp.: Sch├╝ler, Klasse, Fach, Stock

RELATIONSHIP: Beziehung zwischen Entities
Bsp.:3hbc hat_Klassenzimmer_in 2.Stock Hasitschka unterrichtet 4hba in TDO

RELATIONSHIPTYPE Beziehungen zwischen Entitytypes
Bsp.: Klasse hat_Klassenzimmer_in Stock Lehrer unterrichtet Klasse in Fach

ATTRIBUT: Eigenschaft einer Entity
Bsp.: Maier:17 Jahre, katholisch, Eishockey

ATTRIBUTE TYPE Bsp.: Alter, Religion, Sport


Entity Type ├░ Tabelle
Entity ├░ Datensatz= Tabellenzeile
Attribute Type ├░ Spalte
Attribute ├░ Tabellenzeile


Vorgangsweise bei Datenbankentwurf

    Suche alle Entity Types, ├╝ber die Information gespeichert werden soll.
    z.B. Schraubentyp, Mitarbeiter, Kunde, Fabrik,...
    Suche zu jedem die zu speichernden Attribute.
    z.B. Schraubentyp(Typenbez., L├Ąnge, Steigung) Mitarbeiter(Name, Einstelldatum)Kunde(Name, Adresse)
    W├Ąhle oder erfinde Schl├╝ssel
    z.B. Schraubentyp(Typenbez., L├Ąnge, Steigung) Mitarbeiter(M#, Name, Einstelldatum)Kunde(K#, Name, Adresse)
    Mache aus jeder Entity Type eine Tabelle
    z.B. SQL:creat table schraubentyp...
    Suche alle Relationship Types, ├╝ber die Information gespeichert werden soll.
    z.B. Mitarbeiter arbeitet_in Fabrik Schraubentyp wird_hergestellt_in Fabrik Kunde bestellt Schraubentyp bei Mitarbeiter
    Suche speicherungsw├╝rdige Attribute der Beziehungen.
    z.B. Arbeitet_in: Dienstbegin, Funktion wird_hergestellt_in: max. Tagesproduktion bestellt_bei: Bestellmenge, Datum
    Welche 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 Fabr. In jeder Fabr. werden_hergestellt (<=) mehrere Schr.typen mehrere:mehrere= m:n Beziehung

    Welche sind Mehrfachbeziehungen?
    Kunde bestellt Schraubentyp bei Mitarbeiter 3 Entity Types an Beziehung beteiligt (3=trin├Ąr, 4=Quatern├Ąr)
    Wie halte ich in 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 iimer nur eine sein. Aber was wird dort eingetragen? Kapazit├Ąt, Adresse, Beides? Etwas was eindeutig klar macht, in welcher Fabrik der Mitarbeiter arbeitet - > Mitarbeiter bekommt neue Spalte mit dem Schl├╝ssel von Fabrik.


    Wie halte ich m:n Beziehungen fest?
    (z.B. welcher Schraubentyp wird in welcher Fabrik gefertigt?)
    a.) Ich speichere bei Fabrik die Schr.typen schlecht siehe 8.
    b.) Umgekehrt schlecht siehe 8. à neue Tabelle Fertigung



Fertigung




Schl├╝ssel
- - - - - - - - - - - - - >
STyp
Fabrik
< - - - - - - - - - - - - -
Schl├╝ssel


aus

H8/1
Wien 23

aus


Schr┬┤Typ

H8/1
Linz

Fabrikstabelle



M15/2.5
Wien 23




10. Mehrfachbeziehungen - > Eigene Tabelle
Betsellung
Kunde
Mitarbeiter
Produkt
27
12
H8/1
15
10
M15/2.5

11. F├╝ge Beziehungsattribute zur Datenbank Bestellmenge, Datum neue Spalten der Tabelle "Bestellung" Max. Tagesproduktion Spalte von "Fertigung" Dienstbeginn, Funktion neue Spalten und "Mitarbeiter"

12. Entferne
    Ableitbare Beziehungen
    Derivable Realtionship (Spitalsbeispiel) Ableitbare Attribute
    Derivable Attribute (Geburtsdatum, Alter - > Geburtsdatum) Zerlegbare Tabellen
13. Tabellen bauen:
creat table kunde (knr number(4) not null, nme 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 tabelle kunde

Entity - Relationship Diagramme (ERDs)

Helfen (sollen helfen) beim Datenbankdesign
ERDs zeigen keine Entities & Relationships sondern Entity Types und Relationship Types


Entity Type ├á K├Ąstchen Kunde
Attribute Type à Kugel

K# Name


1:n Beziehung à Linie Mitarbeiter Fabrik


m:n Beziehung: Assoziative Entity Types

Fabrik Fertigung Schraubentyp

Mehrfachbezogene Assoziative Entititypes

Kunde Bestellung Mitarbeiter





Schraubentyp


5.1 Kardinalit├Ąten

mind. 0 h├Âchstens 1

mind. 1 h├Âchstens 1

mind. 0 h├Âchstens mehrere

mind 1 h├Âchstens mehrere
Jeder Lehrer unterrichtet mindestens 0, h├Âchstens mehrere Sch├╝ler. Jeder Sch├╝ler wird von mindestens 1 h├Âchstens mehreren Lehrern unterrichtet.

Lehrer Sch├╝ler

m:n


5.2 Erste Datenbankentw├╝rfe

Man gebe einen Schl├╝ssel an f├╝r
Eine Tabelle der Sch├╝ler der Hbc (Kat┬┤Nr)
Eine Tabelle aller derzeitigen Wiener Sch├╝ler (Kat┬┤Nr Schulcode, Klassencode)
Eine Tabelle aller Sch├╝ler, die jemals die Ungargasse besucht haben (Eintrittsjahr, Klassencode d, 1.Klasse, Kat┬┤Nr in 1.Klasse)

gebe Kardinalit├Ąten, Beziehungstyp an

Mieter bewohnen Haus Mieter Haus m:n


Patient bekommt von Arzt Medizin verschrieben

Patient Arzt


Verschreibung


Mehrfachbeziehungen Medizin



Mutter hat Kind Mutter Kind 1:n



Programmierer schreibt Programm in Sprache

Programmierer Programm Sprache

Das sind 2 m:n Beziehungen à Neue Tabellen

Mensch ├╝bt Beruf aus Mensch Beruf m:n


ERD Schraubenhersteller (ohne Attribute)
1
Kunde Bestellung Mitarbeiter Maschine


3
2

Schr┬┤typ Fertigung Fabrik

1.....Kann_bedienen
2.....Steht_in
3.....Arbeiter_in


Wichtigste ERD - Regel: Keine Ableitbaren Beziehungen!

1 2
Spital

3
Patient Spitalsbett

1.....Liegt_in
2.....Steht_in
3.....Belegt

1 ist ├╝berfl├╝ssig: 2,3 reichen, um herausfinden zu l├Ânnen, in welchem Spital Patient x liegt ├á 1 k├Ânnte gestrichen werden.
Man k├Ânnte auch 1 lassen und 2 streichen aber nicht 1 lassen und 3 streichen!

Schul - ERD (XESAS)

Um etwas vertrauter mit ERDs zu werden hier noch ein kleines Beispiel der HTL Ungarg.





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, Abtcde, PKZ, KV, Raum)

Fach (Fbezl, Fbezk, Fbezaltern)

Stdtafel (KKZ, Abtcode, Fbezk, Std)

Lehrer (Lehrer#, Name, Vname, Akgrad, staatsb├╝rgerschaft, Muttersprache, Adresse, Plz, Land, Privnummer, Firmennummer)

Stdplan (KKZ, Abtcode, PKZ, Fbezk, Raum, Ausweichraum, Tag, Stunde, L#, Unterichts#)

Zeugnis (Aufnahme#, KV, Snote, Enote)
usw. usw. usw.

Transaktionen






Unter einer Schedule versteht man die zeitliche Reihenfolge in der Transaktionen ablaufen.

Serielle Schedule

Transaktion_1
Transaktion_2
Transaktion_1
Transaktion_2




read B


read B
...


...
write L


write L

read B
read B


...
...


write B
write B

Wert: BàB - 5
Wert: BàB - 5
LàL+10
LàL+10
=> serialisierbar


6.2 Nicht serielle Schedule (Verzahnt)

Transaktion_1
Transaktion_2
Transaktion_1
Transaktion_2


read B

read B

B=B - 1

B=B - 10

write B


read B
read L

write B


read B
read L


B=B+5

B=B+5

write B

write B
L=L+10

L=L+10

write L

write L



Wert: BàB+5

LàL+10

=> nicht serialisierbar




Flug Platz S304 ist schon vergeben, wenn 1 sonst 0





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
Transaktion_2


read B

read S304
read S304


if (S304==1) sorry



else




read S304



if (S304==1) sorry



else


read A



A=A+1



write A




read A



A=A*2



write A


read A



A=A+1



write A



T1, T2 Aà2A+4
Aà2A+3
T2, T1 Aà2A+2



Um zu verhindern, dass zwei Prozesse auf ein und denselben Datensatz zugreifen muss man locken. Unter locking versteht man das Sperren Daten um anderen Transaktionen den Zugriff auf den gesperrten Datensatz zu verwehren.

Bei einem Ms - Dos Rechner wird das locken mit den Befehlen cli und sti realisiert.

Durch das Locken w├Ąre folgende Transaktion nicht mehr m├Âglich.
Transaktion_1
Transaktion_2


Lock A


Lock A

A=A+3

Die Transaktion
Transaktion_1
Transaktion_2


Lock B

Read B

B=B - 10

write B

unlock B


lock L

read L

L=L+10

write L

unlock

w├Ąre jedoch zul├Ąssig.


Es ist m├Âglich, dass Transaktionen nicht nach Reihenfolge des Einterrens, 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 muss. Bei dieser L├Âsung besteht jedoch die Gefahr, dass eine Transaktion mit geringer Priorit├Ąt immer nach hinten gereigt wird, da wichtigere Transaktionen auszuf├╝hren sind. Ist dies der Fall so ist ein Livelock (oder Starvation) gegeben.

Wartet eine Transaktion_1 auf Datensatz B und eine Transaktion_2 auf Datensatz A, wobei sie beiden Datens├Ątze von der jeweilig anderen Transaktion gelockt wurden, so nennt man diese Situation Deadlock.

Transaktion_1
Transaktion_2


Lock A


Lock B
Lock B


Lock A


Es gibt mehrere M├Âglichkeiten um einen Deadlock zu verhindern. Ein Beispiel w├Ąre bestimmte Regeln aufzustellen an die sich die Transaktionen halten m├╝ssen:

    Locken Reihenfolge beim Locken Phasen Locking (Nach dem unlock darf kein lock mehr kommen)

Eine andere M├Âglichkeit um Livelocks zu verhindern ist es einen Graphen (Dead Lock Graph) zu zeichnen.


Ein Deadlock ist dann vorhanden, wenn man einen geschlossenen Kreis (cycle) zeichnen kann. Ist die der Fall so muss ein Knoten gel├Âscht werden, um den Deadlock aufzul├Âsen

Rollback

L├Ąuft eine Transaktion nicht bis zum Ende, aus welchem Grund auch immer, so d├╝rfen die bis jetzt ge├Ąnderten Daten nicht ge├Ąndert bleiben, sondern m├╝ssen zur├╝ckgesetzt werden. Dieses Zur├╝cksetzten 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" clicked so sollen die gemachten ├änderungen nicht gesichert werden, oder auch wenn das System abst├╝rtz oder andere Komplikationen auftreten.


Transaktion_1

lock E
Rollback
lock H
read E
read H
H=H+1 000 000
write H
unlock H
if (E> - 100 000) else
E=E - 1 000 000
write E
unlock E


Es ist oft der Fall, dass eine Transaktion andere Transaktionen aufruft oder durchf├╝hrt, und diese wiederum ander aufruft oder durchf├╝hrt, usw. Damit w├Ąre bei einem Rollback nicht nur erforderlich eine Transaktion Back zu rollen, sondern mehrere. Dieser Effekt hat die Bezeichnung Cascading Rollback. Dies ist praktisch kaum durchf├╝hrbar und ist unbedingt zu vermeiden.

Um dies zu realisieren, muss gew├Ąhrleistet sein, dass nach einem gewissen Zeitpunkt kein Rollback mehr durchgef├╝hrt wird. Dieser Punkt ist nach Beendigung aller Berechnungen und wird Commit Point genannt.

Wenn folgende Reihenfolge eingehalten wird ist gesichert, dass kein Cascading Rollback durchgef├╝hrt werden muss. Diese Vorgangsweise nennt man Zwei Phasen Commit.

    Commit Point wurde erreicht Write to the Database now Unlocks

Protokolle (Protocols)

Unter einem Protokoll versteht man allgemein g├╝ltige Regeln, an die sich alle zu halten haben.





Um auch das Risiko noch weiter zu veringern 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 LOG rekonstruieren was geplant, bzw. mit Vergleich der aktuellen Daten, was ver├Ąndert wurde. Jedes LOG wird sicherheitshalber 2x auf Lokale Speichermediem gesichert, die wom├Âglich noch r├Ąumlich getrennt sein sollten.

Ein LOG hat in etwa folgende Aussage

Ich bin Transaktion_1
ich plane
write A=19
write B=30
write C=4

ENDE

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 Objekt

Access Optionen zu diesem Thema sind z.B. exlusiv ├Âffnen, Tabelle locken.
Access Basic Befehle zu diesem Thema sin z.B. Move First, Move Last (Bewegt Bleistift), lock edits, begin trans, commit trans, rollback.

3175 Worte in "deutsch"  als "hilfreich"  bewertet