REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
  EnglischEpochenFranzösischBiologieInformatikItalienisch
  KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  

SQL Structured Query Language




 

 

 

TDO- HEFT



1    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


1.2    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 muß 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)


1.6    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


1.8    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


1.9    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


1.11    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 (+)


2    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


3    Nachteile von zerlegbaren Tabellen

1.   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

2.   Zu hoher Speicherverbrauch

3.   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


4.1    Vorgangsweise bei Datenbankentwurf

1.   Suche alle Entity Types, über die Information gespeichert werden soll.
z.B. Schraubentyp, Mitarbeiter, Kunde, Fabrik,

2.   Suche zu jedem die zu speichernden Attribute.
z.B. Schraubentyp(Typenbez., Länge, Steigung) Mitarbeiter(Name, Einstelldatum)Kunde(Name, Adresse)

3.   Wähle oder erfinde Schlüssel
z.B. Schraubentyp(Typenbez., Länge, Steigung) Mitarbeiter(M#, Name, Einstelldatum)Kunde(K#, Name, Adresse)

4.   Mache aus jeder Entity Type eine Tabelle         
z.B. SQL:creat table schraubentyp

5.   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

6.   Suche speicherungswürdige Attribute der Beziehungen.
z.B. Arbeitet_in: Dienstbegin, Funktion wird_hergestellt_in: max. Tagesproduktion bestellt_bei: Bestellmenge, Datum

7.   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)

8.   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.



9.   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


5    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!


5.3    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.


6    Transaktionen

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


6.1    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, daß zwei Prozesse auf ein und denselben Datensatz zugreifen muß 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, daß 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 muß. Bei dieser Lösung besteht jedoch die Gefahr, daß 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:

1.   Locken

2.   Reihenfolge beim Locken

3.   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 muß ein Knoten gelöscht werden, um den Deadlock aufzulösen


6.3    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 Anderungen 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, daß 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, muß gewährleistet sein, daß 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, daß kein Cascading Rollback durchgeführt werden muß. Diese Vorgangsweise nennt man Zwei Phasen Commit.

1.   Commit Point wurde erreicht

2.   Write to the Database now

3.   Unlocks


7    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


8    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.










Haupt | Fügen Sie Referat | Kontakt | Impressum | Datenschutz







Neu artikel