pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...
pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...
pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
UnaryRAExpession(): RelationIdent() |<br />
„(„ RAExpression() [ Alias() ] „)“ |<br />
„[„ AttList() „]“ „(„ RAExpression() „)“ |<br />
„[„ Condition() „]“ „(„ RAExpression() „)“ |<br />
„[„ GroupList() „“ AggrList() „]“ „(„ RAExpression() „)“<br />
Für Selektionsbedingung muss ein anderes Nichtterminal verwendet werden als für die<br />
Joinbedingungen, da hier nicht nur Und-Verknüpfungen, sondern beliebige boolsche Verknüpfungen<br />
von Vergleichen erlaubt sind.<br />
Für die Relationen- <strong>und</strong> Aliasnamen ergeben sich folgende Produktionen.<br />
RelationIdent(): <br />
Alias(): <br />
Mit den bisher gegebenen Produktionen lassen sich auf relationenalgebraischer Ebene<br />
bereits beliebige Ausdrücke rekursiv erstellen, es fehlen aber noch die Produktionen für<br />
die Bedingungen <strong>und</strong> Attribut-Listen.<br />
Eine Selektionsbedingung besteht aus logischen Verknüpfungen von Vergleichs-Ausdrücken.<br />
Da die logischen Operatoren unterschiedliche Prioritäten besitzen, müssen hier mehrere<br />
Produktionen erstellt werden. Stellt man sich einen Ableitungsbaum vor, so müssen sich<br />
ganz allgemein Operatoren mit einer niedrigen Priorität möglichst weit entfernt von den<br />
terminalen Operanden-Symbolen, also möglichst weit oben im Baum befinden. Bezogen<br />
auf die Grammatik bedeutet dies, dass für jede Prioritätsstufe eine Produktion vorhanden<br />
sein muss. Die Produktion werden hierarchisch durchlaufen. In der ersten Produktion<br />
können optional Symbole mit niedrieger Priorität erkannt werden oder direkt in die<br />
nächste Produktion gewechselt werden. Bei den logischen Operatoren besitzt die Oder-<br />
Verknüpfung die niedrigste Priorität, eine Und-Verknüpfung eine höhere <strong>und</strong> der Not-<br />
Operator die höchste. Zusäzlich muss die Änderung der Prioritäten durch Klammerung<br />
mit einbezogen werden. Es ergeben sich folgende Produktionen.<br />
Conditon(): AndExpression() ( AndExpression())∗<br />
AndExpression(): NotExpression() (AND NotExpression)∗<br />
NotExpression(): [] ( Comparison() | "‘("‘ Condition() "‘)"’␣)<br />
Da keine Schachtelung von Vergleichen möglich ist, müssen hier keine Prioritäts-Regeln<br />
beachtet werden. Es muss daher nur eine Produktion vorhanden sein.<br />
Comparison(): AttributeTerm() ( AttriuteTerm() |<br />
[] |<br />
|<br />
Literal() Literal() )<br />
Ein Literal kann hierbei ein beliebiges Literal sein.<br />
20