24
Objektorientierte Datenbanken Beim vorigen Mal: Transaktionen, Sperren ODMG-OQL Heute: ODMG-OQL und FastObjects-OQL Integritätsbedingungen und Schema-Evolution Lernziele: Anwendung und Bewertung des ODMG-Standards Ralf Möller, FH-Wedel

Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Embed Size (px)

Citation preview

Page 1: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Objektorientierte Datenbanken

Beim vorigen Mal: Transaktionen, Sperren ODMG-OQL

Heute: ODMG-OQL und FastObjects-OQL Integritätsbedingungen und Schema-Evolution

Lernziele: Anwendung und Bewertung des ODMG-Standards

Ralf Möller, FH-Wedel

Page 2: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Literatur

Page 3: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Select-From-Where-Anfragen

select queryfrom var_def (, var_def )*[ where query ][ group by name: query (, name: query )* [ having (query (, query)* ) ]][ order by query [ asc | desc ] (, query [ asc | desc ])*

var_def = extent | var in extent | extent [as] var

Page 4: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Beispiel (1)

select a from a in AuthorExtentwhere exists p in a.publication: count(p.keywords) > 10

select p.publkeyfrom p in flatten(select a.publications from Authorextent a where a.name like "G*")

element(select a from a in Authorextent where a.name = "Dittrich")

Page 5: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Beispiel (2)

max( select p.accesses from p in PublicationExtent)

select author1: a, author2: b, publication: pfrom PublicationsExtent p, a in p.getAuthors(), b in p.getAuthors()where a.name < b.name

Page 6: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Beispiel (3)

select aucount, kwcount, partitionfrom publ in PublicationExtentgroup by aucount: count(publ.getAuthors()), kwcount: count(publ.keywords)having count(partition) > 1

Ergebnistyp:set(struct(aucount: integer, kwcount: integer, partition: bag(struct(publ: Publication))))

Page 7: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Definitionen

define [query] query-name [ params ] as query params = ( type identifier (, type identifier )* )

define extent extent-name class-name

Page 8: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Einschränkungen in FastObjects-OQL

Extraktion einzelner Attributwerte oder ganzer Objekte (kein struct)

Keine Methodenaufrufenur Aggregatfunktion count

Page 9: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Integritätsüberprüfung

Integrität: semantische (oder auch logische) Korrektheit der Datenbank in bezug auf den modellierten Weltausschnitt

Im ODMG-Standard Überprüfung durch Java-Prozeduren möglich

Interface: com.poet.odmg.Constraints preDelete() preWrite() postRead()

Page 10: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Beispiel (1)

class Person implements Constraints { String name_; Date dateBorn_; transient int age_;public void postRead() { Date now = new Date(); age_ = now.getYear() - dateBorn_.getYear();}public void preWrite() {// . . .}public void preDelete() {// . . .}}

Page 11: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Beispiel (2)

Each manager has references to the products on which the manager has worked.

class Manager extends Person{// . . .SetOfObject products_; // Product objects// . . .}

Page 12: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Beispiel (3)

class Product implements Constraints {// . . .public void postRead() {// . . .}public void preWrite() {// . . .}public void preDelete() { Iterator iter = managers_.iterator(); while ( iter.hasNext() ) { ((Manager) iter.next()).removeProduct( this ); }}// . . .}

Page 13: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Integritätsbedingungen

Das Gehalt des Mitarbeiters `Mario De Monti' darf nicht unter 4000,- DM liegen. betrifft genau ein einzelnes Objekt einer Klasse

Kein Qualitätssicherer darf mehr als 5000,- DM im Monat verdienen. betrifft zwar alle möglichen Objekte einer Klasse, kann aber

jeweils für die einzelnen Objekte überprüft werden Produkte werden durch ihre Nummern identifiziert,

das heißt, keine Produktnummer darf mehrfach vorkommen. betrifft alle Objekte einer Klasse und kann nicht einzeln für

die jeweiligen Objekte überprüft werden

Page 14: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Integritätsbedingungen (2)

Für die Mitarbeiter gilt, daß das Durchschnittsgehalt der Qualitätssicherer unter dem der Arbeitsplaner liegen muß. betrifft eine Teilmenge einer Klasse

Zu jedem Produkt muß es mindestens eine Unterlage geben. klassenübergreifende Integritätsbedingung

Der Status eines Projekts darf nicht direkt von dem Zustand "in Planung" nach "abgeschlossen" übergehen. betrifft Zustandsübergänge anstelle einzelner

Datenbankzustände

Page 15: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Integritätsbedingungen (3)

Eine Gehaltserhöhung eines Mitarbeiters darf nur dann ausgeführt werden, wenn das neue Gehalt nicht zehn Prozent über dem alten Gehalt liegt. betrifft Zustandsübergänge, bezieht sich aber explizit auf die

Änderungsoperation, die den Übergang durchführt Der Durchschnittsverkaufspreis eines Produktes

bezogen auf die letzten zwölf Monate darf nicht mehr als fünf Prozent vom Durchschnittspreis der letzten beiden Jahre abweichen. langfristig zu überprüfende Bedingung, für die historische

Preisinformationen zusätzlich gespeichert werden müssen

Page 16: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Integritätsbedingungen (4)

Einkaufsteile müssen gelöscht werden, wenn sie von keinem Lieferanten mehr beziehbar sind. Integritätsregel, die bei bestimmten Änderungen der DB als

Folgeaktion auslöst wird Qualitätssicherer, Arbeitsplaner sowie Konstrukteure

sind spezielle Mitarbeiter. definiert eine Untermengenbeziehung zwischen Klassen

Jeder Mitarbeiter muß entweder ein Qualitätssicherer, ein Arbeitsplaner oder ein Konstrukteur sein. erzwingt eine Klassenpartitionierung

Page 17: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Schema-Evolution

Nicht ist stetiger als der WandelÄnderung von Klassendefinitionen durch

Anpassung von Software an neue Einsatzbedingungen

Was passiert mit "alten" Objekten?Verzögerte vs. eifrige Anpassung

Page 18: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Arten der Schema-Evolution (1)

Änderung des Status von Instanzvariablen von transient (oder static) auf persistent

Hinzufügung oder Entfernung von Instanzvariablen

Änderung der Typen von Werten von Instanzvariable neuer Typ ist allgemeiner: verlustfreie Anpassung neuer Typ ist spezieller: Informationsverlust mögl. neuer Typ ist unvergleichbar

Page 19: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Typumwandlung in FastObjects (Auszug)

Von Nach Bermerkungshort, int, long, float,double

numerischer Typ Verlust mögl.

numerischer Typ java.lang.Stringnumerischer Typ byte Verlust mögl.numerischer Typ char Verl. mög., undefi-

niert bei neg. Werten

numerischer Typ boolean 1 -> true, sonst false

boolean numerischer Typ false -> 0, sonst true

Page 20: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Umwandlung von Kollektionen

Von Nach Bermerkung

Array Array elementweise Umwandlung

Objektreferenz Kollektion oder Array

einelementige Koll. oder Array

Kollektion Typ A Kollektion Typ B

Kollektion oder Array

Objektreferenz nur erstes Objekt betrachtet

Page 21: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Standardwerte

Page 22: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Arten der Schema-Evolution (2)

Änderung der VererbungsbeziehungenRestrukturierung von Klassen

Einfügung, Löschung, Aufspaltung, Kombination, Namensänderung

Page 23: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Zusammenfassung, Kernpunkte

Object Query LanguageAspekte der Schema-Evolution und

Versionsverwaltung

Page 24: Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution

Was kommt beim nächsten Mal?

Objektrelationale Datenbanken