Verwaltung und Programmierung


Objektorientierte Konzepte

DB2 unterstützt die Objektorientierung, d. h., das Konzept, daß alle Elemente in einer Anwendung, real oder abstrakt, als Objekte dargestellt werden können. Ein solches Objekt umfaßt eine Reihe von Operationen und Datenwerte. Beispielsweise kann ein Dokument durch ein Dokumentobjekt dargestellt werden, das die Dokumentdaten und die Operationen umfaßt, die mit diesem Dokument ausgeführt werden können, wie z. B. Speichern, Senden und Drucken. Ein Videoclip kann als ein Videoobjekt dargestellt werden, das die Videodaten und die zugehörigen Operationen umfaßt, wie etwa die Wiedergabe des Videoclips oder das Suchen eines bestimmten Videovollbildes. Genau wie reale Objekte können Darstellungsobjekte Attribute haben. Beispielsweise können Sie einem Videoobjekt Attribute, wie etwa Komprimierungsart und Abtastrate, geben.

Objekte können zu verschiedenen Objekttypen gruppiert werden. Objekte des gleichen Typs haben die gleichen Attribute und Funktionsweisen, d. h., ihnen sind die gleichen Operationen zugeordnet. Ist beispielsweise der Typ Video mit einem Attribut für die Komprimierungsart definiert, haben alle Objekte vom Typ Video dieses Attribut. Kann ein Objekt vom Typ Video wiedergegeben werden, können alle Objekte vom Typ Video wiedergegeben werden.

Durch die DB2-Unterstützung für die Objektorientierung ist es möglich, Exemplare von Objekttypen in Spalten von Tabellen zu speichern und mit Hilfe von Funktionen in SQL-Anweisungen mit ihnen zu arbeiten. Beispielsweise können Sie Videoobjekte in einer Tabellenspalte speichern und unter Verwendung von SQL-Funktionen mit ihnen arbeiten. Darüber hinaus können die Attribute und Funktionsweisen der gespeicherten Objekte innerhalb Ihrer Anwendungen gemeinsam benutzt werden. Für alle Anwendungen ist die Attributgruppe und Funktionsweise für einen bestimmten Objekttyp gleich.

Videoobjekte sind normalerweise groß und komplex. Das gleiche gilt für Abbild- und Audioobjekte. Als Teil der Unterstützung für die Objektorientierung ermöglicht DB2 das Speichern von großen Objekten (LOBs) in einer Datenbank. DB2 stellt Ihnen außerdem die Möglichkeit zur Verfügung, LOBs mit Hilfe von benutzerdefinierten Typen (UDTs), benutzerdefinierten Funktionen (UDFs) und Auslösern zu definieren und zu bearbeiten.

Große Objekte

DB2 ermöglicht Ihnen, große Objekte (LOBs) folgendermaßen in einer Datenbank zu speichern:

BLOBs sind binäre Zeichenfolgen. Abbild-, Audio- und Videoobjekte werden als BLOBs in einer DB2-Datenbank gespeichert. CLOBs sind Zeichenfolgen, die aus Einzelbytezeichen bestehen und denen eine Zeichenumsetztabelle zugeordnet ist. Dieser Datentyp wird für Textobjekte verwendet, die Einzelbytezeichen enthalten. DBCLOBs sind Zeichenfolgen, die aus Doppelbytezeichen bestehen und denen eine Zeichenumsetztabelle zugeordnet ist. Dieser Datentyp wird für Textobjekte verwendet, die Doppelbytezeichen enthalten.

Jedes LOB kann bis zu 2 Gigabyte lang sein. Dennoch sind bei DB2 viele LOB-Spalte pro Tabelle zulässig. Sie können bis zu 24 Gigabyte LOB-Speicherbereich pro Zeile und bis zu 4 Terabyte LOB-Speicherbereich pro Tabelle speichern.

Aufgrund seiner Größe wird der LOB-Inhalt allerdings nicht in einer Datenbanktabelle gespeichert, sondern jedes LOB in der Tabelle ist durch einen Deskriptor für große Objekte gekennzeichnet. Mit Hilfe des Deskriptors wird auf das große Objekt zugegriffen, das an einem anderen Ort auf der Platte gespeichert ist.

Die DB2 Extender geben Ihnen die zusätzliche Flexibilität, daß Sie den Inhalt eines LOBs in einer Datei speichern und von der Datenbank aus auf diese Datei zeigen können. Sie legen diese Zuordnung fest, wenn Sie einen DB2 Extender zum Speichern eines Objekts verwenden.

