Home



Home | Consulting | Development | Services & NetSolutions | Produkte | News | Unternehmen | Kontakt



Home

Knowledge Flash
Nachrichten
Publikationen

 

Relationale Datenbank-Strukturen DBMS-neutral repräsentieren

Datenbank-Strukturen

In diesem Beitrag sollen unter dem Begriff Datenbank-Strukturen folgende Elemente zusammengefaßt werden:

  • Tabellen-Definitionen
  • Spaltentypen
  • Angaben darüber, ob in einer Spalte null-Werte erlaubt sind
  • Feldgrößen
  • Indices
  • Schlüssel
  • Fremdschlüsselbeziehungen
  • Definition eines Voreinstellungswertes für Spalten
  • Ändern des Referenzwertes einer Fremdschlüsselbeziehung
Wir benutzten zur DBMS-neutralen Darstellung das Werkzeug XML-Schema.

SQL-Datendefinition

Als Beispiel für die Darstellung von SQL-Datenstrukturen (oder Tabellendefinitionen) sollen die beiden im Folgenden definierten Tabellen dienen, die durch eine Fremdschlüsselbeziehung verknüpft sind:

create table A(
cola integer primary key,
colb varchar(62) DEFAULT 'text',
colc integer unique,
cold decimal not null
);
create table B(
cola integer primary key,
colb integer references a(cola) ON DELETE SET NULL ON UPDATE CASCADE
);

Tabellen-Definitionen

Tabellendefinitionen werden als Elemente mit komplexen Typen deklariert:

<xs:element minOccurs="0" name="a" type="aTable"/>
Eine Tabelle enthält eine Anzahl Zeilen:
<xs:complexType name="aTable">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="a.row" type="arowType"/>
</xs:sequence>
</xs:complexType>

Spaltentypen

Spalten werden ebenfalls als Elemente in dem Element, das eine Zeile definiert, dargestellt. Spaltentypen werden auf die einfachen Typen abgebildet, die bereits Teil von XMLSchema sind. Spaltennamen werden ebenso wie die Typfestlegungen über Attribute des jeweiligen Elements realisiert. Im Beispiel könnte das so aussehen:

<xs:element maxOccurs="1" minOccurs="1" name="cola" type="xs:int"/>

Angaben darüber, ob in einer Spalte null-Werte erlaubt sind

Die Festlegung, ob in einer Spalte null-Werte erlaubt sind, wird über das Attribut minOccurs festgelegt. Ein Wert von 0 bedeutet, daß null-Werte erlaubt sind:

<xs:element maxOccurs="1" minOccurs="0" name="colc" type="xs:int"/>

Im Gegensatz dazu die Definition einer Spalte, die keine null-Werte erlaubt:

<xs:element maxOccurs="1" minOccurs="1" name="cold" type="xs:decimal"/>

Feldgrößen

Die Festlegung der Länge eines Feldes kann über die Verfeinerung eingebauter Typen realisiert werden. So würde Spalte colb in Tabelle A durch folgende Definition repräsentiert:

<xs:element maxOccurs="1" minOccurs="0" name="colb" type="string62Type"/>

Der Typ selbst wird durch folgende Definition festgelegt:

<xs:simpleType name="string62Type">
<xs:restriction base="xs:string">
<xs:maxLength value="62"/>
</xs:restriction>
</xs:simpleType>

Indices

Indices werden durch einen Constraint beschrieben, der in unserem Beispiel für die Spalte colb in Tabelle A wie folgt definiert wird:

<xs:unique name="acolcIndex">
<xs:selector xpath="./a/a.row"/>
<xs:field xpath="colc"/>
</xs:unique>

Schlüssel

Schlüssel werden durch einen Constraint beschrieben, der in unserem Beispiel für die Spalte cola in Tabelle A wie folgt definiert wird:

<xs:key name="acolaKey">
<xs:selector xpath="./a/a.row"/>
<xs:field xpath="cola"/>
</xs:key>

Fremdschlüsselbeziehungen

Fremdschlüsselbeziehungen werden durch einen Constraint beschrieben, der in unserem Beispiel für die Spalte colb in Tabelle B wie folgt definiert wird:

<xs:keyref name="b.colb" refer="acolaKey">
<xs:selector xpath="./b/b.row"/>
<xs:field xpath="colb"/>
</xs:keyref>

Definition eines Voreinstellungswertes für Spalten

Die Definition eines Voreinstellungswertes für Spalten kann nicht über Schema-Strukturelemente erfolgen. Wir setzen daher sogenannte Annotationen ein. Für die Spalte colb in Tabelle Awürde dies folgende Definition ergeben:

<xs:element maxOccurs="1" minOccurs="0" name="colb" type="string62Type">
<xs:annotation>
<xs:appinfo source="sQLshell:DEFAULT_VALUE">text</xs:appinfo>
</xs:annotation>
</xs:element>

Ändern des Referenzwertes einer Fremdschlüsselbeziehung

Die Definition des Verhaltens bei Modifikation des Schlüssels in einer Fremdschlüsselbeziehung (Löschen, Ändern) kann nicht über Schema-Strukturelemente erfolgen. Wir setzen daher so genannte Annotationen ein. Für die Spalte colb in Tabelle B würde dies folgende Definition der Fremdschlüsselbeziehung ergeben:

<xs:keyref name="b.colb" refer="acolaKey">
<xs:selector xpath="./b/b.row"/>
<xs:field xpath="colb"/>
<xs:annotation>
<xs:appinfo source="sQLshell:FOREIGN_KEY/UPDATE_RULE">CASCADE</xs:appinfo>
</xs:annotation>
<xs:annotation>
<xs:appinfo source="sQLshell:FOREIGN_KEY/DELETE_RULE">SET_NULL</xs:appinfo>
</xs:annotation>
</xs:keyref>


<jkey@netsys-it.de>

© 2004 NetSys.IT GbR




 Copyright © 2004 NetSys.IT