1 Kapitel 16: Objektorientierte Datenbanken Oliver Vornberger Fachbereich Mathematik/Informatik Universität Osnabrück 49069 Osnabrück

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Datenbankentwurf Abstraktionsebenen des Datenbankentwurfs
Datenbankentwurf Abstraktionsebenen des Datenbankentwurfs
Kapitel 3: Logische Datenmodelle
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Objektorientierte Datenbanken
Objektorientierte Programmierung Definition von Klassen
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Datenbanksysteme Schwerpunkte: Datenbanksystem (DBS): Datenbank (DB):
Objekt-relationale und erweiterbare Datenbanksysteme
Java: Objektorientierte Programmierung
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
SQL 2 Order by null Aggregatfunktionen group by Join subselect.
Information Systems & Semantic Web University of Koblenz Landau, Germany Vorlesung Multimedia-Datenbanken Objekt-relationale Datenbanksysteme (Folien nach.
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Kapitel 2: Konzeptuelle Modellierung
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
RelationentheorieObjektorientierte Datenbanken AIFB SS Die Objekt-Definitionssprache ODL (1/24) Alle Elemente des Objektmodells können beschrieben.
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
Polymorphe Konsistenzbedingungen (1)
objekt-relationale Datenbanken
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
20:00.
Datenbankentwurf Abstraktionsebenen des Datenbankentwurfs
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Objektorientierte Konzepte/UML Geoinformation I Vorlesung 2 WS 2000/2001.
Datenbankentwurf Abstraktionsebenen des Datenbankentwurfs
Generalisierung/Spezialisierung Subtypisierung/Vererbung
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #3 Das relationale Modell (Teil 2)
SS 2010 – IBB4C Datenmanagement Fr 15:15 – 16:45 R Vorlesung #2 Datenbankentwurf.
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
Vorlesung #4 Überführung des ER-Modells in das relationale Modell
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #3 ER Modellierung.
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
Vorlesung #4 Überführung des ER-Modells in das relationale Modell
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Relationales Datenmodell und DDL
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Vorlesung #5 SQL (Teil 2).
Objekte und Literale ODMG-Objektmodell kennt zwei Arten von Datenelementen: Literale: Identität ist ausschließlich durch Wert gegeben. Nur maximal eine.
RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen(1/29) OQL besteht aus einer Menge von Anfrageausdrücken, die.
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Motivation Motivation für objektorientierte DBMS (ODBMS): –„Impedance Mismatch“ zwischen relationalem Datenmodell und Programmiersprachen-Datenmodell erfordert.
RelationentheorieObjektorientierte Datenbanken  AIFB SS C++-ODL (1/6) Erweiterung des deklarativen Teils einer C++-Klasse Datentypen d_String,
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
SS 2014 – IBB4C Datenmanagement Do 17:00 – 18:30 R Vorlesung #3 ER Modellierung.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Vorlesung #5 SQL (Teil 2).
 Präsentation transkript:

1 Kapitel 16: Objektorientierte Datenbanken Oliver Vornberger Fachbereich Mathematik/Informatik Universität Osnabrück Osnabrück

2 Weiterentwicklung relationaler Systeme der evolutionäre Ansatz: komplexe Typen geschachteltes relationales Modell der revolutionäre Ansatz: strukturelle Information verhaltensmäßige Information

3 Schwächen relationaler Systeme Buch: {[ISBN, Verlag, Titel, Autor, Version, Stichwort]} 2 Autoren, 5 Versionen, 6 Stichworte = 60 Einträge Buch : {[ ISBN, Titel, Verlag ]} Autor : {[ ISBN, Name, Vorname]} Version : {[ ISBN, Auflage, Jahr ]} Stichwort : {[ ISBN, Stichwort ]} Problem: Liste Bücher mit den Autoren Meier & Schmidt

4 Modellierung von Polyedern Polyeder Flächen Begrzg Hülle StartEnde Kanten Punkte XYZ (3, *) (2, 2) (3, *) (1, 1) (4, *) Polyeder PolyIDGewichtMaterial... cubo# Eisen... tetra# Glas Flächen FlächenIDPolyIDOberflächen f1cubo#5... f2cubo# f6cubo#5... f7tetra#7... Kanten KantenIDF1F2P1P2 k1f1f4p1p4 k2f1f2p2p Punkte PunktIDXYZ p p p

5 Schwachpunkte Segmentierung Künstliche Schlüsselattribute Fehlendes Verhalten Externe Programmierschnittstelle

6 Vorteile der objektorientierten Datenmodellierung Struktur + Verhalten in einem Objekt-Typ integriert objektorientierte Datenbasis volume rotate scale weight translate specWeight Anwendung A someCuboid->rotate('x', 10); Anwendung B w := someCuboid->weight( );

7 ODMG Object Database Management Group entwickelt Standards für objektorientiertes Datenmodell objektorientierte Abfragesprache OQL Schnittstellen zu C++, Smalltalk, Java

8 Eigenschaften von Objekten Ein Objekt gehört zu einer Klasse entsteht durch Instanziierung ist Teil der Extension = alle Objekte hat Identität systemweit eindeutig, unveränderbar Wert = Zustand = Ausprägung

9 Identität relational: Schlüssel vom Anwender erdacht objektorientiert: Objektidentifikator OID vom System generiert unabhängig vom Zustand unabhängig vom Speicherort transient + persistent momentaner Speicherort = Tabelle[OID]

10 Objekte aus der Universitätswelt PersNr: 2137 Name: "Kant" Rang: "C4" residiertIn: id 9 hatGeprueft: {... } liest: {id 2, id 3 } id 1 Professoren VorlNr: 5001 Titel: "Grundzüge" SWS: 4 gelesenVon: id 1 Hoerer: {...} Nachfolger: {...} Vorgaenger: {...} Vorlesungen id 2 VorlNr: 4630 Titel: "Die 3 Kritiken" SWS: 4 gelesenVon: id 1 Hoerer: {...} Nachfolger: {...} Vorgaenger: {...} id 3 Vorlesungen

11 Objekttypen-Definition die Typeigenschaften mit Generalisierungs- und Spezialisierungangaben die Strukturbeschreibung mit Attributen und Beziehungen die Verhaltensbeschreibung mit Operationen

12 Attribute class Professoren { attribute long PersNr; attribute string Name; attribute string Rang; };

13 strukturierte Attribute class Person { attribute string Name; attribute struct Datum { short Tag; short Monat; short Jahr; } GebDatum; };

14 1:1-Beziehung PersNr: 2137 Name: "Kant" Rang: "C4" residiertIn: id 9 hatGeprueft: {... } liest: {...} id 1 Professoren RaumNr: 007 Groesse: beherbergt: id 1 id 9 Raeume

15 1:1-Beziehung class Professoren { attribute long PersNr;... relationship Raeume residiertIn; }; class Raeume { attribute long RaumNr; attribute short Groesse;... relationship Professoren beherbergt; };

16 Inkonsistenter Zustand einer Beziehung PersNr: 2137 Name: "Kant" Rang: "C4" residiertIn: id 8 hatGeprueft: {... } liest: {...} id 1 Professoren RaumNr: 007 Groesse: beherbergt: id 1 id 9 Raeumeid 8 Raeume RaumNr: 4711 Groesse: beherbergt: id 1

17 Referentielle Integrität class Professoren { attribute long PersNr;... relationship Raeume residiertIn inverse Raeume::beherbergt; }; class Raeume { attribute long RaumNr; attribute short Groesse;... relationship Professoren beherbergt inverse Professoren::residiertIn; };

18 1:N-Beziehung class Professoren {... relationship set (Vorlesungen) liest inverse Vorlesungen::gelesenVon; }; class Vorlesungen {... relationship Professoren gelesenVon inverse Professoren::liest; };

19 Binäre N:M-Beziehung class Studenten {... relationship set (Vorlesungen) hoert inverse Vorlesungen::Hoerer; }; class Vorlesungen {... relationship set (Studenten) Hoerer inverse Studenten::hoert; };

20 Rekursive N:M-Beziehung class Vorlesungen {... relationship set (Vorlesungen) Vorgaenger inverse Vorlesungen::Nachfolger; relationship set (Vorlesungn) Nachfolger inverse Vorlesungen::Vorgaenger; };

21 ternäre Beziehungen Ternäre (oder n > 3 stellige) Beziehungen benötigen einen eigenständigen Objekttyp pruefen : {[ MatrNr, VorlNr, PersNr, Note ]} class Prüfungen { attribute float Note; relationship Professoren Prüfer inverse Professoren::hatgeprueft; relationship Studenten Pruefling inverse Studenten::wurdegeprueft; relationship Vorlesungen Inhalt inverse Vorlesungen::wurdeAbgeprueft; };

22 Universität RaeumeProfessorenStudenten Pruefungen Vorlesungen Inhalt wurdeAbgeprueft wurdeGeprueft hatGeprueft beherbergt residiertIn hoertliest gelesenVon Hoerer Vorgaenger Nachfolger PrueferPruefling

23 Universität class Pruefungen { attribute float Note; relationship Professoren Pruefer inverse Professoren::hatgeprueft; relationship Studenten Pruefling inverse Studenten::wurdegeprueft; relationship Vorlesungen Inhalt inverse Vorlesungen::wurdeAbgeprueft; }; class Professoren { attribute long PersNr; attribute string Name; attribute string Rang; relationship Raeume residiertIn inverse Raeume::beherbergt; relationship set(Vorlesungen) liest inverse Vorlesungen::gelesenVon; relationship set(Pruefungen) hatgeprueft inverse Pruefungen::Pruefer; }; class Vorlesungen { attribute long VorlNr; attribute string Titel; attribute short SWS; relationship Professoren gelesenVon inverse Professoren::liest; relationship set(Studenten) Hoerer inverse Studenten::hoert; relationship set(Vorlesungen) Nachfolger inverse Vorlesungen::Vorgaenger; relationship set(Vorlesungen) Vorgaenger inverse Vorlesungen::Nachfolger; relationship set(Pruefungen) wurdeAbgeprueft inverse Pruefungen::Inhalt; }; class Studenten { attribute long MatrNr; attribute string Name; attribute short Semester; relationship set(Pruefungen) wurdeGeprueft inverse Pruefungen::Pruefling; relationship set(Vorlesungen) hoert inverse Vorlesungen::Hoerer; };

24 Extensionen und Schlüssel class Studenten (extent AlleStudenten key MatrNr) { attribute long MatrNr; attribute string Name; attribute short Semester; relationship set(Vorlesungen) hoert inverse Vorlesungen::Hoerer; relationship set(Pruefungen) wurdeGeprueft inverse Pruefungen::Pruefling; };

25 Schnittstellenoperationen Objekt erzeugen mit Konstruktor Zustand erfragen mit Observer Zustand verändern mit Mutator Objekt zerstören mit Destruktor

26 Modellierung des Verhaltens class Professoren { exception hatNochNichtGeprueft { }; exception schonHoechsteStufe { };... float wieHartAlsPruefer() raises (hatNochNichtgeprueft); void befoerdert() raises (schonHoechsteStufe); }; in C++: meinLieblingsProf->befoerdert(); in OQL: select p.wieHartAlsPruefer() from p in AlleProfessoren where p.name = "Kant";

27 Vererbung Typ1 Objekttypen Typ2 Typ3 A B C is-a A:... Instanzen Typ1 id 1 A:... B:... id 2 Typ2 A:... B:... C:... id 3 Typ3

28 Subtypisierung ExtTyp3 ExtTyp2 ExtTyp1

29 Typhierarchie bei einfacher Vererbung ANY is-a OT 1 is-a OT 2 is-a OT n-1 is-a OT n

30 Vererbung 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 Raeume residiertIn inverse Raeume::beherbergt; relationship set(Vorlesungen) liest inverse Vorlesungen::gelesenVon; relationship set(Pruefungen) hatgeprueft inverse Pruefungen::Pruefer; };

