Datenbanksysteme 2015 Kapitel 09: Datenbankapplikationen Oliver Vornberger Institut für Informatik Universität Osnabrück
Datenbankapplikationen ODBC MS Visio MS Access Embedded SQL JDBC Application SQLJ SQLite / HSQLDB JDBC Applet Java Servlet Java Server Pages PHP Ruby on Rails CouchDB DQ im Client DB-Server-Protokoll
ODBC Open Data base connectivity Anwendungsprogramm ODBC-Datenquelle Informix Microsoft Oracle Client Client Client
MySQL Connector http://www.mysql.com/products/connector/
Datenquelle hinzufügen Demo Systemsteuerung
MS Visio Studenten PK MatrNr Name Semester GebDatum Vorlesungen PK VorlNr Titel SWS FK1 gelesenvon hoeren PK,FK1 MatrNr PK,FK2 VorlNr Professoren PK PersNr Name Rang U1 Raum Gebdatum voraussetzen PK,FK2 Vorgaenger PK,FK1 Nachfolger Assistenten PK PersNr Name Fachgebiet FK1 Boss GebDatum pruefen PK,FK2 MatrNr PK,FK3 VorlNr FK1 PersNr Note Demo Visio
MS Access Stand-alone Datenbanksystem Frontend per ODBC für relationale Datenbank Schemadesign Beziehungen Queries Berichte Formulare VBA-Skript MS Access
MS Access Tabelle
MS Access Abfrage SELECT Professoren.Name AS Dozenten, Studenten.Name AS Hörer FROM ((Vorlesungen INNER JOIN hoeren ON Vorlesungen.VorlNr=hoeren.VorlNr) INNER JOIN Studenten ON hoeren.matrnr=studenten.matrnr) INNER JOIN Professoren ON Vorlesungen.gelesenVon=Professoren.PersNr;
MS Access Bericht
MS Access Formular
MS Access Visual Basic for Applications Private Sub berechne_click() Dim rang As String Select Case gehaltsgruppe.value Case 1 rang = "C2" Case 2 rang = "C3" Case 3 rang = "C4" Case Else rang = " " End Select If rang = " " Then MsgBox ("Rang fehlt!!!") Else Dim rs As Recordset Set rs = CurrentDb.OpenRecordset("Select name, gebdatum from professoren " & _ "where gebdatum = (select min(gebdatum) from professoren " & _ "where rang = '" & rang & "')") ausgabe.value = rs.fields("name").value &", geboren am " & rs.fields("gebdatum") End If End Sub
Datenbankapplikationen MS Visio MS Access Embedded SQL im C-Programm JDBC / SQLJ Application SQLite / HSQLDB JDBC Applet Java Servlet Java Server Pages PHP Ruby on Rails CouchDB
CouchDB Information gespeichert in Dokumenten kodiert im JSON-Format Dokumente ggf. verteilt Dokumente ggf. repliziert Dokumente haben ID und Versionsnummer Multiversion concurrency control statt locks Abfrage durch Javascript-Funktionen map und reduce Abfrageergebnisse sind persistent Änderungen der Dokumente führen zum Update der Ergebnisse
Map/Reduce http://de.wikipedia.org/wiki/mapreduce
Aufgabe: Zählen von Worten Es war einmal mitten im Winter. Da saß eine Königin an ihrem Fenster und nähte. Dabei stach sie sich in den Finger. Dabei fielen drei Tropfen Blut in den Schnee. Da dachte sie bei sich: ach, hätte ich doch ein Kind, so rot wie Blut, so weiß wie Schnee und so schwarz wie Ebenholz.
viele Dokumente mit Sätzen { } "_id": "65e0cf6bca4cdaafbc033ddc2a00a3af", "_rev": "5-85b34938e244ecf09800a14fe9eb5168", "text": "Es war einmal mitten im Winter"
Map/Reduce zum Zählen der Worte function(doc) { if (doc.text) { var words = doc.text.replace (/[!.,;:]+/g,"").tolowercase().split(" "); for (var word in words) { emit(words[word], 1); } } } function(keys,values) { return (keys,sum(values)); }
Ausgabe von Map/Reduce http://eos.informatik.uni-osnabrueck.de:5984/_utils/database.html?uni/_all_docs
Aufgabe: Durchschnittspreis laden: produkte: Edeka Apfel Birne Brot Salami 1.39 5.59 1.69 2.33
viele Dokumente mit Produkten { "_id": "65e0cf6bca4cdaafbc033ddc2a00ecf5", "_rev": "2-8b1d63e16b5cbe18f211523d34fb5ecd", "laden": "edeka", "produkte": { "apfel": 1.55, "birne": 2.19, "salami": 1.39, "ananas": 1.19 } }
Map/Reduce zum Berechnen des Durchschnittspreis function(doc) { var preis, produkt; if (doc.laden && doc.produkte) { for (produkt in doc.produkte) { preis = doc.produkte[produkt]; emit(produkt, preis); } } } function(keys, values) { return keys, sum(values)/values.length; }
Ausgabe von Map/Reduce http://eos.informatik.uni-osnabrueck.de:5984/_utils/database.html?uni/_all_docs
Datenbankapplikationen MS Visio MS Access Embedded SQL im C-Programm JDBC / SQLJ Application SQLite / HSQLDB JDBC Applet Java Servlet Java Server Pages PHP Ruby on Rails CouchDB