Kapitel 13: Objektorientierte Datenbanken Flashcards
(26 cards)
Was sind Nachteile relationaler Modelierung?
- Segmentierung: z.b. Kann ein Buch mehrere Verlage haben, welche mehrere Niederlassungen haben (niedrige Performance bei komplexen Suchanfragen)
- Künstliche Schlüsselattribute: z.b. haben Kante und Fläche keine sinnvollen Schlüssel bei Polyeder
- Fehlendes Verhalten: z.b. gegenstand um x% rotiert ausgeben lassen nicht möglich
- Externe Programmierschnittstelle:
Was ist der Impendance Match?
Problem ist, dass Programm und DB zwei unterschiedliche Vorstellungen haben wie die Wirklichkeit aussieht. Alles ist Tabelle vs Objekte.
Programmiersprache passt nicht zur Datenbank
Vorteile objektorientierter Datenmodellierung?
- Objektkapselung: Information hiding
- Wiederverwendbarkeit
- Operationen sind direkt in der Sprache des Objektmodells realisiert (kein Impedance Mismatch)
Wie sieht der Standard der objektorientierten DB Haltung aus - was sind die Motivationen?
- Objektmodell: Wie tickt die DB
- Object Definition Language (ODL): Schema
- Object Query Language (OQL): Wie SQL nur schöner
- C++ Anbindung
- Smalltalk Anbindung
- Java Anbindung
Motivation:
- Portabilitäts-Standards
- Kein interoperabilität-standard
Wie kann ODMG implementiert werden (Skizze)?

Wie könnte eine 1:1 Beziehung in ODMG aussehen?
class Professor {
attribute long PersNr;
relationship Raeume residiertIn; //Wie foreign Key. Stellt integrität sicher. So ist kein Zeiger ins nirgendwo möglich wie bei attribute
};
class Raeume {
attribute long RaumNr;
attribute short Groesse;
relationship Professor beherbergt;
}