31 Vererbung von Eigenschaften GebDatum Gehalt () Fachgebiet Angestellte is-a Assistenten Professoren PersNr Name GebDatum Alter() Gehalt () Rang residiertIn hatGeprüft liest

32 Visualisierung der Extension AlleAssistenten AlleAngestellten AlleProfessoren

33 Verfeinerung bzw. Spezialisierung Operationen können bei Vererbung spezialisiert werden: z.B. Gehalt(): Angestellte erhalten (Alter() - 21) * 100 DM, Assistentenerhalten (Alter() - 21) * 125 DM, Professoren erhalten (Alter() - 21) * 150 DM.

34 Extension AlleAngestellten select sum(a.Gehalt()) from a in AlleAngestellten PersNr: 2137 Name: "Kant" GebDatum:... id 1 Professoren PersNr: 3002 Name: "Platon" GebDatum:... id 11 Assistenten PersNr: 6001 Name: "Maier" GebDatum:... id 7 Angestellte AlleAngestellten: { id 1, id 11, id 7 }

35 Mehrfachvererbung class HiWis extends Studenten, Angestellte (extent AlleHiwis) { attribute short Arbeitsstunden;... } Problem: Attribut Name wird von Studenten und Angestellte geerbt !

36 Interface interface AngestellteIF { short Alter(); long Gehalt(); }; class Angestellte : AngestellteIF (extent AlleAngestellte) { attribute long PersNr; attribute string Name; attribute date GebDatum; }; class Hiwis extends Studenten : AngestellteIF (extent AlleHiwis) { attribute long PersNr; attribute date GebDatum; attribute short Arbeitsstunden; };

