Datenbanksysteme 2015
Kapitel 09:
Datenbankapplikationen Oliver Vornberger
Institut für Informatik
Universität Osnabrück
Datenbankapplikationen
DQ im Client
ODBC MS Visio MS Access
Embedded SQL JDBC Application SQLJ
SQLite / HSQLDB JDBC Applet
Java Servlet
Java Server Pages PHP
Ruby on Rails CouchDB
DB-Server-Protokoll
Client Client Client
ODBC
Informix Microsoft Oracle
ODBC-Datenquelle
Anwendungsprogramm
Open Data base connectivity
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
2.33 Salami
1.69 Brot
5.59 Birne
1.39 Apfel
produkte:
Edeka
laden:
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