1 / 36

Vorlesung Datenbank-programmierung

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

olwen
Download Presentation

Vorlesung Datenbank-programmierung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Regeln • 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!

  4. 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é ??? Inhaltsübersicht Datenbankprogrammierung

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

  6. Themen der Vorlesung (2) Zusatzprogramme innerhalb von Datenbanken • Stored Procedures • Stored Functions • Trigger

  7. Motivation für Datenbankprogrammierung

  8. Beziehungen zu anderen Fächern Programmieren Objektorientierte Programmierung Datenbanksysteme eBusiness Client-Server Datenbankprogrammierung Objektorientierte Datenbanken Middleware Internet 2

  9. Bestandteile einer DB-Anwendung • Schichten-Modell • Die Benutzerschnittstelle.   • Die Anwendungs- / Geschäftslogik.   • Die Datenbank-Schnittstelle.   • Die Vermittlungssoftware.   • Das Datenbank-Management-System.  • Der Datenspeicher

  10. Datenbank Architekturen • Zentralisierte Datenbank-Systeme • Client-Server-Datenbanken • Desktop-Datenbanken • 3-Tier (Multitier) -Architektur

  11. Zentralisierte DB & Client-Server

  12. Beispiel einer Terminal-Applikation(zentralisierte DB) • Warenwirtschaftssystem auf AS400

  13. 3-Tier Architektur

  14. Multitier => SOA

  15. Fragestellung zu DB API‘s • 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?

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

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

  18. Impedance Missmatch vs. Relationen Objekte

  19. Cursor Konzept • Zur Umgehung des Impedance Missmatch

  20. Verarbeitung einer SQL-Abfrage

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

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

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

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

  25. Stored 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

  26. Stored 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

  27. Stored Procedures (7)Beispiel: Deklarationsteil createorreplacefunctionLeihe(resIDinnumber)returnvarchar2as varKundeIDNUMBER; varModellIDNUMBER; varBeginnDATE; varEndeDATE; varStartKmNUMBER; varKennzeichenCHAR(10); CURSORcurReservierungIS SELECTKundeID,ModellID,Beginn,Ende FROMReservierung WHEREID=resID;

  28. Stored Procedures (8)Beispiel: Ausführungsteil BEGIN /* Reservierung mit der ReservierungsID holen */ OPENcurReservierung; FETCHcurReservierungINTOvarKundeID,varModellID,varBeginn,varEnde; /* Prüfen ob die abgerufene Reservierung mit dem heutigen Datum übereinstimmt */ ifto_char(varBeginn,'dd.mm.yyyy')=to_char(sysdate,'dd.mm.yyyy')then ifcurCar%rowcount<=0then return('Kein freies Auto !!!'); endif; /* Auto ist verfügbar – reserv. in leihe umwandeln, Eintrag in Leihvertrag einfügen */ InsertIntoleihvertrag(id,kundeid,autoid,beginn,ende,startkm) values(leihseq.nextval,varKundeID,varKennzeichen,varBeginn,varEnde,varStartKm); returnvarKennzeichen; else return('Reservierung ist nicht von Heute !!!!'); endif; END;

  29. Stored Procedures (9)Beispiel: Ausnahmebehandlung • Benutzerdefinierte Ausnahmendeclare ausnahme1 exception; ... begin ... raise ausnahme1 ...exception when ausnahme1 then <aktion>end; • Daten-Ausnahmen (vordefiniert), z. B. when data_not_foundwhen max_open_cursors

  30. Trigger (1)Aufbau Vergleichbar mit Stored Procedure CREATE[ORREPLACE]TRIGGER<trigger_name> {BEFORE|AFTER}{INSERT|DELETE|UPDATE} ON<table_name> [REFERENCING[NEWAS<new_row_name>][OLDAS <old_row_name>]] [FOREACHROW[WHEN(<trigger_condition>)]] <trigger_body>

  31. Trigger (2)Beispiel: Deklarationsteil CREATETRIGGERmitarbeiter_trig_gehalt_biu BEFOREINSERTORUPDATEOFgehaltONmitarbeiter FOREACHROW -- 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<=5000ornew.gehalt<old.gehalt) DECLARE v_mitarbeiter_nameVARCHAR2(255):=null; -- Cursor holt "Name, Vorname" von Mitarbeitertabelle -- Explizite Definition des Cursors hat -- Performance-Vorteile gegen "select into <variable>" im Trigger-Body cursorc_nameis:selectname||', '||vorname frommitarbeiter wheremitarbeiternummer=:NEW.MITARBEITERNR;

  32. Trigger (3)Beispiel: Ausführungsteil BEGIN -- Mitarbeiter-Name ermitteln und in Variable v_mitarbeiter_name speichern openc_name; fetchc_nameintov_mitarbeiter_name; closec_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<=5000THEN RAISE_APPLICATION_ERROR(-20901,'Manager Gehalt für Mitarbeiter‚ || v_mitarbeiter_name || ' zu klein!'); ENDIF; IF:NEW.GEHALT<:OLD_GEHALTTHEN RAISE_APPLICATION_ERROR(-20902,'Gehaltskürzung für Mitarbeiter‚ || v_mitarbeiter_name || ' nicht erlaubt!'); ENDIF; END;

  33. 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, :ISBN FROM Books WHERE ISBN = :ISBN; printf( "%s: %s ISBN %s\n", Author, Title, ISBN ); EXEC SQL DISCONNECT ALL; }

  34. ODBC abstrahiert proprietäre API‘s • proprietär

  35. ODBC abstrahiert proprietäre API‘s • ODBC

  36. ODBC ein Bridge Pattern • Vgl. Software-Engineering (Design-Pattern / Entwurfsmuster)

More Related