Welche Ergänzung ist bei einer 1:n Beziehung notwendig?
//Inverse: System stellt sicher, dass DB konsistent ist und zeiger paarweise aufeinander zeigen
class Professoren {
attribute long PersNr;
…
relationship Räume residiertIn inverse Räume::beherbergt;
}; class Räume {
attribute long RaumNr; attribute short Größe;
…
relationship Professoren beherbergt inverse Professoren::residiertIn };
Beispiel einer n:m Beziehung?
//hört und hörer = sets prüft auch automatisch konsistenz
class Professoren {
attribute long PersNr;
…
relationship Räume residiertIn inverse Räume::beherbergt;
}; class Räume {
attribute long RaumNr; attribute short Größe;
…
relationship Professoren beherbergt inverse Professoren::residiertIn };
Wie könnte eine Ternäre Beziehung aussehen?
//Für ternäre Beziehunen muss ein objekt angelegt werden. Z.b. Prüfung. dies hält dann eine Menge von binären Beziehungen
class Prüfungen { attribute struct Datum
{ short Tag; short Monat; short Jahr} Prüfdatum; attribute float Note;
relationship Professoren Prüfer inverse
Professoren::hatGeprüft; relationship Studenten Prüfling inverse
Studenten::wurdeGeprüft; relationship Vorlesungen Inhalt inverse
Vorlesungen::wurdeAbgeprüft; };
Beispiel aus dem Universitäts-Schema: Beziehungen erklären
class Professoren {
attribute long PersNr;
attribute string Name;
attribute string Rang; //Attribute
relationship Räume residiertIn inverse Räume::beherbergt; relationship set(Vorlesungen) liest inverse Vorlesungen::gelesenVon relationship set(Prüfungen) hatGeprüft inverse Prüfungen::Prüfer; //Beziehungen
}; class Vorlesungen {
attribute long VorlNr;
attribute string Titel;
attribute short SWS;
relationship Professoren gelesenVon
inverse Professoren::liest;
relationship set(Studenten) Hörer inverse Studenten::hört;
relationship set(Vorlesungen) Nachfolger inverse Vorlesungen::Vorgänger; relationship set(Vorlesungen) Vorgänger inverse Vorlesungen::Nachfolger; relationship set(Prüfungen) wurdeAbgeprüft inverse Prüfungen::Inhalt;
}; class Studenten {
…
relationship set(Prüfungen) wurdeGeprüft inverse Prüfungen::Prüfling; };
Welche Eigenschaften hat ein Objekt im objektbasierten Modell?
-
Identität: Relational: Tupel kann ausschießlich über Werte identifiziert werden (z.B. Tupel löschen und wieder einfügen. Man kann dann nicht herausfinden, dass es mal gelöscht wrude)
Objektorientiert:
Haben zusätzlich zu jeder Spalte noch eine ObjektID - diese wird nach dem löschen neu (Jedes Tupel hat eigene ID). - Typ: Objekte haben eine Intentität + Typ + Attributwerte
- Wert / Zustand
Genaurer Beschreibung der Objekt-Identität:
- Gilt als wesentliches Charakteristikum objektorientierter Datenmodellierung
- Verweise werden über OIDs realisiert (OID ist pointer auf Objekt)
- Physische OID:
- Enthalten Speicherort des Objekts
- Entsprechen den Tupel IDs relationaler DBs
- Vorteil: Billiger Objektzugriff, da ich direkt von Objekt zu Objekt springen kann
- Nachteil: Wird Objekt verschoben, muss ich alle Zeiger anpassen.
- Logische OID:
- Unabhängig vom Speicherort des Objekts
- Objekte können verschoben werden
- Indirektion über “Mapping” Struktur
- Vorteil: Verschieben möglich
- Nachteil: Indirektion teuer, da ich schreiben muss
- Physische OID:
Was bedeuten die Typeigenschaften Extension und Schlüssel
class Studenten (extent AlleStudenten key MatrNr) { attribute long MatrNr;
//extent: Sicht die alle Objekte eines Datentyps liefert
//**key:** Schlüssel können eindeutig über OID identifiziert werden attribute string Name; attribute short Semester;
relationship set(Vorlesungen) hört inverse Vorlesungen::Hörer;
relationship set(Prüfungen) wurdeGeprüft inverse Prüfungen::Prüfling;
};
Erkläre die drei Klassen zur Modellierung des Verhaltens:
- Beobachter: (z.b. Volumenberechnung)
- oft auch Funktionen genannt
- Erfragen “Objektzustand”
- Keine Objektändernden Effekte
- Mutatoren (Verändert das Objekt - z.b. Rotate / permantent)
- Änderung des Zustands
- Objekttyp mit mindestens einem Mutator = mutierbar
- Objekttyp ohne Mutator = immutable
- Konstruktoren / Destruktoren
- Verwendet um neue Objekte zu erzeugen oder zu zerstören
- Destruktor eine Art von Mutator
Wie sieht die Klassendefinition in ODL aus?
- den Namen der Operation;
- die Anzahl und die Typen der Parameter; ! den Typ des Rückgabewerts der Operation;
- eine eventuell durch die Operationsausführung ausgelöste Ausnahmebehandlung (engl. exception handling).
class Professoren {
//exception handling
exception hatNochNichtGeprüft {};
exception schonHöchsteStufe {};
…
//observer float wieHartAlsPrüfer() raises (hatNochNichtGeprüft);
//mutator
void befördert() raises (schonHöchsteStufe);
};
Aufruf der Operation: meinLieblingsProf→befördert()
Erkläre das Vererbungsprinzip in ODL
- Man unterscheidet zwischen Ober/ und Untertypen
- Instanz eines Untertyps gehört auch zur extension des Obertyps
- Vererbung der Eigenschaften eines Obertyps an den Untertyp
- Nur einfach Vererbung möglich
Codebeispiel:
class Angestellte (extent AlleAngestellte) { attribute long PersNr;
attribute string Name;
attribute date GebDatum;
short Alter();
long Gehalt(); };
class Assistenten extends Angestellte (extent AlleAssistenten) { attribute string Fachgebiet;
};
class Professoren extends Angestellte (extent AlleProfessoren) { attribute string Rang; relationship Räume residiertIn inverse Räume::beherbergt; relationship set(Vorlesungen) liest inverse Vorlesungen::gelesenVon; relationship set(Prüfungen) hatGeprüft inverse Prüfungen::Prüfer;
}

