Kapitel 8 Erweiterbarkeit Oracle Cartridges DB2 Extenders Informix DataBlades Motivation l Neuere Anwendungen benötigen spezielle Datentypen und Funktionen – – – – – geometrische, mehrdimensionale Daten zeitbezogene Daten Bild-, Audio- oder Video-Daten HTML- oder XML-Daten ... l Erweiterung des Datenbanksystem um neue Funktionalität l Ein DBS kann aber nicht alle möglichen Erweiterungen vorhersehen – – Lösung: Offene (erweiterbare) Datenbanksysteme Anpassung je nach Bedarf Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-2 Ebenen der Erweiterbarkeit l Erweiterung des Typsystems um anwendungsspezifische Datentypen – – Räumliche, zeitliche, Bild-, Audio- und Videodatentypen Angereichertes Typsystem allein bietet noch keine allgemeine Lösung n Typsystem muss an spezielle Bedürfnisse anpassbar sein l Erweiterung der Anfragesprache um neue Operationen – – Neue Resultattypen und Arten von Aggregationen in der SELECT-Klausel Neue Prädikate in der WHERE-Klausel l Erweiterung um passende Methoden des physischen Datenbankentwurfs – Indextypen für benutzerdefinierte Datentypen l Erweiterung der Anfrageoptimierung um neue Regeln – – Selektivitäts- und Kostenfunktionen für benutzerdefinierte Funktionen und Indexe Kombination von Indexen Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-3 Erweiterungsmodule Erweiterungsmodul Erweiterungsmodul l Kommerzielle Module (DataBlades, Cartridges, Extenders) beinhalten – Spezielle, benutzerdefinierte Datentypen und Operationen – Spezielle Indextypen & Zugriffsmethoden – Regeln und Informationen für den Anfrageoptimierer Erweiterungsmodul Erweiterungsmodul Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Erweiterbarer Typmanager Erweiterbarkeitsschnittstelle - API l Serverseitige Pakete, die Funktionalität für ein bestimmtes Anwendungsgebiet bieten Erweiterbarer SQL-Parser Erweiterbare Zugriffsmethoden Erweiterbarer Optimierer Erweiterbare Anfrageverarbeitung Erweiterbarer Speichermanager 8-4 Erweiterung des Datenbankservers l Gründe – – – Performance n Optimierung von Anfragen mit benutzerdefinierten Operationen n Indexunterstützung für benutzerdefinierte Datentypem n Geringere Netzwerkbelastung Flexibiltät n Transparente Erweiterung auch bei Upgrades von Erweiterungsmodulen Transaktionskontrolle n Operationen des Erweiterungsmoduls in Transaktionen ausgeführt l Erweiterungsmodule statt Erweiterungen über Stored Procedures/Trigger – – Kontrolle: Einfaches Installieren, Upgraden und Entfernen eines Moduls Wiederverwendung/Strukturierung: Ein Modul kann Teil ein anderes Moduls sein Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-5 Erweiterbarkeit in Informix durch DataBlade l DataBlade – – – – Software-Paket, das die Funktionalität des Datenbankservers erweitert Besteht aus SQL-Anweisungen und Code in SPL (Stored Procedure Language) oder einer externen Programmiersprache geschrieben Kann spezielle Zugriffsmethoden definieren und Funktionen für den Aufbau, Verwaltung und Verwendung von Indexen bereitstellen Kann Selektivitäts- und Kostenfunktionen für den Anfrageoptimierer bereitstellen l Verfügbare DataBlades – – – – Excalibur Text Search, Image DataBlades Spatial, Time Series, Geodetic DataBlades Video, Web, NAG (Numerical Algorithm Group) DataBlades ... Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-6 Excalibur Text Search DataBlade l Stellt Funktionen bereit für – – – – – Effiziente Volltextsuche Anlegen und Entfernen von Synonymen und Stopwortlisten Anlegen und Entfernen von eigenen Zeichensätzen Relevanzbewertung und Ranking von Suchergebnissen Highliting von Suchbegriffen l Besteht im wesentlichen aus drei Komponenten – – – Zugriffsmethode ermöglicht das Erzeugen eines Indexes auf einem Attribut vom Typ BLOB, CLOB, CHAR, VARCHAR, LVARCHAR Operator etx_contains führt die Suche aus Routinen zum Aufbau, Abgleich und Zugriff auf den Index 8-7 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Erzeugen eines Indexes l Sei folgende Tabellendefinition gegeben CREATE TABLE Videos (ID Titel Beschreibung INTEGER, VARCHAR(30), BLOB); l Anlegen eines Indexes auf dem Attribut "Beschreibung" CREATE INDEX BeschreibungIdx ON Videos (Beschreibung etx_clobs_ops) USING etx; – Zugriffsmethode und sonstige Parameter werden in der USING-Klausel festgelegt n USING etx (Parameter) ... Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-8 Index-Parameter l Festlegen des Zeichensatzes – – CHAR_SET = X, wobei X∈{ASCII, ISO, OVERLAP_ISO} Eigene Zeichensätze können mit etx_CreateCharSet() und etx_DropCharSet() definiert bzw. entfernt werden l Filterung von Formatierungsimformationen (Umwandlung in ASCII-Text) – FILTER = X, wobei X∈{NONE, STOP_ON_ERROR, CONTINUE_ON_ERROR} l Unterstützung der Pattern-Suche – WORD_SUPPORT = X, wobei X∈{EXACT, PATTERN} l Grad der Phrasen-Unterstützung – PHRASE_SUPPORT = X, wobei X∈{NONE, MEDIUM, MAXIMUM} Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-9 Der etx_contains Operator l etx_contains(Indexattribut, Suchstring, [etxReturnVariable]) – Art der Suche im Suchstring festgelegt n SEARCH_TYPE=WORD (Default; Schlüsselwortsuche) n SEARCH_TYPE=BOOLEAN_SEARCH (Ausdrücke gebildet mit &, |, !) n SEARCH_TYPE=PHRASE_EXACT (Exakte Phrasen-Suche) n SEARCH_TYPE=PHRASE_APPROX (Approximative Phrasen-Suche) n SEARCH_TYPE=PROX_SEARCH(X) (Proximity-Suche, X-viele Wörter dürfen maximal zwischen zwei gesuchten Begriffen stehen) n PATTERN_BASIC (Pattern-Suche mit Best Match) n PATTERN_TRANS (Pattern-Suche mit einfacher Vertauschung) n PATTERN_SUBS (Pattern-Suche mit einfacher Ersetzung) n PATTERN_ALL (Pattern-Suche mit allen drei obigen Optionen) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-10 Tupeltyp etx_ReturnType l Verwaltet Score- und Highlite-Informationen – Typ des optionalen Parameters der Funktion etx_contains CREATE ROW TYPE etx_ReturnType ( score REAL, hilite_info etx_InternalHilite, ); – – Attribut score gibt die Relevanz des Suchergebnisses an (0 bis 100) n 100 entspricht "Exact Match" Attribut hilite_info enthält Information über die zu hervorzuhebenden Teile der Suchergebnisse Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-11 Beispiele für Sucharten (1) l Schlüsselwort-Suche (... liefere alle Videos, deren Beschreibung die Worte "Database" und/oder "Object" enthalten) SELECT * FROM Videos WHERE etx_contains(Beschreibung, ROW('Database Object', 'SEARCH_TYPE=WORD')); l Boole'sche Suche (... liefere alle Videos, deren Beschreibung die Begriffe "Database" und "Object", aber nicht "Relation" enthalten) SELECT * FROM Videos WHERE etx_contains(Beschreibung, ROW('Database & Object & !Relation', 'SEARCH_TYPE=BOOLEAN_SEARCH')); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-12 Beispiele für Sucharten (2) l Pattern-Suche (... liefere maximal 5 Videos, deren Beschreibung die Worte "Database" und/oder "Object" mit maximal nur einem Verdreher enthalten) SELECT * FROM Videos WHERE etx_contains(Beschreibung, ROW('Database Object', 'PATTERN_TRANS & MAX_MATCHES=5')); l Pattern-Suche (... liefere alle Videos, deren Beschreibung die Teile der Worte "Database" und/oder "Object" mit einer bestimmte Quote enthalten) SELECT * FROM Videos WHERE etx_contains(Beschreibung, ROW('Database Object', 'PATTERN_ALL & WORD_SCORE=85')); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-13 Lesestoff Beispiele für Sucharten (3) l Pattern-Suche (... liefere sortiert die Videos, deren Beschreibung die Worte "Database" und/oder "Object" mit maximal nur einem Verdreher bzw. Tippfehler enthalten) SELECT rcl.score, Titel FROM Videos WHERE etx_contains(Beschreibung, ROW('Database Object', 'PATTERN_TRANS & PATTERN_SUBS'), rcl#etx_ReturnType) ORDER BY 1; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-14 Lesestoff Anlegen und Entfenen von Synonym- und Stopwortlisten l Anlegen von Synonym- und Stopwortlisten EXECUTE PROCEDURE etx_CreateSynWlst('MySynList', '/local0/exclist/MySynList'); EXECUTE PROCEDURE etx_CreateStopWlst('MyStopWList', '/local0/exclist/MyStopWList'); – Listen bestehen aus Wörtern, die durch Blanks getrennt sind l Entfernen von Synonym- und Stopwortlisten EXECUTE PROCEDURE etx_DropSynWlst('MySynList'); EXECUTE PROCEDURE etx_DropStopWlst('MySynList'); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-15 Lesestoff Verwenden von Synonym- und Stopwortlisten l Synonymliste bei der Suche verwenden SELECT * FROM Videos WHERE etx_contains(Beschreibung, ROW('Database', 'MATCH_SYNONYM=MySynList')); l Stopwortliste bei der Suche verwenden SELECT * FROM Videos WHERE etx_contains(Beschreibung, ROW('Object-Relational Database', 'SEARCH_TYPE=PHRASE_EXACT & CONSIDER_STOPWORDS')); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-16 Entwicklung eigener DataBlades l DataBlade Developers Kit bietet graphische Entwurf- und Debuggingtools – – – – – BladeSmith: Erzeugen eines DataBlades n Generiert Quellcode, SQL-Skripte, Test- und Installationsdateien BladePack: Verpacken eines DataBlades BladeManager: Registrierung eines DataBlades in einer Datenbank DBDK Visual C++ Add-In: Debugging eines DataBlades IfxQuery: Durchführung von SQL-Debugging-Tests l Entwicklungssprachen: C, C++, JAVA, SPL Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-17 Entwicklung eigener DataBlades (Forts.) l Entwicklung von DataBlades erfordert sowohl Wissen über die interne Server-Architektur als auch über den Einfluss von DataBlades auf – – Virtuelle Prozessoren - Betriebssystemtasks für z.B. n Ausführung von SQL-Anfragen und Stored Procedures n Verbindungsaufbau n Holen der Daten Speicherverwaltung n Kommunikation erfolgt über Shared Memory n Funktionen der DataBlade API bzw. JDBC 2.0 API müssen verwendet werden l DataBlades werden i.d.R. von spezialisierten Drittanbietern entwickelt Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-18 Opaque Typen als zentrales Erweiterbarkeitskonzept l Opaque Typen sind atomare, benutzerdefinierte Typen, deren interne Struktur vollständig eingekapselt und somit dem DBMS nicht bekannt ist l Bei der Definition muss dem DBMS folgendes bereitgestellt werden: – – Interne Speicherstruktur für Instanzen des Opaque-Typs dient Support-Funktionen, die auf der internen Speicherstruktur operieren n Ermöglichen dem DB-Server Opaque-Typen zu verwenden n INPUT- Konvertiert Opaque-Typ von externer in interne Darstellung n OUTPUT- Konvertiert Opaque-Typ von interner in externe Darstellung n ASSIGN - Konstruktor n DESTROY - Destruktor n COMPARE - Vergleicht zwei Instanzen des Opaque-Typs Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-19 Opaque-Typen l Syntax: – – – – CREATE OPAQUE TYPE Typname ( INTERNALLENGTH = [VARIABLE|Länge] [MAXLEN=Länge] [CANNOTHASH] [PASSBYVALUE] ) INTERNALLENGTH legt Grösse (in Bytes) fest MAXLEN legt maximal Grösse (in Bytes) fest CANNOTHASH sagt, dass der DB-Server keine Hash-Funktion verwenden kann PASSBYVALUE spezifiziert, dass ein Opaque-Typ "By Value" übergeben wird (Defaulteinstellung: "By Reference") Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-20 Vorgehensweise l Interne Struktur in C oder JAVA definieren l Support-Funktionen als externe Funktionen implementieren l Registrierung des Opaque-Typs mittels CREATE OPAQUE TYPE l Registrierung der Support-Funktionen mittels CREATE FUNCTION l Definition von Cast-Funktionen mittels CREATE CAST l Tabellen und Indexe anlegen Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-21 Erweiterbarkeit in Oracle durch Cartridges l Cartridge – – – – Software-Paket, das die Funktionalität des Datenbankservers erweitert Besteht aus benutzerdefinierten Datentypen und Funktionen n Code-Implementierung in PL/SQL, C, C++, JAVA Kann eigene Zugriffsmethoden definieren und Funktionen für den Aufbau, Verwaltung und Verwendung spezieller Indexstrukturen bereitstellen Kann Selektivitäts- und Kostenfunktionen enthalten, die bei der Verarbeitung cartridge-definierter Operationen vom Anfrageoptimierer benutzt werden l Verfügbare Cartridges (heissen nun Optionen) – – – interMedia Option (Text, Audio, Image, Video, Locator) Spatial, Time Series, Visual Information Retrieval Options ... Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-22 InterMedia Image Option l Unterstützt die Speicherung und Bearbeitung von digitalisierten Bildern l Stellt Funktionen zur Verfügung, um – – – – Bildinhalte zu speichern, kopieren und auszulesen automatisch die technischen Bildattribute zu bestimmen n Höhe und Breite (in Pixeln) n Grösse (in Bytes) n Graphikformat (z.B. GIF oder BMP) n Art der Farbkodierung (S/W, Anzahl der Graustufen/Farben) n Art der Komprimierung (z.B. JPEG oder LZW) die Kodierung eines Bildes zu ändern die technischen Bildattribute in Anfragen zu verwenden Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-23 Image - Objekttyp l Speicherungsformate für Bildinhalte: BLOB (für grosse Binärobjekte) und BFILE (als externe Dateien) l Image Cartridge definiert PL/SQL-Paket ORDSYS mit Objekttyp CREATE TYPE ORDImage AS OBJECT ( source ORDSource, height INTEGER, width INTEGER, contentLength INTEGER, fileFormat VARCHAR2(4000), contentFormat VARCHAR2(4000), compressionFormat VARCHAR2(4000), mimeType VARCHAR2(4000), -- Methodendeklarationen ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-24 Image - Methoden l Methoden (nur einige ausgewählte) – setProperties() n extrahiert und speichert die Bildattribute n nach jeder Aktualisierung des Bildinhalts aufrufen, damit die aktuellen Werte der Bildattribute Anfragen zur Verfügung stehen – copyContent(dest IN OUT ORDImage) n kopiert Bild nach dest – process(command IN VARCHAR2) n kodiert Bildinhalte um entsprechendem Konversionsparameter command – importFrom(ctx IN OUT RAW, sourceType IN VARCHAR2, sourceLocation IN VARCHAR2, sourceName IN VARCHAR2 ) n importiert ein externes Bild in die DB ... (get/set-Methoden, Migrations-Methoden, etc.) – Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-25 Lesestoff command-Parameter der process-Methoden l Konversionsparameter der Form: – – "´" Parametername = Wert [Parametername = Wert] "´" Parameternamen (Werte): n fileFormat (GIFF, TIFF, PCXF, ...) n contentFormat (MONOCHROME, RAW, 4BITGRAYSCALE, ...) n compressionFormat (JPEG, LZW, BMPRLE, ...) n compressionQuality (LOWCOMP, MEDCOMP, HIGHCOMP, ...) n ... Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-26 Benutzung des Image-Objekttyps l Definition einer Tabelle mit Bildern CREATE TABLE Personen ( Name VARCHAR(30), Passphoto ORDSYS.ORDImage, Freizeitphoto ORDSYS.ORDImage ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-27 Erzeugen von Image-Instanzen l Speicherung von Bildern in der Tabelle Personen – – Passphoto als BFILE Freizeitphoto als BLOB l Beispiel: Folgende Anweisung erzeugt Person 'Billy' mit einem Freizeitphoto, das extern als GIF-Datei 'PBilly.gif' abgelegt ist INSERT INTO Personen VALUES ('Billy', ORDSYS.ORDImage(ORDSYS.ORDSource(empty_blob(), 'file','ORDIMGDIR', 'PBilly.gif', SYSDATE,0), NULL,NULL,NULL,NULL,NULL,NULL,NULL), ORDSYS.ORDImage(ORDSYS.ORDSource(empty_blob(), NULL,NULL,NULL,SYSDATE,1), NULL,NULL,NULL,NULL,NULL,NULL,NULL)); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-28 Extraktion von Bildattributen l Im Rahmen von PL/SQL-Programmen DECLARE i ORDSYS.ORDImage; -- Anwendungsvariable BEGIN SELECT Passphoto INTO i -- Passphoto von Billy FROM Personen -- in Variable speichern WHERE Name = 'Billy' FOR UPDATE; i.setProperties; -- Bildattribute ermitteln UPDATE Personen SET Passphoto = i WHERE Name = 'Billy'; -- Passphoto mit neuen -- Bildattributwerte belegen END; 8-29 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Umwandlung von Bildformaten l Im Rahmen von PL/SQL-Programmen DECLARE i ORDSYS.ORDImage; -- Anwendungsvariable BEGIN SELECT Passphoto INTO i -- Passphoto von Billy FROM Personen -- in Variable speichern WHERE Name = 'Billy' FOR UPDATE; i.process('fileFormat=TIFF'); -- In TIFF-Format umwandeln UPDATE Personen SET Passphoto = i WHERE Name = 'Billy'; -- Passphoto mit neuem -- Bildformat speichern END; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-30 Lesestoff Import von Bildern l Bild von einer externen Datei in die DB einbringen DECLARE i ORDSYS.ORDImage; -- Anwendungsvariablen ctx RAW(4000) := NULL; BEGIN SELECT Freizeitphoto INTO i -- Freizeitphoto von Billy FROM Personen -- in Variable speichern WHERE Name = 'Billy' FOR UPDATE; i.importFrom(ctx, 'file', 'ORDIMGDIR', 'Billy.gif'); -- Bild importieren UPDATE Personen SET Freizeitphoto = i WHERE Name = 'Billy'; -- Freizeitphoto mit neuem -- Bild belegen END; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-31 Beispielanfragen l Liefere alle Freizeitbilder von Billy, die eine bestimmte Breite nicht überschreiten SELECT Name, Freizeitphoto.getWidth() FROM Personen WHERE Name = 'Billy' AND Freizeitphoto.getWidth() < 32; l Liefere die Namen der Personen mit der "Länge" der zugehörigen Passphotos, wenn das Bild im JPEG-Format vorliegt SELECT Name, Passphoto.getContentLength() FROM Personen WHERE Passphoto.getCompressionFormat() = 'JPEG'; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-32 Lesestoff Erweiterung der Image Option l Anlegen eines neues Objekttyps "AnnotatedImage" CREATE TYPE AnnotatedImage AS OBJECT ( image ORDSYS.ORDImage, description VARCHAR(2000), MEMBER PROCEDURE setProperties(SELF IN OUT AnnotatedImage), MEMBER PROCEDURE copy(dest IN OUT AnnotatedImage), ... ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-33 Lesestoff Erweiterung der Image Option (2) l Definition der Methoden des Objekttyps "AnnotatedImage" CREATE TYPE BODY AnnotatedImage AS MEMBER PROCEDURE setProperties(SELF IN OUT AnnotatedImage) IS BEGIN SELF.image.setProperties; SELF.description := 'Dies ist eine Beispielbeschreibung'; END SetProperties; MEMBER PROCEDURE copy(dest IN OUT AnnotatedImage) IS BEGIN SELF.image.copy(dest.image); dest.description := SELF.description; END Copy; ... ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-34 Lesestoff Nutzung des neuen Image-Typs (1) l Anlegen eines Verzeichnisses und einer Tabelle mit annotierten Bildern und erzeugen eines entsprechenden Tupels CREATE DIRECTORY AIMGDIR AS 'C:\AnnotatedImages'; CREATE TABLE AnnotierteBilder ( ID NUMBER, Bild AnnotatedImage); INSERT INTO AnnotierteBilder VALUES (1, AnnotatedImage(ORDSYS.ORDImage( ORDSYS.ORDSource(empty_blob(), 'file','ORDIMGDIR', 'Billy.gif', SYSDATE,0), NULL,NULL,NULL,NULL,NULL,NULL,NULL), NULL)); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-35 Lesestoff Nutzung des neuen Image-Typs (2) l Bildattribute extrahieren und speichern DECLARE a AnnotatedImage; BEGIN SELECT Bild INTO a FROM AnnotierteBilder WHERE ID = 1 FOR UPDATE; a.setProperties(); DBMS_OUTPUT.PUT_LINE('Dieses Bild hat wird beschrieben durch '); DBMS_OUTPUT.PUT_LINE(a.description); UPDATE AnnotierteBilder SET Bild = a WHERE ID = 1; END; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-36 Entwicklung eigener Cartridges l Definition der Objekttypen und Methoden l Definition eines Indextyps: – – – Definition der Operatoren, die durch den neuen Indextyp unterstützt werden Implementierung der Index-Schnittstelle ODCIIndex n Index-Definition: ODCIIndexCreate, ODCIIndexAlter, ODCIIndexDrop n Index-Aktualisierung: ODCIIndexInsert, ODCIIndexDelete, ODCIIndexUpdate n Index-Scan: ODCIIndexStart, ODCIIndexFetch, ODCIIndexClose Erzeugen des Indextyps als Schemaobjekt l Definition von Statistiken, Selektivitäts- und Kostenfunktionen l Wissen über interne Speicher- und Threadverwaltung ist für die Cartridge-Implementierung notwendig (Oracle bietet Cartridge-Services) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-37 Entwicklung eines Text-Indextyps CREATE FUNCTION TextContains(Text IN VARCHAR2, Key IN VARCHAR2) RETURN NUMBER AS BEGIN ... END TextContains; CREATE OPERATOR Contains BINDING (VARCHAR2, VARCHAR2) RETURN NUMBER USING TextContains; CREATE TYPE TextIndexMethods (FUNCTION ODCIIndexCreate(...), FUNCTION ODCIIndexAlter(...), ...); CREATE TYPE BODY TextIndexMethods ( ... ); CREATE INDEXTYPE TextIndexType FOR Contains(VARCHAR2, VARCHAR2) USING TextIndexMethods; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-38 Verwendung des Text-Indextyps -- Definition einer Beispieltabelle CREATE TABLE Personen ( Name VARCHAR2(30), Bewerbung VARCHAR2(2000) ); -- Erzeugung eines Text-Indexes auf dem Attribut Bewerbung CREATE INDEX PersonenIdx ON Personen (Bewerbung) INDEXTYPE IS TextIndexType; -- Verwendung des indexgestützten Contains-Operators SELECT * FROM Employees WHERE Contains(Bewerbung, 'Datenbanken')=1; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-39 Erweiterbarkeit in DB2 durch Extender l Extender – – – – Software-Paket, das die Funktionalität des Datenbankservers erweitert Besteht aus benutzerdefinierten Datentypen und Funktionen Kann Zugriffsmethoden mit Funktionen für den Aufbau, Verwaltung und Verwendung spezieller Indexstrukturen bereitstellen Kann Selektivitäts- und Kostenfunktionen für die Anfrageoptimierung definieren l Verfügbare Extenders – – – – Image, Audio, Video, Text Extender Spatial, XML, Net Search Extender EcoWin Time Series Extender ... Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-40 DB2 Spatial Extender l Als Teil des DataJoiner ausgeliefert l Unterstützt die Speicherung und Bearbeitung von raumbezogenen Daten l Stellt Funktionen bereit, um – – – Punkte, Linienzüge, Flächen zu erzeugen, ändern und löschen Räumliche Beziehungen zwischen derartigen geometischen Objekten zu ermitteln Flächenberechnungen etc. durchzuführen 100 l Bietet Grid-File als Spatial-Indexstruktur an 75 50 25 0 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) A F L R Z 8-41 Geometry-Typhierarchie ST_Geometry ST_Curve ST_Surface ST_LineString ST_Polygon ST_Point ST_MultiPoint Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) ST_GeomCollection ST_MultiCurve ST_MultiSurface ST_MultiLineString ST_MultiPolygon 8-42 Benutzung eines Geometry-Typs l Definition einer Tabelle mit raumbezogenen Daten CREATE TABLE Markt ( Name VARCHAR(30), Flaeche db2sge.ST_Polygon ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-43 Erzeugen von Geometry-Instanzen l Erzeugen neuer Märkte INSERT INTO Markt VALUES ('Cola', db2gse.ST_PolyFromText('polygon (1 1, 1 7, 5 7, 5 1, 1 1)', db2gse.coordref()..srid(0))); INSERT INTO Markt VALUES ('Wein', db2gse.ST_PolyFromText('polygon (3 3, 6 3, 6 5, 4 5, 3 3)', db2gse.coordref()..srid(0))); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-44 Erzeugen eines Spatial-Indexes l Definition mittels der CREATE INDEX Anweisung CREATE INDEX MarktSpatialIdx ON Markt(Flaeche) USING SPATIAL_INDEX (10.0e0, 100.0e0, 1000.0e0); – – Spatial-Index wird als Grid-File angelegt Parameter geben die Grösse der jeweiligen Grid-Stufen an l Funktionsweise des Spatial-Indexes bei Einfügen eines Eintrags – – Falls mehrere Grid-Stufen definiert wurden, versucht DB2 immer den kleinsten Level zu gebrauchen Überlappt jedoch das Geometry-Objekt mit mehr als drei Grid-Zellen der jeweilgen Grid-Stufe, wird die nächsthöhere Grid-Stufe verwendet Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-45 Geometry-Funktionen (1) FUNCTION db2sge.ST_Intersection(g1 db2sge.ST_Geometry, g2 db2sge.ST_Geometry) RETURNS db2sge.ST_Geometry; – – Liefert den Durchschnitt der beiden Objekte Weitere Funktionen n ST_Union n ST_Difference FUNCTION db2sge.ST_AREA(g db2sge.ST_Geometry) RETURNS DECIMAL; – Liefert die Fläche eines geometischen Objektes Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-46 Geometry-Funktionen (2) db2sge.Intersects( g1 db2sge.ST_Geometry, g2 db2sge.ST_Geometry) RETURN INTEGER; – – Liefert 1 (TRUE), wenn der Durchschnitt der beiden Objekte nicht leer ist Weitere Funktionen n ST_Within (g2 vollständig in g1 enthalten) n ST_Contains (g1 vollständig in g2 enthalten) n ST_Equals (g1 gleich g2) n ST_Touches (g1 und g2 berühren sich; nur gemeinsame Kantenpunkte) n ST_Disjoint (Durchschnitt ist leer) n ST_Overlaps (Durchschnitt und beide Differenzen sind nicht leer) n ST_Crosses (Durchschnitt ist nicht leer und eine Dimension kleiner) n ST_Distance (Berechnet Distanz zwischen g1 und g2) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-47 Geometry-Funktionen (3) db2sge.Relate(g1 g2 PatternMatrix RETURN INTEGER; – – db2sge.ST_Geometry, db2sge.ST_Geometry, String) Liefert 1 (TRUE), wenn g1 und g2 wie in PatternMatrix angegeben in Beziehung stehen PatternMatrix für Equals Interior Boundary Exterior n String('T*F**FFF*') Interior T * F Boundary Exterior Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) * F * F F * 8-48 Beispielanfragen (1) l Liefere den Durchschnitt zweier Geometrie-Objekte SELECT db2sge.ST_Intersection(a.Flaeche, b.Flaeche) FROM Markt a, Markt b WHERE a.name = 'COLA' AND b.name = 'WEIN'; l Gib die Namen aller Märkte aus, deren Flächen sich schneiden SELECT a.Name, a.Name FROM Markt a, Markt b WHERE db2sge.ST_Intersects(a.Flaeche, b.Flaeche); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-49 Beispielanfragen (2) l Liefere alle Märkte, deren Fläche einen bestimmten Wert überschreitet SELECT a.Name, db2sge.ST_Area(a.Flaeche) FROM Markt a WHERE db2sge.ST_Area(a.Flaeche) > 100; l Gib die Distanz zwischen zwei Geometrie-Objekten aus SELECT a.Name, b.Name, db2sge.ST_Distance(a.Flaeche, b.Flaeche) FROM Markt a, Markt b; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-50 Lesestoff Anhang Oracle Spatial Cartridge Informix Geodetic DataBlade Informix Spatial DataBlade Lesestoff Oracle Spatial Cartridge l Unterstützt die Speicherung und Bearbeitung von raumbezogenen Daten l Stellt Funktionen bereit, um – – – – Punkte, Linienzüge, Flächen zu erzeugen, ändern und löschen Räumliche Beziehungen zwischen derartigen geometischen Objekten zu ermitteln Flächenberechnungen durchzuführen ... l Bietet einen Quad-Tree als Spatial-Indexstruktur an NW NO SW SO Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-52 Lesestoff Objekttyp SDO_GEOMETRY (1) l PL/SQL-Paket MDSYS definiert Objekttyp SDO_GEOMETRY CREATE TYPE SDO_GEOMETRY AS OBJECT ( SDO_GTYPE NUMBER, SDO_SRID NUMBER, SDO_POINT SDO_POINT_TYPE, SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY, SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY); ); l SDO_GTYPE: Typ des Geometrie-Objekts, D definiert #Dimensionen D001-D007 = POINT, LINESTRING, POLYGON, COLLECTION, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON l SDO_SRID: Reserviert für zukünftige Erweiterungen l SDO_POINT: Punktdaten Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-53 Lesestoff Objekttyp SDO_GEOMETRY (2) l SDO_ELEM_INFO: – – – – Tripel (SDO_STARTING_OFFSET, SDO_ETYPE, SDO_INTERPRETATION) SDO_STARTING_OFFSET: Bestimmt ersten Punkt in SDO_ORDINATES SDO_ETYPE-Werte: n 1, 2, 3, 1003, 2003: einfache Polygon-Ringe n 4, 5, 1005, 2005: zusammengesetzte Polygon-Ringe n 100X ("Exterior"; Gegenuhrzeigersinn) n 200X ("Interior"; Uhrzeigersinn) SDO_INTERPRETATION: Legt Interpretation der SDO_ETYPE-Werte fest l SDO_ORDINATES: Variabler Array von NUMBER-Werten definiert die Koordinaten des Geometrie-Objekts Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-54 Lesestoff Illustration der Eigenschaften eines Geometrie-Objektes • Zweidimensionales Polygon-Objekt r: (10,40) (25,40) (10,15) (25,15) SDO_GEOMETRY r = (SDO_GTYPE SDO_SRID SDO_POINT SDO_ELEM_INFO SDO_ORDINATES =2003, =NULL, =NULL, =(1, 1003, 3), =(10,15, 25,40)); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-55 Lesestoff Benutzung des Geometry-Objekttyps l Definition einer Tabelle mit raumbezogenen Daten CREATE TABLE Markt ( Name VARCHAR(30), Flaeche MDSYS.SDO_GEOMETRY ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-56 Lesestoff Erzeugen von Geometry-Instanzen l Erzeugen neuer Märkte INSERT INTO Markt VALUES ('Cola', MDSYS.SDO_GEOMETRY(2003, -- zweidimensionales Polygon NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), -- Rechteck MDSYS.SDO_ORDINATE_ARRAY(1,1, 5,7))); -- Eckpunkte (lu,ro) INSERT INTO Markt VALUES ('Wein', MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3))); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-57 Lesestoff Erzeugen von Meta-Daten l Propagiere Änderungen an die Sicht USER_SDO_GEOM_METADATA – – Notwendig, um einen Spatial-Index aufzubauen Jede Tabellen-Attribut-Kombination muss separat bekannt gemacht werden INSERT INTO USER_SDO_GEOM_METADATA VALUES ('Markt', 'Flaeche', MDSYS.SDO_DIM_ARRAY(1,1003,1), MDSYS.SDO_DIM_ELEMENT('X', 0, 20, 0.005), --20x20-Grid MDSYS.SDO_DIM_ELEMENT('Y', 0, 20, 0.005), NULL); -- SRID (reserviert für zukünftige Spatial Releases) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-58 Lesestoff Erzeugen eines Spatial-Indexes l Definition mittels der CREATE INDEX Anweisung CREATE INDEX MarktSpatialIdx ON Markt(Flaeche) INDEXTYPE IS MDSYS.SPATIAL_INDEX; – Angabe von Parametern möglich Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-59 Lesestoff Geometry-Funktionen (1) SDO_GEOM.INTERSECT(geom1 IN MDSYS.SDO_GEOMETRY, dim1 IN MDSYS.SDO_DIM_ARRAY, geom2 IN MDSYS.SDO_GEOMETRY, dim2 IN MDSYS.SDO_DIM_ARRAY ) RETURN MDSYS.SDO_GEOMETRY; – – Liefert den Schnittbereich der beiden Objekte Weitere Funktionen: n SDO_GEOM.SDO_UNION n SDO_GEOM.SDO_DIFFERENCE n SDO_GEOM.SDO_XOR SDO_GEOM.AREA(geom1 IN MDSYS.SDO_GEOMETRY, dim1 IN MDSYS.SDO_DIM_ARRAY ) RETURN NUMBER; – Liefert Fläche eines zweidimensionalen Polygons Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-60 Lesestoff Geometry-Funktionen (2) SDO_GEOM.RELATE(geom1 dim1 mask geom2 dim2 ) RETURN VARCHAR2; – – – IN MDSYS.SDO_GEOMETRY, IN MDSYS.SDO_DIM_ARRAY, IN VARCHAR2, IN MDSYS.SDO_GEOMETRY, IN MDSYS.SDO_DIM_ARRAY Liefert TRUE, wenn die Objekte gemäss Masken-Parameter in Beziehung stehen Liefert Beziehung, falls das Schlüsselwort DETERMINE in der Maske auftaucht Masken-Parameter (logische Disjunktion gebildet mit +) n TOUCH, EQUAL, INSIDE, CONTAINS, COVERS, COVEREDBY, ANYINTERACT, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT 8-61 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Lesestoff Geometry-Funktionen (3) SDO_GEOM.WITHIN_DISTANCE(geom1 dim1 distance geom2 dim2 ) RETURN VARCHAR2; – Liefert TRUE, wenn die Objekte innerhalb des Distanzwertes liegen SDO_GEOM.DISTANCE(geom1 dim1 geom2 dim2 ) RETURN NUMBER; – IN MDSYS.SDO_GEOMETRY, IN MDSYS.SDO_DIM_ARRAY, IN NUMBER, IN MDSYS.SDO_GEOMETRY, IN MDSYS.SDO_DIM_ARRAY IN MDSYS.SDO_GEOMETRY, IN MDSYS.SDO_DIM_ARRAY, IN MDSYS.SDO_GEOMETRY, IN MDSYS.SDO_DIM_ARRAY Berechnet die (minimale) Distanz zwischen zwei Objekten Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-62 Lesestoff Beispielanfragen (1) l Liefere den Durchschnitt zweier Geometrie-Objekte SELECT SDO_GEOM.SDO_INTERSECTION(a.Flaeche, m.diminfo, b.Flaeche, m.diminfo) FROM Markt a, Markt b, USER_SDO_GEOM_METADATA m WHERE m.table_name = 'MARKT' AND m.column_name = 'FLAECHE' AND a.Name = 'COLA' AND b.Name = 'WEIN'; l Gib die Beziehung zwischen Geometrie-Objekte aus SELECT SDO_GEOM.RELATE(a.Flaeche, m.diminfo, 'ANYINTERACT', b.Flaeche, m.diminfo) FROM Markt a, Markt b, USER_SDO_GEOM_METADATA m WHERE m.table_name = 'MARKT' AND m.column_name = 'FLAECHE' AND a.Name = 'COLA' AND b.Name = 'WEIN'; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-63 Lesestoff Beispielanfragen (2) l Berechne die Flächen der Märkte SELECT a.Name, SDO_GEOM.SDO_AREA(a.Flaeche, m.diminfo) FROM Markt a, USER_SDO_GEOM_METADATA m WHERE m.table_name = 'MARKT' AND m.column_name = 'FLAECHE'; l Gib die Distanz zwischen zwei Geometrie-Objekte aus SELECT a.Name, SDO_GEOM.SDO_DISTANCE(a.Flaeche, m.diminfo, b.Flaeche, m.diminfo) FROM Markt a, Markt b, USER_SDO_GEOM_METADATA m WHERE m.table_name = 'MARKT' AND m.column_name = 'FLAECHE'; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-64 Lesestoff Informix Geodetic DataBlade l Unterstützt die Speicherung und Bearbeitung von raum- und zeitbezogenen Daten l Stellt Funktionen bereit, um – – – Geometische Objekte mit Zeitbezug zu erzeugen, ändern und löschen Räumliche und zeiltliche Beziehungen zwischen derartigen geometischen Objekten zu abzufragen ... l Bietet R-Baum als Spatial-Indexstruktur an C 1 A D B 2 E Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-65 Lesestoff Geometry-Typhierarchie GeoObject GeoPoint GeoString GeoLineseg GeoRing GeoPolygon GeoEllipses GeoCircle Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) GeoBox 8-66 Lesestoff Konstruktoren GeoLatitude, GeoAltitude = [-90, 90] GeoAzimuth= [0, 360) GeoAltRange= (GeoAltitude, GeoAltitude) |GeoAltitude|ANY GeoTimeRange = (Datetime, Datetime) |Datetime|ANY GeoCoords(GeoLatitude, GeoAltitude) GeoPoint(GeoCoords, GeoAltRange, GeoTimeRange) GeoBox(GeoCoords, GeoCoords, GeoAltRange, GeoTimeRange) GeoCircle(GeoCoords, GeoDistance, GeoAltRange, GeoTimeRange) GeoEllipse(GeoCoords, GeoDistance, GeoDistance, GeoAzimuth, GeoAltRange, GeoTimeRange) GeoLineseg(GeoCoords, GeoCoords, GeoAltRange, GeoTimeRange) GeoString(GeoCoords, ..., GeoCoords, GeoAltRange, GeoTimeRange) GeoRing(GeoCoords, ..., GeoCoords, GeoAltRange, GeoTimeRange) GeoPolygon((GeoCoords, ..., GeoCoords), ..., (GeoCoords, ..., GeoCoords), GeoAltRange, GeoTimeRange) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-67 Lesestoff Benutzung eines Geometry-Typs l Definition einer Tabelle mit raumbezogenen Daten CREATE TABLE Markt ( Name VARCHAR(30), Flaeche GeoPolygon ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-68 Lesestoff Erzeugen von Geometry-Instanzen l Erzeugen neuer Märkte – mit explizitem oder implizitem Konstruktoraufruf möglich INSERT INTO Markt VALUES ('Cola', 'GeoPolygon(((1, 1), (1, 7), (5, 7), (5, 1), (1, 1)), ANY, ANY)'); INSERT INTO Markt VALUES ('Wein', '(((3, 3), (6, 3), (6, 5), (4, 5), (3, 3)), ANY, ANY)'); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-69 Lesestoff Erzeugen eines Geo-Indexes l Definition mittels der CREATE INDEX Anweisung CREATE INDEX MarktSpatialIdx ON Markt(Flaeche GeoObject_ops) USING RTREE; – – Geo-Index wird als R-Baum angelegt Operatorklasse GeoObject_ops n Ermöglicht das Erzeugen und Verwenden eines R-Baum-Indexes n Index-Unterstützung für die Operatoren Inside, Intersect, Outside Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-70 Lesestoff Geometry-Funktionen FUNCTION Intersect(g1 g2 RETURN BOOLEAN; – – – – GeoObject, GeoObject) Liefert TRUE, wenn die Objekte sich sowohl räumlich als auch zeitlich schneiden Weitere Funktionen n Inside (g1 räumlich enthalten in g2, zeitlich überlappend) n Within (g1 räumlich enthalten in g2, zeitlich überlappend) n Outside (Räumlicher Durchschnitt ist leer, zeitlich überlappend) n Beyond (Räumlicher und/oder zeitlicher Durchschnitt ist leer) Keine GeoObject-erzeugenden Operatoren: Intersection, Union, Difference Keine Funktion "Relate", um die Beziehung zwischen Geo-Objekten zu ermitteln Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-71 Lesestoff Beispielanfragen l Liefere alle Märkte, die räumlich mit einem Rechteck assoziiert werden SELECT * FROM Markt WHERE IsGeoBox(Flaeche); l Gib die Namen aller Märkte aus, die sich räumlich (und zeitlich) schneiden SELECT a.Name, a.Name FROM Markt a, Markt b WHERE Intersect(a.Flaeche, b.Flaeche); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-72 Lesestoff Informix Spatial DataBlade l Eines der ersten DataBlades (wird nicht mehr von Informix angeboten) – Ähnliche Spatial DataBlades verfügbar von Drittanbietern wie ESRI Spatial Database Engine (SDE), Formida Fire Spatial oder MapInfo SpatialWare l Unterstützt die Speicherung und Bearbeitung von raumbezogenen Daten l Stellt Funktionen bereit, um – – – Punkte, Linienzüge, Flächen zu erzeugen, ändern und löschen Räumliche Beziehungen zwischen derartigen geometischen Objekten zu ermitteln C Flächenberechnungen etc. durchzuführen 1 A l Bietet R-Baum als Spatial-Indexstruktur an D 2 B Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) E 8-73 Lesestoff Geometry-Typhierarchie sp2geometry sp2pnt sp2quad sp2lseg sp2path sp2poly sp2ellp sp2circ Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) sp2box 8-74 Lesestoff Benutzung eines Geometry-Typs l Definition einer Tabelle mit raumbezogenen Daten CREATE TABLE Markt ( Name VARCHAR(30), Flaeche sp2poly ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-75 Lesestoff Erzeugen von Geometry-Instanzen l Erzeugen neuer Märkte INSERT INTO Markt VALUES ('Cola', '(1 1, 1 7, 5 7, 5 1, 1 1)'::sp2poly); INSERT INTO Markt VALUES ('Wein', '(3 3, 6 3, 6 5, 4 5, 3 3)'::sp2poly); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-76 Lesestoff Erzeugen eines Spatial-Indexes l Definition mittels der CREATE INDEX Anweisung CREATE INDEX MarktSpatialIdx ON Markt(Flaeche spatial_ops) USING RTREE; – Spatial-Index wird als R-Baum angelegt Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-77 Lesestoff Geometry-Funktionen (1) FUNCTION sp2intersection( g1 sp2geometry, g2 sp2geometry) RETURNS sp2geometry; – – Liefert den Durchschnitt der beiden Objekte Weitere Funktionen n sp2union n Sp2difference FUNCTION sp2area(g sp2geometry) RETURNS DECIMAL; – Liefert die Fläche eines geometrischen Objektes Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-78 Lesestoff Geometry-Funktionen (2) FUNCTION sp2intersects(g1 sp2geometry, g2 sp2geometry) RETURN INTEGER; – – Liefert 1 (TRUE), wenn der Durchschnitt der beiden Objekte nicht leer ist Weitere Funktionen n sp2contained (g2 vollständig in g1 enthalten) n sp2contains (g1 vollständig in g2 enthalten) n sp2equals (g1 gleich g2) n sp2overlap (Durchschnitt und beide Differenzen sind nicht leer) n sp2intersectIn (Schneiden sich im Punkt) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-79 Lesestoff Beispielanfragen (1) l Liefere den Durchschnitt zweier Geometrie-Objekte SELECT sp2intersection(a.Flaeche, b.Flaeche) FROM Markt a, Markt b WHERE a.name = 'COLA' AND b.name = 'WEIN'; l Gib die Namen aller Märkte aus, die sich schneiden SELECT a.Name, a.Name FROM Markt a, Markt b WHERE sp2intersects(a.Flaeche, b.Flaeche); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-80 Lesestoff Beispielanfragen (2) l Liefere alle Märkte, deren Fläche einen bestimmten Wert überschreitet SELECT a.Name, sp2area(a.Flaeche) FROM Markt a WHERE sp2area(a.Flaeche) > 100; l Gib die Distanz zwischen zwei Geometrie-Objekten aus SELECT a.Name, b.Name, sp2distance(a.Flaeche, b.Flaeche) FROM Markt a, Markt b; l Liefere den Umfang aller Märkte eines bestimmten Gebietes SELECT Name, sp2circumference(Flaeche) FROM Markt WHERE sp2contained(Flaeche, '(150,10, 200,20)'::sp2box); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 8-81