• Keine Ergebnisse gefunden

Integritätsbedingungen und Schema-Evolution

N/A
N/A
Protected

Academic year: 2022

Aktie "Integritätsbedingungen und Schema-Evolution"

Copied!
24
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

(2)

Literatur

(3)

Select-From-Where-Anfragen

select query

from 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

(4)

Beispiel (1)

select a

from a in AuthorExtent

where exists p in a.publication:

count(p.keywords) > 10

select p.publkey

from 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")

(5)

Beispiel (2)

max(

select p.accesses

from p in PublicationExtent)

select author1: a, author2: b, publication: p from PublicationsExtent p,

a in p.getAuthors(),

b in p.getAuthors()

where a.name < b.name

(6)

Beispiel (3)

select aucount, kwcount, partition from publ in PublicationExtent

group 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))))

(7)

Definitionen

define [query] query-name [ params ] as query

 params = ( type identifier (, type identifier )* )

define extent extent-name class-name

(8)

Einschränkungen in FastObjects-OQL

 Extraktion einzelner Attributwerte oder ganzer Objekte (kein struct)

 Keine Methodenaufrufe

 nur Aggregatfunktion count

(9)

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()

(10)

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() { // . . .

} }

(11)

Beispiel (2)

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

class Manager extends Person {

// . . .

SetOfObject products_; // Product objects // . . .

}

(12)

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 );

} }

// . . . }

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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

(19)

Typumwandlung in FastObjects (Auszug)

Von Nach Bermerkung

short, int, long, float,double

numerischer Typ Verlust mögl.

numerischer Typ java.lang.String

numerischer 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

(20)

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

(21)

Standardwerte

(22)

Arten der Schema-Evolution (2)

 Änderung der Vererbungsbeziehungen

 Restrukturierung von Klassen

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

(23)

Zusammenfassung, Kernpunkte

 Object Query Language

 Aspekte der Schema-Evolution und

Versionsverwaltung

(24)

Was kommt beim nächsten Mal?

 Objektrelationale Datenbanken

Referenzen

ÄHNLICHE DOKUMENTE

Die Klinik für Mund-, Kiefer- und Gesichtschirurgie zeigt im Rahmen der Neueröffnung eine Ausstellung mit Objekten des Aargauer Bildhauers Martin Hufschmid (www.martinhufschmid.ch)

• Für eine einzelne Klasse lohnen sich ein solches Diagramm nicht wirklich :-). • Besteht ein System aber aus sehr vielen Klassen, kann man damit die Beziehungen zwischen

Wir nehmen an, dass keine Teilmasse das System verlassen während sich der Körper bewegt (geschlossenes System)+. a cm ist die Beschleunigung

Kräfte statt an Volumenelement an den Schwerpunkt anreifen lässt, ändert sich weder die resultierenden Kraft noch das resultierende Drehmoment.. Wenn an alle Elemente des

Dies bedeutet, dass zwei Objekte der Klasse Person durchaus die gleichen Werte der Attribute haben können.. Zurück zu unserem Beispiel in

Warum kann die Prüfung auf Über/Unterlauf nicht aus den kritischen Abschnitten herausgezogen werden. Kann return m aus dem kritischen Abschnitt

• Bei Anmeldung eines Objekts in der Registry oder beim Aufruf kann der Stub nicht ermittelt werden (nicht im CLASSPATH, nicht richtig angemeldet, nicht einzurichten.

von den nestor Ar- beitsgruppen durchgeführt werden und dem nestor Handbuch, das eine ständig erweiterte Sicht auf das Themenfeld gestattet, entwickelte die AG „Kooperation