Title: Vorlesung Datenbank-programmierung
1Vorlesung Datenbank-programmierung
- Wintersemester 06/07
- Dipl.-Ing.(FH) David Schiffer
Nicht verwandt!
2Organisation
- Erst 3 x Vorlesung, dann Übungen
- Übungen am Rechner
- 2 Gruppen, abwechselnd 2 wöchentlich
- Übungsteams von 2 bis 3 Studenten
- Schein für Lösungen der Übungsaufgaben
- ca. 3 Übungsaufgaben im Semester
- Kontrolle durch Vorführen
- Wer will, kann alle Übungen in der 1.
Übungsstunde vorführen
3Regeln
- Wer Fragen hat fragt
- Wer quatschen will quatscht
Aber draußen
- Um den Schein zu bestehen müssen
- ALLE Übungen vorgeführt werden!
- ALLE Übungen verstanden sein!
4Inhaltsübersicht Datenbankprogrammierung
- Einleitung
- Beziehung zu anderen Fächern
- Client-Server Prinzip
- Anwendungsentwicklung Zugriff auf DBn, APIs
- JDBC
- ADO.NET
- embedded SQL
- ODBC
- Proprietäre Datenbankschnittstellen
- Zusatzprogramme in DB
- Stored Procedures
- Functions
- Trigger
- Objekt-relationale DBn
- Methoden
- Oracle 9i
- Evtl. Caché
- verwendete Datenbanken
- Oracle
- MySQL ?
- DB2 ?
- Access ???
- Caché ???
5Themen der Vorlesung (1)
Zugriff auf Datenbanken Über sog. APIs
6Themen der Vorlesung (2)
Zusatzprogramme innerhalb von Datenbanken
- Stored Procedures
- Stored Functions
- Trigger
7Motivation für Datenbankprogrammierung
8Beziehungen zu anderen Fächern
Programmieren
Objektorientierte Programmierung
Datenbanksysteme
eBusiness
Client-Server
Datenbankprogrammierung
Objektorientierte Datenbanken
Middleware
Internet 2
9Bestandteile einer DB-Anwendung
- Schichten-Modell
- Die Benutzerschnittstelle.
- Die Anwendungs- / Geschäftslogik.
- Die Datenbank-Schnittstelle.
- Die Vermittlungssoftware.
- Das Datenbank-Management-System.
- Der Datenspeicher
10Datenbank Architekturen
- Zentralisierte Datenbank-Systeme
- Client-Server-Datenbanken
- Desktop-Datenbanken
- 3-Tier (Multitier) -Architektur
11Zentralisierte DB Client-Server
12Beispiel einer Terminal-Applikation(zentralisiert
e DB)
- Warenwirtschaftssystem auf AS400
133-Tier Architektur
14Multitier gt SOA
15Fragestellung zu DB APIs
- Wie verwendet das Anwendungsprogramm die
Funktionalität der Datenbank? - Wie findet der Datenaustausch zwischen Anwendung
und Datenbank statt? - Wie wird eine Ergebnismenge der Datenbank an die
Anwendung übergeben? - Zu welchem Zeitpunkt findet welche Aktion der
Datenbank statt? - Wie kann man voll dynamische Abfragen an die
Datenbank richten? - Welche Art von Kopplung entsteht zwischen
Anwendungsprogramm und Datenbank?
16Coddschen Regeln (1)
- Regel 1 The Information Rule (Darstellung von
Informationen) - Regel 2 Guaranteed Access Rule (Zugriff auf
Daten) - Regel 3 Systematic Treatment of Null Values
(Systematische Behandlung von Nullwerten) - Regel 4 Dynamic On-line Catalog Based on the
Relational Model (Forderung nach einem
Online-Datenkatalog (data dictionary) in Form von
Tabellen) - Regel 5 Comprehensive Data Sublanguage Rule
(Abfragesprache) - Regel 6 View Updating Rule (Aktualisierung von
Sichten)
17Coddschen Regeln (2)
- Regel 7 High-level Insert, Update, and Delete
(Abfragen und Bearbeiten ganzer Tabellen) - Regel 8 Physical Data Independence
(Physikalische Datenunabhängigkeit) - Regel 9 Logical Data Independence (Logische
Datenunabhängigkeit) - Regel 10 Integrity Independence (Unabhängigkeit
der Integrität) - Regel 11 Distribution Independence
(Verteilungsunabhängigkeit) - Regel 12 Nonsubversion Rule (Kein Unterlaufen
der Abfragesprache)
18Impedance Missmatch
vs.
Relationen
Objekte
19Cursor Konzept
- Zur Umgehung des Impedance Missmatch
20Verarbeitung einer SQL-Abfrage
21Stored Procedures (1)Was sind SPs?
- Gespeicherte Programmteile
- Datenbankobjekte
- Vom DB-Benutzer definiert
- Werden im DB-Server-Prozess ausgeführt
- Erweitern die Funktionalität des DBMS
22Stored Procedures (2)Wozu dienen SPs?
- Erweiterung der Funktionalität von DBMSn
- wenn die Möglichkeiten von SQL nicht genügen u.
- wenn eine Verarbeitung am Server sinnvoller ist
- Trigger
- um die DB konsistent zu halten
- um mehr semantische Information zu definieren
- Methoden von Objekten
- bei objekt-relationalen DBn
23Stored Procedures (3)Wer bietet SPs?
- Große DBMS bieten Stored Procedures, z. B.
- IBM DB2
- Microsoft SQL-Server, Sybase
- Oracle
- Caché
- PostgreSQL, MySQL (eingeschränkt seit Version 5)
- ...
- Stored Procedures werden nicht unterstützt von
- File-Server Datenbanken (z. B. Access)
24Stored Procedures (4)Wann SPs (nicht) verwenden?
- Nur dann, wenn nur 1 DBMS-Typ unterstützt werden
muss - SPs können Performance bringen
- SPs können zur Entkopplung der Anwendung von der
DB-Struktur genutzt werden - Besser DAO-Schicht einführen
- Die Verwendung von SPs ist eine grundsätzliche
Designentscheidung - und eine Glaubensfrage
25Stored Procedures (5)Bei Oracle
- Programmiersprache PL/SQL
- C, C und JAVA sind auch möglich
- PL/SQL ist typenstrenge Programmiersprache
- Cursor verbinden SQL mit prozeduraler
Verarbeitung - Besondere Konstrukte für Datenzugriff
- for cursor loop
- Datensatztyp-Deklaration
- Collection-Typen
26Stored Procedures (6)Bei Oracle - Aufbau
- Deklarationsteil
- Deklaration von Variablen, Cursor, Collections,
... - Ausführungsteil
- Programmierung des Algorithmus
- Transaktionssteuerung
- Ausnahmebehandlung
- Reaktionen auf Fehler werden hier zusammengefasst
- Damit wird GOTO vermieden
27Stored Procedures (7)Beispiel Deklarationsteil
create or replace function Leihe (resID in
number) return varchar2 as varKundeID
NUMBER varModellID NUMBER varBeginn
DATE varEnde DATE varStartKm
NUMBER varKennzeichen CHAR(10)
CURSOR curReservierung IS SELECT
KundeID, ModellID, Beginn, Ende FROM
Reservierung WHERE ID resID
28Stored Procedures (8)Beispiel Ausführungsteil
BEGIN / Reservierung mit der ReservierungsID
holen / OPEN curReservierung FETCH
curReservierung INTO varKundeID, varModellID,
varBeginn, varEnde / Prüfen ob die
abgerufene Reservierung mit dem heutigen Datum
übereinstimmt / if to_char(varBeginn,'dd.mm.yyy
y')to_char(sysdate,'dd.mm.yyyy') then
if curCarrowcount lt 0 then return ('Kein
freies Auto !!!') end if / Auto
ist verfügbar reserv. in leihe umwandeln,
Eintrag in Leihvertrag einfügen /
Insert Into leihvertrag (id, kundeid, autoid,
beginn, ende, startkm) values(leihseq.nextval,
varKundeID, varKennzeichen, varBeginn, varEnde,
varStartKm) return varKennzeichen
else return ('Reservierung ist nicht von
Heute !!!!') end if END
29Stored Procedures (9)Beispiel Ausnahmebehandlung
- Benutzerdefinierte Ausnahmendeclare ausnahme1
exception ... begin ... raise ausnahme1
...exception when ausnahme1 then ltaktiongtend - Daten-Ausnahmen (vordefiniert), z. B. when
data_not_foundwhen max_open_cursors
30Trigger (1)Aufbau
Vergleichbar mit Stored Procedure
CREATE OR REPLACE TRIGGER lttrigger_namegt
BEFOREAFTER INSERTDELETEUPDATE ON
lttable_namegt REFERENCING NEW AS
ltnew_row_namegt OLD AS ltold_row_namegt
FOR EACH ROW WHEN (lttrigger_conditiongt)
lttrigger_bodygt
31Trigger (2)Beispiel Deklarationsteil
CREATE TRIGGER mitarbeiter_trig_gehalt_biu BEFORE
INSERT OR UPDATE OF gehalt ON mitarbeiter FOR
EACH ROW -- Triggername mitarbeiter_trig_gehalt_b
iu (_biu steht für B-efore I-nsert U-pdate ) --
Tabelle MITARBEITER -- Trigger soll nur ziehen,
wenn Gehalt kleiner 5000 ist oder Neues Gehalt
kleiner altem Gehalt -- in der folgenden WHEN
erfolgt der Zugriff auf old und new OHNE
vorangestellte WHEN (new.gehalt lt 5000 or
new.gehalt lt old.gehalt) DECLARE
v_mitarbeiter_name VARCHAR2(255)null --
Cursor holt "Name, Vorname" von
Mitarbeitertabelle -- Explizite Definition des
Cursors hat -- Performance-Vorteile gegen
"select into ltvariablegt" im Trigger-Body
cursor c_name is select name', 'vorname
from mitarbeiter
where mitarbeiternummer NEW.MITARBEITERNR
32Trigger (3)Beispiel Ausführungsteil
BEGIN -- Mitarbeiter-Name ermitteln und in
Variable v_mitarbeiter_name speichern open
c_name fetch c_name into v_mitarbeiter_name
close c_name -- Bei Gehalt kleiner 5000
Exception auslösen --gt Fehler wird in der Regel
bis zur Anwendung hochgereicht -- Exception-Nr
-20000 - -29999 können selbst definiert werden
IF NEW.GEHALT lt 5000 THEN
RAISE_APPLICATION_ERROR(-20901,'Manager Gehalt
für Mitarbeiter v_mitarbeiter_name ' zu
klein!') END IF IF NEW.GEHALT lt
OLD_GEHALT THEN RAISE_APPLICATION_ERROR(-2090
2,'Gehaltskürzung für Mitarbeiter
v_mitarbeiter_name ' nicht erlaubt!') END
IF END
33Embedded-SQL Beispiel
include ltstdio.hgt EXEC SQL INCLUDE SQLCA void
main( void ) EXEC SQL BEGIN DECLARE
SECTION char Author81 char Title81 char
ISBN14 EXEC SQL END DECLARE SECTION EXEC
SQL CONNECT TO "azamon" USER "dba" IDENTIFIED BY
"sql" strcpy( ISBN, "0-87930-480-4" ) EXEC
SQL SELECT Author, Title, ISBN INTO Author,
Title, ISBN FROM Books WHERE ISBN
ISBN printf( "s s ISBN s\n", Author,
Title, ISBN ) EXEC SQL DISCONNECT ALL
34ODBC abstrahiert proprietäre APIs
35ODBC abstrahiert proprietäre APIs
36ODBC ein Bridge Pattern
- Vgl. Software-Engineering (Design-Pattern /
Entwurfsmuster)