36
Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Embed Size (px)

Citation preview

Page 1: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Vorlesung Datenbank-programmierung

Wintersemester 06/07

Dipl.-Ing.(FH) David Schiffer

Nicht verwandt!

Page 2: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Organisation 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

Page 3: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Regeln

Wer Fragen hat fragt Wer quatschen will quatscht

Um den Schein zu bestehen müssen:ALLE Übungen vorgeführt werden!ALLE Übungen verstanden sein!

Aber draußen

Page 4: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Inhaltsü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é ???

Page 5: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Themen der Vorlesung (1)Zugriff auf DatenbankenÜber sog. API‘s

Page 6: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Themen der Vorlesung (2)Zusatzprogramme innerhalb von Datenbanken

•Stored Procedures

•Stored Functions

•Trigger

Page 7: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Motivation für Datenbankprogrammierung

Page 8: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Beziehungen zu anderen FächernProgrammieren Objektorientierte

ProgrammierungDatenbanksysteme

Datenbankprogrammierung

Internet 2 MiddlewareObjektorientierteDatenbanken

Client-ServereBusiness

Page 9: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Bestandteile einer DB-Anwendung

Schichten-ModellDie Benutzerschnittstelle.  Die Anwendungs- / Geschäftslogik.  Die Datenbank-Schnittstelle.  Die Vermittlungssoftware.  Das Datenbank-Management-System. Der Datenspeicher

Page 10: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Datenbank Architekturen

Zentralisierte Datenbank-Systeme Client-Server-Datenbanken Desktop-Datenbanken 3-Tier (Multitier) -Architektur

Page 11: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Zentralisierte DB & Client-Server

Page 12: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Beispiel einer Terminal-Applikation(zentralisierte DB)

Warenwirtschaftssystem auf AS400

Page 13: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

3-Tier Architektur

Page 14: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Multitier => SOA

Page 15: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Fragestellung zu DB API‘s1) Wie verwendet das Anwendungsprogramm die

Funktionalität der Datenbank?2) Wie findet der Datenaustausch zwischen Anwendung

und Datenbank statt? 3) Wie wird eine Ergebnismenge der Datenbank an die

Anwendung übergeben?4) Zu welchem Zeitpunkt findet welche Aktion der

Datenbank statt? 5) Wie kann man voll dynamische Abfragen an die

Datenbank richten? 6) Welche Art von Kopplung entsteht zwischen

Anwendungsprogramm und Datenbank?

Page 16: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Coddschen 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):

Page 17: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Coddschen 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):

Page 18: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Impedance Missmatch

Objekte

vs.

Relationen

Page 19: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Cursor Konzept

Zur Umgehung des Impedance Missmatch

Page 20: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Verarbeitung einer SQL-Abfrage

Page 21: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored Procedures (1)Was sind SP‘s?

Gespeicherte Programmteile

Datenbankobjekte

Vom DB-Benutzer definiert

Werden im DB-Server-Prozess ausgeführt

Erweitern die Funktionalität des DBMS

Page 22: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored Procedures (2)Wozu dienen SP‘s? 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

Page 23: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored Procedures (3)Wer bietet SP‘s?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)

Page 24: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored Procedures (4)Wann SP‘s (nicht) verwenden?Nur dann, wenn nur 1 DBMS-Typ unterstützt werden muss

SP‘s können Performance bringen

SP‘s können zur Entkopplung der Anwendung von der DB-Struktur genutzt werden

Besser: DAO-Schicht einführen

Die Verwendung von SP‘s ist eine grundsätzliche Designentscheidung - und eine Glaubensfrage

Page 25: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored Procedures (5)Bei OracleProgrammiersprache PL/SQLC, C++ und JAVA sind auch möglichPL/SQL ist typenstrenge ProgrammierspracheCursor verbinden SQL mit prozeduraler VerarbeitungBesondere Konstrukte für Datenzugriff

for cursor loopDatensatztyp-DeklarationCollection-Typen

Page 26: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored Procedures (6)Bei Oracle - AufbauDeklarationsteil

Deklaration von Variablen, Cursor, Collections, ...Ausführungsteil

Programmierung des AlgorithmusTransaktionssteuerung

AusnahmebehandlungReaktionen auf Fehler werden hier zusammengefasstDamit wird GOTO vermieden

Page 27: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored 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;

Page 28: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored 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.yyyy')=to_char(sysdate,'dd.mm.yyyy') then if curCar%rowcount <= 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;

Page 29: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Stored Procedures (9)Beispiel: AusnahmebehandlungBenutzerdefinierte Ausnahmendeclare ausnahme1 exception; ... begin ... raise ausnahme1 ...exception

when ausnahme1 then <aktion>end;

Daten-Ausnahmen (vordefiniert), z. B. when data_not_foundwhen max_open_cursors

Page 30: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Trigger (1)Aufbau

CREATE [OR REPLACE] TRIGGER <trigger_name> {BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <table_name> [REFERENCING [NEW AS <new_row_name>] [OLD AS <old_row_name>]] [FOR EACH ROW [WHEN (<trigger_condition>)]] <trigger_body>

Vergleichbar mit Stored Procedure

Page 31: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Trigger (2)Beispiel: Deklarationsteil

CREATE TRIGGER mitarbeiter_trig_gehalt_biuBEFORE INSERT OR UPDATE OF gehalt ON mitarbeiterFOR EACH ROW -- Triggername mitarbeiter_trig_gehalt_biu (_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 <= 5000 or new.gehalt < 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 <variable>" im Trigger-Body cursor c_name is :select name||', '||vorname from mitarbeiter where mitarbeiternummer = :NEW.MITARBEITERNR;

Page 32: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Trigger (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 --> Fehler wird in der Regel bis zur Anwendung hochgereicht -- Exception-Nr -20000 - -29999 können selbst definiert werden IF :NEW.GEHALT <= 5000 THEN RAISE_APPLICATION_ERROR(-20901,'Manager Gehalt für Mitarbeiter‚ || v_mitarbeiter_name || ' zu klein!'); END IF; IF :NEW.GEHALT < :OLD_GEHALT THEN RAISE_APPLICATION_ERROR(-20902,'Gehaltskürzung für Mitarbeiter‚ || v_mitarbeiter_name || ' nicht erlaubt!'); END IF;END;

Page 33: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

Embedded-SQL Beispiel#include <stdio.h>EXEC SQL INCLUDE SQLCA;void main( void ) {

EXEC SQL BEGIN DECLARE SECTION;char Author[81];char Title[81];char ISBN[14];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, :ISBNFROM BooksWHERE ISBN = :ISBN;

printf( "%s: %s ISBN %s\n", Author, Title, ISBN );EXEC SQL DISCONNECT ALL;

}

Page 34: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

ODBC abstrahiert proprietäre API‘s

proprietär

Page 35: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

ODBC abstrahiert proprietäre API‘s

ODBC

Page 36: Vorlesung Datenbank- programmierung Wintersemester 06/07 Dipl.-Ing.(FH) David Schiffer Nicht verwandt!

ODBC ein Bridge Pattern

Vgl. Software-Engineering (Design-Pattern / Entwurfsmuster)