Object Management

Inhaltsübersicht

 

Object Management 1

19      Object Management 1

19.1   Einleitung. 1

19.2   Benutzerdefinierte Datentypen. 3

19.3   Benutzerdefinierte Funktionen. 6

19.4   Funktionsinstanzen. 7

           

Zurück zum Inhaltsverzeichnis

 

 

 

19Object Management

 

 

          Dieses  Kapitel  beschreibt  die  Eigenschaften  des  Object

          Management-Moduls   von  INGRES.  Nach  der  Einführung  und

          Beschreibung   von    Merkmalen   dieser   INGRES-Komponente

          werden  benutzerdefinierte Datentypen  und Funktionen  sowie

          Funktionsinstanzen beschrieben.

 

Zurück zum Inhaltsverzeichnis

 

 

 

 

19.1     Einleitung

 

 

          Ab Version  6.3 bietet  INGRES die  sogenannte  intelligente

          Datenbank an, die aus drei Moduln

 

                        - Data Management,

                        - Object Management      und

                        - Knowledge Management

 

          besteht.   Der  Data   Management-Modul   kennzeichnet   das

          Grundprodukt  von INGRES,  der alle  bis jetzt beschriebenen

          Komponenten   enthält.  Der   Object  Management-Modul  ist,

          genauso  wie der  Knowledge Management-Modul, ein optionales

          Produkt,  der   dem   Benutzer   die   Möglichkeit   bietet,

          eigene  Datentypen und  Funktionen  zu  implementieren.  Der

          Knowledge Management-Modul  schließlich dient der Erstellung

          zusätzlicher Regeln.  Der Object  Management-Modul  wird  in

          diesem  Kapitel, der  Knowledge Management-Modul im nächsten

          Kapitel beschrieben.

 

          Alle herkömmlichen  Datenbanksysteme  unterstützen  nur  die

          einfachen  Datentypen   wie   Zeichenketten,   Zahlen   usw.

          Alle  abstrakten   Datentypen  müssen   in   den   einzelnen

          Anwendungsprogrammen     implementiert     werden.     Diese

          Vorgehensweise  bringt einen  großen Implementierungsaufwand

          mit sich,  weil die  Programmierung solcher Datentypen lange

          dauert und,  im Falle  von  allgemein  benutzten  abstrakten

          Datentypen (wie  z.B. dem  Datentyp  "Arbeitstage", der  nur

          die Werktage  berücksichtigt) in jedem einzelnen Projekt von

          neuem implementiert wird.

 

          Ein weiterer Nachteil ist, daß alle Integritätsvorschriften,

          die im  Bezug  auf  einen  abstrakten  Datentyp  existieren,

          im Anwendungsprogramm  berücksichtigt  werden  müssen.  Auch

          die  Verarbeitungsgeschwindigkeit  einer  Datenbankanwendung

          wird  dadurch   beeinträchtigt,  daß   für  die  Bearbeitung

          und  die Überprüfung  von Integritätsvorschriften abstrakter

          Datentypen  immer Zugriffe  vom Anwendungsprogramm  auf  den

          Datenbank-Server notwendig sind.

 

          INGRES  bietet   dem  Benutzer,   mit   Hilfe   des   Object

          Management-Moduls   die    Möglichkeit,   eigene   abstrakte

          Datentypen   zu  erstellen.   Object  Management  ermöglicht

          auch  die Manipulation  der  benutzerdefinierten  Datentypen

          mit    Hilfe   von    benutzerdefinierten   Funktionen   und

          Funktionsinstanzen.   Alle  benutzerdefinierten   Datentypen

          werden   nach  der   Erstellung   fester   Bestandteil   von

          INGRES-DBMS, so daß alle o.g. Nachteile entfallen.

 

          Weil die  vom Benutzer geschriebenen Routinen, die abstrakte

          Datentypen oder  neue Funktionen  definieren, als  Teil  des

          INGRES-DBMS laufen,  haben sie  dieselbe Bedeutung  wie  der

          vom Hersteller  implementierte Quell-Code.  Deswegen ist  es

          wichtig,  die Routinen  sehr  sorgfältig  zu  implementieren

          und  auszutesten,   weil  jeder   Fehler  einem   Fehler  in

          der  INGRES-Software   entspricht  und   somit   weitgehende

          Konsequenzen  für   die  existierenden  Datenbankanwendungen

          haben kann.

 

          Die  Routinen,   mit  denen   benutzerdefinierte  Datentypen

          und  Funktionen   implementiert  werden,   können  in  jeder

          Programmiersprache   der  dritten  Generation  implementiert

          werden. Trotzdem  ist es  empfehlenswert, sie in der Sprache

          C  zu programmieren,  weil  die  von  INGRES  zur  Verfügung

          gestellten Makro-Bibliotheken  in C  geschrieben  sind.  Die

          Implementierung der Benutzerrutinen in einer anderen Sprache

          verlangt die  genaue Einhaltung  der Strukturen,  die in den

          Makro-Bibliotheken existieren.

 

