2-Datenmodelle (handouts) - Universität Basel | Informatik

Werbung
Frühjahrsemester 2013
CS243 Datenbanken
Kapitel 2: Objektorientierte und
Objekt-relationale Datenbanken
H. Schuldt
Grenzen des relationalen Datenmodells …
•
Relationale Datenbanksysteme sind sehr gut geeignet für die Verwaltung von
klar strukturierten Daten, die sich einfach auf Relationen abbilden lassen
•
Allerdings gibt es komplexere Anwendungen, bei denen sich das relationale
Datenmodell nicht unbedingt gut eignet.
– Ingenieurwissenschaftliche Anwendungen (z.B. Verwaltung von
Volumendaten, CAD-Daten, …)
– Multimedia-Anwendungen (z.B. Audio-Daten, Video-Daten, etc.)
– ...
Als Reaktion hierauf haben sich weitere Datenmodelle herausgebildet
•
Objektorientierte Datenmodellierung: Kombination der strukturellen
Repräsentation zusammen mit der operationalen Repräsentation (Verhalten)
in einem Objekttyp T OODBMS, Kapitel 2.1
•
Objektrelationale Datenmodellierung: Erweiterung des relationalen Datenmodells
um komplexe, benutzerdefinierte Objekte und benutzerdefinierte Funktionen
T ORDBMS, Kapitel 2.2
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-2
1
… Grenzen des relationalen Datenmodells …
Beispiel: Modellierung von geometrischen Körpern in boundary representation (BREP)
„Objekte werden durch eine Menge von Polyedern beschrieben, jeder Polyeder
besitzt 4 Flächen, jede Fläche drei Kanten, jede Kante ist durch zwei Endpunkte
beschrieben.“
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-3
… Grenzen des relationalen Datenmodells
Nachteile des relationalen Entwurfs in Anwendungen wie der vorigen:
•
Segmentierung: Ein Anwendungsobjekt wird in der relationalen Repräsentation
auf eine Vielzahl von Relationen verteilt (segmentiert). Bei einem Zugriff auf
das Anwendungsobjekt müssen die einzelnen Teile über (teure) Joins
zusammengeführt werden.
•
Künstliche Schlüsselattribute: Um die Eindeutigkeit von Tupeln zu erzwingen
müssen oftmals künstliche Schlüssel vergeben werden. Diese Schlüssel sind
relevant um zusammengehörige Teile über einen Join wieder zusammenführen
zu können.
•
Fehlendes Verhalten: Objekte besitzen in der Regel ein anwendungsspezifisches
Verhalten. Dies wird in der relationalen Repräsentation nicht berücksichtigt
sondern muss ausserhalb des DBMS realisiert werden (Ausnahme: Stored
Procedures).
•
Einbettung in Programmiersprachen (Mengenorientierung vs. Satzorientierung):
relationale Anfragesprachen sind mengenorientiert. Programmiersprachen
verarbeiten jedoch zu jedem Zeitpunkt nur einen Datensatz. Dies wird auch
als Impedance Mismatch bezeichnet.
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-4
2
2.1 Objektorientierte Datenbanken …
•
Grundidee objektorientierter Datenbanken (OODBMS) ist es, die Beschreibung
des Verhaltens von Anwendungsobjekten mit ihrer Strukturbeschreibung in einer
Objekttyp-Definition zu verbinden (und damit die vier zuvor identifizierten
Nachteile des Relationenmodells zu überwinden). Operationen werden damit zu
einem wesentlichen Bestandteil der Datenbank.
Datenstrukturen
in der Anwendung
Kopie und
Umwandlung
Transparenter
Zugriff auf OODBMS
Relationale
Repräsentation
RDBMS
FS 2013
OODBMS
Datenbanken (CS243) – OODBMS – ORDBMS
2-5
… Objektorientierte Datenbanken
•
Daher findet auch die aus der objektorientierten Programmierung bekannte
Objektkapselung in objektorientierten Datenbanken Anwendung
– Die Operationen, die einem Objekt zugeordnet sind können direkt ausgeführt
werden, ohne die strukturelle Repräsentation eines Objekts zu kennen
(information hiding).
– Es muss lediglich die
Signatur der Operationen
an der Schnittstelle des
Objekts bekannt sein.
– Jedes Objekt ist eindeutig
über eine automatisch
vom System generierte
Objekt-ID repräsentiert
(und nicht über ein
[künstliches] Schlüsselattribut)
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
Operation 1
Struktur
Operation 2
OODBMS
2-6
3
ODMG: Standard für Objektorientierte DBMS
•
•
•
Im Gegensatz zum SQL-Standard für relationale Datenbanksysteme gibt es
keinen allgemeingültigen Standard für OO-DBMS
Ziel der Object Database Management Group (ODMG), ein Zusammenschluss von
Herstellern objektorientierter DB-Produkte, war es, ein einheitliches Objektmodell
festzulegen (und damit eine de facto-Standard zu definieren)
Terminologie:
– Objekttyp: Beschreibung von Struktur und Verhalten (properties & operations)
– Objekt: Instanz eines Objekttyp
– Extension (engl. extent): Menge aller Instanzen eines Objekttyps
– OID: Objektidentifikator (systemweit eindeutig; bei der Instanziierung vom
System vergeben, unveränderlich)
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-7
ODMG-Modell
•
Ursprüngliche Zielsetzung von OODBMS:
Kein “Impedance Mismatch” sondern: Programmiersprache = Datenbanksprache
•
Daher zunächst keine Wirtsprachen-unabhängige Datendefinition, Datenabfrage
und Datenmanipulation wie es in SQL ist.
•
Vorteil: homogene Umgebung für Entwurf und Entwicklung von IS
•
Nachteile:
– eine Datenbank kann nicht von mehreren Anwendungsprogrammiersprachen
angesprochen werden
– ein OODBMS eines Herstellers kann nicht durch ein OODBMS eines anderen
Herstellers ersetzt werden, es sei denn, die gleiche Programmiersprache wird
verwendet (Widerspruch zur Realität: Smalltalk, C, C++, Java, ...)
•
Das ODMG-Modell enthält daher einen Vorschlag für
– ODL = sprachunabhängige (stand-alone) Objektdefinition
– OQL = sprachunabhängige (stand-alone) Objekt-Abfragesprache
– keine OML, stattdessen Standard für C++OML, SmalltalkOML, JavaOML,
sowie die Einbettung der ODL und OQL in diese Sprachen
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-8
4
Objekt-Definition (ODL): ODMG-Typen …
•
•
Im ODMG-Modell sind einige wichtige Objekttypen vorgefertigt
(z.B. Datum, Zeit, Zeitintervall). Ausserdem gibt es einen Set-Konstruktor
sowie Bag (Menge mit Duplikaten), List, Array und Dictionary (Liste von
Attribut-Wertpaaren) zur Mengendefinition.
Alle diese Typen treten zweifach auf:
– in Kopiersemantik (“Literal_type”)
– in Referenzsemantik (“Object_type”)
Types
Literal_type
FS 2013
Object_type
Atomic_literal
Atomic_object
Collection _literal
Collection_object
Structured_literal
Structured_object
Datenbanken (CS243) – OODBMS – ORDBMS
2-9
… Objekt-Definition (ODL): ODMG-Typen
::= long, short, unsigned long, unsigned short,
float, double, boolean, octet, char, string,
enum<>
• Collection_literal ::= set<>, bag<>, list<>, array<>,
dictionary<>
• Structured_literal ::= structure<>, date, time, ...
• Atomic_literal
::= benutzerdefiniert durch interface{} und
class {}
• Collection_object ::= Set<>, Bag<>, List<>, Array<>,
Dictionary<>
• Structured_object ::= Structure<>, ...
• Atomic_object
Collection_object unterscheidet sich vom Collection_literal
durch Referenzsemantik bei Zuweisungen. Analog ist der Zusammenhang
zwischen Structured_literal und Structured_object.
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-10
5
Definition von Atomic_object-Typen
• interface{} ist die Beschreibung eines Atomic_object-Typs unter
Verwendung seiner Struktur („Properties“) und seines Verhaltens („Operations“).
Zu einem Interface gibt es keine Instanzen. Ein Interface dient der Beschreibung
der Schnittstelle mehrerer Typen.
• class{} ist die Beschreibung eines Atomic_object-Typs unter Verwendung von
– höchstens einer (Super-)Class-Beschreibung (IS-A),
– keiner, einer oder mehrerer Interface-Beschreibungen,
– einer EXTENT und KEY- Festlegung.
– Deklaration von properties und operations
•
•
Klassen werden also instanziiert, die Instanzen finden sich dann im Extent
(Ausprägung) der Klasse.
Durch die Key-Festlegung können Duplikate im Extent verhindert werden.
Keys werden nur im Sinne einer Integritätsbedingung verwendet, nicht aber
um Objekte zu referenzieren (dies geschieht über deren OID).
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-11
Attribute, Beziehungen und Methoden
Ein Atomic_object Typ wird beschrieben durch
• Properties: dies sind Attribute und Beziehungen.
– Ein Attribut (attribute) besitzt einen Wertebereich (häufig mit Literal-Typ).
Objektwertige Attribute sind auch zugelassen, es ist jedoch empfehlenswert,
diese Attribute als Beziehung zu modellieren.
– Eine Beziehung (relationship) verweist auf ein Objekt (bzw. auf eine
Menge von Objekten).
Für die Garantie, dass eine Beziehung auch in umgekehrter Richtung
eingehalten wird gibt es die Möglichkeit, gleichzeitig auch die Inverse
(inverse) einer Beziehung zu spezifizieren (unabhängig von den jeweiligen
Kardinalitäten).
•
Operations:
– Methoden, die durch ihre Signatur beschrieben werden, insbesondere durch
zusätzliche Input (“in”) und Output (“out”, “inout”) -Parameter.
Standard-Inputparameter ist die Objekt-Instanz, auf der die Methode
aufgerufen wird.
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-12
6
ODL-Beispiel
Studierende
{interface}
name : string
MatNr : string
Angestellter
Adresse
adr
1 strasse : string 1
ort : string
plz : short
Student
Gehalt
name : string
AHVNr : string
adr
gehalt 1
brutto : float
währung
erhöhen()
Professor
Doktorand
doktorvater 1
rang: Professur
setzt_voraus
0 .. *
{ordered}
betreut
hört
1 .. *
0..*
0..*
0..*
1 dozent
{ordered}
Vorlesung
0..*
titel : string
nummer:string liest
ist_angeboten()
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-13
ODL-Beispiel: Typdefinitionen …
class Vorlesung ( extent Vorlesungen key nummer )
{
attribute string titel;
attribute string nummer;
relationship Professor dozent
inverse Professor::liest;
relationship list<Doktorand> betreut_von
inverse Doktorand::betreut;
relationship list<Vorlesung> setzt_voraus
inverse Vorlesung::ist_voraussetzung_für;
relationship set<Vorlesung> ist_voraussetzung_für
inverse Vorlesung::setzt_voraus;
boolean ist_angeboten ( in unsigned short semester );
};
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-14
7
… ODL-Beispiel: Typdefinitionen …
class Gehalt
{
readonly attribute float brutto;
readonly attribute enum Waehrung {CHF,EUR,…} waehrung;
void erhoehen ( in float betrag, in Waehrung curr );
};
struct Adresse
{
attribute string
attribute string
attribute short
};
FS 2013
strasse;
ort;
plz;
Datenbanken (CS243) – OODBMS – ORDBMS
2-15
… ODL-Beispiel: Typdefinitionen …
class Angestellter ( extent Angestellte key AHVNr )
{
attribute string
name;
attribute string
AHVNr;
attribute Adresse adr;
attribute Gehalt
gehalt;
};
class Professor extends Angestellter (extent Professoren)
{
attribute enum Professur {Ord, Extraord, Asst} rang;
relationship set<Vorlesung> liest
inverse Vorlesung::dozent;
};
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-16
8
… ODL-Beispiel: Typdefinitionen
interface Studierende
{
attribute string
name;
attribute string
MatNr;
attribute Adresse adr;
};
class Student : Studierende ( extent Studenten key MatNr )
{
attribute string
name;
attribute string
MatNr;
attribute Adresse
adr;
attribute set<Vorlesung> hört;
};
class Doktorand extends Angestellter : Studierende
(extent Doktoranden)
{
attribute string
MatNr;
attribute Professor
doktorvater;
relationship set<Vorlesung> betreut
inverse
Vorlesung::betreut_von;
};
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-17
Klassen als Implementierung von Schnittstellen
•
Einer interface-Definition werden keine Instanzen zugeordnet.
Es wird nur die Art der Eigenschaften und Beziehungen festgelegt.
•
Zu einer class-Definition gibt es Instanzen in dem dazu eingeführten Extent.
Über die extends-Anweisung bekommt daher eine “Subclass” nicht nur die Art
sondern auch die Werte der Properties (also der Attributwerte und
Beziehungspartner). Zu jeder Instanz einer subclass gibt es genau eine Instanz
in der übergeordneten class. Mehrfachvererbung ist im ODMG-Modell
ausgeschlossen.
•
Wenn in einer Interface-Definition I Properties spezifiziert sind, so müssen
diese in einer class C, für die C “HAS-A” I gilt, nachgereicht werden.
Man sagt dann auch, dass class C eine Schnittstelle für I implementiert.
Dies muss allerdings unterschieden werden von der Implementierung der
Schnittstellenoperationen einer Klasse
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-18
9
ODMG-Modell vs. Relationales Datenmodell
•
Im relationalen Datenmodell sind nur Tupelmengen erlaubt. Im ODMG-Modell
(OO-Datenmodell) sind ebenfalls nur Mengen erlaubt, die aber jetzt Objekte
als Elemente haben.
Relationenmodell (1NF)
Extent: Menge von Objekten
Atomares Attribut
Funktion, die elementaren Wert liefert
—
(Tupeltyp)
FS 2013
ODMG-Datenmodell
Relation: Menge von Tupeln
(Ausprägung)
Funktion, die Menge von Objekten liefert
Objekttyp
—
Subtyp
—
Subklasse
Datenbanken (CS243) – OODBMS – ORDBMS
2-19
Objektabfragesprache: OQL
•
OQL ist eine SQL-ähnliche Abfragesprache für Objekte, die mit der ODL
definiert wurden
•
OQL enthält SQL-92 (den Anfrageteil, ohne DML)
•
OQL enthält Konstrukte für den Zugriff auf einzelne Objekte, nicht nur für
Kollektionen.
•
OQL kann auch –wie SQL– in Programmiersprachen und damit in
Anwendungsprogramme eingebettet werden (z.B. in C++, Smalltalk, Java),
zusätzlich zu “stand-alone”-Verwendung.
•
Durch das Bemühen, SQL-kompatibel zu sein, verliert man Eleganz. Die
Unterstützung von vielen Collection Types geht auf Kosten der Einfachheit.
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-20
10
Von der Relationenalgebra zur Objektalgebra
Beobachtungen:
• die Selektion/Filterung () der Relationenalgebra hängt nicht davon ab, dass
die Elemente der Mengen Tupel sind. Sie verändern den Typ der Elemente in
der Ergebnismenge nicht. Also kann man sie auf Klassen anwenden:
Sei S eine Klasse mit Elementen vom Typ T und P ein Prädikat definiert
auf Instanzen von T. Dann erhält man eine abgeleitete Klasse S’ durch
Filterung wie folgt
S' := filter [P] (S)
mit ext(S') = { e in ext(S) | P(e) }
•
die Projektion () der Relationenalgebra verändert den Typ. Daher muss bei der
Übertragung der Relationenalgebra auf eine Objektalgebra unterscheiden werden,
ob Sub- oder Supertypen erzeugt werden und ob Objekte erhalten oder neu
erzeugt werden.
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-21
Prinzipien einer Objektalgebra (bzw. OQL)
Mengen-orientiert
Input:
Menge(n) von Objekten
Output:
Menge von Objekten
Objekterhaltend
Output-Objekte sind Elemente der
Eingabeobjektmenge(n)
Objekterzeugend
Output-Objekte werden aus den Elementen der
Eingabeobjektmenge(n) gebildet
Die objekterhaltenden Operationen sollen für Sichtdefinitionen zur Verfügung
stehen. Mit diesen Operationen bewegt man sich
innerhalb der Objekt-DB.
Objekterzeugende
Operationen benötigt man
u.a. für die Übergabe von
Werten an die “Aussenwelt”
Operationssemantik wird definiert über
• Typ
• Extent
der Resultatmenge
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-22
11
OQL: Objekte ansprechen
•
Im Folgenden betrachten wir einige Beispiele der OQL (komplettes SyntaxDiagramm ist am Ende von 2.1 aufgeführt).
•
Wir beschränken uns auf Extent-Namen als Zugang zum OODBMS
(es gibt auch persistente Namen von Einzelobjekten) und gehen davon aus,
dass die entsprechenden Typdefinitionen unserer Beispiel-DB vorhanden sind.
•
Für alle Anfragen gilt: der Ergebnistyp leitet sich aus der Anfrage ab
1.
Gesucht ist die Menge der Namen aller Studierenden:
OQL-Anfrage:
distinct ( select s.name
from
s in Studenten )
Ergebnistyp:
2.
Gesucht sind die Namen und Matrikelnummern aller Studenten:
OQL-Anfrage:
select struct ( n:s.name, id:s.MatNr )
from s in Studenten
Ergebnistyp:
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-23
Zugriff auf Einzelobjekte & Instanziierung
3.
Erzeugen einer Instanz vom Typ Professor:
OQL-Anweisung:
4.
Zugriff auf das neu erzeugte Einzelobjekt über seinen Schlüssel :
OQL-Anweisung:
5.
Professor (name:”Einstein”, AHVNr:“123”,
rang:Ord.)
element(select p from p in Professoren
where p.AHVNr = “123”)
Verwendung eines Objekts beim Generieren eines anderen Objekts (Vorlesung):
Vorlesung ( titel: “Relativitätstheorie für Dummys”,
nummer: “95-610”,
dozent: element ( select p from p in Professoren
where p.AHVNr = “123” ),
betreut_von: select d from d in Doktoranden
where d.doktorvater = element (…),
... )
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-24
12
Pfadausdrücke und Ausgabe von Werten
•
Sei o Objekt, o.A1.A2. ... .Ak ist ein Pfadausdruck für Ak(...A2(A1(o))), wenn alle Ai
Attribute oder Beziehungen sind.
Falls Ai mengen- (oder bag-, listen-) wertig ist, so muss ein Iterator der Form vi
in o.A1.A2. … .Ai verwendet werden, der die Elemente der Menge durchläuft.
•
5.
Für alle Doktorierenden soll der Namen, der Name des Doktorvaters, sowie die
Namen, Nummern und Dozenten der von ihr/ihm betreuten Vorlesungen
ermittelt werden
select struct( name:
d.name,
betreuer: d.doktorvater.name,
lectures: select struct ( t: v.titel,
n: v.nummer,
p: v.dozent.name )
from v in d.betreut )
from
d in Doktoranden
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-25
Aufruf von Operationen
•
Operationen ermöglichen die Veränderung der Properties von Objekten
6.
Das Gehalt von Professor Einstein soll um 1000 CHF erhöht werden
(element (select p
from
p in Professoren
where p.AHVNr = “123” ) ).gehalt.erhoehen(1000,CHF)
(Methode erhoehen() kann neben Gehalt evtl. auch weitere Properties ändern!)
7.
Ermitteln Sie die erste Vorlesung, die Voraussetzung für die Vorlesung
“Distributed Information Systems” ist (unter der Annahme, dass die
Nummerierung von Listen bei 0 beginnt):
(element ( select v
from
v in Vorlesungen
where v.titel = “DIS”) ).setzt_voraus[0]
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-26
13
Beispiel
8.
Gesucht ist der Name der Studentin / des Studenten mit Mat.Nr. 0815,
sowie alle Vorlesungen, die sie/er bei Professoren besucht, die im selben Ort
wohnen (Titel der Vorlesung + Name des Dozenten)
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-27
Syntax von Interface und Class …
<Interface>
::= <InterfaceHeader> ‘{’ [<InterfaceBody>] ‘}’
<InterfaceHeader> ::= ‘interface’ <Identifier> [<InheritanceSpec>]
<Class>
<ClassHeader>
::= <ClassHeader> ‘{’ <InterfaceBody> ‘}’
::= ‘class’ <Identifier>
[‘extends’ <ScopedName>] [<InheritanceSpec>]
[<TypePropertyList>]
<InheritanceSpec> ::=
<TypePropertyList>::=
<ExtentSpec>
::=
<KeySpec>
::=
<KeyList>
::=
<Key>
::=
<PropertyList>
::=
<PropertyName>
<ScopedName>
FS 2013
‘:’ <ScopedName> [‘,’ <InheritanceSpec>]
‘(’ [<ExtentSpec>] [<KeySpec>] ‘)’
‘extent’
<String>
‘key’[‘s’] <KeyList>
<Key> | <Key> ‘,’ <KeyList>
<PropertyName> | ‘(’ <PropertyList> ‘)’
<PropertyName>
| <PropertyName> ‘,’ <PropertyList>
::= <Identifier>
::= <Identifier> | <ScopedName> ‘::’ <Identifier>
Datenbanken (CS243) – OODBMS – ORDBMS
2-28
14
… Syntax von Interface und Class
<InterfaceBody> ::= <Export> | <Export> <InterfaceBody>
<Export>
::= <TypeDecl> ‘;’
| <ConstantDecl> ‘;’
| <ExceptionDecl> ‘;’
| <AttributeDecl> ‘;’
| <RelationDecl> ‘;’
| <OperationDecl> ‘;’
<AttributeDecl> ::= [‘readonly’] ‘attribute’ <DomainType> <Ident.>
<DomainType>
::= <SimpleType> | <StructuredType> | <EnumType>
<RelationDecl>
<TargetOfPath>
<InversePath>
::= ‘relationship’ <TargetOfPath> <Identifier>
‘inverse’
<InversePath>
::= <Identifier> | <Collection> ‘<’ <Identifier> ‘>’
::= <Identifier> ‘::’ <Identifier>
<OperationDecl>
<OpType>
<ParameterList>
<ParameterD>
::=
::=
::=
::=
FS 2013
<OpType> <Identifier> ‘(’ [<ParameterList>] ‘)’
<SimpleType> | ‘void’
<ParameterD> | <ParameterD> ‘,’ <ParameterList>
[‘in’|‘out’|‘inout’] <SimpleType> <Identifier>
Datenbanken (CS243) – OODBMS – ORDBMS
2-29
OQL Syntaxdiagramme …
define_query
;
query_program
define_query
query
define
identifier
as
query
Select Expression
Basic
Simple Expression
query
Comparison
Boolean Expression
Constructor
Accessor
Collection Expression
Set Expression
Conversion
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-30
15
… OQL Syntaxdiagramme …
*
identifier
query
:
distinct
Select Expression
query
select
query
as
identifier
,
from
identifier
query
as
,
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-31
… OQL Syntaxdiagramme …
identifier
where
query
query
:
query
group by
query
as
identifier
,
having
FS 2013
query
order by
query
Datenbanken (CS243) – OODBMS – ORDBMS
asc
desc
2-32
16
… OQL Syntaxdiagramme …
Literals
entry_name
query_name
Basic
bind_argument
from_variable_name
query
(
)
nil
true
false
Literals
Integer
Float
Character
String
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-33
… OQL Syntaxdiagramme …
+
*
Simple Expression
query
query
/
mod
query
-
abs
FS 2013
(
query
Datenbanken (CS243) – OODBMS – ORDBMS
)
2-34
17
… OQL Syntaxdiagramme …
Comparison
comparison op
query
query
String
like
and
Boolean Expression
query
query
or
not
=
!=
>
Comparison Op
<
>=
<=
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-35
… OQL Syntaxdiagramme …
query
type_name
(
type_name
(
struct
)
identifier
query
:
)
,
Constructors
set
bag
(
)
query
array
,
list
list
(
FS 2013
(
query
query
query
..
,
Datenbanken (CS243) – OODBMS – ORDBMS
query
)
)
2-36
18
… OQL Syntaxdiagramme …
attribute_name
.
relationship_name
query
->
operation_name
query
(
)
,
Accessor
query
*
query
query
query
query
:
first
query
(
)
last
function_name
(
)
query
,
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-37
… OQL Syntaxdiagramme …
count
unique
(
*
)
exists
sum
Collection Expression
query
(
min
)
max
avg
query
query
in
some
comparison op
any
all
exists
for
FS 2013
all
identifier
in
query
Datenbanken (CS243) – OODBMS – ORDBMS
:
query
2-38
19
… OQL Syntaxdiagramme
intersect
Set Expression
query
query
union
except
listtoset
element
Conversion
query
(
)
distinct
flatten
(
FS 2013
class_name
)
query
Datenbanken (CS243) – OODBMS – ORDBMS
2-39
2.2 Objektrelationale Datenbanken
•
Bei objektrelationalen Datenbanken (ORDBMS) steht, im Gegensatz zum
OODBMS-Ansatz, die evolutionäre Erweiterung bestehender relationaler
Denkweise im Vordergrund. Dies garantiert unter anderem auch die grössere
Unabhängigkeit von Programmiersprachen (die bei OODBMS nicht gegeben ist).
•
Grundlage dieser Evolution ist die Erkenntnis, dass Grundkonstrukte semantischer
Datenmodelle und (abstrakte) Benutzerdatentypen nötig sind.
Letzteres motiviert auch die Entwicklung einer (4GL-) Sprache für Methodenund Anwendungsentwicklung.
•
Oftmals charakterisiert man ORDBMS mit: “ORDBMS = RDBMS + OODBMS”
•
Objektrelationale Erweiterungen sind im aktuellen SQL-Standard SQL:1999
(oft auch SQL-99 oder SQL3 genannt) enthalten
– Ziel: Vorteile von objektorientierten Konzepten einführen,
ohne gleichzeitig die bewährten SQL-Konzepte aufzugeben
SQL:2003: Erweiterung um zusätzliche objektrelationale Features
•
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-40
20
ORDBMS und SQL:1999 – Übersicht
•
Typsystemerweiterung: Erweiterbarkeit, objektorientierte Konzepte
– Typkonstruktoren für strukturierte Attribute (komplexe Werte)
damit Aufgabe der ersten Normalform des Relationenmodells
• Tupeltypen (ROW Types)
• Kollektionstypen (Mengen, Multimengen, Listen, Arrays)
– Benutzerdefinierte Datentypen (UDT)
– Referenzdatentyp (REF)
– Subtypen und Subtabellen
damit Verwendung objektorientierter Konstrukte bzw. OODBMS-Konstrukten
•
Neue vordefinierte Datentypen
– Boolean, Binary Large Objects, Character Large Objects
•
Rekursion (Berechnen der transitiven Hülle)
•
Call Level Interface (CLI)  dynamisches SQL
•
Erweiterung von SQL zu voller Programmiersprache
•
Trigger: Integrität und Unterstützung aktiver Datenbanken
•
Rollen (roles) für verbesserte Autorisierung
•
Data Warehousing-Operationen
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-41
Die wichtigsten Typen in SQL:1999
Ausgangspunkt: Tabellendefinition (CREATE TABLE):
•
•
Definition von Zeilen
– implizit (wie bisher), d.h. durch Angabe eines Schemas
– explizit durch Row-Typdefinition
Definition von Spalten
– durch vordefinierte Standarddatentypen (wie bisher)
– durch konstruierte Typen
• Typkonstruktoren: ROW / REF / ARRAY
• MULTISET (in SQL:2003)
– durch benutzerdefinierte Typen (user-defined data types, UDT)
• aufbauend auf vordefinierten, konstruierten, und/oder bereits
existierenden benutzerdefinierten Typen
•
•
Tabellen sind die einzigen Einstiegspunkte in die Datenbank
Instanzen von Typen, die innerhalb einer Tabelle vorkommen,
sind automatisch persistent
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-42
21
Erweiterte Tupeltabellen
•
Die einfachste Form von Tabellen in ORDBMS wird als erweiterte Tupeltabelle
bezeichnet. Erweiterte Tupeltabellen können neben Basisdatentypen in den
Spalten folgende Typen verwenden
– Tupel
– Kollektionstypen (Mengen, Multimengen, Listen, Arrays)
– Tabellen (Multimengen von Tupeln)
– Eingebettete Objekte (strukturierte Werte)
– Referenzen (referenzierte Objekte)
– Large Objects (LOBs)
Beispiel: Mitarbeiter (erweiterte Tupeltabelle mit nicht-atomaren Attributen)
Name
Adresse <Strasse, PLZ, Ort>
Hobbys
Bewerbung
Dienstwagen
Foto
VARCHAR
ROW(VARCHAR, INT, VARCHAR)
SET(VARCHAR)
Dossier(...)
REF(Auto) SCOPE Wagen
BLOB
'Urs'
ROW('Rheinblick', 4004,
'Basel')
SET('Literatur',
'Hornussen')
Dossier(...)
X'120332828474292'
X'...'
atomare
Spalte
tupelwertige
Spalte
FS 2013
mengenwertige
Spalte
referenzwertige
Spalte
objektwertige
Spalte
Datenbanken (CS243) – OODBMS – ORDBMS
LOBSpalte
2-43
Typisierte Tabellen (Objekttabellen)
•
Typisierte Tabellen (auch Objekttabellen genannt) werden über einen
benutzerdefinierten Typ definiert
•
Die Zeilen in einer solchen Tabelle entsprechen den einzelnen Objekten des
benutzerdefinierten Typs (in der Terminologie der Objektorientierung entspricht
eine Objekttabelle dem Extent einer Klasse). Auf einzelnen Zeilen (Objekten)
können (benutzerdefinierte) Methoden aufgerufen werden
•
Neben den eigentlichen Objekten wird in einer zusätzlichen Spalte noch deren
Objekt-ID (OID) verwaltet. Diese wird für Referenzen auf einzelne Objekte
benötigt.
benutzerdefinierter Typ (Objekttyp)
Wagen (Objekttabelle)
OID
Hersteller
Fotos
Farbe
PS
Motor
VARCHAR
VARCHAR
SET(BLOB)
VARCHAR
INTEGER
Object(...)
X'120332828474292'
'Lada Nova'
SET(X'...', X'...')
'Braun'
33
Object(...)
OID-Spalte
FS 2013
strukturierter Wert (Objektwert)
Datenbanken (CS243) – OODBMS – ORDBMS
2-44
22
Definition von strukturierten Typen …
Strukturierte Typen bieten die Möglichkeit zur Spezifikation benutzerdefinierter Typen
CREATE TYPE Typname AS ( Attributdefinitionsliste )
[[NOT] INSTANTIABLE]
[[NOT] FINAL]
[Referenzgenerierungsart]
[Methodendeklarationsliste];
CREATE TYPE AddressType AS (
Strasse VARCHAR(30),
Ort
VARCHAR(40),
PLZ
INTEGER,
Land
VARCHAR(25)
) NOT FINAL;
vordefinierte Basistypen
CREATE TYPE PersonType AS (
Name
VARCHAR(30),
Anschrift AddressType,
Ehepartner REF(PersonType),
Kinder
REF(PersonType) ARRAY[10]
) NOT FINAL;
Subtypen sind möglich
FS 2013
benutzerdefinierter Typ
konstruierte Typen
Datenbanken (CS243) – OODBMS – ORDBMS
2-45
… Definition von strukturierten Typen
•
•
•
Objektverhalten kann in Methoden kodiert werden
Methoden sind Funktionen, die sich auf genau einen strukturierten Typen
beziehen
Beispiel für eine Methodendeklaration:
CREATE TYPE PersonType (
Name
VARCHAR(30),
Anschrift AddressType,
Ehepartner REF(PersonType),
Kinder
REF(PersonType) ARRAY[10]
) NOT FINAL
METHOD AnzahlKinder() RETURNS INTEGER;
•
•
•
Realisierung über prozedurale SQL-Spracherweiterungen
Überladen: Methodennamen können überladen werden
Überschreiben: Methoden können in Subtypen überschrieben werden
– dynamisches Binden (Auswahl der Implementierung) zur Laufzeit
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-46
23
Kapselung von strukturierten Typen
•
Attribute werden vollständig gekapselt
– für jedes Attribut werden automatisch Observer- und Mutator-Methoden
generiert (für get bzw. set der Attributwerte)
Observer: METHOD
METHOD
METHOD
METHOD
Mutator:
FS 2013
Strasse(AddressType)
Ort(AddressType)
Plz(AddressType)
Land(AddressType)
RETURNS
RETURNS
RETURNS
RETURNS
VARCHAR(30);
VARCHAR(40);
INTEGER;
VARCHAR(25);
METHOD Strasse(AddressType, VARCHAR(30))
RETURNS AdressType;
METHOD Ort(AddressType, VARCHAR(40))
RETURNS AdressType;
METHOD Plz(AddressType,INTEGER) RETURNS AdressType;
METHOD Land(AddressType, VARCHAR(25))
RETURNS AdressType;
Datenbanken (CS243) – OODBMS – ORDBMS
2-47
Attributzugriff bei Instanzen strukturierter Typen
•
•
•
Zugriff auf Attribute ist neben den Observer-Methoden auch über einen
Dot-Operator möglich
– Lesen des Attributwerts: X.Attributname liefert Attribut von Objekt X
– Setzen des Attributwerts: SET X.Attributname = Wert
Pfadausdrücke (navigierende Zugriffe) sind realisierbar durch wiederholte
Anwendung des Dot-Operators
Beispiel:
BEGIN
...
DECLARE p PersonType;
SET p = PersonType();
/* Konstruktor */
SET p.Name = ‘Harry Hasler’;
SET p.Anschrift.Ort = ‘Schwamendingen’;
...
END;
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-48
24
Definition von typisierten Tabellen
•
•
Typisierte Tabellen (Objekttabellen) basieren auf einem strukturierten Typen
Instanzen (Zeilen) sind Objekte dieses Typs
CREATE TABLE Tabellenname OF Typname (
REF IS OID-Spalte [Referenzgenerierungsart]
[, Spaltenoptions- bzw. Tabellenbedingungsliste]
);
•
Beispiel:
CREATE TABLE
(REF IS oid
Ehepartner
Kinder
•
•
Personen OF PersonType
SYSTEM GENERATED,
WITH OPTIONS SCOPE Personen,
WITH OPTIONS SCOPE Personen);
Referenzklausel (hier mit SYSTEM GENERATED) bestimmt die Art der
Referenzgenerierung (OID-Erzeugung)
Scope-Klausel muss für jedes Referenzattribut definiert werden
– Bestimmt typisierte Tabelle, auf dessen Instanzen referenziert wird
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-49
Definition von Tupeltypen (ROW Types)
•
Ein Tupeltyp besteht aus einer Sequenz von Attribut/Datentyp-Paaren und ist
eingebettet innerhalb von Typ- oder Tabellendefinitionen
• Beispiel:
CREATE TABLE PersonenTupelTabelle (
Name
ROW ( Vorname
VARCHAR(15),
Nachname
VARCHAR(15)),
Anschrift ROW ( Strasse
VARCHAR(30),
Ort
VARCHAR(40),
PLZ
INTEGER,
Land
VARCHAR(25))
);
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-50
25
Typhierarchie
•
Typhierarchien erlauben die Vererbung von Attributen und Methoden
(Sub-/Supertyp-Beziehung)
CREATE Type Subtypname UNDER Supertypname AS (
Attributdefinitionsliste )
[[NOT] INSTANTIABLE]
[[NOT] FINAL]
[Methodendeklarationsliste];
•
Beispiel: Mitarbeiter als spezielle Personen
CREATE TYPE EmployeeType UNDER PersonType AS (
PNr
INTEGER,
Bewerbung
CLOB(50K),
Bild
BLOB(5M),
Vorgesetzter
REF(EmplpoyeeType),
Projekte
REF(ProjectType) ARRAY[10],
Gehalt
Franken
) NOT FINAL
METHOD Gehaltserhöhung() RETURNS Franken;
•
Mehrfachvererbung ist nicht möglich (es gibt maximal einen direkten Supertyp)
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-51
Beispiel: Definition von SQL-Methoden
CREATE METHOD AnzahlKinder()
RETURNS INTEGER
FOR PersonType
RETURN CARDINALITY(SELF.Kinder);
CREATE METHOD Gehaltserhöhung
RETURNS Franken
FOR EmployeeType
BEGIN
DECLARE altesGehalt Franken;
SET altesGehalt = SELF.Gehalt;
IF (SELF.AnzahlKinder < 3) OR (SELF.AnzahlProjekte < 2)
THEN
SET SELF.Gehalt = 1,03 * altesGehalt;
ELSE
SET SELF.Gehalt = 1,05 * altesGehalt;
ENDIF
IF (SELF.Gehalt > 500000) THEN SIGNAL 'Gehalt zu hoch';
RETURN SELF.Gehalt;
END;
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-52
26
Tabellenhierarchie
•
Die Tabellenhierarchie erlaubt extensionale Teilmengen-Beziehungen zwischen
Sub- und Supertabelle
– Alle Instanzen einer Subtabelle sind auch Instanzen der zugehörigen
Supertabelle(n)
CREATE TABLE Tabellenname OF Typname UNDER Supertabellenname (
[, Spaltenoptions- bzw. Tabellenbedingungsliste]
);
CREATE TABLE Mitarbeiter OF EmployeeType
UNDER Personen
(Vorgesetzter WITH OPTIONS SCOPE Mitarbeiter,
Projekte
WITH OPTIONS SCOPE Projekt);
•
Der Typ der Subtabelle muss ein direkter Subtyp des Typs der Supertabelle sein
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-53
Beispiel: typisierte Tabellen und Subtabellen
Personen OF PersonType
OID
VARCHAR
Name
VARCHAR
Anschrift
AddressType
Ehepartner
Kinder
REF(PersonType)
REF(PersonType)
ARRAY[10]
UNDER
Mitarbeiter OF EmployeeType
OID
Name
Anschrift
Ehepartner
Kinder
PNr
Bewerbung
...
Gehalt
VARCHAR
VARCHAR
Address
Type
REF(Person
Type)
REF(PersonType)
ARRAY[10]
INTEGER
CLOB
...
Franken
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-54
27
Einfügeoperationen
INSERT INTO Personen VALUES ('Hasler',
AddressType().Strasse('Luegislandstrasse 12').Ort(
'Zürich').PLZ(8051).Land('CH'),
NULL, NULL);
erzeugt eine Person
INSERT INTO Mitarbeiter VALUES ('Harry',
AddressType().Strasse('Rosswiesen 7').Ort(
'Zürich').PLZ(8051).Land('CH'), NULL, NULL, 1234,
NULL, NULL, NULL, Franken(5000));
erzeugt einen Mitarbeiter
INSERT INTO Mitarbeiter VALUES ('Moritz',
AdressTyp().Strasse('Claragraben 22').Ort(
'Basel').PLZ(4051).Land('CH'),
NULL, NULL, 6789, NULL, NULL,
(SELECT oid FROM Mitarbeiter WHERE Name = 'Harry'),
Franken(3500));
erzeugt einen Mitarbeiter
Setzen einer Objektreferenz
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-55
ORDBMS: Beispielanfragen
SELECT * FROM Personen;
gibt alle Personen zurück,
auch die Mitarbeiter
SELECT * FROM Mitarbeiter;
gibt alle Mitarbeiter zurück
SELECT * FROM ONLY(Personen);
gibt nur die Personen zurück,
die keine speziellen Personen
(z.B. Mitarbeiter) sind
SELECT *
FROM Mitarbeiter
WHERE Vorgesetzter->Name = 'Harry';
Dereferenzierung über
Pfeil-Operator ->
Dereferenzierung mit
anschliessendem
Komponentenzugriff
SELECT *
FROM Mitarbeiter
WHERE Vorgesetzter->Anschrift.PLZ = 8051;
SELECT DEREF(Ehepartner)
FROM
Mitarbeiter;
FS 2013
Dereferenzierung mittels
DEREF-Operator
Datenbanken (CS243) – OODBMS – ORDBMS
2-56
28
Methoden-/Funktionsaufrufe
•
in der SELECT-Klausel
SELECT
FROM
•
liefert einen Wert
Anzahl(Projekte)
Mitarbeiter;
in der WHERE-Klausel
SELECT Name
FROM
Mitarbeiter
WHERE Grossverdiener(Gehalt);
•
liefert TRUE oder FALSE
in der FROM-Klausel
SELECT
FROM
Name
GuteMitarbeiter();
liefert eine Menge
von Mitarbeitertupeln
SQL:1999 unterstützt diese Variante nicht!
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-57
Vergleich: SQL-92 – SQL:99 – SQL:2003
SQL-92
• Tupeltabellen
– Basistabellen zur Speicherung von Daten
– Sichten (Views): abgeleitete Tabellen
– Typ eines Attributs ist ein Basisdatentyp (1NF)
– Zeilen (Tupel) setzen sich aus Instanzen der
jeweiligen Wertebereiche zusammen
•
Basisdatentypen
– INTEGER, SMALLINT, NUMERIC, DECIMAL, REAL,
FLOAT, CHARACTER, DATE, TIME, BIT, ...
•
Integritätsbedingungen
– Primär-/Fremdschlüssel, Check-Klauseln
– Assertions: Bedingungen über mehrere Tabellen
•
Zugriffsrechte (Grants)
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
MULTISET
ROW
Basisdatentyp
2-58
29
Vergleich: SQL-92 – SQL:99 – SQL:2003
•
SQL:99 (in 1999 verabschiedete Erweiterung von SQL-92; teilweise bereits seit
längerer Zeit in kommerziellen DBMS implementiert)
SET
MULTISET
OBJECT
ROW
ARRAY
REF
Einstiegspunkte in die Datenbank:
Typisierte Tabelle:
SET(OBJECT(...))
Untypisierte Tabelle: MULTISET(ROW(...))
Basisdatentyp
Subtypbeziehung
Untermengenbeziehung
Quelle: C. Türker: SQL:99 und SQL:2003. dpunkt.Verlag, 2003
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-59
Vergleich: SQL-92 – SQL:99 – SQL:2003
•
SQL:2003 (in 2004 verabschiedete Erweiterung von SQL:99; Erweiterungen
grösstenteils (noch) nicht implementiert)
SET
MULTISET
OBJECT
ROW
MULTISET
ARRAY
REF
Einstiegspunkte in die Datenbank:
Typisierte Tabelle:
SET(OBJECT(...))
Untypisierte Tabelle: MULTISET(ROW(...))
Basisdatentyp
Subtypbeziehung
Untermengenbeziehung
Quelle: C. Türker: SQL:99 und SQL:2003. dpunkt.Verlag, 2003
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-60
30
Beispiel (Schema) …
CREATE TYPE AddressType AS (
Strasse VARCHAR(30),
Ort
VARCHAR(40),
PLZ
INTEGER,
Land
VARCHAR(25)
) NOT FINAL;
CREATE TYPE PersonType AS (
Name
VARCHAR(30),
Anschrift AddressType,
Ehepartner REF(PersonType),
Kinder
REF(PersonType) ARRAY[10]
) NOT FINAL;
CREATE TABLE
(REF IS oid
Ehepartner
Kinder
FS 2013
Personen OF PersonType
SYSTEM GENERATED,
WITH OPTIONS SCOPE Personen,
WITH OPTIONS SCOPE Personen);
Datenbanken (CS243) – OODBMS – ORDBMS
2-61
… Beispiel (Schema) …
CREATE TABLE PersonenTupelTabelle (
Name
ROW ( Vorname
VARCHAR(15),
Nachname
VARCHAR(15)),
Anschrift ROW ( Strasse
VARCHAR(30),
Ort
VARCHAR(40),
PLZ
INTEGER,
Land
VARCHAR(25))
);
CREATE TYPE ProjektType AS (
PName
VARCHAR(30),
Budget
Number(10,2),
Leiter
REF(EmployeeType),
Mitarbeiter REF(PersonType) MULTISET
) NOT FINAL;
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-62
31
… Beispiel (Schema)
CREATE TYPE EmployeeType UNDER PersonType AS (
PNr
INTEGER,
Bewerbung
CLOB(50K),
Bild
BLOB(5M),
Vorgesetzter
REF(EmplpoyeeType),
Projekte
REF(ProjectType) ARRAY[10],
Gehalt
Franken
) NOT FINAL
METHOD Gehaltserhöhung() RETURNS Franken;
CREATE TABLE Mitarbeiter OF EmployeeType
UNDER Personen
(Vorgesetzter WITH OPTIONS SCOPE Mitarbeiter,
Projekte
WITH OPTIONS SCOPE Projekt);
CREATE TABLE
(REF IS oid
Leiter
Mitarbeiter
FS 2013
Projekte OF ProjektType
SYSTEM GENERATED,
WITH OPTIONS SCOPE Mitarbeiter,
WITH OPTIONS SCOPE Mitarbeiter);
Datenbanken (CS243) – OODBMS – ORDBMS
2-63
Beispiel: Anfragen
•
Wie lauten die Namen aller Projektleiter?
•
Geben Sie die Namen, Wohnort und das Gehalt aller Mitarbeiter von
Projekt ‚ABC‘ aus.
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-64
32
Literatur
•
G. Saake, C. Türker, I. Schmitt: Objektdatenbanken - Konzepte, Sprachen,
Architekturen, International Thomson Publishing, 1997
•
A. Heuer: Objektorientierte Datenbanken - Konzepte, Modelle, Standards und
Systeme, Addison-Wesley, 2. Auflage, 1997
•
C. Türker: SQL:1999 und SQL:2003. dpunkt.Verlag, 2003.
•
C. Türker, G. Saake: Objektrelationale Datenbanken. dpunkt.Verlag, 2005.
•
A. Geppert: Objektrelationale und objektorientierte Datenbanksysteme,
dpunkt.Verlag, 2002
FS 2013
Datenbanken (CS243) – OODBMS – ORDBMS
2-65
33
Herunterladen