Erkläre das Prinzip der späten Bindung
- Angestellte erhalten: 2000 + (Alter() – 21) * 100
- Assistenten bekommen: 2500 + (Alter() – 21) * 125
- Professoren erhalten: 3000 + (Alter() – 21) * 150
-
//Durch späte Bindung ruft er die jeweils richtige Funktion auf (Prüft Datentyp und Funktion
- select sum(a.Gehalt())
- from a in AlleAngestellten
- ! für das Objekt id1 wird die Professoren-spezifische Gehalts- Berechnung durchgeführt,
- ! für das Objekt id11 die Assistenten-spezifische und
- ! für das Objekt id7 die allgemeinste, also Angestellten- spezifische Realisierung der Operation Gehalt gebu
Wie kann die Programmiersprachen-Anbindung realisiert werden?
- Entwurf einer neuen Sprache
- hoher Realisierungsaufwand
- eleganteste Methode
- Erweiterung einer bestehenden Sprache
- manchmal unnatürlich wirkende Erweiterung der Basissprache
- muss keine neue Sprache lernen
- Datenbankfähigkeit durch Typbibliothek
- Einfachste Möglichkeit zur Erreichung von Persistenz
- höchster Reibungsverlust
- ODMG Ansatz
Wie sehen Transaktionen in ODMG aus?
- Schachtelung von Transaktionen
- notwendig um Operationen, die TAs repräsentieren, geschachtelt aufrufen zu können.
void Professoren::Umziehen(Ref 〈Räume〉 neuerRaum) { Transaction TAumziehen;
TAumziehen.start();
…
if ( /*Fehler? */ ) TAumziehen.abort();
…
TAumziehen.commit(); };
Wie kann man ODMG modellieren? TEchnik
UML: Kombination von Booch Notation und Raumbaugh Notation
Zusammenfassung Objektrelationale Datenbanken
- Mengenwertige Attribute
- Typdeklarationen
- Referenzen
- Objektidentität
- Pfadausdrücke
- Vererbung
- Operationen
Wie unterscheidet sich das Konzept eines Objekt im Objekt-Orientierten Modell von dem einer Entität im Entity-Relationship Modell?
Eine Entität ist ein einfacher Datenwert oder auch eine Sammlung von Datenwer-
ten. Ein Objekt hat auch zugeordnete Datenwerte (Zustand) aber zusätzlich noch Methoden (Verhalten) und eine fest Identität. Je nach Implementierung kann der Daten-zugriff und insbesondere auch -Veränderung nur über eine vordefinierte Menge
von Methoden erfolgen.
Sie müssen als Berater ein Datenbanksystem für einen Kunden auswählen. Ent- scheiden sie für jeden der folgenden Anwendungsbereiche welche Art von Datenbanksystem am Besten passen würde (Relational, Objekt-Orientierte Datenbank, Objekt-Relationale Datenbanken). Begründen Sie ihre Entscheidung.
- Eine CAD Anwendung für einen Flugzeugbauer
- Eine Spendendatenbank um die Spenden an Bundestagsmitglieder zu verfolgen
- Ein Anwendung zur Unterstützung des Filmmarketings
- CAD Anwendung: Ein OODB System scheint hier am geeignetsten. Ein CAD System arbeitet oft mit komplexen Datentypen und ist auch inhärent Objekt- Orientiert. Die hierarchischen Strukturen in Modellen lässt sich besonders gut durch Objekte abbilden.
- Spendendatenbank: Ein relationales Datenbanksystem müsste für diesen Fall ausreichend sein. Die erwarteten Datentypen sind einfach strukturiert. Der wich- tigste Aspekt wird eine mächtige Anfragesprache sein.
- Filmmarketing: In diesem Szenario werden wahrscheinlich oft auch Multimedia oder ähnlich komplexe Datentypen verwendet werden. Der Aufbau der Daten- bank wird aber relativ einfach sein und sollte gut in einer Objekt-Relationalen Datenbank umsetzbar sein.
Was ist der Unterschied zwischen extent und extends in ODL?
- Mit extends wird Vererbung realisiert. Mit diesem Keyword wird angegeben dass die aktuelle Klasse eine Spezialisierung einer anderen Klasse ist. Als Unterklasse hat Sie auch Zugriff auf die Schnittstellen der Oberklasse.
Syntax: class Assistent extends Angestellter … - Mit extent wird der Menge aller Objekte die zu dieser Klasse gehören ein Name gege- ben. Der extent einer Klasse entspricht ungefähr einer Relation in einer Relationalen Datenbank. Diesem Vergleich folgenden, wäre dann ein Objekt ein Tupel.
Syntax: class Assistent (extent Assistenten) ..