Benutzerdefinierte Typen

Abbild-, Video- und Audioobjekte werden in der Datenbank als BLOBs gespeichert. Ein benutzerdefinierter Typ (UDT), auch bekannt als eindeutiger Typ, stellt eine Möglichkeit zur Verfügung, zwischen den einzelnen BLOBs zu unterscheiden. Beispielsweise kann ein UDT für Abbildobjekte und ein anderer für Audioobjekte erstellt werden. Obwohl sie als BLOBs gespeichert werden, werden Abbild- und Audioobjekte von BLOBs und auch untereinander unterschieden.

UDTs werden mit einer SQL-Anweisung CREATE DISTINCT TYPE erstellt. Angenommen, Sie entwickeln eine Anwendung, die die geografischen Merkmale auf Landkarten verarbeitet. Sie können einen eindeutigen Typ mit dem Namen map für Kartenobjekte wie folgt erstellen:

CREATE DISTINCT TYPE map AS BLOB (1M)

Das Objekt vom Typ 'map' wird intern als ein 1 Megabyte langes BLOB dargestellt, aber als Objekt mit einem eindeutigen Typ behandelt.

Sie können UDTs wie integrierte SQL-Typen verwenden, um die Daten in Tabellenspalten zu beschreiben. Im folgenden Beispiel wird eine Tabelle mit einer Spalte erstellt, die für die Daten vom Typ 'map' konzipiert ist:

CREATE TABLE places
  (locid     INTEGER NOT NULL,
   location  CHAR (50),
   grid      map)

Jeder DB2 Extender erstellt einen UDT für seinen Datentyp, d. h. Abbild, Audio und Video.

Benutzerdefinierte Funktionen

Eine benutzerdefinierte Funktion (UDF) ist eine Möglichkeit, SQL-Funktionen zu erstellen und zur Gruppe der integrierten Funktionen hinzuzufügen, die mit DB2 geliefert werden. Insbesondere können Sie UDFs erstellen, die Operationen ausführen, die einzigartig für Abbild-, Audio- und Videoobjekte sind. Beispielsweise können Sie UDFs erstellen, um das Komprimierungsformat eines Videos abzurufen oder die Abtastrate eines Tons zurückzugeben. Hierdurch kann die Funktionsweise von Objekten definiert werden, die zu einem bestimmtem Typ gehören. Videoobjekte arbeiten beispielsweise gemäß den Funktionen, die für den Videotyp erstellt wurden, und Abbildobjekte arbeiten gemäß den Funktionen, die für den Abbildtyp erstellt wurden.

UDFs werden mit einer SQL-Anweisung CREATE FUNCTION erstellt. Die Anweisung gibt unter anderem den Datentyp an, für den die UDF angewendet werden kann. Beispielsweise erstellt die folgende Anweisung eine UDF mit dem Namen map_scale, die den Maßstab einer Landkarte berechnet. Beachten Sie, daß die UDF 'map' als den Datentyp identifiziert, auf den sie angewendet werden kann. Der Code, der die Funktion implementiert, ist in C geschrieben und wird in der Klausel EXTERNAL NAME angegeben:

CREATE FUNCTION map_scale (map)
  RETURNS SMALLINT
  EXTERNAL NAME 'scale!map'
  LANGUAGE C
  PARAMETER STYLE DB2SQL
  NO SQL
  DETERMINISTIC
  NO EXTERNAL ACTION

UDFs können in einer SQL-Anweisung wie integrierte Funktionen verwendet werden. Im folgenden Beispiel wird die UDF 'map_scale' in einer SQL-Anweisung verwendet, um den Maßstab einer Karte zurückzugeben, die in einer Tabellenspalte mit dem Namen 'grid' gespeichert ist:

SELECT map_scale (grid)
  FROM places
  WHERE location='SAN JOSE, CALIFORNIA'

Jeder DB2-Extender erstellt eine Gruppe von UDFs für den jeweiligen Typ, d. h. abbild-, audio- und videospezifische UDFs. Sie können diese UDFs in SQL-Anweisungen verwenden, um Extender-Funktionen anzufordern, wie z. B. Speichern eines Abbilds in einer Tabelle, Abrufen der Vollbildrate eines Videos oder Hinzufügen eines Kommentars zu Audiodaten.

UDF- und UDT-Namen

Der vollständige Name einer DB2-Funktion hat die Syntax schemaname.funktionsname, wobei schemaname eine Kennung ist, die eine logische Gruppierung für SQL-Objekte zur Verfügung stellt. Der Schemaname für DB2 Extender-UDFs ist MMDBSYS. Der Schemaname MMDBSYS ist außerdem das Qualifikationsmerkmal für die DB2 Extender-UDTs.

