CREATE TABLE für Objekttabellen (Oracle)

Bei Oracle werden Objekttabellen mit einer "relationalen" CREATE-TABLE-Anweisung erstellt, die um einige objektrelationale Features erweitert wurde.

Oracle-Syntax der CREATE-Anweisung für Objekttabellen (Auszug):

   CREATE TABLE Tabellenname OF Typname
      [[ NOT ] SUBSTITUTABLE AT ALL LEVELS ]
      [ ( <object_properties> ) ]
      [ … ]
      [ OBJECT IDENTIFIER IS { SYSTEM GENERATED | PRIMARY KEY } ]
      [ … ]

Mit NOT SUBSTITUTABLE AT ALL LEVELS wird spezifiziert, dass die erzeugte Objekttabelle nicht substituierbar ist. Default ist SUBSTITUTABLE AT ALL LEVELS, was bedeutet, dass Objekte, die den Subtypen entsprechen, auch bei diesem Supertyp eingefügt werden können. Ferner ist Substituierbarkeit nicht erlaubt für z.B. NESTED TABLEs und VARRAYs.

Die <object_properties> bieten unter anderem die Möglichkeit, DEFAULT-Werte zu definieren, CONSTRAINTs als Spalten- oder auch Tabellenbedingungen.

Die OID-Generierung entspricht der OID-Typspezifikation und hat folgende Varianten:

  • OBJECT IDENTIFIER IS SYSTEM GENERATED: Die Verwaltung und Erzeugung der OID-Werte unterliegt vollständig dem DBS. Der OID-Wert kann in Anfragen (SELECTs) angezeigt werden. Diese Art der Definition wird als "systemgeneriert" bezeichnet.
  • OBJECT IDENTIFIER IS PRIMARY KEY: Als OID dient der Primärschlüssel, was natürlich eine entsprechende PRIMARY KEY-Definition bei den <object-properties> voraussetzt. Die Werte für die Primärschlüsselspalten sind vom Anwender einzufügen. Diese Art der Definition wird auch als "abgeleitet" bezeichnet.

Beispiele:

Eine Objekttabelle basierend auf einem benutzerdefinierten Datentyp mit systemgenerierter OID:

  CREATE TABLE mitarbeiter OF mita_typ OBJECT IDENTIFIER IS SYSTEM GENERATED 

Eine Objekttabelle basierend auf einem benutzerdefinierten Datentyp mit einer vom Primärschlüssel abgeleiteten OID:

  CREATE TABLE abteilung OF abt_typ 
     (abt_id     PRIMARY KEY)
     OBJECT IDENTIFIER IS PRIMARY KEY; 

Quellen:

Kategorie: Objektrelationale DB, C