Objektorientierte Datenbanken zBeim vorigen Mal: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung FastObjects (t7)

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

ER-Datenmodell und Abfragen in SQL
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
10. Grundlagen imperativer Programmiersprachen
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
FH-Hof Einbindung von JavaScript Anweisungen
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Alternativen und Muster. Alternativen Gegeben ist eine Tabelle in der ein Attribut der Tabelle Buecher Gruppe genannt wurde. So gibt es unter anderem.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Otto-von-Guericke-Universität MagdeburgGamal Kassem Übung 7 Reports mit Datenbankzugriff.
Der letzte Schliff für Abfragen Übersicht über die Aggregatfunktionen.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
Modulare Programmierung
Erhard Künzel für Info 9. Klasse: digitale-schule-bayern.de © Erhard Künzel.
Abfragen – Tipps und Tricks Buch S102ff (Informatik I, Oldenbourg-Verlag) Nach einer Vorlage von Dieter Bergmann.
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
Kollektionstypen (1) Es sind polymorphe Typkonstruktoren, jeweils als Sorten- und als Klassenkonstruktor (t,v beliebige Typen): –set, Set :Ungeordnete.
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
SQL-Datentypen INTEGER
objekt-relationale Datenbanken
Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems.
1 Teil I Datenmodelle Kapitel 6: Objektorientierte Anfragesprachen.
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
DTD – Deklaration von Elementen Beschreibt die Einschränkungen des Inhalts eines Elements Syntax: Einziger atomarer Typ: #PCDATA (Parsed Character DATA)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
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)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Befehle in SQL Erläuterungen.
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Aggregatsfunktion SQL = Structured Query Language.
1 Gruppierung, Aggregierung und Sortierung (2) Abarbeitungsmodell bei Gruppierung: Werte from- und where-Klauseln aus wie bisher (Bildung von Kreuzprodukt.
Einfache OQL-Ausdrücke (1) Literale und Objekte können direkt konstruiert werden; gültige Ausdrücke und ihre Typen sind z.B.: "Quader77": string struct(x:1.0,
MODULA-2.
Datentypen: integer, char, string, boolean
Verdichten von Daten mit Gruppenfunktionen
Datenbanksysteme II Vorlesung WS 2006 / 2007 Paul Manthey
Structured Query Language
XQuery 1.0 – Arbeitsweise Mögl. Eingaben Das wird berücksichtigt: Typen von XPath und XML Schema Namensräume, Module Ergebnis: XML-Instanz.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Vorlesung #5 SQL (Teil 2).
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
OQL-Anbindung an Java (1) Java als Beispiel für die Einbettung von OQL in eine Programmiersprache Die OQL-Einbettung in Java ist teilweise mit dynamischem.
Persistenz: Objekt-Lebensdauer In RDBMS wird Lebensdauer von Werten durch ihren Typ festgelegt: Instanzen von Relationstypen sind persistent, alle anderen.
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.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
COMMANDS imperative 1. you (formal): Sie 2. you (familiar plural): ihr
Datenbanken abfragen mit SQL
Objektorientierte Datenbanken
Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung.
Objektorientierte Datenbanken zBeim vorigen Mal: yTransaktionen, Sperren yODMG-OQL zHeute: yODMG-OQL und FastObjects-OQL yIntegritätsbedingungen und Schema-Evolution.
Java Programme nur ein bisschen objektorientiert.
Übung Datenbanksysteme I SQL
Abfragen Wiederholung Manuel Friedrich Schiller-Gymnasium Hof.
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Datentypen: integer, char, string, boolean
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
Wirtschaftsinformatik
Textmuster.
School supplies.
(Structured Query Language)
 Präsentation transkript:

Objektorientierte Datenbanken zBeim vorigen Mal: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung FastObjects (t7) zHeute: yTransaktionen, Sperren yODMG-OQL zLernziele: yAnwendung und Bewertung des ODMG-Standards Ralf Möller, FH-Wedel

Literatur

Geschachtelte Transaktionen Transaction txn = new Transaction(db); txn.begin();... txn.begin();... txn.begin();... txn.commit();... txn.abort();... txn.commit();

Automatische Synchronisation bei Abort zNormalerweise bleiben unter FastObjects-ODMG geänderte Objekte bei Transaktionsabbruch im Hauptspeicher bestehen zSynchronisation mit Hauptspeicherzustand auf Wunsch möglich:... Properties props = new Properties(); props.setProperty("restoreOnAbort", true); txn.setProperties(props);...

Sperren (Locks) zImplizite Sperren yVom System vergeben bei Zugriff auf Objekte yBei lookup Anforderung einer Lesesperre yBei Änderung Anforderung einer Schreibsperre yGgf. wartet Kontrollfluß bis Sperre verfügbar zExplizite Sperren yTransaction txn = new Transaction(); ytxn.lock(Object o, int level) xLevel: Transaction.READ, Transaction.WRITE, Transaction.DELETE yGgf. Ausnahmebehandlung falls Sperre nicht verfügbar

Beispiel Database db = new Database(); db.open(... ); Transaction txn = new Transaction( db ); Product product = (Product) db.lookup( "The Bug Zapper" ); System.out.println( product.getTitle() ); // The product object is now locked at the READ level. // This was done automatically by the database // manager. // If you want to ensure that the object is not being // read in another transaction, you can attempt to // obtain a WRITE level lock. try { txn.lock( product, Transaction.WRITE ); } catch ( LockNotGrantedException e ) { // the lock was not granted; handle // this as you wish }

Anwendung: Implementierung von Assoziationen zBeispiel: Mitarbeiter leitet Projekt zSei "leitet" eine N:1-Beziehung ohne Navigationsbeschränkung zEinführung von Instanzvariablen "leitet" mit Collection-Typ in der Klasse Mitarbeiter zEinführung einer Instanzvariablen "geleitet-von" mit Typ Mitarbeiter in der Klasse Projekt zAufgabe: Assoziierung von Mitarbeiter m1 und Projekt p1 zDie Instanzen m1 und p1 müssen gesperrt werden, bis wechselseitige Referenz etabliert zGenauer: Die Kollektion als Wert der Instanzvariablen "leitet" des Mitarbeiters m1 muß gesperrt werden

Anfragesprachen: ODMG-OQL zAusdrücke für atomare Werte ykonstante Zahlen: 1 ykonstante Zeichenkette: "Charly Brown" ykonstantes Zeichen: 'A' ybenanntes Objekt: krd zVergleiche y1 = 3 y"Charly Brown" < "Pig Pen" y'A' != 'a'

Operationen auf Zeichenketten zKonkatenation: + (oder ||) zElementtest: char in string zElementzugriff: string [ integer ] zTeilzeichenkette: string [ integer : integer ] zLänge einer Zeichenkette: count( string ) zWildcard-Vergleich: string like pattern, yMuster (pattern) kann * enthalten (steht für beliebige Teilzeichenkette)

Anfragen für Objekte zAttributzugriff: object. attribute-name (auch ->) zMethodenaufruf: object. method-name [param] yparam = ( [ parameter-name (, parameter-name)* ] ) zTypanpassung: ( class-name ) object zObjektkonstruktion: class-name ( [ attributes ] ) yattributes = att-name : att-value (, att-name : att-value )* zis_defined( object-query ) zis_undefined( object-query )

Anfragen für Tupel zAttributzugriff: tuple. attribute-name zTupelkonstruktion: struct (att-name : att-value (, att-name : att-value)* ) zBeispiele: ystruct(name: "Bond", firstname: "James") ystruct(name: p.name, firstname: p.firstname).name

Anfragen für Kollektionen zElementzählung: count( collection ) zElementtest: value in collection zElementextraktion: element( collection ) yParameter collection muß einelementig sein zVergleich: =, != zEliminierung von Duplikaten: distinct( collection ) zEinflachung: flatten( collection ) zQuantoren: (for all | exists) variable in collection : condition zAggregation: aggregate( collection ) yaggregate = max, min, avg, sum

Anfragen für geordnete Kollektionen zListenkonstruktion: list ( [ value (, value )* ] ) list ( [ value (.. value )* ] ) zArraykonstruktion: array ( [ value (, value )* ] ) array ( [ value (.. value )* ] ) zElementextraktion: first( list-val ), last( list-val ) list-val [ integer ] zTeillistenbildung: list-val [ integer : integer ] zKonkatenation: + zKonversion: listtoset( list-val )

Anfragen für ungeordnete Kollektionen zMengenkonstruktion: set ( [ value (, value)* ] ) zMultimengenkonstr.: bag ( [ value (, value)* ] ) zSonderform für Gruppierung: partition zOperationen: yVereinigung: union yMengendifferenz: except ySchnitt: difference zTests: | >=

Typen zZugriff auf Kollektionen und deren Elemente zIn Java: Elemente vom Typ "Object" zCast-Operation notwendig zMöglich: Deklaration von Typen in der Enhancement-Optionsdatei ptj.opt zSchlußfolgerungen über Typen yBeispiel: flatten(set(bag(T))) = flatten(bag(list(T))) = flatten(list(bag(T))) = bag(T)

Boolesche Ausdrücke zNegation: not zKonjunktion: and, andthen (Reihenfolge!) zDisjunktion: or, orelse (Reihenfolge!)

Select-From-Where-Anfragen zselect 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 ])* zvar_def = extent | var in extent | extent [as] var

Beispiel (1) zselect a from a in AuthorExtent where exists p in a.publication: count(p.keywords) > 10 zselect p.publkey from p in flatten(select a.publications from Authorextent a where a.name like "G*") zelement(select a from a in Authorextent where a.name = "Dittrich")

Beispiel (2) zmax( select p.accesses from p in PublicationExtent) zselect author1: a, author2: b, publication: p from PublicationsExtent p, a in p.getAuthors(), b in p.getAuthors() where a.name < b.name

Beispiel (3) zselect aucount, kwcount, partition from publ in PublicationExtent group by aucount: acount(publ.getAuthors()), kwcount: count(publ.keywords) having count(partition) > 1 zErgebnistyp: set(struct(aucount: integer, kwcount: integer, partition: bag(struct(publ: Publication))))

Zusammenfassung, Kernpunkte zGeschachtelte Transaktionen zSelbstverwaltete Sperren zObject Query Language

Was kommt beim nächsten Mal? zObjektrelationale Datenbanken