11.01.2015 Aufrufe

pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...

pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...

pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Ausdruck ist, wird in der SQL-Anfrage statt einem Tabellennamen eine Unteranfrage<br />

eingetragen. Hierdurch hätte man einen sehr einfachen Algorithmus, der mit beliebig verschachtelten<br />

Relationenalgebra-Ausdrücken umgehen kann. Als Beispiel soll die folgende<br />

Übersetzung betrachtet werden.<br />

Anfrage:<br />

Übersetzung:<br />

PROJ[B,C](SEL[A>1]()R) NJOIN PROJ[C,D](S)<br />

SELECT ∗<br />

FROM (SELECT B,C<br />

FROM (SELECT ∗<br />

FROM R<br />

WHERE A>1))<br />

NATURAL JOIN (SELECT C,D<br />

FROM S)<br />

Das Problem bei diesem Verfahren ist die stark verschachtelte Struktur. Die Anfragen<br />

werden dadurch sehr schlecht lesbar <strong>und</strong> in den meisten Fällen weniger effizient.<br />

Entwurf einer verbesserten Übersetzung<br />

SQL bietet in jedem SQL-Block sechs Klauseln, die für eine Anfrage benutzt werden<br />

können. Bei der oben angegeben Übersetzung der Relationenalgebra-Ausdrücke werden<br />

jedoch nur zwei bis drei Klauseln von einer Operation benutzt <strong>und</strong> jede weitere Operation<br />

erzeugt eine neue Unteranfrage der From-Klausel. Sinnvoller wäre es mit mehreren Operationen<br />

die Klauseln eines SQL-Blocks zu füllen. Hierzu soll folgendes Beispiel betrachtet<br />

werden.<br />

Anfrage:<br />

Übersetzung 1:<br />

Übersetzung 2:<br />

PROJ[B](SEL[A>1](R))<br />

SELECT B<br />

FROM (SELECT ∗<br />

FROM R<br />

WHERE A>1)<br />

SELECT B<br />

FROM R<br />

WHERE A>1<br />

Die zweite Übersetzungs-Variante kommt ohne Unteranfrage aus <strong>und</strong> ist deshalb der ersten<br />

vorzuziehen. Für die beiden Übersetzungen war keine Umformung der ursprünglichen<br />

Anfrage nötig. Da sich in einem SQL-Block mehr als eine Operation unterbringen lässt,<br />

ist keine eindeutige Abbildung eines Relationenalgebra-Ausdrucks auf eine SQL-Anfrage<br />

möglich. Beide Übersetzungen können daher als SQL-seitige Interpretation des selben<br />

Relationenalgebra-Ausdrucks betrachtet werden.<br />

Der gesuchte Algorithmus soll eine Übersetzung liefern die äquivalent zur eingegebenen<br />

Anfrage ist, also nicht auf Umformungen beruht, also nur auf Basis unterschiedlicher<br />

Interpretationen arbeiten.<br />

Geht man nun davon aus, dass die Anfrage nicht weiter umgeformt werden darf, so muss<br />

zum Beispiel die Anfrage<br />

40

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!