Zurück zum Inhaltsverzeichnis

 

 

 

19.2     Benutzerdefinierte Datentypen

 

 

          Jeder  abstrakte Datentyp  muß zuerst vom Benutzer definiert

          werden. Die Definition beinhaltet

 

                        - den Namen,

                        - die Länge    und

                        - die Identifikationsnummer

 

          des  neuen   Datentyps.  Diese   drei  Merkmale   werden  in

          den entsprechenden  Datenfeldern der  Struktur  iiadd_dt_dfn

          abgelegt. (iiadd_dt_dfn  ist ein  Teil  der Makro-Bibliothek

          iiadd.h, die von INGRES zur Verfügung gestellt wird.)

 

          Der  Name des  benutzerdefinierten Datentyps darf maximal 24

          Zeichen  lang sein.  Falls die  Zeichenkette kürzer  als  24

          Zeichen ist,  muß sie  mit dem  Wert 0  abgeschlossen  sein.

          Die Identifikationsnummer  muß eindeutig  in Bezug  auf alle

          benutzerdefinierten Datentypen  sein und  zwischen 16384 und

          16511  liegen. Die  maximale Anzahl  der benutzerdefinierten

          Datentypen ist z.Z. auf 128 beschränkt.

 

          Jeder  benutzerdefinierte Datentyp  ist nur  dem INGRES-DBMS

          bekannt.  Die   Benutzerschnittstellen  von   INGRES   (QBF,

          RBF  usw.)   wissen   nichts   von   der   Existenz   dieser

          Datentypen. Deswegen  muß das  DBMS die  Konvertierung jedes

          benutzerdefinierten Datentyps für die Benutzerschnittstellen

          vornehmen.  Diese Konvertierung erfolgt auf Grund der Werte,

          mit denen der Benutzer die Funktion dbtoev versorgt.

 

          Nachdem  der   Datentypname  und  die  Identifikationsnummer

          festgelgt sind, müssen die von INGRES vorgegebenen Routinen,

          die  die   Manipulation  des  benutzerdefinierten  Datentyps

          beschreiben, versorgt  werden.  Jede  Routine  hat  folgende

          Parameter

 

                        - scb      (muß angegeben werden),

                        - arg1     (optional),

                        - arg2     (optional),

                        - ergebnis (muß angegeben werden),

 

          die folgende Bedeutung haben

 

Parameter

Bedeutung

scb           

eine Struktur ("Session Control  Block"), die die Information für das INGRES Datentyp-Subsystem liefert.

arg1  /  arg2                 

zwei optionale Parameter, die als Zeiger definiert sind und auf die Struktur ii_data_values zeigen. ii_data_values beschreibt die  von einer  Routine benutzten Datenwerte.

ergebnis      

enthält das Teilergebnis einer Funktion.

 

          Für  jeden benutzerdefinierten  Datentyp müssen folgende von

          INGRES vorgegebenen Routinen versorgt werden:

 

                        Compare         hmax

                        dbtoev              hmin

                        dhmax              keybuild

                        dhmin               length_check

                        getempty          minmaxdv

                        hashprep          tmcvt

                        helem              value_check

                        hg_dtln            tmlen

 

 

Routine

Funktion

compare       

vergleicht zwei Datenelemente des benutzerdefinierten Datentyps. Die beiden Argumente arg1 und arg2  zeigen auf die zu vergleichenden Datenelemente.

dbtoev        

legt den  INGRES-Datentyp fest, in den der benutzerdefinierte Datentyp konvertiert wird.

dhmax         

definiert den maximalen

dhmin         

bzw. minimalen Standardwert, der vom Optimierer für die Berechnung der optimalen Strategien verwendet wird.

getempty      

definiert den Standardwert für den benutzerdefinierten Datentyp  (z.B. ist der Standardwert für numerische Werte 0 und für alphanumerische Werte das Leerzeichen).

hashprep      

bereitet einen Datumswert zur Verwendung als Hash-Schlüssel vor.

helem         

erstellt eine (gewöhnlich verkürzte) Darstellung für den Datumswert. Diese Darstellung wird vom Optimierer für die Erstellung der optimalen Strategien verwendet.

hg_dtln       

liefert den Namen und die Länge des als Argument angegebenen Datentyps.

hmax          

definiert den tatsächlich maximalen

hmin          

bzw. minimalen Datenwert für den benutzerdefinierten Datentyp.

keybuild      

erstellt aus einem Datenwert den Schlüssel, der bei der ISAM-,  CISAM, BTREE-  und CBTREE-Speicherstruktur für die direkte Suche verwendet wird.

length_check  

überprüft, ob die angegebene Länge des Datentyps gültig ist.

