Vorlesung X - 04.05.01 - isabel

Werbung
Einführung in Datenbanken
Semester: IV
HTWM
(Hochschule für Technik und
Wirtschaft Mittweida –
University of applied
sciences)
Fach: Datenbanken I
Semester: 4
Vorlesender: Prof. Stübner
Datenbanken I
Seite
Autor: Drost, Isabel (if99p1)
1
Einführung in Datenbanken
Semester: IV
Vorlesung X - 04.05.01 ............................................................................................................4
The Check Constraint: ...................................................................................................................... 4
The Unique Key- Constraint ............................................................................................................. 4
The PrimaryKey – Constraint: ......................................................................................................... 4
The ForeignKey – Constraint: .......................................................................................................... 4
Conclusion: ......................................................................................................................................... 4
Selbstreferenzierung:......................................................................................................................... 5
Constraint hinzufügen:...................................................................................................................... 5
Constraint löschen: ............................................................................................................................ 5
Constraint Stati:................................................................................................................................. 5
Disabling Constraints: ..................................................................................................................................... 5
Enable Constraints:.......................................................................................................................................... 5
Exceptions Tabelle nutzen:................................................................................................................ 5
Deferred Constraints (aufgeschobene Constraints):....................................................................... 6
Circular References: .......................................................................................................................... 6
DML-Methoden: ................................................................................................................................ 6
Constraint – Informationen holen:................................................................................................... 6
Constraint Typen: .............................................................................................................................. 6
Transactions – ACID Prinzip....................................................................................................7
DatenbankTransaktionen.................................................................................................................. 7
How to Survive in a RDB ..........................................................................................................9
Die Semantik der Datenbank:........................................................................................................... 9
Problem Lösen: ................................................................................................................................ 10
Das data dictionary – ein Tool für Profis....................................................................................... 10
Codds 12 Regeln ............................................................................................................................... 10
Normalisierungstheorie...........................................................................................................12
Zweck: ............................................................................................................................................... 12
Mutationsanomalien ........................................................................................................................ 12
Probleme bei normalisierten DB..................................................................................................... 14
Extreme bei der Normlisierung ...................................................................................................... 14
Empfohlene Vorgehensweise........................................................................................................... 14
Zusammenfassung:..................................................................................................................14
Relationales Modell.......................................................................................................................... 14
Praktischer Aspekt ...................................................................................................................14
Vom Problem zur Query ................................................................................................................. 14
Interpretation ................................................................................................................................................. 15
Transformation .............................................................................................................................................. 15
Formalisierung............................................................................................................................................... 15
SQL - Text..................................................................................................................................................... 15
Seite
Autor: Drost, Isabel (if99p1)
2
Einführung in Datenbanken
Semester: IV
Testphase ....................................................................................................................................................... 15
Seite
Autor: Drost, Isabel (if99p1)
3
Einführung in Datenbanken
Semester: IV
Vorlesung X - 04.05.01
The Check Constraint:
•
•
condition, die jede Zeile erfüllen muß
Nicht erlaubt sind:
- Referrenzen zu Pseudospalten (Currval, nextval, Lvl, Rownum)
- Referrenzen zu Sysate, uid, user, userenv – Funktionen
- Queries, die sich auf Inhalte anderer Spalten beziehen
The Unique Key- Constraint
(CanditateKey)
Ist der PrimaryKey als Identifikator/ ForeignKey schon vergeben, kann ich einen UniqueKey verwenden.
•
•
auf Table- oder auf SpaltenLvl. Zu definieren
create table [ ... ] constraint dept_dname_uk UNIQUE (dname);
The PrimaryKey – Constraint:
•
•
•
•
•
Wirkung entspricht der von Unique
Frei ausgewählter Schlüssel
Kann unmittelbar auf die Spaltendef. Folgen, wenn es sich nur um eine Spalte handelt
Kombinationen von Spalten möglich
Create table [ ... ] Constraint dept_deptno_pk Primary Key(deptno)
The ForeignKey – Constraint:
•
•
•
•
•
•
PrimaryKey kann in fremder Tabelle als ForeignKey eingesetzt werden, z.B. zum Verbinden zweier Tabelle
Es kann dann in jener Spalte keine Einträge geben, die es in der Elterntabelle nicht als PrimaryKey gibt
Create table [ ... ] Constraint emp_deptno ForeignKey (deptno) References dept (deptno));
ForeignKey – Definiert die Spalte in der Kindtabelle, auf tableConstraintLvl
Referenz – Identifiziert Elterntabelle und Spalte
On Delete Cascade: Lösche ich Eltern, fliegen auch Kinder weg
Conclusion:
1.
2.
3.
ChildTable wird nach Parent kreiert
Parent wird NACH Child gelöscht
Key im Parent können nicht verändert/ gelöscht werden, solange sie noch im Kind referrenziert werden
Will ich in der ElternTabelle nur den Inhalt/ die Referrenzen ändern will: ForeignKeys ausschalten
Bei Manipulationen Locks der Kindtabellen vermeiden.
Bei Manipulationen am Kind muß Parent online sein.
Prozeduraler Test:
Habe ich keine ForeignKeys, kann ich die Integrietät periodisch checken:
Select *from emp Where deptno not in (Select deptno From dept);
Seite
Autor: Drost, Isabel (if99p1)
4
Einführung in Datenbanken
Semester: IV
Selbstreferenzierung:
ForeignKey kann sich auf PrimaryKey der eigenen Tabelle beziehen, z.B. emp(mgr)=emp2(empno)
•
dabei muß aber eine bestimmte Reihenfolge beim Einfügen eingehalten werden
Constraint hinzufügen:
Siehe Folien
Constraint löschen:
•
•
Nur den Constraint löschen:
- über alter table [tablename] Drop Constraint [ConstraintName]
Gesamte Tabelle mitsamst referenzierten foreignKeys löschen:
- über Drop table [tablename] cascade Constraints;
Constraint Stati:
Disabled
Enabled
novalidate
Enabled
validate
DB
DB
DB
Disabling Constraints:
•
•
•
•
gehört in den alter table Befehl
erst foreignKeys, dann PrimaryKeys ändern
- alter table [tablename] disable Constraint
[constraintname] Cascade;
UniqueIndexes dropped, nonunique ones nicht
Keys werden über Indexes abgehandelt
Nonunique brauchen für Performancezwecke nicht
weggeworfen werden
PerformanceTip: erst KeyCheck ausschalten, alles
einfügen,dann Check über gesamte Tabelle durchführen –
Suche wird nicht bei jedem Einfügen durchgeführt
Enable Constraints:
•
•
•
•
EingabeCheck, Eingabe- und
New Data nicht Inhalts- Inhaltscheck
check
Via alter table ... enable Constraint ...
Indexe werden beim Einschalten der Constraints „PrimaryK“ und „ „ automatisch angelegt
enable validate:
- Folge: Tabelle wird gelockt
- Arbeit mit Unique (Daten müssen widerspruchsfrei sein) oder nonunique Index
enable nonvalidate:
- nur wenn ich mir sicher bin, dass die eingegebenen Daten widerspruchsfrei sind
- Tabelle wird nicht gelockt
- Performancekritische Entscheidung zwischen validate und nonvalidate
Exceptions Tabelle nutzen:
1.
2.
3.
Kreieren der Tabelle (Scriptname: utlexcpt.sql)
Alter table mit exceptionClause ausführen
...
Seite
Autor: Drost, Isabel (if99p1)
5
Einführung in Datenbanken
Semester: IV
Deferred Constraints (aufgeschobene Constraints):
Nondeferred: sofort ausgeführt, jede Datenmanipulation wird sofort gecheckt
Deferred: später, wenn Transaktion beendet ist
• Arbeit beim Einfügen, Ändern mit dem Aus-/ Einschalten der Constraints wird abgenommen
• Ist Constraint nicht korrekt im Ergebnis: Rollback
Circular References:
Referenzen von einer Tabelle auf eine andere und zurück
DML-Methoden:
1.
2.
3.
4.
disable/ enable
Dummy Objects verwenden (unsauber)
Deferred (zu bevorzugen)
On delete cascade (lösche Kinder mit den Eltern)
Um tables zu löschen, muß ich erst deren Constraint ausschalten, ansonsten brauche ich eine Art Cascade.
Constraint – Informationen holen:
•
•
•
•
•
aus Datadict
darin gibt es eine Constraintstabelle -> tabellenweise
ziemlich umfangreich
Select Constraint_name, constraint_type search_conditions
Frome user_constraints
Where table_name=‘emp‘
(Constraints angucken)
colums zu constraints angucken:
Select constaint_name, column_name
from user_cons_columns
where table_name=‘emp‘
Ergibt Relation: Pfeil
zwischen zwei Tabellen
Constraint Typen:
•
•
•
•
•
Check, not Null
PrimaryKey
ForeignKey
Unique
Views – with check option
Seite
Autor: Drost, Isabel (if99p1)
6
Einführung in Datenbanken
Semester: IV
Transactions – ACID Prinzip
•
•
•
•
Atomar: entweder alles oder nix
Konsitenz: gehe von einen konsitenten in den nächsten konsitenten Zustand über
Isolation: Läuft isoliert von anderen zugreifenden Transaktionen (bei gleichzeitigen Transaktionen dürfen
diese sich gegeseitig nicht beeinflußen – sie laufen also nacheinander ab)
Dauerhaftigkeit – das was in der Transaktion geändert wurde, überlebt (auch einen Rechnerabsturz –
Realisierung: Transaktion ist abgeschlossen, wenn sie auf die Platte geschrieben wurde, allerdings ins
Rollbacksegment von Oracle, bei Rechnerneustart wird das was dort steht, zurückgeholt)
DatenbankTransaktionen
•
Beinhalten:
- DML statements die eine konsitente Datenveränderung vornehmen
- Einem DDL-statement
- Einem DCL-statement
•
Beendet durch:
- Commit, Rollback
- DDL oder DCL statement wird ausgeführt (automatischer commit)
- errors, exit (=logout), system crash
•
Vorteile von Comit und Rollback:
- stellen Datenkonsitenz sicher
- Datenveränderungen vorher angucken, bevor die Änderungen permanent gemacht werden
- logisch zusammengehörige Befehle werden zusammengefasst
•
Transaktionen kontrollieren:
- erfolgt über savepoints, zu denen ich zurückhüpfen kann
Transaktion
insert
commit
update
savepoint a
insert
delete
savepoint b
•
Implizites Transaktionen:
- automat. commit:
DDL – statement
DCL – statement (Datacontrol, z.B. Passwortänderung)
Exit z.B. von SQL+
- abnormaler Ablauf (abnormales Beenden vonn SQL+, systemFehler ...)
•
state of a data bbefor commit oder Rollback:
- Datenbank wird gepuffert > Rollback ist möglich
- Select statement nutzen, um die Resultate der DML – Ops zu kontrollieren
- Andere User können nich sehen, was ich ändere, bevor ein commit abgeschickt wurde
- Bestimmte Zeilen werden für’s Editieren durch andere Nutzer gelockt
Seite
Autor: Drost, Isabel (if99p1)
7
Einführung in Datenbanken
Semester: IV
•
Datastate after commit
- Datenänderungen permanent gemacht
- verheriger Datenbankstatus verloren
- alle User sehen die Ergebnisse
- Locks auf bestimmte Zeilen werden freigegeben (les- / änderbar)
- Savepoints werden auch verworfen
Transaktionen/ Locks beziehen sich nicht auf den Nutzer, sondern auf seine Session, locke ich mich also
zweimal ein, sind beide Fenster völlig unabhängig voneinander
somit werden Änderungen auch dann erst sichtbar, wenn ich ein commit gebe
•
state of data after Rollback
- datenänderungen rückgängig gemacht
•
Arbeit mit einem Savepoint
- Savepoint [name] erstellt savepoint
- Roll back to [savepoint] geht dahin zurück
- geht nur eine DML schief, kann ich mit Rollback einen Schritt zurückgehen
- Oracle8 implementiert einen impliziten Savepoint
- alle anderen Änderungen bleiben erhalten
•
Konsitenz beim Lesen
- garantiert konsitenten Blick auf die Daten (solange ich am Ändern bin, sieht es der andere nicht)
- Änderungen von einem User dürfen nicht mit den Änderungen eines anderen Users in Konflikt
stehen
- Leser warten nicht, bis der Schreiberling fertig ist
- Schreiberlinge warten nicht auf die Lesenden
•
Anomalien
- dirty read:
Scott gibt Bond ein – King liest und sieht Bond – Scott gibt rollback – King sucht Bond (Bei Oracle
nicht möglich, da Änderung sichtbar, wenn commit
- non – repeatable read
king liest king aus – scott feuert king – king findet king nicht mehr -> findet den King nicht mehr
Vermeiden von non-repeatable read:
king lockt die table im exklusiven Modus – Scott kann king noch nicht löschen – erst wenn King sein
commit gibt, kann Scott die Änderung vornehmen
- Phantom
Scott will gucken,ob emp# schon vergeben – ist sie nicht – in der Zwischenzeit greift sich die 7 –
Update von Scott seiner Seite nicht mehr möglich
Besser: lock table emp in exclusive mode; <is empno 7 frei> <insert with 7>; Jetzt kriegt King die
Fehlerausschrift, dass die 7 nicht mehr da ist: Scott war eher da
•
Locking
- verhindert, dass sich einzelne Transaktionen gegenseitig beeinträchtigen
- normal vom System ausgeführt
- nutzen automatischerdings das niedrigste Lvl. an Restriktionen
- werden während der Dauer der Transaktion gehalten (commit setzt sie zurück)
- Zwei Basismodi: exclusive (es kann nicht gelesen werden), shared (lesen aber nicht schreiben,
schneller, kann tlw. zu Problemen führen)
Deadlocks können produziert werden. Am einfachsten erkennt dies das System anhand eines Timers. Kommen
bestimmte Prozesse über längere Zeit nicht voran, so werden alle beteiligten geschlachtet und assynchron
gestartet. Vermeidung auch aufgrund von Reihenfolgen: habe ich Tabelle a noch nicht, kriege ich b auch nicht ...
Wird kritisch bei verteilten Systemen (is datt nu ein Deadlock, oder is nur das Netz mal wieder lahm???)
•
DML: Insert, update, delete
Seite
Autor: Drost, Isabel (if99p1)
8
Einführung in Datenbanken
Semester: IV
(vorsicht – klausur)
How to Survive in a RDB
Wie finde ich die Karte zu Datenbank – das relationale Diagram
Komponenten:
Entities
Attribute
Relationships
1) Select * From cat;
ergibt die Entities (die Tabellen)
2) DESC emp ...; oder Select * from emp;
ergibt Attribute zu den Tabellen
3) Das eigentliche Problem sind die Relationships – semantische Lücke
Suche Beziehung zwischen Primärschlüssel/ CandidateKey und Foreign Key
1.
Gucke Dir Constraints an, wenn welche definiert wurden
(im Datadictionary -> select * from dict; - ziemlich umfangreich)
Hinweis:
3 Kategorien (ALL_ / DBA_ / USER_) existieren
User ist das, was mir gehört, all zusätzlich das, was ich geerbt habe
Ich habe aber nur meinen Account, nicht den vom Besitzer -> suche also unter all.
Select *from dict whre table_name like ‚ALL_CONS%‘; für die Constraints
Select * from ALL_Constraints um die Constraints herauszufinden
Hinweis:
wähle über die Where-Klausel genauer aus, z.B. where c=r (Constraintstype = foreignKey)
lass Dir so wenig wie nötig ausgeben
2.
Informelle Beschreibung:
Select * from all_tab_comments;
Select * from all_column_comments;
ergibt Wissen über die Tabelle von außerhalb, z.B. über die Kommentare in der Tabelle
3.
Syntaktische Analyse
1. Keys sind für gewöhnlich NOT NULL
2. artificial Keys sind meist nützlicher (laufende Nummern etc.)
3. Related attributes sollten den gleichen Datentyp haben
4. meist sind verbundene Attributenamen ähnlich oder gar gleich
5. Die Attribute sollten in gewissen Grenzen die gleichen Daten beinhalten
6. Die zur Verbindung genutzten Attribute sollten aus verschiedenen Spalten stammen und passende
Daten enthalten.
Die Semantik der Datenbank:
•
•
•
•
Zeichen einer Datenbank sind lediglich syntaktisch
will ich die Datenbanksemantik verstehen, brauche ich ein Stück menschl. Verstand, Logik und Erfahrung
Ich muß davon ausgehen können, dass die Information, die ich suche, auch in der DB steht
entspricht eine DB dem Stand der Kunst, enthält sie keine Redundanz
•
•
•
•
Wir müssen die Information, die wir suchen exakt an einer bestimmten Stelle stehen
Kann ich zu jenem Zeitpunkt, den Zweck der DB zu erkennen?
Kann ich zu ihr selber Aufgaben stellen?
wenn ja – habe ich die DB verstanden.
Seite
Autor: Drost, Isabel (if99p1)
9
Einführung in Datenbanken
Semester: IV
Problem Lösen:
•
•
•
•
•
Vorbedingung: Kenntnis von SQL (z.B. über entsprechende Aufbereitung von Bsp.Abfragen)
Wichtiges in den Aufgaben unterstreichen.
Eliza-Technik (nach J. Weizenbaum – Psychaterprogramm):
ich kriege nur Aufgaben, die mit der DB lösbar sind
Mache Dir eine Vorstellung davon, wie das Ergebnis aussehen muß (Wie heißen die Spaltennamen?
Wieviele Spalten brauche ich? Brauche ich ein Order By oder ähnliches?)
Syntaktische Analyse:
- Select *From cat; (mache Dir ein Bild von dem Teil der DB, den Du brauchst)
- Select *From <interessting table>;
- Guck, ob Du Keys findest – vor allem künstliche, was könnte ein foreign/ primaryKey sein? Diese
erkennt man z.B. am NOT NULL, Primaries liegen meist an erster Stelle in der Tabellendefinition.
Zahlen deuten auf künstliche Schlüssel. Bei PrimaryKeys sind alle Werte unterschiedlich – unique
Index deutet auf Unterschiedlichkeit hin.
- ForeignKeys meist ebenfalls NOT NULL und in Form einer Zahl. Wo zeigt er hin?
(anhand von Kommentaren oder sich die Tabellen angucken oder als Vermutung ergründen,
diese anhand
- übereinstimmender Datentypen nachweisen.
- Weiterhin: Select empno from emp; Select repid from customer; - stimmen sie überein.
- Select repid form customer where repid not in (select empno From emp); -> gibt es
Fremde IDs in emp, die es in customer nicht drinstehen.)
- (select job From emp, customer whrere empno=repid;) – durch wen werden die Kunden
betreut? Duch Salesperson.
- Guck in die Kommentare Select *from all_call_comments where table_name=‘customer‘;
und suche in all nach all dem, was dem owner gehört (where owner=‘ ...‘;)
Das data dictionary – ein Tool für Profis
•
•
•
Select *from all_constraints Where table_name=‘interestingTable’ and owner=‘interestingOwner‘ and
Constraint in ‚R,P‘;
Problem dabei sind Constraintnamen, die vom System vergeben wurden (z.B.: Customer_FK:sys_c001662)
Select *from all_cons_columns whrer constraint_name=‘sys_c001662‘; um wirklich nachzuweisen, wohin
dieser ForeignKey (FK) zeigt. (hier z.B. emp(empno)=repid)
Ergebnis:
Wir haben die repid – die Informationen über den Salesperson liefert und mir sagt, wer wen betreut. Außerdem
haben wir die CustomerID, die mit der RepID übereinstimmt. Was wir noch brauchen könnten die Bestellungen
sein. Es muß also noch eine Tabelle für die Bestellungen geben. (z.B. ord) Dort gucke ich mit Desc ord, wie die
Tabelle aussieht, dadrin habe ich auch eine custID (eine ID des Käufers) und einen Preis des Produktes.
Resultatselect:
select custid, sum(total) from ord goup by custid;
-> Verkäufe pro Kunde
select repid, sum(total) from ord o, customer c where o.custid=c.custid group by repid;
-> Verkäufe pro salesman
select empno, ename, sum(total) from emp, customer c, ord o where empno=repid and c.custid=custid group by
empno, ename order by 3 Desc
-> Verkäufe pro salesman, geordnet nach Verkäufen, Namen der Salespersons werden mit ausgegeben
Codds 12 Regeln
•
Ausgangspunkt ist die Forderung, dass jedes DBMS, das behauptet relational zu sein, die gesamte
Dabenbank wie im relationalen Modell spezifiziert, verwalten muß (z.B. mengenbasierter Zugriff)
1) Informationsregel:
Jede Infromation in einer relationalen DAtenbank wird ausschließlich auf einer logischen Ebene und in
genau einer Weise – durch Werte in Relationen – dargestellt.
Seite 10
Autor: Drost, Isabel (if99p1)
Einführung in Datenbanken
Semester: IV
2) Garantierter Zugriff
Jedes einzelne Datum (atomarer Wert) in einer relationalen DAtenbank ist immer durch eine logische
Kombination aus Relationsnamen, Primary Key und Spaltenname selektierbar.
3) Systematische Behandlung fehlender Informationen (Nullwerte)
In einem relationalen System werden unabhängig vom Datentyp Indikatoren untersttzt, die auf einer
logischen Ebene fehlende Inforamtionen repräsentieren. Diese Indikatoren sind verschieden von der leeren
ZK oder einer ZK aus Leerzeichen un verschieden von Null oder irgendeiner Zahl.
4) Ein Onlinekatalog/ Data Dictionary
Die Beschreibung der DB (Meta – Daten) erfolgt auf log. Ebene, genau wie die Darstellung gewöhnlicher
Daten, so dass autorisierte Benutzer genau dieselbe Abfragesprache zu rUntersuchung dieser Daben auch
bei regulären Daten anwenden können - > DB verwaltet sich selbst.
Bei Oracle stehen die Informationen in sog. SYS-tables, diese sehe ich nur, wenn ich als Sys eingeloggt bin.
Haben als Anhang ein $ hinter dem Vorsatz
5) Allumfassende Sprache: Ein rlat. DBMS muß zumindest eine Sprache unterstützen, wobei:
a) Statements über eine wohldef. Syntax in Form von Zeichenketten auszudrücken sind (keine graphische
Manipulation, dabei gibt es aber immer Befehle, die graph. nicht machbar sind (entweder äußerst
umständl. oder einige Befehle sind nicht ausführbar)
b) allumfassend, indem sie folgendes erfüllt:
- Daten Definition
- ViewDefinition
- DatenManipulation (interaktiv/ Programme)
- Integritätsregeln
- Autoriesierung
- Transaktionspakete (commit/ rollback)
6) Datenänderung durch Views:
Das DBMS enhält einen Algor., der mind. so leistungsfähig ist, wie VU-1alpha (das, was Codd selber konnte)
um zum Def. zeitpkt. einer einfachen View festzulegen, ab es in dieser View eerlaubt ist, Tupel einzufügen
oder zu löschen, und welche Spalten verändert werden dürfen. Das Resultat dieser Untersuchung wird im
SystemKatalog abgelegt.
In diesem Sinne sind alle heutigen DB nicht relational.
7) High Level insert, update und delete:
Die Fähikeit, eine BAsis-Op oder eine Erg.-Relation wie einen einfachen Operanden zu handhaben, trifft
nicht nur für das Selektieren von Daten, sonder nach für das Einfügen, Ändern und Löschen von Daten zu.
(create table auf Basis eines Selects aus der alten DB)
8) Physische Datenunabhängigkeit:
Anwendungsprogramme und anwenderoberfläche bleiben logisch unbeeinträchtige, wenn Veränderungen an
der Speicherstrucktur oder der Zugriffsmehode vorgenommen werden. (Oberfläche hat nix mit der
darunterliegenden HW zu tun)
9) Logische Datenunabhängigkeit:
Anwendungsprogramme
und
Anwenderoberflächen
bleiben
logisch
unbeeinträchtigt
von
intformationserhaltenden Veränderungen and en Basisrelationen, wenn es thoretisch mögich ist, diese
Unabhängikeit zu gewährleisten -> Views
10) Integritätsunabhängigkeit
Inte.bedingungen, die spezifisch für eine DB sind, müssen mit Hilfe der realtionalen
Datenbeschreibungssprache definierbar und im System-Katalog (nicht in den Anwendungsprog.) abgelegt
sind. (Grund für Verstöße: Geschwindigkeit, Nichtdefinierbarkeit der Integritäten in SQL)
Seite 11
Autor: Drost, Isabel (if99p1)
Einführung in Datenbanken
Semester: IV
11) Verteilungsunabhängigkeit
Ein relationales DBMS ist verteilungsunabhängig.
Schneide die DB in bestimmte Teile und lege diese auf verschiedenen Servern ab. Diese Verteilung geht
dabei soweit, dass ich Teile von Tabellen aufteile (z.B. emp nach departments aufteilen; oder bestimmte
Spalten von Tabellen kommen an verschiedene Server, dabei muß aber jeder Teil den PrimaryKey haben)
12) Unterwanderungsverbot:
Fall ein realtionales System über eine „low-level“-Sprache (ein Datensatz zu einem Zeitpunkt, z.B. C++), so
kann diese „low-Lvl“-Sprache nicht dazu benutzt werden, die in der „high-Lvl“-Sprache (mehrer Datensätze
zu einem Zeitpunkt, z.B. SQL) ausgedrückten Integritätsregeln und Constraints zu verletzen oder zu umgehen. (dBase wäre in diesem Sinne nicht mehr relational)
Normalisierungstheorie
[lat. Norma=Winkelmaß]
Zweck:
•
•
•
Vermeidung von Redundanz und Mutationsanomalien (=Redundanz) soweit wie möglich
Längere Lebenszeit des DB-Modells
Besseres Verständnis des log. Modells (für Außenstehende und Zugreifende)
Mutationsanomalien
•
•
Logische Redundanz Mutaions Anomalie: unnormale Behandlung von Daten bei deren Veränderung
oder Löschung
Beispiel:
- Insert-Anomlie
Bei einer Buchausleihe werde die Tel.nummer mit erfasst (zusätzlich zu UserID, Signatur). Folge
ist, ich gehe zu Ausleihe, lege das Buch vor und muß außer Signatur die Telefonnummer mit
angeben, Schwierigkeit ergibt sich, wenn ich meine Telefonnummer nicht kenne.
-
update-Anomalie
Ändert sich die Telefonnummer, müssen alle betroffenen Ausleihen geändert werden. Läßt sich
noch mit einem updateBefehl machen, ist aber nicht anhand der Zeilenanzahl prüfbar: diese hängt
davon ab, wieviele Bücher ich ausgeliehen habe.
-
delete-Anomlie
Bei der Rückgabe der letzten entliehenen Bücher geht die Information über die Telefonnummer
wieder verloren.
Ergibt zusätzliche Arbeit und Verwirrung und Fehlern, die ich nicht so schnell mitkriege und beseitigen kann.
Seite 12
Autor: Drost, Isabel (if99p1)
Einführung in Datenbanken
Semester: IV
FreitagsVO – Normalisierung
Seite 13
Autor: Drost, Isabel (if99p1)
Einführung in Datenbanken
Semester: IV
Probleme bei normalisierten DB
•
•
•
extreme Normlaisierung (BinärRelation) macht das Datenmodell unlesbar
Viel Join – wenig Performance (Randbemerkung: Joins via MergeSort implementiert)
Verlust semantischer Details (ich habe zwei Tabellen – gehören sie zusammen? Wenn ja, wie gehören sie
zusammen? Dieses Problem tritt vor allem bei Normalisierung, sprich Trennung der Tabellen auf.)
Extreme bei der Normlisierung
• Binärrelation
• Universalrelation
Beide Gegensätze sind nicht emphelenswert.
Empfohlene Vorgehensweise
•
•
Normalisierung soweit wie möglich, Ergebnis ist das logische Schema.
tritt ein merklicher Geschwindigkeitsverlust auf, nimm Normalisierungen zurück, bis die gewünschte
Rechenzeit erreicht ist. Prüfe mit jedem neuen System nach, ob Du nicht doch etwas mehr normalisieren
kannst, ohne Leistung einzubüßen. Dazu ist in Oracle eine Zeitmessung möglich und eine Beurteilung des
vorliegenden Systems nötig. (zum Beispiel für den wissenschaftlichen Aspekt einer Diplomarbeit hilfreich
;-) )
Zusammenfassung:
Relationales Modell
•
•
•
•
•
•
•
Deskriptive Queries: NonProzedurale Sprache SQL
Vollständigkeit und Abgeschlossenheit: Führe ich auf einer Relation eine Operation aus, erhalte ich wieder
eine Relation
Adäquat: alle Strukturen, die ich definiere, kann ich auch zugreifen; alles ist abfragbar
Optimierbarkeit: Nicht jede Query ist so schnell wie eine andere äquivalente, ein ordentliches System
optimiert meine Queries auf Geschwindigkeit und behält sich vor, Queries auch umzustellen (wobei sie
semantisch gleich bleiben). Ich kann diese Optimierung aber auch per Hand abschalten.
Effiziente Implementierung: O(n2) (Aufwand wird sich höchstens quadrieren)
Sicherheit: Jede Operation wird sicher terminieren (theoretisch) – keine Endlosschleife möglich. Praktisch
gehen dem zwei Dinge entgegen: System ist in C++/ Java oder was auch immer programmiert – ist da ein
Bug drin, schon habe ich eine Endlosschleife. Weitere Möglichkeit wären Deadlocks, aus Platzmangel z.B.
bei "order By" – Abfragen.
Preis für diese Sicherheit ist, dass die Konstrukte, die Endlosschleifen produzieren können, wurden aus SQL
herausgelassen.
Eingeschränkte Berechenbarkeit: weniger als das, was Turingberechenbar ist (keine Schleifen, Sprünge ...)
Dies läßt sich ausmerzen, indem ich die DB in eine "normale" Programmiersprache eingebettet wird und
somit SQL erweitert wird. Oracle nutzt z.B. PL/SQL, wobei das PL (Procedural Logic) Schleifen etc.
enthält.
Praktischer Aspekt
Vom Problem zur Query
1.
2.
3.
4.
5.
Interpretation: Präzisierung der umgangsprachlichen Formulierung des Problems aus der Diskurswelt.
Transformieren: logisch präzise Beschreibung im Kontext des konzeptionellen Schemas
Formalisieren: Ausdruck mit Mitteln des relationalen Modells im Kontext des logischen Schemas (Spalten –
Tabellennamen, Schlüssel ...)
Gernerieren: SQL-Text (Syntax)
Test: Plausibiletät (Semantik)
Seite 14
Autor: Drost, Isabel (if99p1)
Einführung in Datenbanken
Semester: IV
Interpretation
•
•
Vagheit der natürlichen Sprache (Abk., Beispiel: "Geben Sie die Gehaltsliste aus!" => select sal from emp;)
Fokusierender Sprachgebrauch, d.h. Betonung von Wichtigem, Weglassen von Unwichtigem
Transformation
•
•
Knappe und logisch präzise Darstellung unter Verwendung mit Bezug auf konzeptuelles Schema.
Beipiel: Durchschnittliches Einkommen der Beschäftigten in NY, die Verkäufer bzw. Analytiker sind:
Formalisierung
•
•
•
Was will ich sehen?
Woher kriege ich das?
Unter welcher Bedingung kriege ich das?
SQL - Text
3 Select Was
2 From Woher
1
Where/ Group/ Having ... Unter welchen Bedingungen
Am besten von vornherein ein paar Spalten mehr anzeigen lassen, um herauszufinden, ob meine Bedingung
richtig formuliert wurde.
Testphase
•
•
•
Löst diese (syntaktisch richtige) Query das Problem wirklich (vollständig)?
Ist die Lösung überhaupt plausibel (z.B. Stichproben).
Beachte: eine falsche Query kann ein richtiges Resultat erzeugen!
Seite 15
Autor: Drost, Isabel (if99p1)
Einführung in Datenbanken
Semester: IV
DatenbankAnwendung
Graphische Oberfläche
Datenbank
Werkzeuge: 4GL, 3GL, OOP
Datenbank kann verteilt sein
Zugriff auf die DB via Internet, Intranet, ohne Netz.
Tasks:
•
•
•
Anwendungsentwicklung
Installation, Administration (kreiren von Logins, Backups, ...)
Verwenden von der Applikation
Schwerpunkte können in allen drei Teilen liegen (Ausgefeilte graph. Oberfläche, Ausgewählter Zugriff übers
Internet; Ausgefeilte, verteilte Datenbank, Synchronisation; Vorstellung über BackupMöglichkeiten;
Ergononmie in einer Oberfläche – Wie soll die Oberfläche aussehen, wie sollen die Farben verteilt sind (z.B.
Oberfläche für Sehbehinderte etc.) )
Datenbankinterface
1.
2.
SQL+ Syntax (kann vom Durchnittsanwender nicht erwartet werden)
GUI
GUI Design
-
Look and Feel (ransetzen und losmachen können)
Context Sensitive Help (Fkt. Taste F1, Hints pro Feld)
Drag&Drop
Clipboard
Graphical Application User Interface
1)
2)
3)
4)
Cosmetic => Akzeptanz
60 – 85% des Gesamtprojektes/ -aufwandes
alle Constraints, die bis dahin nicht in der DB stehen, müssen da mit rein
Oberfläche wenig portabel => Argument für Java
Oberflächenprogrammierung <> oberflächlicher Programmierung
Was liegt zwischen Anwendung und Database
1) Oberflächenwerkzeuge vom Datenbankhersteller (z.B. Developer bei Oracle)
2) Third Party Werkzeuge (Delphi, PowerBuilder)
Delphi: unterstützen soviele Datenbanken wie möglich und stellen Oberflächen zu einer beliebigen
Datenbank untendrunter zur Verfügung
3) Verteilte Anwendungen (Java)
Seite 16
Autor: Drost, Isabel (if99p1)
Einführung in Datenbanken
Semester: IV
Objektorientierte Methode/ ~Methode
•
•
•
graphisches Nutzerinterface zur Applikationsentwicklung (Oberfläche zusammenklicken)
Eigenschaften der Objekte definierne (Oberfläche mit Fkt. versehen)
Methoden aufrufen (eventHandler)
Warum objektorientiert? Günstig für die Entwicklung von graph. Oberflächen.
Nutzung von Java/ JBuilder
•
•
•
•
•
Container kreiren
Komponenten in die Container
Eigenschaften der Komponenten setzen
EventHandler verbinden
layouts und constraints setzen (Motif, ...)
Events siehe Krüger – AWT
• Action-, Adjustment, Item, Text-, ComponentEvent als Kind vom AWT-Event
• Container, Focus- Input-, Paint-, Window-, Key-, Mouseevent vom Component Event
(wir brauchen mehr als das AWT anbietet, z.B. zur Tabellendarstellung)
Datenbankverbindung
1) embedded SQL (statisch, frühe Bindung, Precompiler)
Statement in die Oberfläche einbetten – für gewöhnlich nicht so einfach möglich
a) statisch – early binding ... Precompiler nimmt die SQLanweisungen und wandelt sie in C oder was
auch immer um
b) dynamic SQL – late binding ... Nachteil: Kaum Syntaxchecks. Erst, wenn ich bei der Ausführung
auf die Query treffe, wird sie übersetzt. Vorteil: Queries dynamisch zusammenbastelbar
c) Oracle Call Interface (OCI) – alle Zugänge zur DB auf unterstem Niveau – auf Systemebene (kaum
Portabilität für andere DB und nur für systemnahe Programmierer)
2) Javavariante
a) JDK von SUN (Gundausstattung)
b) Ergänzung
durch
JavaBeans
(vorgefertigte
Programmmodule,
z.B.
vorgefertigte
Tabellenbehandlung)
c) JBuilder (Inprise – Borland), JDeveloper von Oracle als Entwicklungstools
d) JDBC (Javasoft – Java DB Connectivity) realisiert den Zugang zur Datenbank (egal welcher),
Gewähr dafür, dass die Oberfläche unabhängig von der DB auf die Daten zugreifen kann.
Oracle: eigene virtuelle Maschine (Aurora) für die DB, geamte DB in Java programmiert; Agreement zwischen
Oracle und Sun: alles, was Oracle entwickelt, wird automatisch zum Javastandard;
3) Open DB Connectivity Protocols
a) ODBC (MS)
b) JDBC (Java)
c) IIOP (Corba
d) HTTP (Html, Java-Servlets, Java Server Pages)
Seite 17
Autor: Drost, Isabel (if99p1)
Herunterladen