37 OQL Liste alle C4-Professoren (als Objekte): select p from p in AlleProfessoren where p.Rang = 'C4'; Liste Name und Rang aller C4-Professoren (als Werte): select p.Name, p.Rang from p in AlleProfessoren where p.Rang = 'C4'; Liste Name und Rang aller C4-Professoren (als Tupel): select struct (n: p.Name, r: p.Rang) from p in AlleProfessoren where p.Rang = 'C4';

38 OQL: struct Liste alle Angestellte mit einem Gehalt über DM: select struct ( n: a.Name, g: a.Gehalt() ) from a in AlleAngestellte where a.Gehalt() > ; Liste Name und Lehrbelastung aller Professoren: select struct ( n: p.Name, a: sum(select v.SWS from v in p.liest) ) from p in AlleProfessoren;

39 OQL: Gruppierung Gruppiere alle Vorlesungen nach der Semesterstundenzahl: select * from v in AlleVorlesungen group by kurz: v.SWS = 4; Das Ergebnis sind drei Tupel vom Typ struct ( kurz: boolean, mittel: boolean, lang: boolean, partition : bag(struct(v: Vorlesungen)) )

40 OQL: Pfadausdrücke select s.Name from s in AlleStudenten, v in s.hoert where v.gelesenVon.Name = 'Sokrates'

41 Erzeugung von Objekten Vorlesungen ( vorlNr: 4711, Titel: "Selber Atmen", SWS: 4, gelesenVon : ( select p from p in AlleProfessoren where p.Name = "Sokrates" ) );

42 C++ Einbettung

43 C++ Quelltext const char _liest[] = "liest"; const char _gelesenVon[] = "gelesenVon"; class Vorlesungen : public d_Object { d_String Titel; d_Short SWS;... d_Rel_ref gelesenVon; } class Professoren : public Angestellte { d_Long PersNr;... d_Rel_Set liest; }

44 C++ Instantiierung d_Ref Russel; Russel = new(UniDB,"Professoren") Professoren (2126,"Russel","C4",...);

45 C++ Abfrage d_Bag Schueler; char * profname = "Sokrates"; d_OQL_Query anfrage ("select s from s in v.Hoerer, v in p.liest, p in AlleProfessoren where p.Name = $1"); anfrage << profname; d_oql_execute(anfrage, Schueler);