Sie können den vollständigen Namen immer verwenden, wenn Sie auf eine UDF oder einen UDT verweisen. Beispielweise gibt MMDBSYS.CONTENT eine UDF an, deren Schemaname MMDBSYS ist und deren Funktionsname CONTENT ist. MMDBSYS.DB2IMAGE gibt einen UDT an, dessen Schemaname MMDBSYS ist und dessen Name für den eindeutigen Typ DB2IMAGE ist. Sie können den Schemanamen auch weglassen, wenn Sie auf eine UDF oder einen UDT verweisen. In diesem Fall verwendet DB2 den Funktionspfad, um die gewünschte Funktion oder den gewünschten eindeutigen Datentyp zu bestimmen.

Funktionspfad

Der Funktionspfad ist eine geordnete Liste von Schemanamen. DB2 verwendet die Reihenfolge der Schemanamen in der Liste, um Referenzen auf Funktionen und eindeutige Datentypen aufzulösen. Sie können den Funktionspfad angeben, indem Sie die SQL-Anweisung SET CURRENT FUNCTION PATH verwenden. Durch diese Funktion wird der Funktionspfad im Sonderregister CURRENT FUNCTION PATH definiert.

Setzen Sie für die DB2 Extender das erste Schema im Funktionspfad wie folgt auf mmdbsys:

SET CURRENT FUNCTION PATH = mmdbsys, CURRENT FUNCTION PATH

Den Funktionspfad nicht setzen, wenn Sie sich als mmdbsys anmelden: Wenn Sie sich unter der Benutzer-ID 'mmdbsys' anmelden, ist das erste Schema im Funktionspfad auf mmdbsys gesetzt. Wenn Sie dann versuchen, das erste Schema im Funktionspfad mit Hilfe einer Anweisung SET CURRENT FUNCTION PATH auf mmdbsys zu setzen, beginnt der Funktionspfad mit zwei Schemata mmdbsys, was zu einer Fehlerbedingung führt.

Mehrfach belegte Funktionsnamen

Funktionsnamen können mehrfach belegt sein. Das heißt, mehrere UDFs, auch in demselben Schema, können den gleichen Namen haben. Zwei Funktionen können jedoch nicht die gleiche Kennung haben. Eine Kennung ist ein qualifizierter Funktionsname, der mit den definierten Datentypen aller Funktionsparameter verknüpft ist.

Auslöser

Ein Auslöser definiert eine Gruppe von Aktionen, die durch eine Änderung in einer Tabelle aktiviert wird. Auslöser können für folgende Aktionen verwendet werden: Prüfen von Eingabedaten, automatisches Generieren eines Wertes für eine neu eingefügte Zeile, Lesen von anderen Tabellen zu Querverweiszwecken oder Schreiben in andere Tabellen zu Prüfzwecken. Auslöser werden oft zur Überprüfung der Integrität oder zum 'Erzwingen' von Geschäftsregeln verwendet.

Auslöser werden mit einer SQL-Anweisung CREATE TRIGGER erstellt. Die folgende Anweisung erstellt einen Auslöser, der eine Geschäftsregel bezüglich des Teileinventars erzwingt. Der Auslöser bestellt ein Teil neu, wenn weniger als 10 Prozent des maximalen Lagerbestandes vorrätig sind.

CREATE TRIGGER reorder
       AFTER UPDATE OF on_hand, max_stocked ON parts
       REFERENCING NEW AS n_row
       FOR EACH ROW MODE DB2SQL

       WHEN (n_row.on_hand < 0.10 * n_row.max_stocked)
       BEGIN ATOMIC
              VALUES(issue_ship_request(n_row.max_stocked -
                                   n_row.on_hand,
                                   n_row.partno));
       END

Die DB2 Extender erstellen und pflegen Tabellen zur Verwaltungsunterstützung, um Informationen zu Abbild-, Audio- und Videodaten aufzuzeichnen, die in einer Datenbank gespeichert sind. (Weitere Informationen zu diesen Tabellen befinden sich im Abschnitt Tabellen zur Verwaltungsunterstützung.) Die Extender verwenden Auslöser, um diese Tabellen zu aktualisieren, wenn Abbild-, Audio- oder Videodaten in einer Datenbank hinzugefügt oder aktualisiert oder aus einer Datenbank gelöscht werden.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]

Search the DB2 Extender Books