====== Prüfung OODB/MMDB April 2016 ====== * Prüfer: Prof. Dr-Ing. Klaus Mayer-Wegener * Atmosphäre: relativ entspannt * Vorbereitung: Skript stichpunktartig verfassen und lernen, Prüfungsprotokolle anschauen 8-) * Vorbereitungszeit: 1,5 bis 2 Wochen ===== OODB ===== 1. Was ist ODMG? ODMG ist : * Object Database Management Group. Zusammenschluss mehrerer Firmen, die ihre objektorientierten Datenbanksysteme normieren wollten. * Norm (Portabilität) Bestandteile: * Objektmodell * Datenanfragesprache: OQL * Datendefinitionssprache: ODL * Anbindung an OO-Sprache * kein OML (wird per OO-Sprache gemacht) 2. Was wurde denn normalisiert? Hier wollte er vor allem Persistenz hören. Möglichkeiten bei der Normalisierung: Persistenzdefinition: * typabhängig (bspw. durch Erben von d_Object) * typunabhängig (=objektabhängig) Persistierung: * statisch * dynamisch Persistenzpropagierung: * automatisch (Viel Müll wird persistent gespeichert!) * explizit * (Zwischenfrage: Wie hat es ODMG gemacht? -> explizite Propagierung) Persistente Klassenextention: * implizit (für jede persistente Klasse) * explizit (z.B. durch Schlüsselwort "extent") 3. Definieren Sie einen Datentyp ihrer Wahl in ODL interface Person (extent Personen key PIN) { //Zwischenfrage: Hier musste man das Konzept der Extention erklären. attribute int PIN; attribute string Name; attribute date Geburtsdatum; relationship Set _Eltern inverse Person::_Kinder; relationship Set _Kinder inverse Person::_Eltern; //Erwähnt habe ich noch die Bidirektionalität der Relationships. } 4. Was gehört noch dazu? Verhalten: Funktionen 5. Wieso hat man sich für bidirektrionale Beziehungen entschieden: referenzielle Integrität, Anwendungsneutralität ===== MMDB ===== 1. Modellieren Sie einen Datentyp ihrer Wahl: Via Java: Image interface Image { //Aufbau nur mündlich erwähnt. } public class ImageClass implements Image { //Aufbau nicht weiter erwähnt, nur dass hier die Attribute gespeichert werden. } Aufbau des Mediums: * Rohdaten * Registrierungsdaten * Beschreibugsdaten Methoden zum Interface (mündlich): * height, width, window (zur Änderung), replaceColorMap, replacePixrect, compareHistogram 2. Wie komme ich denn an den Inhalt heran? * getPixrect() * asJPG() * asGIF() 3. Motivation von asJPG = Erläuterung von Datenunabhängigkeit 4. Geben Sie ein RDB-Schema an um den Typ zu speichern. Fotos( FID integer PRIMARY KEY AUTOINCREMENT, Foto Image ) 5. Speichern Sie ein Bild: INSERT INTO Fotos (Foto) VALUES (ImageClass(:pr, :cm)); pr steht für eine Variable, in der ein Pixrect abgelegt ist.
cm = ColorMap 6. Was macht die compareHistogram Methode? * Vergleicht das Aktuelle Histogramm mit dem eines anderen Bildes. * Auf X-Achse: Pixelwert, auf Y-Achse: Häufigkeit. * Differenz Histogramm: Werte einzeln voneinander abziehen und Betrag bilden. * Danach Beträge der Differenzen zu einem Wert aufaddieren. * Auf Basis dessen ein Ähnlichkeitsmaß errechnen. 7. Formulieren Sie eine lesende Anfrage. Benutzen Sie dabei compareHistogram(). SELECT FID, Foto.asJPG() FROM Fotos WHERE Foto.compareHistogram(ImageClass('a.JPG')) >= 0.7