Objekt-relationale Datentypen

Illustra und Informix-Online verschmelzen zum Universalsystem

18.10.1996

Architektonisch besteht Illustra aus einer Core-Engine und einer Sammlung von neuen Datenstrukturen "Data Blades" (siehe Abbildung 1). Die Core-Engine bietet relationale DBMS-Funktionen, ein erweitertes Typensystem, einen SQL-Parser, erweiterbare Indexschemata sowie einen Optimizer.

Die Kombination aus neuen Datentypen sowie Funktionen für Zugriff, Anzeige der Daten und die Indizierung der Daten ergibt ein Softwarepaket, dem Illustra die Bezeichnung Data Blade gegeben hat. Derzeit werden vom Hersteller zehn Data Blades angeboten, die gemeinsam über hundert neue Datentypen und mehrere hundert Funktionen verfügen. Sie bieten: Volltext-Retrieval, 2-D- und 3-D-Daten, Zeitreihen, Statistik, Image, Video, Web, Visual Information Retrieval sowie Gateways zu den Datenbanken von Oracle und Sybase. Dem Entwickler stehen mit der Illustra-Technologie, der Bibliothek "Libmi" und einem Data-Blade-Entwicklerset Werkzeuge zur Verfügung.

Methoden für den Datenbankzugriff

Der Zugriff auf die Illustra-Datenbank findet durch einen kommandozeilenorientierten Query-Monitor "MSQL" oder durch das GUI-basierende "Illustra Query Tool" (IQT) statt. MSQL ist ein Programm, das Benutzern die Möglichkeit gibt, bis zu 32 Datenbankverbindungen pro Client zu öffnen, zwischen den Verbindungen hin- und herzuschalten, SQL-Kommandos an die Datenbank abzuschicken und gegebenenfalls eine Ergebnismenge anzuzeigen. IQT läuft zwar nur auf PCs, ist aber durch die grafische Oberfläche einfacher zu bedienen und bietet neben den Möglichkeiten von MSQL auch diverse Eigenschaften zum Administrieren der Datenbank.

Unter Windows NT gibt es weitere Schnittstellen zur Illustra-Datenbank, darunter den Zugriff über Excel und Access, ODBC, Powerbuilder, Visual Basic, Visual C++, C++-Class-Libraries, Schema Knowledge und die Illustra Zugriffsbibliothek Libmi. Geplant ist auch ein Zugriff mit OLE-Controls. Unter Unix stehen dafür lediglich Libmi und C-/C++-Compiler zu Verfügung.

Für eine neue Datenbank wird die vorhandene Datenbank "Template 1" als Vorlage verwendet. Template 1 beinhaltet die Systemkataloge, die an jede neu erzeugte Datenbank angehängt werden. Der Benutzer, der eine neue Datenbank anlegt, wird automatisch zum Besitzer und Datenbankadministrator. Illustra bietet exakt arithmetische Datentypen, Integer-, Fließkomma-, Zeichen-, Boolesche, Datums- und Zeit-Built-in-Datentypen an.

Beim Anlegen neuer Tabellen erfolgt ein Schema-Eintrag in der Datenbank. In diesem Schema finden sich alle Objekte sowie Tabellen, Views, Datentypen und Funktionen. Jeder Datensatz einer Tabelle besitzt einen eigenen "Object Identifier" (OID). Die Datensatzgröße kann maximal 8 KB betragen, und die theoretischen Grenzen für Tabellen liegen bei 224 Tabellen mit jeweils 240 Einträgen.

Im Universal Server gibt es allerdings keine OID mehr und die Datensatzgröße beschränkt sich nicht mehr auf 8 KB. Auf die Datenfelder eines Datensatzes kann ein Index gesetzt werden, wobei die Zugriffsmethode für die Built-in-Datentypen "btree" ist.

Ein an die Datenbank geschicktes Select-Statement liefert eine Ergebnistabelle (set) zurück. Mit Hilfe eines "Scrollable Cursor", der innerhalb einer Transaktion definiert werden muß, kann dann auf die einzelnen Datensätze der Ergebnistabelle zugegriffen werden.

Illustra beinhaltet zusätzlich Transaktions-Management- und Recovery-Mechanismen. Dabei ist allerdings zu beachten, daß der Universal Server im Gegensatz zur Illustra-Datenbank im Rahmen des Recovery die Funktionen "Time Travel" und "Versioning" nicht unterstützt.

Im Gegensatz zu relationalen Datenbanken läßt Illustra Datentypen zu, die der Anwender selbst definiert. Diese lassen sich komplett neu entwickeln oder von vorhandenen Datentypen ableiten. Außerdem können Datentypen andere beinhalten oder in ihrer Definition auf andere verweisen.

Somit lassen sich Datenfelder einer Standardtabelle zu neuen Datentypen zusammenfassen. Das reduziert die Anzahl der benötigten Datenfelder und erhöht die Übersichtlichkeit. In sogenannten Composite-Datentypen werden neue Datenstrukturen durch Kombination aus Built-in-Datentypen oder bereits definierten Composite-Daten, ähnlich wie ein "C-struct" oder eine C++-Klasse, zusammengesetzt. Auf diese Weise lassen sich Composite-Datentypen auch als Vorlage für Tabellen nutzten.

Wenn neue Datentypen angelegt werden, sind sogenannte Arrays, Sets und Objektkennungen (Verweise auf andere Objekte reference) automatisch verfügbar. In Illustra ist ein Array eine geordnete, indizierbare Gruppe von Objekten eines Datentyps. Allerdings ist es nicht möglich, ein Array von Composite-Datentypen oder Sets zu bilden.

