Non-Standard-Datenbanken Neue Datentypen Objektrelationale Datenbanken SQL3 Standard Oracle Sebastian Wappler 1. Datenbanksysteme nach Stonebraker Objektrelationale niedrig Dateisysteme Objektorientierte B Relationale DBMS D hoch M S Komplexität der Zugriffe/Anfragen Objektspeichersy steme Komplexität der Datenstrukturen niedrig hoch 2 1.1 Relationale DBMS • Einfache vordefinierte Datenstrukturen – Relationen, Tabellen, Datentypen • INTEGER, FLOAT, DATE, VARCHAR • Anfragesprache SQL - optimiert – Manipulation der Werte – Auswertung Mengenbeschreibung • Dauerhaftigkeit, Integrität, Schutz 3 1.2 Objektspeichersysteme • Speicherung komplexer Objekte – Kombination von Objekten zu neun Objekten – Komplexe Beziehungen zwischen Objekten • Nachbarschaftsbeziehungen von Polygonen; CAD • Dauerhafte Speicherung von Anwendungsprogrammobjekten • Smalltalk, Tycoon; O2, Objectivity 4 1.3 Objektrelationale / Objektorientierte DBMS • Anfragen auf komplexe Daten – Geographisch Daten: Nahverkehrsnetz • „Alle Bushaltenstellen im Umkreis von 500 m?“ – Bild: Objekte, Personen, Beziehungen • „Alle Bilder auf denen Person X zu sehen ist?“ – Audio: Mitschnitt, Sprecher, Stimmmuster • „Alle Mitschnitte in denen ‚äh‘ 20 mal vorkommt?“ – Volltextsuche • „Wort Objekt in der Nähe von relational?“ 5 2. Motivation zu objektrelationalen DBMS Relationale DBMS - Keine komplexen Strukturen - Nur Basistypen - Begrenzte Anzahl von Prädikaten Relationen Algebra Tabellen effizient (z.B. Index, Schlüssel) Objektspeichersysteme - Kein anerkannter Standard - Navigierender Zugriff besser als anfrageorientierter Komplexe Strukturen und Methoden 6 3. Objektorientierte Erweiterungen in SQL3/SQL99 • • Large Objects (LOB) User Defined Types (UDTs) – User Defined Methods • • • Comparison Casts Type Constructors – Referenced Types – Collection Types – Table/View Hierarchies 7 4 Large Objects (LOBs) mehrere Gigabyte große Objekte Festgelegte Maximallänge Speicherung im DBMS • Binarry Large Objects (BLOBs) – Jede Art von digital gespeicherte Information • Character Large Objects (CLOBs) – Zeichenketten – Auswertung innerhalb des DBMS – NCLOB - mehr-Byte Zeichensätze (Oracle) 8 4.1 Beispiel: Tabellendefinition mit LOBs CREATE TABLE Buchtabelle ( Titel VARCHAR(200), Buch_ID INTEGER PRIMARY KEY, Zusammenfassung CLOB(32K), Buch_Text CLOB(20M), Film BLOB(2G) ); 9 4.2 Benutzung von LOBs Einfügen, Entfernen, Aktualisieren Kein Vergleich (<, >) Kein Index oder Schlüssel • BLOB – LIKE (Gleichheit) • CLOB – TRIM, SUBSTRING, POSITION, LENGTH 10 4.2 Benutzung von LOBs (fort.) • Puffer für LOBs im Anwendungsprogramm • Zeiger auf LOBs (LOB-Locator) – 4 Byte • Stückweise Verarbeitung der LOBs Zeiger „überlebt“ Transaktionsende (Std) 11 5 User Defined Types • UDTs auch Abstract Datatypes (ADTs) • Abbildung der Realität • Vordefinierte Datentypen sind Basis für UDTs • Definition durch Anwender • Eigens Verhalten (Prozeduren, Funktionen) • Gleiche Verwendung wie vordefinierte Datentypen 12 5.1 User Defined Distinct Types • Benutzerdefinierter Name für einen vordefinierten Datentyp (Urtyp) • Zwei benutzerdefinierte Typen mit gleichem Urtyp sind verschieden (distinct) • Vergleiche auf Ebene des Urtyps realisiert • Zusätzlich eigenes Verhalten • CASTs: benutzerdefinierter Typ Urtyp 13 5.1.1 Beispiel: User Defined Distinct Types CREATE TYPE roomtype AS CHAR(10) FINAL; CREATE TYPE meters AS FLOAT FINAL; CREATE TYPE squaremeters AS FLOAT FINAL; CREATE TABLE RoomTable ( RoomID roomtype, RoomLength meters, RoomWidth meters, RoomArea squaremeters ); UPDATE RoomTable SET RoomWidth = RoomLength; UPDATE RoomTable SET RoomArea = RoomLength; ERROR! 14 5.2 User Defined Structured Types • • • • Komplexe Datenstrukturen Verwendung in Spalten Als ganze Tabelle Enthalten Attribute, Prozeduren und Funktionen • Constructor-Fkt. wird vom DBMS erstellt • Methoden zur Manipulation von Attributen 15 5.2.1 Beispiel: User Defined Structured Types CREATE TYPE adresse_t AS OBJECT ( Strasse VARCHAR(20), Hausnummer NUMBER(3), Ortsname VARCHAR(30)); CREATE TYPE personal_t AS OBJECT ( Nachname VARCHAR(20), Vorname VARCHAR(20), Geburtsdatum DATE, Gehalt NUMBER(7,4), Kinder NUMBER(5), Adresse adresse_t ); 16 5.2.2 Beispiel: User Defined Structured Types (fort.) CREATE TABLE personal( P_ID INTEGER, Angestellter personal_t); INSERT INTO personal (P_ID, Angestellter) VALUES( 320, personal_t(’Mustermann’, ’Gabi’, ’07-aug-1971’, 2500.00, 2, adresse_t(’Musterstr.’,1,’Musterstadt’) ) 17 ); 5.3 Subtypes - Supertypes • Untertyp ist Spezialisierung des Obertyps + Erbt Attribute und Verhalten des Obertyps + Neue Attribute und neues Verhalten • Kann Attribute und Methoden überschreiben (Overriding) • Untertyp kann anstelle des Obertypen verwendet werden 18 5.3.1 Subtypes – Supertypes FINAL / NOT FINAL FINAL • Tiefster Untertyp • Nur Distinct - Typen NOT FINAL • Kann Untertypen haben • Nur strukturierte Typen SQL4: Beide Kombinationen erlaubt 19 5.3.2 Beispiel: Subtypes Supertypes CREATE TYPE address AS( Street CHAR(30), city CHAR(20), state CHAR(2), zip INTEGER ) NOT FINAL; CREATE TYPE german_addr UNDER address( Family_name VARCHAR(30) ) NOT FINAL; CREATE TYPE us_addr UNDER address( Area_code INTEGER, phone INTEGER ) NOT FINAL; CREATE TABLE properties( price NUMBER(11,4), owner VARCHAR(30), location address ); 20 5.3.2 Beispiel: Subtypes Supertypes INSERT INTO properties VALUES( 1000000, 'Mr.S.White', us_addr('1654Haeth Road','Heath','OH',45394, 1222, 5550231)); PRICE OWNER LOCATION(STREET, CITY, STATE, ZIP) 1000000 Mr.S.White US_ADDR( '1654Haeth Road ', 'Heath ' , 'OH', 45394, 1222, 5550231) 21 5.4 Rowtypes / Typed tables CREATE TYPE point_t AS OBJECT( x FLOAT, y FLOAT ); CREATE TABLE Points OF point_t; DESC Points; Name Null? X Y Typ FLOAT(126) FLOAT(126) 22 5.5. Nested Tables CREATE TYPE PolygonType AS TABLE OF point_t; polygontype TABLE OF POINT_T Name X Y CREATE TABLE Polygons ( Name VARCHAR2(20), punkte PolygonType) NESTED TABLE punkte STORE AS PunkteTab; Null? Typ FLOAT(126) FLOAT(126) Name Null? Typ NAME VARCHAR2(20) PUNKTE POLYGONTYPE 23 6 User Defined Methods • Prozeduren und Funktionen in SQL • Auswertung, Berechnung, Manipulation • Ergebnis wird im DBMS berechnet – weiniger Datentransfer • Vereinbarung außerhalb der Typdefinition • Punktnotation: Typ.Mehtode() • Werden mit vererbt; Override möglich 24 6.1 MEMBER – STATIC • MEMBER – Bezieht sich auf eine Instanz des Typs – Verändert keine Attribute – Impliziter Parameter SELF • STATIC – Bezieht sich auf den Typ – Kein impliziter SELF Parameter 25 6.2 Beispiel MEMBER – Funktion in Oracle CREATE TYPE point_t AS OBJECT( x FLOAT,y FLOAT, MEMBER FUNCTION distance (p point_t) RETURN FLOAT ); CREATE OR REPLACE TYPE BODY point_t AS MEMBER FUNCTION distance (p point_t) RETURN FLOAT IS BEGIN RETURN sqrt(power(SELF.x-p.x, 2)+power(SELF.y-p.y, 2)); END; CREATE TABLE Points OF point_t; 26 6.2 Beispiel MEMBER – Funktion in Oracle (fort.) insert insert insert insert into into into into Points Points Points Points VALUES(1,1); VALUES(1,4); VALUES(4,4); VALUES(4,1); select * from points p where p.distance(point_t(0,0))>=4; X 1 4 4 Y 4 4 1 27 6.3 Vergleichsoperationen • Formen: a) EQUALS ONLY • • Nur Test auf Gleichheit Ergebnistyp: Boolean (TRUE/FALSE) b) ORDER FULL • • Test auf Ergebnistyp: <, < 0, =, = 0, > >0 28 6.3.1 Vergleichskategorien • STATE – Funktion (EQUALS ONLY) – Vom DBMS selbst erzeugt – Ergebnistyp: Boolean (TRUE/FALSE) – – Muss für den Obertyp definiert werden • RELATIVE – – – – Vom Anwender definiert Zwei Eingabeparameter Ergebnistyp: < 0, = 0, >0 Muss für den Obertyp definiert werden • MAP – Nur ein Parameter – Wandelt in vordefinierten Typ um Vergleich 29 6.3.2 Anwendung der Vergleichskategorien • STATE – State_comp_func (Value1, Value2) = TRUE/FALSE • RELATIVE – Relative_comp_func (Value1, Value2) = 0 , >0 oder <0 • MAP – Map_func1 (Value1) = Map_func2 (Value2) 30 6.4 Cast - Funktionen • • UDT erschient wie anderer Datentyp Distinct UDTs mit impliziter CAST – Fkt. CREATE TYPE meters AS INTEGER FINAL CAST ( SOURCE AS DISTINCT ) WITH meters CAST ( DISTINCT AS SOURCE ) WITH INTEGER; - - CREATE CAST( typ1 AS typ2 ) WITH FUNCTION cast_func( typ1 ); 31 6.5 Erzeugerfunktion CREATE TYPE emp_t AS OBJECT( ename CHAR(31), dept CHAR(20), STATIC FUNCTION new_emp (name VARCHAR2, dept VARCHAR2) RETURN emp_t); CREATE BODY emp_t IS STATIC FUNCTION new_emp (name VARCHAR2, dept VARCHAR2) RETURN emp_t IS BEGIN RETURN emp_t(name, dept); END; END; INSERT INTRO emps VALUES (emp_t.new_emp('Jörgen', 'Service')); 32 6.5.1 Abstrakte UDTs • Keine Erzeugung einer Instanz möglich • UDT, mit mindestens einem Untertypen CREATE TYPE Individuum AS OBJECT( Name VARCHAR(30), Adresse VARCHAR(100) ) NOT FINAL NOT INSTANTIABLE; CREATE TYPE Mensch UNDER Individuum( Vorname VARCHAR(20), Telefon NUMBER(20) ) NOT FINAL INSTANTIABLE; 33 7 Referenzen • Object ID (OID) für jede Instanz = Zeiger • Referenzen (REFs) sind diese Zeiger SELECT REF(e) FROM emps e WHERE ename='Jörgen'; REF(E) 0000280209342BDA0E8BFA417F9ADF6812510BB1176C32804 72D7748EA84B2BD78AA84C447020001420000 SELECT VALUE(e) FROM emps e WHERE ename='Jörgen'; VALUE(E)(ENAME, DEPT) EMP_T('Jörgen', 'Service') 34 7.1 Referenzieren und dereferenzieren CREATE TABLE workPeople ( W_ID INTEGER PRIMARY KEY, Emp REF emp_t); INSERT INTO workpeople (E_ID, Emp) VALUES ( 12,(SELECT REF(e) FROM emps e WHERE ename='Jörgen')); SELECT W_ID, DEREF(emp).ename, DEREF(emp).dept FROM workpeople; W_ID 12 DEREF(W.EMP).ENAME Jörgen DEREF(W.EMP).DEPT Service 35 8. Collection Types • Arrays – – – – – – Alle Elemente haben gleichen Typ Typ kann UDT sein Maximallänge muss definiert werden Zugriff über ganzzahligen Feldindex Verwendung als Datentyp für Spalten In Oracle eigner UDT nötig 36 8.1 Beispiel: Collection Types CREATE TABLE reports( R_ID INTEGER, title VARCHAR(100), authors VARCHAR(15) ARRAY[5]); CREATE TYPE authors_array AS VARRAY(5) OF CHAR(15); CREATE TABLE reports_feld ( id INTEGER PRIMARY KEY, authors authors_array, title VARCHAR(100) ); SELECT R_ID, authors[1] AS Name FROM reports; 37 9. Table/View Hierarchies • • • • • • • Analog zu Ober-/Untertypen Views und Tabellen gleich Untertabellen erben alle Attribute und Methoden Zusätzliche Attribute und Methoden DML – Befehle für Hierarchien erweitert Datensatz aus einer Untertabelle ist in Obertabelle Datensatz aus Obertabelle muss nicht in einer Untertabelle sein 38 9.1 Beispiel Tabellenhierarchie CREATE TYPE Grundstueck . . . NOT FINAL; CREATE TYPE Lager UNDER Grundsueck . . . NOT FINAL; CREATE TYPE Haus UNDER Grundsueck . . . NOT FINAL; CREATE TABLE Immobilien OF Grundstueck; CREATE TABLE Lager_Lst OF Lager UNDER Immobilien; CREATE TABLE Haeuser OF Haus UNDER Immobilien; 39