Einen ähnlichen Ansatz verfolgen Pirahesh et al. [PMSL94]. Sie benutzen als Anfragesprache XNF (SQL Extended Normal Form), die eine Erweiterung von SQL ist und mit der auch komplexe Objekte aus relationalen Datenbanken abgeleitet werden können. XNF ist kompatibel zum normalen SQL und kann als Erweiterung in bestehende Datenbanksysteme integriert werden, da Anfragen in XNF in flache relationale Anfragen übersetzt werden.
Die Sicht Profit_Department selektiert die profitable Abteilungen, die zugehörigen
Manager und die Projekte, die von den Managern geleitet werden.
CREATE VIEW Profit_Department
AS
OUT OF xdept AS (SELECT * FROM Department WHERE profit > 1000000),
xman AS Manager,
xproj AS Project,
deptboss AS RELATE xdept VIA boss, xman
WHERE xdept.dno=xman.head_of
manproj AS (RELATE xman VIA leads, xproj
USING PROJMANAGERS pm
WHERE xproj.leader_mno = pm.pmno AND
xman.mno=pm.pmno)
TAKE *
Nach der OUT OF-Anweisung folgen zunächst die Relationen, aus denen
das komplexe Objekte konstruiert werden soll.
deptboss ist die Beziehung zwischen einem Department und seinen
Managern. manproj definiert die Beziehung zwischen Projekten
und Managern und benutzt dabei zusätzlich die Relation PROJMANAGERS.
Der TAKE-Befehl projiziert das Ergebnis auf die angegebenen Attribute,
hier werden alle Attribute ausgegeben.
Abbildung 3.4: Architektur des XNF-Anfragesystems
Abbildung 3.4 zeigt die Struktur der XNF-Anfrageauswertung und die Interaktion mit Applikationsprogrammen. Ein Programm sendet eine XNF-Anfrage an das DBMS. Die XNF-Anfrage wird in eine SQL-Anfrage transformiert und dann vom Anfrageauswerter bearbeitet. Aus dem Ergebnistupeln wird ein sogenannter Workspace konstruiert. Die Objekte werden durch Zeiger miteinander verbunden, so daß man durch die Objekte browsen kann.
Im Gegensatz zum Penguin-System werden hier auf Applikationsseite nur zwei C++-Klassen XNFCache und XNFCursor benutzt. Die Klasse XNFCache enthält zum einem die komplexen Objekten selbst und zum anderen die Schemainformation der Objekte. Die Methode evaluate kann eine XNF-Anfrage bearbeiten und dazu die entsprechenden Instanzen der Klasse XNFCache erzeugen. Der Zugriff auf diese Objekte erfolgt durch Objekte der Klasse XNFCursor, die unter anderem Methoden zum Navigieren und Modifizieren der Objekte bereitstellt. Der Vorteil dieses Ansatzes liegt in der Analyse der Anfrage, die zur Laufzeit des Programms erfolgt. Dadurch können während der Laufzeit Anfragen im Programm erzeugt werden und müssen nicht schon zur Entwicklungszeit bekannt sein.
Christoph Quix