Artikel pedia
| Home | Kontakt | Artikel einreichen | Oberseite 50 artikel | Oberseite 50 autors
 
 


Artikel kategorien
Letztes fugte hinzu
    Ms-access

   Instrumentation + schnittstellen

   Pc tuning - volle kraft voraus für ihr system

   Informatorische grundlagen

   Javascript

   Interne sortieralgorithmen - der kern der sache

   Plotter und sonstige drucker

   Frage 20 (rössl priska)

   Internet - programmierung

   Monitore

   Semesterarbeit und spezialgebiet für informatik

   Erörterungs zum thema

   Inhaltsverzeichnis

   Einführung in die entwicklung ganzheitlicher informationssysteme:

   Titel dokument
alle kategorien

  Tdo- heft

      TDO- HEFT   Josef Widder 4. HBa Inhaltsverzeichnis1 SQL (STRUCTURED QUERY LANGUAGE) 5 1.1 Relationeale Datenbanken- Relational database 5 1.2 Karthesische Produkt und die Join Bedingung 6 1.3 Equijoin 8 1.4 Gruppenfunktionen 8 1.

5 Subselect 9 1.6 Group by 12 1.7 Having 13 1.8 Order by 15 1.9 NULL- Values 16 1.10 Reihenfolge der Abarbeitung 16 1.

11 Subselects, die Paare ergeben 17 1.12 Vergleiche in SQL 17 1.13 Funktionen in SQL 17 1.14 Outer Join 18 2 VORÜBUNGEN FÜR DATENBANKENTWURF 19 3 NACHTEILE VON ZERLEGBAREN TABELLEN 20 4 DATENBANKENTWURF 20 4.1 Vorgangsweise bei Datenbankentwurf 21 5 ENTITY- RELATIONSHIP DIAGRAMME (ERDS) 23 5.1 Kardinalitäten: 23 5.

2 Erste Datenbankentwürfe 24 5.3 Schul- ERD (XESAS) 26 6 TRANSAKTIONEN 27 6.1 Serielle Schedule 28 6.2 Nicht serielle Schedule (Verzahnt) 28 6.3 Rollback 33 7 PROTOKOLLE (PROTOCOLS) 34 8 GRANULARITÄT (GRANULARITY) 35   SQL (Structured Query Language) 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 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     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 Vwhere K.Vater= V.Vater and K.Kind not(V.Kind)     Gruppenfunktionen Tabelle: Zahl 15 5 25 max 25 count 3 min 5 sum 45 avg 15             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     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      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    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)     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     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.     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     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     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     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:   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 muß 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, 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.   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.

Suchen artikel im kategorien
Schlüsselwort
  
Kategorien
  
  
   Zusammenfassung Der Vorleser

   sachtextanalyse

   interpretation zwist

   Fabel interpretation

   literarische charakteristik

   interpretation bender heimkehr

   felix lateinbuch

   interpretation der taucher von schiller

   textbeschreibung

   charakterisierung eduard selicke
Anmerkungen:

* Name:

* Email:

URL:


* Diskussion: (NO HTML)




| impressum | datenschutz

© Copyright Artikelpedia.com