Ein Set ist eine nicht geordnete Gruppe von Objekten vom selben Datentyp das heißt, Duplikate sind erlaubt. Auch mit Composite-Datentypen können Sets gebildet werden. Dabei liefert ein Select ohne einen "Unique-Qualifier" ein Set zurück.

Eine Objektkennung ist ein Zeiger (Pointer) zu einem Datensatz. Die Objektkennung benutzt die OID des Datensatzes, so daß es sich empfiehlt, bei der Benutzung von Objektkennungen einen Index auf die OID der Tabelle zu legen. Der referenzierte Datensatz darf sich nicht in einem View befinden, sondern muß zu einer Tabelle gehören.

Außerdem lassen sich in Illustra sogenannte Base-Types definieren. Standardisierte Base-Types sind etwa Integer, Real und Text. Besonders für Multimedia interessante Elementartypen sind "external-file", "large-object" und "large-text". External-file ist eine Referenz auf eine Datei des Betriebssystems, zum Beispiel Bilder in GIF-Format. Bei einem Select-Befehl über diesen Datentyp wird der Pfad der Datei ausgegeben. Auch aus anderen Anwendungen kann hierbei direkt auf die Datei zugegriffen werden. Allerdings erlaubt der Datentyp external-file kein Transaktions-Management sowie keine Locking- und Recovery-Mechanismen.

Im Universal Server wird es aus diesen Gründen den Datentyp external-file nicht mehr geben. Statt dessen wird ein large-object in der Datenbank gespeichert. Bei einer Select-Abfage wird ein "handle" zurückgegeben. Darunter versteht man eine Zeichenfolge, die das gespeicherte Objekt repräsentiert. Für umfangreiche Texte ist der Datentyp large-text gedacht. Bei einem Select-Statement wird bei diesem Datentyp der gespeicherte Text zurückgegeben.

Diese elementaren Datentypen können auf Objekte zugreifen, die von SQL-Typen nicht verwendet werden können. Dabei sind sie in bezug auf Speicherung und Zugriffsgeschwindigkeit effizient. Für einen neuen elementaren Datentyp muß eine Ein- und Ausgabefunktion definiert sowie die interne Länge des Objekts festgelegt werden.

Als Built-in-Funktionen bietet Illustra alle Standard-SQL- und Aggregat-Features, etwa min, max und sum, Textfunktionen wie trim und concat, Numerikfunktionen, beispielsweise abs, sqrt, System-Funktionen (Release, Hostname), Operatoren wie =, und like. Weiter hat der Benutzer auch die Möglichkeit, eigene Funktionen zu definieren, die mit Built-in- oder benutzerdefinierten Datentypen operieren.

Funktionen lassen sich sowohl vom Illustra-Server als auch vom Client laden und ausführen. Sie sind in SQL und C geschrieben und können andere Funktionen aufrufen. Die "Signatur" einer Funktion besteht aus dem Funktionsnamen und der Parameterliste und darf nur einmal im Schema vorkommen. Um Endlosschleifen zu vermeiden, sind alle Änderungen, die eine Funktion in einem Query vornimmt, erst dann sichtbar, wenn das Statement beendet ist.

In Illustra gibt es darüber hinaus die Möglichkeit, Funktionen anzulegen, die im Funktionsnamen übereinstimmen, sich aber in der Parameterliste unterscheiden. Dieses Vorgehen entspricht der Überladen-Technik (Overloading) aus der objektorientierten Welt.

Illustra-Operatoren lassen sich als eine Abkürzung für das Aufrufen einer Funktion interpretieren. Jeder binäre und unäre Built-in-Operator ist dabei an einen Funktionsnamen gebunden. Der Operator "+" ist zum Beispiel an die Funktion "Plus" gebunden. Illustra unterstützt die Anbindung von Operatoren an Funktionen, wobei der Operator auch für benutzerdefinierte Datentypen benutzt werden kann.

Das Illustra-ORDBMS verfügt zudem über die Aggregatfunktionen count, min, max, sum und avg zusätzlich kann der Anwender auch Aggregate anlegen, zum Beispiel "dritt-größter-Wert()", oder bestehende Aggregate durch das Ändern der Parameterliste überladen.

Virtuelle Spalten sind ein Spezialfall von Funktionen. Sie sind Datenfelder in einem Datensatz, welche aus der Anwendung einer Funktion resultieren. Die Werte werden erst ausgerechnet, wenn eine Abfrage an die Datenbank geschickt wird.

Bei der Indizierung von Datenfeldern kann zwischen den Standardverfahren "btree" und "rtree" sowie einem Vorgehen gewählt werden, das auf Rückgabewerten einer Funktion basiert. Diese Funktion bezieht sich auf ein oder mehrere Datenfelder beziehungsweise auf den ganzen Datensatz. Die Funktionsergebnisse werden in dem Index zwischengespeichert, so daß die Funktion während einer Abfrage nicht aufgerufen werden muß. Dieser funktionale Index kann nur für C-Funktionen benutzt werden.

Eines der wichtigsten Merkmale der Illustra-Technologie ist die Implementierung von Vererbungsmechanismen. Sowohl Datentypen als auch Tabellen erben und vererben. Ein erbendes Objekt (subtype und subtable) erhält von dem höher angesiedelten Objekt (supertype und supertable) die Datenfelder, die Funktionen, die Aggregate und die Operatoren. Die Datenbank unterstützt Einfach- und Mehrfachvererbung. Dabei ist auch eine Typenkonversion (casting) möglich. Built-in-Casting-Funktionen sind etwa castdoubleinteger und castintegerreal.

*Volker Jungebluth ist Software-Entwickler bei der Science Management and Engineering GmbH (SME) in Garching.