minmaxdv      

liefert den minimalen bzw. maximalen Wert (oder Länge) des als Parameter angegebenen Datentyps.

tmcvt         

konvertiert den angegebenen Datentyp in eine druckbare Form.

value_check   

überprüft die Gültigkeit der Datenwerte.

tmlen         

liefert die Standard- und maximale Länge eines Datentyps, für den Fall, daß er als Text gedruckt werden muß.

 

Zurück zum Inhaltsverzeichnis

 

 

 

19.3     Benutzerdefinierte Funktionen

 

 

          Neben  den benutzerdefinierten  Datentypen ist es mit Object

          Management  möglich, auch  benutzerdefinierte Funktionen  zu

          implementieren,  die dem  INGRES-DBMS bekannt  sind und  von

          ihm  als  herkömmliche  Systemfunktionen  behandelt  werden.

          Die  benutzerdefinierten Funktionen unterstützen sowohl alle

          INGRES-Datentypen als auch benutzerdefinierte Datentypen als

          Parameter.

 

          Jede  benutzerdefinierte   Funktion  muß   zuerst  definiert

          werden. Ihre Definition beinhaltet

 

                        - den Funktionsnamen,

                        - die Identifikationsnummer    und

                        - den Operationstyp.

 

          Diese Merkmale werden in der Struktur iiadd_fo_dfn abgelegt.

          (iiadd_fo_dfn ist ein Teil der Makro-Bibliothek iiadd.h, die

          von INGRES zur Verfügung gestellt wird.)

 

          Die Struktur iiadd_fo_dfn hat folgende Felder

 

Feldname

Bedeutung

fod_object_type

enthält die Konstante II_O_OPERATION.

fod_name       

stellt den Funktionsnamen dar. (Für den Funktionsnamen gilt alles, was wir schon für den Datentypnamen gesagt haben.) 

fod_id         

enthält die Identifikationsnummer der Funktion. Diese   muß eindeutig in Bezug auf alle benutzerdefinierten Funktionen und größer als 16384 sein.

fod_type       

stellt den Operationstyp dar.

        

Zurück zum Inhaltsverzeichnis

 

 

 

19.4     Funktionsinstanzen

 

 

          Funktionsinstanzen  definieren die Verwendung einer Funktion

          bzw.  eines Operators  (z.B. "+")  in einem  konkreten Fall.

          Die Existenz  der  Funktionsinstanzen  ist  notwendig,  weil

          dieselbe  Funktion bzw.  derselbe Operator mit verschiedenen

          benutzerdefinierten  Datentypen  unterschiedliche  Bedeutung

          haben kann.

 

          Die Definition der Funktionsinstanzen beinhaltet:

 

                  - die Identifikationsnummer;

                  - den Komplementoperator;

                  - die Identifikationsnummer der Funktion, die diesen

                    Operator verwendet;

                  - den Operationstyp;

                  - die Anzahl  von Argumenten  und  ihren  jeweiligen

                    Datentyp;

                  - den Datentyp des Ergebnisses;

                  - die Länge des Ergebnisses;

                  - die Adresse  der Routine, die die Funktionsinstanz

                    ausführt.

 

          Die  Identifikationsnummer ist  eine 2  Byte lange Ganzzahl,

          die  eindeutig in  Bezug  auf  alle  Funktionsinstanzen  und

          größer  als 16384  sein muß.  Der  Komplementoperator  einer

          Funktionsinstanzen  muß  angegeben  werden,  falls  es  sich

          beim Operator  um einen  Vergleichsoperator  handelt.  (Z.B.

          ist  das Komplement  von "="  (gleich) "!=" (ungleich)). Die

          Definition eines  Komplementoperators ist  notwendig, um dem

          Optimierer  die Möglichkeit  zu geben,  alternative Wege zur

          Abarbeitung  einer Abfrage mit Hilfe des Komplementoperators

          durchzuführen. Der  Operationstyp definiert  die Eigenschaft

          eines Operators.

 

          Beispiel 19.1

 

          Ein   allgemein   verwendbarer   abstrakter   Datentyp   ist

          "Arbeitstag".  Bei diesem  Datentyp handelt  es sich um alle

          Wochentage,  die   Werktage  sind,  also  Montag,  Dienstag,

          Mittwoch,   Donnerstag  und   Freitag.  Für   den   Datentyp

          "Arbeitstag" können  z.B. als  Operatoren "+" (Addition) und

          "-" (Subtraktion)  definiert werden. Für den ersten Operator

          kann die Funktion "Addiere" und für den zweiten die Funktion

          "Subtrahiere", mit folgenden Ergebnissen definiert werden:

 

          Addiere      ("Montag" + 5) = "Montag",

          Subtrahiere ("Montag  - 1) = "Freitag".

 

Zurück zum Inhaltsverzeichnis