Leopold-Franzens-Universität Innsbruck. Institut für Informatik Datenbanken und Informationssysteme. Johannes Kessler

Größe: px
Ab Seite anzeigen:

Download "Leopold-Franzens-Universität Innsbruck. Institut für Informatik Datenbanken und Informationssysteme. Johannes Kessler"

Transkript

1 Leopold-Franzens-Universität Innsbruck Institut für Informatik Datenbanken und Informationssysteme Übungstool für relationale Algebra Bachelor-Arbeit Johannes Kessler betreut von Michael Tschuggnall, MSc Univ. Prof. Dr. Günther Specht Innsbruck, 16. Mai 2014

2

3 Zusammenfassung Die relationale Algebra ist eine prozedurale Abfragesprache und theoretisches Fundament eines relationalen Datenbanksystems. Sie bildet die Grundlage zum tieferen Verständnis der Arbeitsweise einer Datenbank und wird in Datenbank-Vorlesungen ausführlich behandelt. Im Gegensatz zu anderen Abfragesprachen wie SQL gibt es jedoch kaum Programme, die Abfragen in relationaler Algebra unterstützen. Meist wird sie eher theoretisch vermittelt und Beispiele müssen oft händisch berechnet werden. In dieser Arbeit wird ein Übungstool vorgestellt, das Studenten erlaubt, Abfragen in relationaler Algebra und SQL einzugeben und in relationaler Algebra auszuführen. Dadurch soll das Erlernen dieser fundamentalen Konzepte erleichtert und ein Einblick in die grundlegende Funktionsweise einer Datenbank gegeben werden. Das webbasierte Übungstool unterstützt alle Basisoperatoren der relationalen Algebra und viele der erweiterten Operatoren.

4

5 Abstract The relational algebra is a procedural query language and is the theoretial basis of a relational database system. It is taught in lectures at universities to build the foundation of understanding how database systems work. In the contrast to other query languages like SQL, there are very few programs that allow to run an arbitrary relational algebra statement. It is therefore often told very theoretically and examples have to be calculated manually. In this thesis a platform was developed, that allows students to formulate statements in either SQL or relational algebra. These statements are then translated into and are run as relational algebra. This should allow the users to learn the fundamental concepts more easily and should give them an insight of how a database works. The webbased tool supports all of the basic operators of the relational algrebra and many of the additional operators and concepts.

6

7 Inhaltsverzeichnis 1 Einleitung V 2 Relationale Algebra Relationales Modell und relationale Algebra Aufbau Union-Kompatibilität Operatoren der relationalen Algebra Selektion Projektion Umbenennung Vereinigung Schnittmenge Differenz Kreuzprodukt Theta-Join Equi-Join Natural-Join Outer Joins Semi-Joins Anti-Join Division Sortieren Erweiterung der Projektion Gruppierung und Aggregation Sichtbarkeit Operatorbaumdarstellung Präzedenz Übungstool Relationale Algebra Syntax Kommentare Zuweisungen III

8 INHALTSVERZEICHNIS Inline-Relationen Präzedenz Plaintext Notation SQL Berechnung Server Geteilte Tabellen Grafische Benutzeroberfläche Editor Syntax-Highlighting Fehlermeldungen Autovervollständigung Operatorbaum Font Zusammenfassung 65 Literaturverzeichnis 68 IV Johannes Kessler

9 Kapitel 1 Einleitung Das relationale Modell und die relationale Algebra (RA) wurden 1970 von E. F. Codd eingeführt [Cod70]. Sie bilden das theoretische Fundament jedes relationalen Datenbanksystems. Die relationale Algebra ist eine prozedurale Sprache, um Abfragen mit Relationen zu formulieren. Es werden hierfür Operationen definiert, die Relationen (vereinfacht Tabellen) verarbeiten können. Aufgrund ihrer fundamentalen Bedeutung für das Verständnis eines Datenbanksystems wird die relationale Algebra sowohl in den meisten Büchern behandelt, welche die Grundlagen einer Datenbank vermitteln, als auch in Datenbankvorlesungen an Universitäten vorgestellt. Im Gegensatz zu SQL, das den ISO-Standard für den Zugriff auf relationale Datenbanken darstellt, existiert für die relationale Algebra keine breite Unterstützung durch entsprechende Tools oder Backends. Meist wird sie eher theoretisch vermittelt und Beispiele werden oft händisch berechnet. Ziel dieser Bachelorarbeit ist die Entwicklung eines webbasierten Übungstools für relationale Algebra. Es soll die Berechnung von beliebigen RA-Statements auf vorgegebenen Daten ermöglichen. Einzelschritte der Berechnungen sollen in einem Operatorbaum visualisiert und deren Ergebnisse angezeigt werden können. Weiters soll es möglich sein, Statements in SQL eingeben zu können und diese in RA zu übersetzen. Ähnliche Projekte Interaktive Relationale Algebra (IRA) von Henrik Mühe ist ein webbasiertes Tool, um RA-Ausdrücke auf einem vordefinierten Schema zu formulieren und auszuwerten 1. Die Eingabe der Formel erfolgt durch Auswahl der entsprechenden Operatoren und Operanden. Ein bereits 1 und zuletzt besucht am V

10 KAPITEL 1. EINLEITUNG eingegebener Teil kann dabei nicht direkt geändert werden, es steht jedoch eine Funktion zur Verfügung, die den jeweils letzten Schritt rückgängig macht. Die Darstellung der eingegebenen Formeln wurde durch serverseitiges Rendering von Latexcode realisiert. Die Berechnung des Ergebnisses erfolgt clientseitig in JavaScript. Relation Algebra Expression Evaluation ist eine Bachelorarbeit von Lucie Molkov an der Masaryk Universität [Mol09]. Die Arbeit behandelt das Parsen von RA-Ausdrücken und das Übersetzen der Statements in SQL. Hierfür wird eine alternative Klartextsyntax für die RA eingeführt und eine Operatorpräzedenz definiert. Eine Berechnung von RA-Statements ist durch ein in Perl implementiertes Programm möglich, das die eingegebenen Abfragen in SQL übersetzt und für die Berechnung an eine verbundene Datenbank weitergibt. select2obaum ist ein webasiertes Programm der Fachhochschule Köln, das vorgegebene oder frei formulierbare SQL-Statements in relationale Algebra übersetzt 2. Das Ergebnis ist ein RA-Ausdruck, der sowohl als Formel als auch als einfacher Operatorbaum dargestellt wird. Eine Auswertung der Abfrage auf echten Daten ist nicht möglich. Relational Algebra Translator (RAT) ist ein Programm, das eingegebene RA-Statements in SQL übersetzt und diese auf einem verbundenen relationalen Datenbanksystem ausführt 3. Neben dem übersetzten SQL-Statement wird das RA-Statement als Operatorbaum dargestellt. Die semantische Prüfung der eigegebenen Abfrage erfolgt indirekt durch das Ausführen des SQL-Statements. RAT wurde mit dem.net- Framework umgesetzt und benötigt eine Installation auf dem Zielrechner. Relational Algebra Evaluator ist ein interaktiver Interpreter von Nick Everitt 4. Er ist in Java implementiert und bietet dem User ein Textinterface zur Eingabe der RA-Statements. Relationen können dabei aus CSV-Dateien geladen werden. 2 zuletzt besucht am zuletzt besucht am zuletzt besucht am VI Johannes Kessler

11 KAPITEL 1. EINLEITUNG Aufbau Kapitel 2 ist eine Einführung in relationale Algebra. Dabei werden alle im Programm unterstützten Operatoren vorgestellt und erklärt, sowie der grundlegende Aufbau von RA-Abfragen und die Gültigkeitsbereiche von Bezeichnern eingeführt. Weiterhin wird eine Operatorpräzedenz eingeführt, die es erlaubt, durch eine implizite Klammerung von Operatoren auf einen Großteil der expliziten Klammerung zu verzichten. In Kapitel 3 werden das umgesetzte Übungstool und dessen Kernkomponenten vorgestellt. Es wird dafür eine für einen Code-Editor geeignete RA-Syntax und deren Grammatik vorgestellt. Außerdem werden mehrere Erweiterungen wie Zuweisungen oder im Code eingebettete Relationen erklärt, die Übersetzung von SQL Statements nach RA eingeführt und das unterstützte SQL Subset definiert. In Kapitel 4 wird die grafische Benutzeroberfläche des umgesetzten Übungstools präsentiert. Dabei werden wichtige Komponenten wie der Editor und der Operatorbaum und die damit verbundenen Erweiterungen vorgestellt. Johannes Kessler 1

12

13 Kapitel 2 Relationale Algebra In diesem Kapitel wird die relationale Algebra und deren Operatoren vorgestellt. Hierbei werden alle im Übungstool unterstützen Operatoren im besonderen Hinblick auf die Verwendung von vollqualifizierten Attributnamen eingeführt. 2.1 Relationales Modell und relationale Algebra Das relationale Modell bildet die Grundlage heutiger relationaler Datenbanksysteme. Es wurde mit der relationalen Algebra (RA) Anfang der 70er Jahre von E. F. Codd eingeführt [Cod70]. Die relationale Algebra ist eine formale Sprache, mit der Abfragen formuliert werden können. Sie ist im Gegensatz zu den deklarativen Abfragesprachen, wie SQL, dem Relationen-Tupelkalkül oder dem Domänenkalkül, prozedural. Das bedeutet, dass sie aus einer Abfolge von Operationen besteht, die beschreiben, wie das Ergebnis berechnet wird. Die deklartiven Abfragesprachen beschreiben, welche Eigenschaften das Ergebnis haben soll, nicht aber, wie dieses berechnet werden soll. Das relationale Modell folgt einem einfachen Aufbau und besteht (grundsätzlich) aus Tabellen (Relationen), in denen die Daten zeilenweise gespeichert sind. Die Zeilen der Relationen (Tupel) haben keine feste Ordnung innerhalb der Relation. Duplikate (Zeilen mit gleichem Inhalt) sind innerhalb einer Relation nicht möglich. Alle Einträge einer Spalte haben denselben Datentyp (Domäne). Formal [KE11, GMUW09] ist eine Domäne ein bestimmter Wertebereich oder Typ, der nur atomare Werte wie beispielsweise die Menge der natürlichen Zahlen oder Zeichenketten enthält. Nicht zugelassen sind strukturierte Typen wie Mengen oder Multimengen. Eine Relation R wird als Teilmenge aus dem Kreuzprodukt aus n Do- 3

14 KAPITEL 2. RELATIONALE ALGEBRA mänen definiert [KE11, Seite 71]: R Ď D 1 ˆ ˆ D n n ě 1 Ein Element der Relation R wird als Tupel bezeichnet und besitzt die Stelligkeit n. Eine Relation ist eine Menge, welche daher keine Duplikate enthält und deren Elemente keine Ordnung besitzen. In dieser Arbeit werden Relationen als Tabellen dargestellt, was am Beispiel einer Kundentabelle Kunden Ď string ˆ string ˆ integer veranschaulicht werden soll: Kunden := Vorname Nachname Kundennummer Max Mustermann 100 Johann Meier 101 Eine Spalte wird als Attribut bezeichnet und dieser ein innerhalb der Relation eindeutiger Name zugewiesen. Im gegebenen Beispiel werden die Attribute Vorname, Nachname und Kundennummer verwendet. Die Menge der Attribute einer Relation wird als Schema bezeichnet. Attribut Tupel Relation Abbildung 2.1: Bezeichnungen einer Relation als Tabelle dargestellt. Quelle: database_terms.svg, zuletzt besucht am Das Schema einer Relation R (sch(r)) wird in dieser Arbeit wie folgt dargestellt: [Attributname 1 : Attributtyp 1,..., Attributname n : Attributtyp n ] Der Attributname ist ein vollqualifizierter Name in der Form Relationsname.Spaltenname und der Attributtyp der Bezeichner der jeweiligen Domäne. Das Schema der Relation Kunden wird somit als [Kunden.V orname : string, Kunden.N achname : string, Kunden.Kundennummer : integer] 4 Johannes Kessler

15 KAPITEL 2. RELATIONALE ALGEBRA dargestellt. Um die Attribute einer Relation eindeutig ansprechen zu können, kann entweder der Name des Attributs verwendet werden, oder dessen Index (1-basiert) in eckigen Klammern. Beiden Varianten muss, wenn anders nicht eindeutig, ein Qualifizierer vorangestellt werden, der durch einen Punkt getrennt wird. Somit kann die erste Spalte der Kundenrelation sowohl mit Vorname, Kunden.Vorname, [1] als auch mit Kunden.[1] angesprochen werden. In diesem Kapitel werden drei verschiedene Typen verwendet: integer, float und strings. Strings werden dabei analog zu SQL in einfachen Anführungszeichen notiert Aufbau In diesem Abschnitt wird der Aufbau einer Formel in relationaler Algebra erklärt. Eine benannte Relation ist eine Relation, der ein Name zugewiesen wurde und den Ausgangspunkt jedes RA-Ausdrucks bildet. Sie wird innerhalb der Formel durch ihren Namen, z.b. Kunden, angesprochen. Zusätzlich kann jeder Ausdruck, nach einer entsprechenden Zuweisung, über den neuen Variablennamen angesprochen werden: A = (Kunde) ρ x (Konto) π vorname,nachname,kontostand (A) Jede unäre Operation folgt der folgenden Syntax: α β (R) wobei α ein der Funktion entsprechendes Symbol (z.b. π für die Projektion), β das Argument und R eine Relation bezeichnet. Eine binäre Operation wird als (R)α β (S) notiert. Dabei stehen R und S für die übergebenen Relationen, α für die Funktion (z.b. für einen Natural-Join) und β für das Argument der Funktion. Für die Relationen R und S können entweder der Name einer benannten Relation oder ein beliebiger Ausdruck in RA eingesetzt werden. Die Klammerung kann entfallen, solange der Ausdruck weiterhin eindeutig definiert ist. Hierzu wird in Abschnitt 2.5 eine Operatorpräzedenz eingeführt. Johannes Kessler 5

16 KAPITEL 2. RELATIONALE ALGEBRA Das Statement π nachname σ vorname 1 Max 1Kunde ist auch ohne Präzedenzregeln eindeutig. Das Argument β ist nicht bei allen Operationen vorhanden, wobei sich die Semantik des Operators dabei ändern kann. Als Beispiel kann hierfür der Natural- und Theta-Join (siehe Abschnitt und Abschnitt 2.2.8) genannt werden. Beide werden mit demselben Symbol bezeichnet. Die Unterscheidung erfolgt dadurch, dass ein Theta-Join R R.a=S.b S ein zusätzliches Argument β (hier R.a = S.b) besitzt, der Natural-Join hingegen nicht Union-Kompatibilität R S Bestimmte Operationen der relationalen Algebra wie Vereinigung, Schnitt und Differenz verlangen union-kompatibilität. union- Kompatibilität ist eine Eigenschaft des Schemas einer Relation. Zwei Relationen R und S sind genau dann union-kompatibel, wenn folgende Bedingungen erfüllt sind: 1. Die Relationen R und S besitzen dieselbe Stelligkeit n, d.h. sie haben die selbe Anzahl von Spalten. 2. Für alle Spalten der Relationen gilt, dass die Domäne der i-ten Spalte der Relation R mit dem Typ der i-ten Spalte der Relation S übereinstimmt (0 ă i ă n). Die Namen der Attribute spielen dabei keine Rolle. Die Schemata [a : string, b : integer, c : integer] und [d : string, e : integer, f : integer] sind somit union-kompatibel, da sie die selbe Anzahl von Attributen besitzen und die Typen der Spalten jeweils paarweise übereinstimmen. 2.2 Operatoren der relationalen Algebra In diesem Abschnitt werden die Operatoren der relationalen Algebra vorgestellt. Jeder Operation der RA werden eine oder zwei Relationen als Argumente übergeben. Der Rückgabewert ist jeweils eine neue Relation, welche das Ergebnis der Operation enthält. Die Argumentrelationen werden dabei nicht verändert. 6 Johannes Kessler

17 KAPITEL 2. RELATIONALE ALGEBRA Zur einfacheren Darstellung wird in diesem Kapitel teilweise davon gesprochen, dass eine Operation eine bestimmte Relation oder ein Schema verändert, wobei darunter immer die Erzeugung einer neuen Relation oder eines Schemas zu verstehen ist, welche die entsprechenden Änderungen enthält Selektion Die Selektion dient dazu, bestimmte Tupel (Zeilen) auszuwählen und wird mit σ bezeichnet. Die Selektion X = σ C (R) besteht aus einer Relation R und einer Selektionsbedingung C. Die Ergebnisrelation X hat dasselbe Schema und besteht aus jenen Tupeln, welche die Selektionsbedingung C erfüllen (siehe Beispiel 2.1). σ aď2_b= c R.a R.b 1 a 2 b 3 b = 6 c R.a R.b 1 a 2 b 6 c Beispiel 2.1: Selektion. Die Selektionsbedingung C ist ein bedingter Ausdruck, wie er auch in Programmiersprachen wie Java oder C verwendet wird und der folgenden Struktur entspricht: 1. Es werden die logischen Operatoren ^, _ und verwendet. 2. Die Operanden sind (a) boolsche Konstanten (true oder false) oder (b) Vergleiche von zwei Werten gleichen Typs mit den Operatoren =, ě, ď und. Die Werte stammen von Attributen der Relation oder sind konstante Werte der jeweiligen Domäne. Die Bedingung bezieht sich jeweils auf ein einzelnes Tupel und wird auch für andere Operationen wie den Theta-Join verwendet. Johannes Kessler 7

18 KAPITEL 2. RELATIONALE ALGEBRA Projektion Die Projektion ist eine unäre Operation und wird als X = πa loooooomoooooon 1, a 2,..., a n (R) Attribute notiert, wobei a 1 bis a n Attribute der Relation R sind. Im Gegensatz zur Selektion werden bei der Projektion keine Zeilen, sondern bestimmte Spalten in die neue Relation X übernommen. Die Tupel der Ergebnisrelation enthalten nur jene Attribute, die als Argument angegeben wurden (siehe Beispiel Beispiel 2.2). π c,b R.a R.b R.c 1 a 1 2 b 1 3 b 1 R.c R.b = 1 a 1 b Beispiel 2.2: Projektion Umbenennung Attribute Um einzelnen Attributen einer Relation einen neuen Namen zuzuweisen, wird die Operation ρ verwendet, die als X = ρ b1 Ða 1,...,b n Ða n (R) notiert wird. R ist hierbei eine Relation, a 1 bis a n ist eine Teilmenge der Attribute aus R und b 1 bis b n sind die neuen Namen in der Ergebnisrelation X. Die Namen der Attribute, die nicht umbenannt werden, übernehmen den Namen aus der Relation R. Die Tupel der Relation R werden ohne Veränderung übernommen, verändert wird nur das Schema (siehe Beispiel 2.3). ρ xðb,yðc R.a R.b R.c 1 a 1 2 b 1 3 b 1 = R.a R.x R.y 1 a 1 2 b 1 3 b 1 Beispiel 2.3: Umbenennung von Attributen einer Relation. Zu beachten ist hierbei, dass die vollqualifizierten Namen der Attribute innerhalb des neuen Schemas der Relation X eindeutig sein müssen. 8 Johannes Kessler

19 KAPITEL 2. RELATIONALE ALGEBRA Es ist somit möglich, Spalten umzubenennen, wenn diese unterschiedliche Qualifizierer haben, wie in Beispiel 2.4 (a) zu sehen ist. Das Umbenennen ist jedoch nicht möglich, wenn die Attribute durch die Umbenennung nicht mehr eindeutig wären, wie in Beispiel 2.4 (b) zu sehen ist. ρ xða,xðb ρ xða,xðb R.a S.b 1 a 2 b R.a R.b 1 a 2 b = R.x S.x 1 a 2 b = Attribute nicht mehr eindeutig (a) (b) Beispiel 2.4: Umbenennung von Attributen mit gleichem und unterschiedlichem Qualifizierer innerhalb des Schemas. Relationen Der Qualifizierer von vollqualifizierten Attributnamen wird mit X = ρ Y (R) verändert. Dabei ist Y der neue Qualifizierer aller Attribute einer Relation R (siehe Beispiel 2.6). Um die Umbenennung durchführen zu können, müssen die unqualifizierten Namen des neuen Schemas eindeutig sein. Die Umbenennung einer Relation mit dem Schema [R.a, S.a], die aus einem Join der Relationen R und S entstehen kann, ist daher erst möglich wenn einer der Spalten ein neuer Name zugewiesen wird, wie in Beispiel 2.5 illustriert wird. ρ Y ρ xðr.a R.a S.a R.x 1 a = ρ Y 2 b S.a 1 a 2 b = Y.x Y.a 1 a 2 b Beispiel 2.5: Umbenennung von Relationen bei gleichnamigen Spalten. Johannes Kessler 9

20 KAPITEL 2. RELATIONALE ALGEBRA ρ NEW R.a R.b R.c 1 a 1 2 b 1 3 b 1 = NEW.a NEW.b NEW.c 1 a 1 2 b 1 3 b 1 Beispiel 2.6: Umbenennung von Relationen. ρ Y R.a R.b 1 3 Y.a=R.a R.a 2 4 Y.a Y.b R.a R.b R.b = Beispiel 2.7: Join von Relationen mit gleichnamigen Spalten. Durch die Umbenennung kann sichergestellt werden, dass Attribute zweier Relationen, die den selben vollqualifizierten Namen haben, eindeutig angesprochen werden können. Siehe dazu Beispiel Vereinigung Die Vereinigung (union) ist eine Mengenoperation und wird als X = R Y S notiert. Das Ergebnis ist eine neue Relation X mit allen Tupeln aus den Relationen R und S. Die Schemata der Relationen müssen dazu union-kompatibel zueinander sein (siehe Abschnitt 2.1.1). Das Schema wird wie in SQL von der (linken) Relation R übernommen, die Namen der Spalten von R und S müssen dabei nicht übereinstimmen. Wie in Beispiel 2.8 zu sehen ist, werden Duplikate (im Beispiel Zeile [1, b]) dabei nicht mehrfach übernommen. R.a R.b 1 a 2 b Y 3 b S.d S.e 1 b 3 b = R.a R.b 1 a 2 b 3 b 1 b Beispiel 2.8: Vereinigung. 10 Johannes Kessler

21 KAPITEL 2. RELATIONALE ALGEBRA Schnittmenge Die Schnittmenge (intersection) wird als X = R X S notiert, wobei R und S Relationen mit union-kompatiblen Schemata sind (siehe Abschnitt 2.1.1). Die Ergebnisrelation X beinhaltet alle Tupel, die sowohl in R als auch in S enthalten sind. Das Schema wird wie bei der Vereinigung von der linken Relation (R) übernommen. R.a R.b 1 a S.d S.e 2 b X 1 b = 3 b 3 b R.a R.b 3 b Beispiel 2.9: Schnittmenge Differenz Für die Differenz gelten die selben Voraussetzungen und Regeln, wie für die Schnittmenge und die Vereinigung. Die Differenz wird als oder X = R S X = R z S notiert. Es werden all jene Tupel aus R in die Ergebnisrelation X übernommen, die nicht in S vorkommen. Siehe dazu Beispiel R.a R.b 1 a S.d S.e 2 b 1 a = 2 b 3 b R.a R.b 3 b Beispiel 2.10: Differenz. Johannes Kessler 11

22 KAPITEL 2. RELATIONALE ALGEBRA Kreuzprodukt Beim Kreuzprodukt (cross join) X = R S werden alle möglichen Kombinationen der Tupel aus R und S gebildet, die der Form (r, s) r P R und s P S entsprechen. Siehe dazu Beispiel Das Schema ergibt sich aus der Konkatenation der Schemata von R und S. Das Kreuzprodukt mit einer Relation ohne Tupel ergibt eine leere Relation. R.a R.b 1 a 2 b 3 b S.d S.e 1 a 2 b = R.a R.b S.d S.e 1 a 1 a 1 a 2 b 2 b 1 a 2 b 2 b 3 b 1 a 3 b 2 b Beispiel 2.11: Kreuzprodukt Theta-Join Der Theta-Join X = R Θ S ist ein Kreuzprodukt mit einer zusätzlichen Joinbedingung. Von allen Tupeln des Kreuzprodukts werden nur jene übernommen, die die Bedingung Θ erfüllen. Siehe dazu Beispiel R.a R.b 1 a 2 b R.aěS.a 3 b S.a S.b 1 a 2 b = R.a R.b S.a S.b 1 a 1 a 2 b 1 a 2 b 2 b 3 b 1 a 3 b 2 b Beispiel 2.12: Theta-Join. Jeder Theta-Join kann auch durch Kreuzprodukt und Selektion dargestellt werden: R Θ S = σ Θ (R S) 12 Johannes Kessler

23 KAPITEL 2. RELATIONALE ALGEBRA Siehe dazu Beispiel R = R.a 1 2 S = S.a S.b 1 a 1 b 42 c X = R R.a=S.a S = σ R.a=S.a (R S) R.a S.a S.b 1 1 a 1 1 b = σ R.a=S.a 1 42 c = 2 1 a 2 1 b 2 42 c R.a S.a S.b 1 1 a 1 1 b Beispiel 2.13: Theta-Join als Kreuzprodukt und Selektion Equi-Join Der Equi-Join entspricht einem Theta-Join, wobei die Joinbedingung Θ auf einfache Vergleiche der Form a = b beschränkt ist. Diese Unterscheidung ist wichtig, da es für diese Untergruppe schnellere Join- Algorithmen wie z.b. den Hashjoin gibt 1. R.a R.b S.d S.e 1 a 2 b 1 x R.a R.b S.d S.e a=c 2 y = 1 a 1 x 2 b 2 y 3 b 4 z Beispiel 2.14: Equi-Join. 1 zuletzt besucht am Johannes Kessler 13

24 KAPITEL 2. RELATIONALE ALGEBRA Natural-Join Der Natural-Join X = (R) (S) besteht aus den folgenden zwei Schritten: 1. Einem Equi-Join mit allen Paaren von Spalten aus R und S, die denselben Namen haben und 2. einer Projektion, bei der alle Spalten mit gleichem Namen ausgeblendet werden. Die Gleichheit der Namen bezieht sich hierbei auf den unqualifizierten Attributnamen. Da diese zwei Schritte nicht sequenziell ausgeführt werden müssen, sondern eine neue atomare Operation bilden, kann das Schema der Ergebnisrelation X in einem Schritt erzeugt werden. Dies ermöglicht auch Relationen zu joinen, deren vollqualifizierte Attributnamen nicht disjunkt sind, da nur einer davon in das Schema der neuen Relation X übernommen wird. Dadurch ist der Natural-Join idempotent: R R = R R.a R.b 1 a S.a S.c 2 b 1 a = 2 b 3 b R.a R.b S.c 1 a a 2 b b Beispiel 2.15: Natural-Join. Im Beispiel 2.15 kommt der Spaltenname a sowohl in R als auch in S vor. Laut Definition [KE11, Seite 91] wird bei der impliziten Projektion nur eine der Spalten übernommen. Die Frage, welche der beiden Spalten übernommen wird, ist erst bei Betrachtung des vollqualifizierten Namens von Bedeutung, da die Spalte später entweder als R.a oder S.a ansprechbar ist. In dieser Arbeit wurde daher definiert, dass immer die Spalte der linken Relation (im Beispiel R.a) übernommen wird. Wenn keine gemeinsamen Attribute existieren, gibt es zwei verschiedene Möglichkeiten 2 : 1. Es wird verlangt, dass zumindest ein gemeinsames Attribut vorhanden ist. Der Natural-Join kann somit nicht auf zwei Relationen mit disjunkten Attributen angewendet werden , zuletzt besucht am Johannes Kessler

25 KAPITEL 2. RELATIONALE ALGEBRA 2. Ohne gemeinsame Attribute verhält sich der Natural-Join genau wie ein Kreuzprodukt. In dieser Arbeit wurde die zweite Interpretation gewählt, da dies dem Verhalten in modernen Datenbanksystemen wie z.b. PostgreSQL entspricht (siehe [Pos, Kapitel ]) Outer Joins Bei Outer Joins können ein oder mehrere Werte eines Tupels fehlen. Dieser Zustand wird durch null ausgedrückt. Man spricht hierbei auch von einem null-wert, wobei null kein Wert einer bestimmten Domäne ist, sondern eine explizite Darstellung, dass das Tupel an dieser Position keinen Wert enthält und ist damit mit der leeren Menge vergleichbar. Left Outer Theta-Join Der Left Outer Join X = (R) Θ (S) ist einem Theta-Join sehr ähnlich. Die Werte eines Tupels der linken Relation R bleiben jedoch auf jeden Fall erhalten, auch wenn kein entsprechender Joinpartner in der Relation S gefunden wird, die Joinbedingung Θ also für r in Kombination mit allen Tupeln aus S false ergibt. Für jedes Tupel der Relation R wird mit allen Tupeln aus S ein Join-Paar gebildet, wenn die Joinbedingung Θ erfüllt ist. Wenn kein Joinpartner in S gefunden wurde, wird das Tupel der neuen Relation auf der rechten Seite mit null-werten aufgefüllt (siehe Beispiel 2.16). R.a R.b 1 a S.a S.b 2 b R.a=S.a 1 a = 2 b 3 b R.a R.b S.a S.b 1 a 1 a 2 b 2 b 3 b null null Beispiel 2.16: Left Outer Theta-Join. Um Bedingungen für Relationen zu formulieren, bei denen null-werte vorkommen können, muss eine dreiwertige Logik, analog zu SQL, verwendet werden. Dabei werden die logischen Zustände true und false um einen dritten Zustand unknown erweitert. Ein Vergleich von null mit einem nicht null-wert ergibt immer unknown. Bei zwei null-werten ergeben =, ě und ď true, ą, ă und false. Auch die Operatoren ^, _ und müssen, wie in Tabelle 2.1 gezeigt, erweitert werden, wobei die Präzedenz erhalten bleibt. Johannes Kessler 15

26 KAPITEL 2. RELATIONALE ALGEBRA ^ true false unknown true true false unknown false false false unknown unknown unknown false unknown _ true false unknown true true true true false true false unknown unknown true unknown unknown true false unknown false true unknown Tabelle 2.1: Wahrheitstabellen der Operatoren der dreiwertigen Logik. Quelle: [GMUW09, Seite 254]. Left Outer Natural-Join Der Left Outer Natural-Join vereint analog zum Natural-Join X = (R) (S) eine Projektion, bei der alle Spalten gleichen Namens ausgeblendet werden und einen Left Outer Theta-Join, bei dem die Joinbedingung Θ durch die Paare von Spalten mit gleichem Namen definiert ist. Bei der Projektion geht jeweils die Spalte gleichen Namens aus der rechten Relation S verloren. Siehe dazu Beispiel R.a R.b 1 a S.b S.c 2 a a 5 = b 6 3 d R.a R.b S.c 1 a 5 2 a 5 3 d null Beispiel 2.17: Left Outer Natural-Join. Right Outer Joins Der Right Outer Natural-Join X = (R) (S) 16 Johannes Kessler

27 KAPITEL 2. RELATIONALE ALGEBRA und der Right Outer Theta-Join X = (R) Θ (S) verhalten sich analog zum jeweiligen Left Outer Join, nur dass hierbei die Werte der rechten Relation S bestehen bleiben und links mit null- Werten aufgefüllt wird, wenn kein Joinpartner in der linken Relation R vorhanden ist. Beim Right Outer Natural-Join geht jeweils die Spalte gleichen Namens aus der linken Relation R verloren. Siehe dazu Beispiel 2.18 und Beispiel S.a S.c R.b R.a a 1 R.a=S.a 1 a 2 b = b 2 3 b R.b R.a S.a S.c a 1 1 a b 2 2 b null null 3 b Beispiel 2.18: Right Outer Theta-Join. R.b R.a a 1 b 2 S.a S.c 1 a 2 b 3 b = R.b S.a S.c a 1 a b 2 b null 3 b Beispiel 2.19: Right Outer Natural-Join. Full Outer Joins Der Full Outer Join und der Full Outer Theta-Join X = (R) (S) X = (R) Θ (S) vereinen die Eigenschaften des Left- und Right Outer Joins. Wenn kein Joinpartner für ein Tupel der linken Relation R gefunden wird, wird rechts mit null-werten aufgefüllt, und wenn keiner für ein Tupel der rechten Relation S gefunden wird, wird links aufgefüllt. Das Schema wird jeweils durch die Konkatenation der Schemata von R und S gebildet. Siehe dazu Beispiel Der Full Outer Theta-Join kann auch durch eine Vereinigung von Leftund Right Outer Theta-Join dargestellt werden: R Θ S = (R Θ S) Y (R Θ S) Johannes Kessler 17

28 KAPITEL 2. RELATIONALE ALGEBRA R.a R.b 1 a 2 b S.b S.c b 42 d 42 = R.a R.b S.b S.c 1 a null null 2 b b 42 null null d 42 Beispiel 2.20: Full Outer Natural-Join Semi-Joins Der Left Semi-Join X = (R) (S) eliminiert alle Tupel der Relation R, für die kein Joinpartner in S gefunden wird. Beim Right Semi-Join X = (R) (S) werden alle Tupel aus S nicht übernommen, die in R keine Joinpartner haben. Joinbedingung ist analog zum Natural-Join, dass Spalten der Relationen R und S, die den gleichen Namen haben, idente Werte aufweisen müssen (siehe Abschnitt ). Das Schema entspricht nach der Ausführung des Left Semi-Joins dem der linken Relation R, nach der Ausführung des Right Semi-Joins dem der rechten Relation S. sch(r S) = sch(r) sch(r S) = sch(s) Der Semi-Join kann daher auch als Theta-Join (R Θ S) mit nachfolgender Projektion auf die Attribute einer der Relationen angesehen werden, wobei die Joinbedingung Θ analog zum Natural-Join gebildet wird. Hierbei ist jedoch zu beachten, dass beim Theta-Join temporär eine neue Relation entsteht, deren Schema aus der Konkatenation der Schemata von R und S gebildet wird. Beim Semi-Join werden jedoch nur von einer der Relationen Zeilen entfernt bzw. nicht in die neue Relation X übernommen. Da innerhalb eines Schemas die voll qualifizierten Namen eindeutig sein müssen, kann ein Theta-Join nicht ausgeführt werden, wenn dieselben voll qualifizierten Namen in beiden Relationen vorkommen. Beim Semi- Join besteht diese Einschränkung nicht. Dies kann anhand eines Self-Joins (Join einer Relation mit sich selbst) veranschaulicht werden: 18 Johannes Kessler

29 KAPITEL 2. RELATIONALE ALGEBRA Der Self-Join mithilfe eines Semi-Joins R = R R = R R ist problemlos möglich, da die Schemata nicht konkateniert werden müssen. Der Self-Join mit einem Theta-Join R true R ist jedoch nicht möglich, da das neue Schema nicht gebildet werden kann Anti-Join Der Anti-Join oder Anti Semi-Join X = (R) (S) selektiert das Komplement des (Left) Semi-Joins. In der Relation X sind damit all jene Tupel aus R enthalten, die keinen Joinpartner in S haben. Der Anti-Join kann auch durch ausgedrückt werden Division Die relationale Division R S = R (R S) X = R S ist eine binäre Operation und kann folgendermaßen durch andere Operatoren ausgedrückt werden [KE11, Seite 97]: R = sch(r) S = sch(s) R 1 = R S R S = π R 1(R) π R 1((π R 1(R) S) R) S muss hierbei eine echte Teilmenge von R sein. Das Schema R 1 besteht aus jenen Attributen der Relation R, die nicht Attribut der Relation S sind. R 1 ist somit die Differenz der Schemata: R 1 = sch(x) = sch(r) sch(s) Die Tupel der Ergebnisrelation X bestehen aus einem Subset der Tupel aus R (definiert durch (R 1 )), bei denen alle Kombinationen mit allen Tupeln aus S in R enthalten sind. Die Kombinationen entsprechen hierbei der Form [t r, t s ], wobei t r ein Tupel der Relation R und t s ein Tupel der Relation S ist. Johannes Kessler 19

30 KAPITEL 2. RELATIONALE ALGEBRA R.a R.b R.c 1 a b 1 c d 1 e f 2 a b 2 c d 3 a b 4 c d 5 e f S.b a c S.c b d = R.a 1 2 Beispiel 2.21: relationale Division Sortieren Sortieren von Tupeln innerhalb einer Relation ist in der klassischen relationalen Algebra nicht möglich, da Relationen Mengen von Tupeln sind und die Tupel darin - per Definition - keine Ordnung haben. Der hier vorgestellte Sortieroperator [GMUW09, Seite 219] kann daher nur angewendet werden, wenn diese Einschränkung aufgehoben wird, wie in [GMUW09, Kapitel 5.1] erläutert wird. In dieser Arbeit wird ein zusätzlicher Sortieroperator vorgestellt, da dieser mehrere Vorteile bietet: 1. Durch eine sortierte Ausgabe können Ergebnisse verschiedener Abfragen einfacher verglichen werden, 2. er ermöglicht die Darstellung der SQL-order by-operation als eigene RA-Operation und 3. er ermöglicht die Ausgabe des Programms mit Beispielen aus Vorlesungsunterlagen oder Büchern einfacher zu vergleichen. Der Sortieroperator X = τ a1 asc,a 2 desc,...,a n (R) sortiert die Tupel der Relation R nach den übergebenen Attributen (a 1 bis a n ). Nach jedem Attribut kann zusätzlich eine optionale Sortierrichtung angegeben werden: asc für aufsteigend und desc für absteigend. Ohne explizite Angabe der Reihenfolge wird asc angenommen (siehe Spalte b in Beispiel 2.22). Das Schema wird dabei nicht verändert. sch(τ a1,...,a n (R)) = sch(r) 20 Johannes Kessler

31 KAPITEL 2. RELATIONALE ALGEBRA τ a desc,b R.a R.b R.c 1 a 42 1 c 0 2 b d 4 = R.a R.b R.c 2 b d 4 1 a 42 1 c 0 Beispiel 2.22: Sortieren einer Relation Erweiterung der Projektion Durch Einführung einer Ordnung der Tupel durch Lockerung des strikten Mengenbegriffs (wie in Abschnitt beschieben wurde), liegt die Idee nahe, diese Ordnung für Abfragen nutzbar zu machen. In SQL besteht diese Möglichkeit je nach Datenbanksystem durch die Limit und Offset Klausel oder durch eine virtuelle Spalte rownum, welche den Zeilenindex jeder Zeile der Tabelle enthält. Damit sind Abfragen wie Top 10 Kunden mit den meisten Bestellungen möglich die auf einer horizontalen Partitionierung unter Ausnutzung der Ordnung beruhen. In dieser Arbeit wurde die Projektion dafür um einen virtuelle Spalte namens ROWNUM erweitert. Solange kein Attribut mit dem Namen ROWNUM im Schema enthalten ist, kann damit der Tupelindex (1-basiert) der Argumentrelation ausgegeben werden. Die dadurch entstehende neue Spalte mit Integerwerten kann in allen folgenden Operationen wie jede andere Spalte behandelt werden. In Beispiel 2.23 werden die besten drei Studenten einer Prüfung gesucht. Dazu wird die Relation zuerst nach den Noten sortiert um im nächsten Schritt den Tupelindex ROWNUM hinzuzufügen. Über diese neue Spalte werden bei der Selektion die fünf ersten Einträge ausgewählt. Für die Ausgabe könnte die Spalte ROWNUM über eine weitere Projektion ausgeblendet werden. Johannes Kessler 21

32 KAPITEL 2. RELATIONALE ALGEBRA MatrNr Note σ ROW NUMă=3 (π ROW NUM,[1],[2] (τ Note asc ROWNUM R.MatrNr R.Note )) = Beispiel 2.23: Verwendung des Tupelindex innerhalb einer RA-Abfrage Gruppierung und Aggregation Bei der Gruppierung werden die Tupel einer Relation zu Gruppen zusammengefasst. Dabei sind all jene Tupel in einer gemeinsamen Gruppe die bei allen Gruppierungsattributen die selben Werte aufweisen. Auf alle Tupel einer Gruppe können Aggregationsfunktionen wie das Aufsummieren aller Werte angewandt werden. Die hier vorgestellte Aggregation entspricht einer Mischung aus den Definitionen in [KE11, Seite 97] und [GMUW09, Seite 214]. Durch die strikte Trennung von Gruppierung und Aggregation in der Syntax von [KE11] ist klarer ersichtlich, dass es sich dabei um zwei separate Schritte handelt. Die direkte Benennung der durch die Aggregation entstehenden Spalten in [GMUW09] ermöglicht eine einfache Weiterverwendung der Attribute über den zugewiesenen Namen. Die Attribute nach denen gruppiert wird, sind wie in [GMUW09] optional. Die Aggregation wird mit X = γ a1 loooomoooon,..., a n ;AGG looooooooooooooooooomooooooooooooooooooon 1 Ñ x 1,..., AGG n Ñ x n (R) Gruppierung Aggregation notiert. Wobei a 1 bis a n die Attribute sind nach denen gruppiert wird, AGG 1 bis AGG n sind die Aggregationsfunktionen die auf alle Tupel der Gruppen angewandt werden und x 1 bis x n sind die Namen der Aggregationsspalten in der Ergebnisrelation X. Die Angabe der Gruppierungsattribute ist optional. Wenn keine Gruppierung angegeben ist, gibt es eine einzelnen Gruppe welche alle Tupel der Relation R enthält (siehe Beispiel 2.24). Der Strichpunkt kann dabei entfallen. 22 Johannes Kessler

33 KAPITEL 2. RELATIONALE ALGEBRA γ SUM(b)Ñz,AV G(b)Ñy,MIN(a)Ñz R.a R.b 1 a 1 c 2 b 2 d = x y z 6 2 a Beispiel 2.24: Aggregation ohne explizite Angabe einer Gruppierung. Für die Aggregation stehen die in Tabelle 2.2 aufgelisteten Aggregationsfunktionen zur Verfügung. Die Beschreibung bezieht sich dabei immer auf die Werte einer Gruppe. Die Rückgabewerte der Funktionen COUNT ( ) und COUNT (Attribut) sind Integer. Die Funktion AV G(x) gibt einen Float-Wert zurück. Bei allen anderen entspricht der Typ der Rückgabe dem Typ des übergebenen Attributs. Funktion COUNT ( ) COUNT (x) MIN(x) M AX(x) SU M(x) AV G(x) Beschreibung Anzahl der Tupel der Gruppe Anzahl der nicht null-werte der Spalte x minimaler Wert der Spalte x maximaler Wert der Spalte x Summe aller nicht null-werte der Spalte x Durchschnitt aller nicht null-werte der Spalte x Tabelle 2.2: Aggregationsfunktionen in der relationalen Algebra. Johannes Kessler 23

34 KAPITEL 2. RELATIONALE ALGEBRA R = VorlNr MatrNr Note γ V orlnr;count ( )Ñteilnehmer,AV G(Note)Ñdurchschnitt (R) = = R.VorlNr teilnehmer durchschnitt Beispiel 2.25: Aggregation ohne explizite Angabe einer Gruppierung. Wie in Beispiel 2.25 zu sehen ist können durch Verwendung der Gruppierung und Aggregation somit Abfragen wie die durchschnittliche Note pro Fach sehr einfach formuliert werden. 2.3 Sichtbarkeit Unter dem Sichtbarkeitsbereich (scope) versteht man einen bestimmten Bereich, in dem ein Bezeichner sichtbar und ansprechbar ist. Eine benannte Relation ist global gültig. Ihr Name kann damit in der gesamten Abfrage verwendet werden und muss auch global eindeutig sein. Die Attribute einer Relation sind lokal gültig und müssen innerhalb des Schemas eindeutig sein. Es kann jedoch nötig sein, Attributnamen oder den qualifizierenden Relationsnamen zu ändern, um die Attribute bei binären Operationen eindeutig ansprechen zu können oder die Konkatenation von zwei Schemata zu ermöglichen, die sich Attributnamen teilen (siehe Abschnitt 2.2.3). 2.4 Operatorbaumdarstellung Beim Lesen komplexer Ausdrücke ist oft eine Darstellung der Formel als Operatorbaum hilfreich. Hierbei bilden die einzelnen Operatoren die Knoten eines Baumes, wobei die Argumentrelationen der Operatoren 24 Johannes Kessler

35 KAPITEL 2. RELATIONALE ALGEBRA jeweils als Kindelemente im Baum dargestellt werden. Die Auswertung des Ausdrucks erfolgt bottom-up. Die Abfrage ( ( π R.a,R.b,S.d π a,b σaąb_a=1 (R ρ S X) ) ( R.a=S.c σcą10 (S) )) kann somit als Operatorbaum dargestellt werden, wie in Abbildung 2.2 veranschaulicht ist.. π R.a,R.b,S.d R.a=S.c π a,b σ cą10 σ aąb_a=1 S R ρ S Abbildung 2.2: Operatorbaumdarstellung einer RA-Formel. X 2.5 Präzedenz Die Operatorpräzedenz legt die Ordnung fest, nach der die Operatoren ausgewertet werden, wenn diese nicht explizit geklammert sind. Ohne Präzedenz ist das Statement σ aą0 R S nicht eindeutig definiert, da es zwei mögliche Auswertungsreihenfolgen gibt (hier explizit geklammert): 1. σ aą0 (R S), wobei hier zuerst der Join ausgewertet wird oder 2. (σ aą0 (R)) S, bei der R zuerst selektiert wird. Johannes Kessler 25

36 KAPITEL 2. RELATIONALE ALGEBRA In der Literatur gibt es keine eindeutige Übereinkunft über die Wertigkeit der Operatoren [Mol09, Seite 24-25], [Ull04, slides5 Seite 21]. Gemeinsam ist den meisten Definitionen, dass die unären Operatoren die höchste Wertigkeit haben, gefolgt von den Joins und den Mengenoperatoren (X vor Y). Im Zweifel sollte daher immer explizit geklammert werden. Für diese Arbeit wurde die Operatorpräzedenz wie in Tabelle 2.3 ersichtlich definiert. Die Operatoren werden der Tabelle folgend, von oben nach unten und in jeder Zeile von links nach rechts ausgewertet. Die höchste Bindung hat die benannte Relation. Ein Relationsname gehört daher immer zur Operation. Bei den logischen Operatoren hat ^ (AND) die höchste Präzedenz, gefolgt von (XOR) und _ (OR). Präzedenz Operator Projektion, Selektion, 4 Umbenennung (Attribute), Umbenennung (Relationen), Gruppieren, Sortieren Kreuzprodukt, Theta-Join, Natural-Join, Left Outer Join, Right Outer Join, Full Outer Join, 3 Left Semi-Join, Right Semi-Join, Anti Semi-Join, Division 2 Schnitt 1 Vereinigung, Differenz Tabelle 2.3: Operatorpräzedenz. Durch die Definition der Präzedenz ist das Statement σ aą0 R S eindeutig bestimmt, da die unäre Operation σ eine höhere Präzedenz als der Join hat und daher zuerst ausgeführt wird. 26 Johannes Kessler

37 Kapitel 3 Übungstool Im Gegensatz zu SQL kann beim Erlernen der relationalen Algebra und der Kalküle nicht auf eine umfangreiche Unterstützung in modernen Datenbanksystemen zurückgegriffen werden. In der Literatur [GMUW09, KE11, AHV95, AHV95] und in vielen Vorlesungen an Universitäten wird für die RA eine Notation verwendet, welche der in Kapitel 2 vorgestellten sehr ähnlich ist. In den der Datenbankvorlesung zugehörigen Übungen werden die Aufgaben daher von Studenten handschriftlich verfasst oder müssen aufwändig als Formel gesetzt werden. Mangels Toolunterstützung werden die Berechnungen oft händisch ausgeführt. Für Übungsaufgaben in SQL können die nötigen Tabellen auf einer Datenbank zur Verfügung gestellt werden. Die Studenten können über eine webbasierte Abfrageoberfläche wie phpmyadmin 1 darauf zugreifen und ihre formulierten Abfragen direkt testen. Die Grundidee des Übungstools für relationale Algebra ist es, ein vergleichbares Angebot für RA zu schaffen, das die Möglichkeit bietet, Abfragen in der erlernten Notation zu verfassen und auf vorgegebenen Datensätzen auszuführen. Dies ermöglicht den Benutzern, Beispiele in der Literatur einfach nachzurechnen und zu erweitern. Die flexible Eingabe als Klartext-Statement (siehe Abschnitt auf Seite 39) ermöglicht eine iterative Erarbeitung von Statements. Weiters soll den Benutzern eine experimentierfreundliche Umgebung geboten werden, die es ermöglicht, alternative Lösungswege zu erarbeiten. Das webbasierte Programm sollte daher mindestens folgende Anforderungen erfüllen: einfache Bedienung für die Benutzer ohne Installation zusätzlicher Software lauffähig 1 zuletzt besucht am

38 KAPITEL 3. ÜBUNGSTOOL die verwendete Syntax soll möglichst nahe an der klassischen Notation sein Visualisierung der Abfrage als Operatorbaum Anzeige von Zwischenergebnissen Die Anwendung besteht aus den folgenden Komponenten: Eine Grammatik für die relationale Algebra und SQL, aus diesen jeweils ein Parser generiert wird. Diese Parser erzeugen den Syntaxbaum eines eingegebenen Statements (siehe Abschnitt 3.1). Die Business-Logik ist eine Implementierung der relationalen Algebra und umfasst über 2000 Zeilen JavaScript Code (siehe Abschnitt 3.2). Eine Übersetzungsschicht übersetzt die Syntaxbäume in die relationale Algebra. Das Übungstool ist auf aktuellen Browsern lauffähig und wurde in den in Tabelle 3.1 aufgelisteten Versionen getestet. Microsofts Internet Explorer wird ab Version 10 unterstützt. Für alle älteren Versionen wird eine entsprechende Meldung eingeblendet. Browser Plattform lauffähig Google Chrome 35 (beta) Ubuntu ja Mozilla Firefox 29 Ubuntu ja Opera 12 Ubuntu ja rekonq Ubuntu ja Google Chrome 34 OS X ja Mozilla Firefox 29 OS X ja Apple Safari 7 OS X ja Opera 20 OS X ja Google Chrome 34 Windows 8.1 ja Mozilla Firefox 29 Windows 8.1 ja Opera 20 Windows 8.1 ja Microsoft Internet Explorer 11 Windows 8.1 ja Microsoft Internet Explorer 10 Windows 8 ja Microsoft Internet Explorer 11 Windows 7 ja Microsoft Internet Explorer 10 Windows 7 ja Microsoft Internet Explorer 9 Windows 7 eingeschränkt 2 Tabelle 3.1: Liste der Browser, auf denen das Übungstool getestet wurde. 2 Das Laden von Tabellen von Github Gists (Seite 52) funktioniert nicht. 28 Johannes Kessler

39 KAPITEL 3. ÜBUNGSTOOL 3.1 Relationale Algebra Die relationale Algebra (RA) wird klassischerweise als Formel dargestellt (siehe Kapitel 2). In dieser Arbeit wird RA jedoch als Quelltext, vergleichbar mit SQL, aufgefasst. Dies ermöglicht Features wie das einfache Bearbeiten in einem Editor, Syntax-Highlighting und Autovervollständung, die in vielen SQL-Editoren (z.b. MySQL Workbench 3, pgadmin 4 ) enthalten sind, in einem RA-Übungstool anzuwenden. Für diesen Zweck wurde eine Grammatik definiert, die es ermöglicht, RA-Statements in der klassischen Notation fast unverändert zu verarbeiten. Weiters wurden mehrere Erweiterungen wie Kommentare oder Einführung einer alternativen Notation vorgenommen, die in diesem Kapitel vorgestellt werden Syntax Die Syntax für RA Statements folgt der in Kapitel 2 vorgestellten klassischen Notation. Die einzige Änderung besteht darin, dass die in Subscript notierten Argumente nicht tiefergestellt werden. Die Syntax ist nicht zeilenorientiert und die einzelnen Tokens können durch beliebigen Whitespace getrennt werden. Die Operatoren können durch das entsprechende Sonderzeichen oder durch eine Plaintext-Schreibweise notiert werden, die in Abschnitt vorgestellt wird. Für die Operatoren werden die in Tabelle 4.1 dargestellten Unicode Symbole verwendet. Die RA-Formel π S.Name,S.Semester,P.Name ( (V orlesungen (ρ S Studenten ρ H hoeren)) gelesenv on=p ersnr (ρ P P rofessoren)) kann durch die neue Grammatik wie folgt eingegeben werden: 3 zuletzt besucht am zuletzt besucht am Johannes Kessler 29

40 KAPITEL 3. ÜBUNGSTOOL 1 π S.Name, S. Semester, P. Name ( 2 ( 3 Vorlesungen 4 ( 5 ρ S Studenten 6 7 ρ H hoeren 8 ) 9 ) 10 gelesenvon=persnr 11 ρ P Professoren 12 ) Mit der in Abschnitt vorgestellten alternativen Operatorschreibweise kann auf die Verwendung von Sonderzeichen verzichtet werden: 1 pi S.Name, S. Semester, P. Name ( 2 ( 3 Vorlesungen 4 natural join ( 5 rho S Studenten 6 natural join 7 rho H hoeren 8 ) 9 ) 10 join gelesenvon=persnr 11 rho P Professoren 12 ) PEG.js PEG.js 5 ist ein von David Majda entwickelter freier Parsergenerator für JavaScript. Er kann direkt im Browser, über eine JavaScript API oder über die Kommandozeile verwendet werden und steht als node.js-modul 6 zur Verfügung. PEG.js verwendet eine sogenannte parsing expression grammar (PEG) [For04], die syntaktisch einer kontextfreien Grammatik (CFG) sehr ähnlich ist. Der Unterschied ist, dass bei PEGs die Produktionen geordnet sind und streng nach der Reihe angewandt werden. Sobald eine Regel anwendbar ist, wird diese verwendet. Der Syntaxbaum ist dadurch immer eindeutig, da Mehrdeutigkeiten in CFGs durch mehrere passende Produktionen entstehen. 1 rule1 2 = 'first parsing expression' 3 / 'second' 'parsing'? test:' expression' 4 { 5 /* action of the second expression */ 6 return { 5 zuletzt besucht am zuletzt besucht am Johannes Kessler

41 KAPITEL 3. ÜBUNGSTOOL 7 a: 'a value', 8 b: test -- variable from parsing expression 9 }; 10 } integer 13 = [0-9]+ Die Grammatik besteht (vereinfacht) aus Regeln (rules), die durch eindeutige Namen identifiziert werden [Maj14]. Jeder Regel folgt eine geordnete Liste von parsing expressions, die auf den Eingabetext matchen. Sie bieten ähnlich zu regulären Ausdrücken die Möglichkeit, Literale, Klassen von Zeichen und Wiederholungen abzubilden. Jeder parsing expression kann eine action folgen, die von geschwungenen Klammern umfasst wird. Die action besteht aus JavaScript Code, der ausgeführt wird, wenn die expression matcht. Die Werte von Teilen der parsing expression, die als Variablen definiert wurden (im Beispiel test), stehen im JavaScript-Code zur Verfügung. Durch die geordneten expressions kann die Regel test2 in der Grammatik Beispiel 3.1 auf die Eingabe 123abc angewandt werden, nicht jedoch test1, da der Ausdruck in Zeile 2 auf den Teilstring 123 matcht. 1 test1 2 = [0-9]+ 3 / [0-9]+ [a-z]+ 4 5 test2 6 = [0-9]+ [a-z]+ 7 / [0-9]+ Beispiel 3.1: PEG.js Grammatik. Grammatik Die Grammatik für die in Abschnitt eingeführte Syntax wurde mit dem Parsergenerator PEG.js umgesetzt. Die Ausgabe des Parsers ist ein Syntaxbaum, der in einem weiteren Schritt in den ausführbaren Code übersetzt wird. Diese Trennung ermöglicht das separate Testen und Entwickeln des Compilers bzw. der Grammatik und der Ausführungslogik. Weiters können Operationen wie die Ersetzung von Variablen direkt auf dem Syntaxbaum ausgeführt werden (siehe Abschnitt 3.1.3). Die umgesetzte Grammatik soll hier am Beispiel der Selektion und des Theta-Joins vereinfacht dargestellt werden. Die Schlüsselwörter sind jeweils als eigene Regeln ausgeführt, um die alternative Schreibweise zu unterstützen. Johannes Kessler 31

42 KAPITEL 3. ÜBUNGSTOOL 1 sigma 2 = 'σ' 3 / 'sigma' 4 5 inner 6 = ' ' 7 / ('inner' )? 'join' 1 selection 2 = sigma arg: boolean child: expression_precedence3 3 { 4 return { 5 type: 'selection', 6 arg: arg, 7 child: child, 8 9 codeinfo: getcodeinfo() 10 } 11 } 1 thetajoin 2 = child1: expression_precedence3 inner arg: boolean child2: expression 3 { 4 return { 5 type: 'thetajoin', 6 arg: arg, 7 child: child1, 8 child2: child2, 9 10 codeinfo: getcodeinfo() 11 }; 12 } Die Selektion beginnt mit dem Keyword sigma, das wie in den Zeilen 1 bis 3 ersichtlich ist, die verschiedenen alternativen Schreibweisen abdeckt. Die Regel wurde als beliebiger, aber nicht optionaler Whitespace definiert, expression_precedence3 steht für einen gültigen RA-Ausdruck und ist als die Gruppe aller unären Operatoren definiert. Dadurch wird die Selektion am stärksten an andere unäre Operatoren und an die benannte Relation als Basis gebunden, da diese früher gematcht werden. Die Regel boolean steht für einen beliebigen boolschen Ausdruck. Der Rückgabewert jeder Aktion eines Operators ist ein JavaScript- Objekt, das zumindest die Eigenschaft type besitzt, die zur Identifikation des Typs jedes Knotens im Syntaxbaum dient. Die Eigenschaften child und child2 enthalten die Subbäume der Operanden. Die Selektion als unärer Operator hat daher nur einen Operanden child. Das generische Objekt codeinfo enthält z.b die Position im Statementcode und wird verwendet, um in späteren Schritten Fehlermeldungen mit genauen Positionsangaben versehen zu können und diese im Editor an der richtigen Position anzeigen zu können. 32 Johannes Kessler

43 KAPITEL 3. ÜBUNGSTOOL Der Theta-Join als Beispiel für einen binären RA-Operator ist analog dazu aufgebaut. Der erste Operand bei binären Operatoren ist jeweils vom Typ der nächst höheren Präzedenzgruppe. Jeder Syntaxbaum einer RA-Abfrage beginnt mit einem Knoten vom Typ root, der alle Zuweisungen und die eigentliche Abfrage enthält. Die Abfrage 1 sigma a>0 R 2 inner join R.b=S.b 3 S ergibt somit den folgenden (vereinfacht dargestellten) Syntaxbaum: 1 { 2 "type": "root", 3 "assignments": [], 4 "child": { 5 "type": "thetajoin", 6 "arg": { 7 "type": "ConditionConst", 8 "value": true, 9 "codeinfo": {"line": 2, "column": 12, 10 "offset": 26, "text": "true"} 11 }, 12 "child": { 13 "type": "selection", 14 "arg": { 15 "type": "ConditionConst", 16 " value": false, 17 "codeinfo": {/*... */} 18 }, 19 "child": { 20 "type": "relation", 21 "name": "R", 22 "codeinfo": {"line": 1,"column": 13, 23 "offset": 12, "text": "R"} 24 }, 25 "codeinfo": {/*... */} 26 }, 27 "child2": { 28 "type": "relation", 29 "name": "S", 30 "codeinfo": {"line": 3, "column": 1, 31 "offset": 31, "text": "S"} 32 }, 33 "codeinfo": {/*... */} 34 }, 35 "codeinfo": {/*... */} 36 } Johannes Kessler 33

44 KAPITEL 3. ÜBUNGSTOOL Kommentare Zum einfachen Kommentieren der Abfragen, auch im Hinblick auf die Abgabe der Lösung einer Übung, sind zwei Arten von Kommentaren verfügbar. Analog zu SQL [Pos, Kapitel 4.1.5] können einzeilige Kommentare mit -- eingeleitet werden. 1 π Name, Semester 2 σ semester <= 1 -- nur Erstsemestrige 3 Studenten Mehrzeilige Block-Kommentare werden mit /* und */ umschlossen. 1 π Name/*, Semester */ 2 σ semester <= 1 -- nur Erstsemestrige 3 Studenten Beide Arten von Kommentaren werden als Whitespace behandelt und sind daher gültige Trenner von zwei Tokens. Beim einzeiligen Kommentar muss den zwei Minuszeichen mindestens ein Whitespacezeichen folgen. Dieses beugt einem Problem vor, dass bei einer Einführung von arithmetischen Operationen folgen würde: Der arithmetische Ausdruck a--b wäre nicht gültig, da -- als Kommentar interpretiert würde und nicht als Minusoperator, gefolgt von einem Vorzeichen 7. Dies müsste somit als a-(-1), a - -1 oder a- -1 geschrieben werden Zuweisungen Für größere Abfragen in relationaler Algebra ist es nicht unüblich, Teile davon als Variable zu definieren und diese in der eigentlichen Abfrage zu verwenden. Diese Variablen können nach ihrer Definition wie benannte Relationen behandelt werden. Für das Übungstool wurde diese Möglichkeit übernommen. Die Syntax einer solchen Zuweisung ist: VARIABLE = RA_EXPRESSION RA_EXPRESSION ist dabei ein beliebiger Ausdruck in relationaler Algebra, VARIABLE ein freier Bezeichner (siehe Beispiel 3.2). Die Variablennamen teilen sich hierbei denselben globalen Namespace wie die benannten Relationen und müssen in diesem eindeutig sein. Die Zuweisung ist hier ein rechtsassoziativer Operator. Die Reihenfolge der Definitionen spielt keine Rolle. Es können auch Variablen innerhalb der Variablendefinition verwendet werden, solange dadurch keine zyklischen Abhängigkeiten entstehen. 7 zuletzt besucht am Johannes Kessler

45 KAPITEL 3. ÜBUNGSTOOL 1 K = pi kundennr, vorname, nachname 2 Kunde neue Bestellugen 5 B1 = sigma datum > pi kundennr,datum, gesamtpreis 7 Bestellungen alte Bestellungen 10 B2 = sigma datum < pi kundennr,datum, gesamtpreis 12 Bestellungen K natural join 15 (B1 union B2) Beispiel 3.2: Verwendung von Zuweisungen. Die Variablenersetzung erfolgt im Syntaxbaum. Für jede Zuweisung generiert der Parser einen eigenen Unterbaum, der die definierte Abfrage enthält. Im nächsten Schritt werden alle Positionen in den Bäumen der Zuweisungen gesucht, an denen diese Bezeichner verwendet werden. Mithilfe dieser Positionen wird mittels Tiefensuche sichergestellt, dass keine zyklischen Zuweisungen vorhanden sind, da ansonsten die Ersetzung nicht terminieren würde. Jede Verwendung einer Variable wird im letzten Schritt mit deren Definition ersetzt und die Ersetzung für die spätere Visualisierung im Operatorbaum (Abschnitt 4.2) in den Metadaten des Knotens gespeichert. Im Operatorbaum werden die einzelnen Teilbäume ausgezeichnet, die von einer bestimmten Zuweisung stammen. Verschiedene Variablen werden dabei zur besseren Übersicht farblich markiert, wie in Abbildung 3.1 ersichtlich ist. Johannes Kessler 35

46 KAPITEL 3. ÜBUNGSTOOL 1 S = sigma Semester > 8 Studenten 2 3 Prof = sigma Rang >'C3' Professoren 4 5 T = 6 hoeren 7 natural join Vorlesungen 8 join gelesenvon=persnr Prof 9 10 pi MatrNr ( 11 S natural join T 12 ) Abbildung 3.1: Beispiel Abfrage in RA mit Zuweisungen und der Visualisierung im Operatorbaum des Programms Inline-Relationen Für einzelne Abfragen kann es hilfreich sein, neben den vorgegebenen Relationen eigene definieren zu können, die innerhalb eines Statements gültig sind. PostgreSQL bietet dafür z.b. die VALUES-Notation (siehe [Pos, Kapitel 7.7]), mit der konstante Tabellen definiert werden können. Mit dieser Notation kann sehr kompakt eine neue lokale Tabelle in der Abfrage definiert werden, wie am folgenden Beispiel ersichtlich ist: 1 select * 2 from ( values 3 ('a', 1, 6), 4 ('b', 2, 7), 5 ('c', 3, 8), 6 ('d', 4, 9) 36 Johannes Kessler

47 KAPITEL 3. ÜBUNGSTOOL 7 ) as R (a, b, c) 8 where R.a!= 'b' Ohne die VALUES-Notation kann man in z.b MySQL dasselbe auch folgendermaßen ausdrücken: 1 select * 2 from ( 3 select 'a' as a, 1 as b, 6 as c 4 union 5 select 'b', 2, 7 6 union 7 select 'c', 3, 8 8 union 9 select 'd', 4, 9 10 ) as R 11 where R.a!= 'b' Für diese Arbeit wurde die RA-Grammatik um ein vergleichbares Feature erweitert, das es erlaubt, innerhalb einer Abfrage neue Relationen zu definieren. Diese Inline-Relationen stellen einen gültigen RA-Ausdruck dar und können daher in jeder Operation verwendet werden. Die Notation lehnt sich an die Schema- und Tupelschreibweise in [KE11, Seite 72] an, wobei auf die eckigen Klammern verzichtet wird. Die Syntax soll am folgenden Beispiel erklärt werden: 1 { 2 a: string, b: integer, X.c:date, d 3 word, 1, , null 4 'long string', 0.5, , 'test' 5 } Jede Inline-Relation wird von geschwungenen Klammern umgeben (Zeile 1 und 5). Die Daten sind zeilenweise strukturiert, wobei die erste Zeile (Zeile 2 im Beispiel) die Beschreibung des Schemas und alle weiteren Zeilen die Daten der einzelnen Tupel enthalten (Zeile 3 und 4). Die einzelnen Spalten können durch Leerzeichen und Tabulatoren, Kommas mit optionalen Leerzeichen und Tabulatoren oder Strichpunkte mit optionalen Leerzeichen und Tabulatoren getrennt werden. Die Definition des Schemas erfolgt als Liste von Attributnamen, denen bei Bedarf der jeweilige Spaltentyp, mit Doppelpunkt getrennt, nachgestellt werden kann. Die explizite Nennung des Typs kann entfallen, solange der Typ eindeutig aus den Werten bestimmen lässt (siehe Spalte d Johannes Kessler 37

48 KAPITEL 3. ÜBUNGSTOOL in Zeile 2). Der Typ wird dabei vom ersten nicht null-wert definiert. Bei jedem folgenden Wert anderen Typs wird eine Fehlermeldung ausgegeben. Gültige Typen sind number für integer- und float-werte, string für Zeichenketten und date für Kalenderdaten. Dem Attributnamen kann ein mit Punkt getrennter Qualifizierer vorangestellt werden. Diese Syntax entspricht dadurch weitgehend der in der Literatur [KE11, Seite 72] und in Abbildung 2.1 verwendeten Notation eines Schemas. Die Werte der Tupel werden jeweils in einer Zeile notiert. Es gelten dabei dieselben Separatoren zur Trennung der Spalten. Einfache Wörter ([a-za-z]+), numerische Werte, die Konstante null oder Kalenderdaten in der Form YYYY-MM-DD werden ohne Anführungszeichen notiert. Längere oder komplexere Strings werden in einfachen Hochkommas eingeschlossen. Mit dieser Syntax kann in der Abfrage eine Relation erzeugt werden, die dem SQL-Beispiel entspricht: 1 sigma R.a!= 'b' ({ 2 R.a, R.b, R.c 3 4 a, 1, 6 5 b, 2, 7 6 c, 3, 8 7 d, 4, 9 8 }) Ein minimales Beispiel würde aus einer Relation mit einer Spalte und keinen Zeilen bestehen: {a: number} Der Typ muss dabei explizit angegeben werden, da keine Werte für eine Typbestimmung vorhanden sind Präzedenz Eine Operator-Präzedenz, wie sie in Abschnitt 2.5 definiert wurde, kann in einer PEG direkt abgebildet werden. Für die Grammatik des Übungstools wurden die Präzedenzregeln sowohl für die logischen Operatoren ^, und _, als auch für die Operatoren der relationalen Algebra umgesetzt. Die Klammerung der Operanden ist somit optional und kann in den meisten Fällen entfallen. Durch eine explizite Klammersetzung kann eine beliebige Auswertungsreihenfolge erzwungen werden, wie in Beispiel 3.3 anhand der Projektion gezeigt wird. Im Übungstool ist die gewählte Ausführungsreihenfolge nach der Ausführung sofort im Operatorbaum ersichtlich und die eingegebene Abfrage wird zusätzlich vollgeklammert angezeigt. Dadurch wird die Über- 38 Johannes Kessler

49 KAPITEL 3. ÜBUNGSTOOL prüfung erleichtert, ob die gewählte Ausführungsreihenfolge mit der gewünschten übereinstimmt. 1 π A.Name, P. Name ( 2 ρ A Assistenten 3 P. PersNr=Boss 4 σ Rang >'C3' _ Rangď'C2' 5 ρ P Professoren 6 ) Beispiel 3.3: Abfrage mit minimaler Klammersetzung und Operatorbaumdarstellung Plaintext Notation Alternativ zur klassischen Notation, die in Abschnitt 2.2 vorgestellt wurde, wird hier eine alternative Schreibweise eingeführt, die keine Sonderzeichen verwendet und dadurch eine möglichst komfortable und schnelle Eingabe ermöglichen soll. Es ist dadurch möglich, einen Ausdruck in relationaler Algebra als Plaintext zu notieren und ihn in dieser Form auch problemlos abzuspeichern oder in Dokumente einzubetten. Die griechischen Buchstaben werden dabei ausgeschrieben. Für Sonderzeichen wie wird eine alternative Schreibweise eingeführt, die sich an den SQL-Bezeichnern orientiert, um keine neuen Namen einführen zu müssen. Die zwei alternativen Schreibweisen können nach Belieben gemischt verwendet werden. In Tabelle 3.2 sind die alternativen Notationen den semantisch äquivalenten klassischen Notationen gegenübergestellt. Ausdrücke in eckigen Klammern sind optional. Die Klammerung der Relationen R und S dient nur der Veranschaulichung. Johannes Kessler 39

50 KAPITEL 3. ÜBUNGSTOOL klassische Notation alternative Notation σ aąb (R) sigma a > b ( R ) π a,b (R) pi a, b ( R ) ρ X (R) rho X ( R ) ρ xða,yðb (R) rho x <- a, x <- b ( R ) ρ añx,bñy (R) rho a -> x, a -> x ( R ) R X S R union S R Y S R intersect S R S R - S R z S R \ S R S R / S R S R a=b^a=c S R S R a=b_a=c S R a=b_a=c S R a=b_a=c S R S R S R S R cross join S R x S R [inner] join a=b and a=c S R [natural] join S R left [outer] join a=b or a=c S R right [outer] join a=b or a=c S R full [outer] join a=b or a=c S R left semi join S R right semi join S R anti [semi] join S Tabelle 3.2: Plaintext Notationen der RA-Operatoren. Bei boolschen Ausdrücken für Bedingungen wird dieselbe Notation wie in SQL verwendet: Die logischen Operatoren and, or und!, und Vergleiche mit =, >=, <=,!=, < und >. Als Trennzeichen zwischen den einzelnen Tokens sind Leerzeichen, Tabulatoren und Zeilenumbrüche definiert. Dadurch kann ein großes Statement auch mit Einrückungen formatiert geschrieben werden. Das Statement 1 pi Name, Rang 2 sigma p. PersNr >= 2130 ( 3 rho p Professoren 4 join gelesenvon=persnr 5 Vorlesungen 6 ) ist somit semantisch äquivalent zu π Name,Rang (σ p.p ersnrě2130 (ρ p P rofessoren V orlesungen)) und sollte damit gleich komfortabel zu schreiben sein, wie dieselbe Abfrage als SQL Statement: 40 Johannes Kessler

51 KAPITEL 3. ÜBUNGSTOOL 1 select distinct Name, Rang 2 from Professoren as p 3 inner join Vorlesungen on gelesenvon=persnr 4 where p. PersNr >= SQL Der Parser für SQL wurde mit PEG.js (siehe Abschnitt 3.1.1) umgesetzt. Er bietet die Möglichkeit, einfache SQL-SELECT-Statements zu formulieren, die in relationale Algebra übersetzt und ausgeführt werden. Eine Unterstützung für DML-Statements wie INSERT oder UPDATE ist nicht vorgesehen. Die unterstützte Syntax ist in einigen Punkten wie z.b. den Kommentaren an die SQL-Syntax von MySQL 8 und PostgreSQL 9 angelehnt. Die unterstützten Features sollen hier an mehreren kleinen Beispielen erklärt werden: Alle Schlüsselwörter sind nicht case-sensitiv und können daher auch klein geschrieben werden. Für den SELECT-Teil werden einerseits * oder eine Liste mit Spaltennamen in der Form name oder X.name unterstützt. X ist hierbei der Kurzbezeichner einer Tabelle oder Unterabfrage. Das Schlüsselwort distinct wird zwingend verlangt, da die Elimination von Duplikaten in SQL nicht optional ist. In der relationalen Algebra können Relationen jedoch keine Duplikate enthalten. 1 SELECT DISTINCT * 2 FROM Tabellenname Im FROM-Teil können Tabellennamen oder nicht korrelierte Substatements stehen. Jeder Tabelle kann mit as X ein Kurzbezeichner zugewiesen werden, wobei X für einen beliebigen Bezeichner steht. Bei Substatements ist dies obligatorisch. Nicht korreliert bedeutet, dass im Substatement nicht auf Daten der außen liegenden Statements zugegriffen werden kann. 8 zuletzt besucht am zuletzt besucht am Johannes Kessler 41

52 KAPITEL 3. ÜBUNGSTOOL 1 SELECT DISTINCT * 2 FROM Tabelle1, Tabelle2 as t2, ( 3 SELECT DISTINCT * 4 FROM Tabelle3 5 ) as t3 6 inner join Tabelle4 as t4 on t4.a = t2.a 7 natural join Tabelle5 8 inner join Tabelle6 natural 9 left outer join Tabelle8 as t8 on t8.a = t2.a 10 left outer join Tabelle9 natural 11 right outer join ( 12 select * from Tabelle10 13 ) as t10 Zu joinende Tabellen können entweder, wie in Zeile 2 als Liste hinter FROM aufgelistet werden oder, wie ab Zeile 6 dargestellt ist, explizit aufgeführt werden. Hierbei werden für den inneren Natural-Join zwei alternative Schreibweisen unterstützt, wie in Zeile 6 und 7 zu sehen ist. Der Left-, Right- und Full-Outer-Join wird jeweils mit explizitem Joinkriterium unterstützt, das nach on angeführt wird. Weiters steht jeweils eine Natural-Variante zur Verfügung, bei der das Joinkriterium implizit gegeben ist. Im WHERE-Teil werden Vergleiche in der Form a OPERATOR b mit den Operatoren =,!= oder <>, >, <, >=, <=, is null und is not null unterstützt. Die Operanden a und b stehen hierbei für beliebige Spaltennamen oder Literale. Vergleiche können mit and und or verknüpft werden, die Negation geklammerter Ausdrücke mit! wird unterstützt. Literale haben die Typen String, Number oder Date. Null kann als null oder NULL geschrieben werden. Strings werden in einfachen Hochkommas (z.b. 'text') notiert. Numerische Werte sind entweder ganzzahlig mit optionalem Vorzeichen in der Form (-?[0-9]+) z.b. 42 oder Float Werte wie -42.0, die durch folgenden regulären Ausdruck (-?[0-9]+.[0-9]+) beschrieben werden können. Datumswerte werden in der Form DATE('YYYY-MM-DD') notiert, wobei YYYY für das Jahr, MM für den Monat und DD für den Tag stehen. 1 SELECT DISTINCT * 2 FROM Tabellenname 3 WHERE a>10 and!(b <> '' or c is not null) 4 ORDER BY a, b asc, 3 desc, a, b Das Sortierten der Ausgabe ist mit ORDER BY möglich. Dem Schlüsselwort folgt eine durch Kommas getrennte Liste mit Spaltennamen oder Spalten-Indizes. Jeder Eintrag kann durch asc oder desc ergänzt werden, um die Sortierrichtung anzugeben. Ohne explizite Angabe wird aufsteigend sortiert (asc). Eine Gruppierung ist mit GROUP BY möglich, wobei hier eine Liste der Spalten angegeben wird, nach denen gruppiert werden soll. 42 Johannes Kessler

53 KAPITEL 3. ÜBUNGSTOOL Für die Aggregation können alle in Abschnitt beschriebenen Funktionen verwendet werden. Für jede Aggregationsspalte muss mit as ein Name angegeben werden. In der HAVING-Klausel können, analog zur WHERE-Klausel, weitere Einschränkungen formuliert werden. Aggregationsspalten werden dabei über den neuen Bezeichner angesprochen. 1 SELECT DISTINCT a, b, COUNT(*) as anzahl, SUM(d) as summe 2 FROM Tabellenname 3 GROUP BY a, b 4 HAVING summe > ORDER BY 4 desc 6 LIMIT 10 OFFSET 0 Wie bei PostgreSQL [Pos, Kapitel 7.6] kann durch LIMIT x OFFSET y oder LIMIT x eine vertikale Partitionierung vorgenommen werden. Es werden dabei die ersten x Zeilen ab der Zeile mit dem Index y ausgegeben. Um die Anzahl der Zeilen nicht zu limitieren, kann statt der Zeilenanzahl x das Schlüsselwort ALL verwendet werden. Ohne Angabe eines Offsets wird ab der ersten Zeile gezählt, was der Angabe LIMIT x OFFSET 0 entspricht. Die Schlüsselwörter UNION und INTERSECT stehen zur Verfügung, um die Vereinigung bzw. die Schnittmenge zweier Abfragen zu bilden. 3.2 Berechnung Die Berechnung der RA erfolgt ausschließlich clientseitig und wurde in JavaScript implementiert. Entgegen der RA-Theorie werden hier keine Mengen von Tupeln, sondern, ähnlich wie in relationalen Datenbanken, Multimengen in Form von zweidimensionalen Arrays von Werten als Basis verwendet. Dies hat den Vorteil, dass die Tupel eine definierte Ordnung besitzen. Duplikate werden vor der Ausgabe unter Beibehaltung der Reihenfolge eliminiert. Ziel dieser Arbeit war nicht, möglichst schnelle Algorithmen zu implementieren, sondern den Fokus auf den Übungscharakter des Programms zu legen. Es wurden daher oft langsamere Algorithmen implementiert, die für den User jedoch noch Vorteile wie das Erhalten einer bestimmten Reihenfolge bieten. Die Ausführungsgeschwindigkeit ist für kleine Tabellen und sinnvolle Abfragen, wie Sie für Übungen und Beispiele verwendet werden, ausreichend. So wird die Abfrage in Beispiel 3.4, die auf den Daten aus [KE11] basiert, in Google Chrome 35 und Mozilla Firefox 28 in ca 2 bis 4 Millisekunden ausgeführt 10. Bei kleinen Ergebnistabellen dauert die Darstellung als Tabelle länger als die eigentliche Berechnung der Daten. 10 Teststyem: Intel(R) Core(TM) i5 CPU M 520 mit 2.40GHz Johannes Kessler 43

54 KAPITEL 3. ÜBUNGSTOOL 1 tau [1], [2], [3] 2 pi S.Name, S. Semester, P. Name ( 3 ( 4 Vorlesungen 5 natural join ( 6 rho S Studenten 7 natural join 8 rho H hoeren 9 ) 10 ) 11 join gelesenvon=persnr 12 rho P Professoren 13 ) Beispiel 3.4: Abfrage in relationaler Algebra. Alle RA-Operatoren wurden jeweils so umgesetzt, dass die Reihenfolge der Tupel der Argumentrelationen erhalten bleibt. Einer der einfachsten Algorithmen, einen Join auszuführen, ist der Nested-Loop-Join. Dieser wird in Datenbanksystemen, wenn möglich, durch schnellere Algorithmen ersetzt, da er eine Komplexität von O( R S ) besitzt. Der Nested-Loop-Join (Beispiel 3.5) hat jedoch die Eigenschaft, dass das Ergebnis unabhängig von den Werten immer dieselbe leicht nachvollziehbare Struktur aufweist und auch Beispiele oft in dieser Form angegeben werden (z.b. Abbildung 2.14 [GMUW09, Seite 44], Abbildung 2.16 [GMUW09, Seite 46] und Abbildungen [KE11, Seite 88 und 89]). Ein Beispiel für einen Join-Algorithmus, bei dem die Reihenfolge nicht erhalten bleibt, ist der Hash-Join [GMUW09, Seite ]. Dieser besitzt zwar eine durchschnittliche Laufzeit von O( R + S ), die Tupel der Relationen werden jedoch über die Hashwerte der Join-Attribute gejoint. Dadurch ist die Reihenfolge der Tupel in der Ergebnisrelation von den Daten der Join-Attribute und der gewählten Hashfunktion abhängig. 1 for(r in R){ 2 for(s in S){ 3 if(r.a == s.a) 4 // => [r, s] zum Ergebnis hinzufügen 5 } 6 } Beispiel 3.5: Nested-Loop-Join der Operation R r.a=s.a S als Pseudocode. 44 Johannes Kessler

55 KAPITEL 3. ÜBUNGSTOOL Aus diesem Grund wird für alle Join Operatoren der Nested-Loop-Join verwendet. Die Berechnung des Ergebnisses erfolgt, ausgehend vom Syntaxbaum des Parsers, bei dem verwendete Variablen bereits ersetzt wurden (siehe Abschnitt 3.1.3), in drei Schritten: Übersetzung, Überprüfung und die eigentliche Berechnung. Bei der Übersetzung wird anhand des Syntaxbaums (siehe Abschnitt 3.1.1) rekursiv ein Objekt für jede Operation erzeugt. Die Operanden jeder Operation sind wiederum Objekte der jeweiligen Operation und werden als Argument übergeben. Die verwendeten benannten Relationen werden in diesem Schritt aufgelöst, indem nach entsprechenden Relationen in der aktuell gewählten Gruppe gesucht wird. Nach dem Mapping steht der vollständige Operatorbaum zur Weiterverarbeitung zur Verfügung. Beim Wurzelobjekt dieses Operatorbaums wird im nächsten Schritt die check -Funktion aufgerufen, die das Schema der jeweiligen Operation berechnet und eine semantische Prüfung vornimmt. Diese Funktion wird rekursiv für alle Kindelemente aufgerufen, da die Berechnung des Schemas eines Operators von den Schemata der Argumente abhängt. Die eigentliche Berechnung erfolgt in einem separaten Schritt. Die Basisfälle sind wiederum die Relationen, von denen ausgehend das Ergebnis bottom-up berechnet wird. SQL Die Berechnung von SQL-Statements erfolgt indirekt durch eine Übersetzung in relationale Algebra. Es wird ausgehend vom SQL-Syntaxbaum des Parsers ein RA- Operatorbaum erzeugt. Ab diesem Zeitpunkt findet keine Unterscheidung mehr zwischen den beiden Sprachen statt. Die Übersetzung eines SQL-Statements in relationale Algebra soll exemplarisch an Beispiel 3.6 erklärt werden. Johannes Kessler 45

56 KAPITEL 3. ÜBUNGSTOOL 1 select distinct Titel as Vorlesungsname, Name 2 from ( 3 select distinct Titel, Name, SWS 4 from Studenten as st 5 natural join hoeren as h 6 inner join Vorlesungen on h. VorlNr=Vorlesungen. VorlNr 7 8 union 9 10 select distinct Titel, Name, SWS 11 from Vorlesungen, Professoren 12 where gelesenvon=persnr 13 ) as t 14 where SWS >= 3 15 order by 1, 2 desc Beispiel 3.6: Abfrage in SQL. Da die relationale Algebra prozedural aufgebaut ist, wird hier von innen nach außen vorgegangen. Im Programm ist dies einfach durch Rekursion abbildbar. Zuerst wird das Statement von Zeile 3 bis 6 übersetzt. Der Ausgangspunkt ist hierbei die Relation Studenten, welcher ein neuer Qualifizierer st zugewiesen wird. ρ st Studenten Dieser Ausdruck wird mit einem Natural-Join mit der Relation hoeren verknüpft, welcher der Kurzbezeichner h zugewiesen wird. (ρ st Studenten) (ρ h hoeren) In Zeile 6 wird mit der Relation Vorlesungen gejoint. Einer Relation, der kein expliziter Kurzbezeichner zugewiesen wird, wird automatisch ein Kurzbezeichner zugewiesen, der dem Relationsnamen entspricht. Dies stellt sicher, dass die Spalten als Tabellenname.Spaltenname ansprechbar sind: ( (ρ st Studenten) (ρ h hoeren) ) h. VorlNr=Vorlesungen. VorlNr ( Vorlesungen ) Der SELECT-Teil des Statements entspricht in der RA einer Projektion. Das Schlüsselwort distinct wird an dieser Stelle zwingend benötigt, da die Duplikateneliminierung in SQL optional ist. Damit kann das Statement von Zeile 3 bis 6 in den folgenden RA-Ausdruck übersetzt werden: π Titel, Name, SWS ( ( (ρ st Studenten) (ρ h hoeren) 46 Johannes Kessler

57 KAPITEL 3. ÜBUNGSTOOL ) ) h. VorlNr=Vorlesungen. VorlNr ( Vorlesungen ) Im Statement von Zeile wird die ältere Join-Syntax verwendet. Hierbei wird zuerst das Kreuzprodukt der Relationen Vorlesungen und Professoren gebildet und darauf die Selektion ausgeführt. Der select-teil wird, wie vorher, durch die Projektion abgebildet. π Titel, Name, SWS ( σ gelesenvon=persnr ( Vorlesungen Professoren) ) Die Union-Operation aus SQL ist äquivalent zur Vereinigung in der relationalen Algebra (siehe Abschnitt 2.2.4). Somit können die Zeilen 3 bis 12 einfach zur folgenden Abfrage zusammengefasst werden: ( π Titel, Name, SWS ( ( (ρ st Studenten) (ρ h hoeren) ) h. VorlNr=Vorlesungen. VorlNr ( Vorlesungen ) ) ) Y ( π Titel, Name, SWS ( σ gelesenvon=persnr ( Vorlesungen Professoren) ) ) Im äußeren Statement wird das vereinigte Statement (Zeile 3 bis 12) als Substatement verwendet, welchem der Bezeichner t zugewiesen wird. Ein nicht korreliertes Substatement 11 wird in der RA einfach als Operand der jeweiligen Operation abgebildet. Eine Übersetzung von korrelierten Unterabfragen wäre wesentlich aufwendiger und wird sowohl in der Literatur, z.b. [KE11], als auch in Vorlesungen selten behandelt. Daher wurde auf die Unterstützung von korrelierten Unterabfragen verzichtet. Der WHERE-Teil entspricht einer einfachen Selektion mit der entsprechenden Bedingung. Im SELECT-Teil in Zeile 1 wird der Spalte Titel ein neuer Name zugewiesen, was in der Verwendung der Umbenennung ρ resultiert. Order-by kann durch die Erweiterung der relationalen Algebra (siehe Abschnitt ) mit dem τ-operator abgebildet werden. Das komplette Statement kann somit wie folgt in relationaler Algebra dargestellt werden: 11 Korreliert bedeutet, dass innerhalb des Substatements auf Daten der umschließenden Abfrage referenziert werden kann. Johannes Kessler 47

58 KAPITEL 3. ÜBUNGSTOOL τ [1], [2] desc (π Titel, Name ( σ SWSě3 (ρ t ( ( π Titel, Name, SWS ( ( (ρ st Studenten) (ρ h hoeren) ) h. VorlNr=Vorlesungen. VorlNr ( Vorlesungen ) ) ) Y ( π Titel, Name, SWS ( σ gelesenvon=persnr ( Vorlesungen Professoren) ) ) )) )) Das SQL-Statement 1 SELECT DISTINCT a, b, COUNT(*) as anzahl 2 FROM R 3 WHERE a >= 1 4 GROUP BY a, b 5 HAVING anzahl > 2 6 ORDER BY 3 desc 7 LIMIT 1 OFFSET 1 kann folgendermaßen in relationale Algebra übersetzt werden: π a, b, anzahl ( σ ROWNUMą1 ^ ROWNUMď2 ( π a, b, anzahl, ROWNUM ( τ [3] desc ( π a, b, anzahl ( σ anzahl >2 ( γ a, b ; COUNT(*)Ñanzahl ( σ aě1 ( R ) ))))))) Die Gruppierung in Zeile 4 wird dabei durch den Gruppierungsoperator γ (siehe Abschnitt ) abgebildet. Dabei wird nach allen in GROUP BY angegebenen Spalten gruppiert. Die Aggregationsfunktionen (im Beispiel COUNT(*)) werden in SQL im SELECT-Teil definiert. Die HAVING-Klausel in Zeile 5 entspricht einer Selektion, die nach γ ausgeführt wird. Die vertikale Partitionierung mit LIMIT 1 OFFSET 1 erfolgt in der relationalen Algebra durch eine Selektion mit dem Zeilenindex ROWNUM, der durch die erweiterte Projektion (siehe Abschnitt ) zur Verfügung gestellt wird. Die Übersetzung von RA in SQL erfolgt automatisch im Hintergrund, um ein äquivalentes Statement in relationaler Algebra zu erzeugen (siehe Abbildung 3.2). Die Übersetzung soll den Benutzern helfen, einerseits 48 Johannes Kessler

59 KAPITEL 3. ÜBUNGSTOOL die relationale Algebra schneller zu erlernen, wenn schon gewisse SQL Vorkenntnisse vorhanden sind, und anderseits einen Einblick zu erhalten, wie eine SQL-Abfrage in relationale Algebra übersetzt und ausgeführt werden kann. Abbildung 3.2: Anwendung mit SQL-Statement aus Abschnitt Server Dieses Kapitel beschreibt die Serverkomponente, welche die Tabellen zur Verfügung stellt, die für die RA- und SQL-Statements verwendet werden. Eine Aufgabe ist eine Zusammenstellung von einer oder mehreren zu- Johannes Kessler 49

60 KAPITEL 3. ÜBUNGSTOOL sammengehörenden Tabellen zu einer Gruppe. Diese kann mit zusätzlichen Informationen wie eine Referenz zum Übungsblatt und einem optionalen Sichtbarkeitszeitraum versehen werden. Übungsleiter sollen in der Lage sein, neue Aufgaben anzulegen und dabei vorhandene (MySQL) Tabellen wiederzuverwenden, die den Benutzern beispielsweise über Frontends wie phpmyadmin zur Verfügung gestellt werden, um SQL Abfragen ausführen zu können. Zur einfachen Weiterverarbeitung in JavaScript werden die Daten direkt als JSON-codiert ausgegeben. Eine Gruppe hat folgende Struktur: eine eindeutige numerische ID, um die Tabellen nachzuladen, einen Gruppennamen, wie er im Client angezeigt wird, z.b. Tutorial Exercise , eine Beschreibung mit weiteren Informationen zur Übung, einen optionalen Zeitraum zur Steuerung der Sichtbarkeit, eine Liste aller Tabellen der Gruppe mit einer numerischen ID, dem Namen der Tabelle, wie er im Client angezeigt wird und den Spaltennamen und -typen der jeweiligen Tabellen. 50 Johannes Kessler

61 KAPITEL 3. ÜBUNGSTOOL 1 {"2": 2 { 3 "groupid": 2, 4 " groupname": " DatabaseSystems Lecture", 5 " groupdesc": " Tables from and for the lecture <a href =\" dbis - informatik. uibk.ac.at\/249-0-vo- Datenbanksysteme. html\"> Databases: Foundations, Data Models and System Concepts - University of Innsbruck <\/a> chapter 3", 6 " online_until": null, 7 "tables": [ 8 { 9 "tableid": 0, 10 "tablename": "R", 11 "columnnames": ["a", "b", "c"], 12 "columntypes": ["number", "string", "string"] 13 }, 14 { 15 "tableid": 1, 16 "tablename": "S", 17 "columnnames": ["b", "d"], 18 "columntypes": ["string", "number"] 19 }, 20 { 21 "tableid": 2, 22 "tablename": "T", 23 "columnnames": ["b", "d"], 24 "columntypes": ["string", "number"] 25 } 26 ] 27 } 28 } Beispiel 3.7: Antwort auf eine Abfrage aller Gruppen. Die Serverkomponente wurde in PHP implementiert und stellt die Daten über eine einfache REST-Schnittstelle zur Verfügung. Es gibt zwei einfache Verwaltungstabellen, ra_group und ra_table, in denen die Informationen zu den Gruppen und deren Tabellen gespeichert sind. Die Abfrage GET index.php/groups wird verwendet, um die Spezifikation aller Gruppen und deren Tabellen zu laden. Die Namen und Typen der Spalten der einzelnen Tabellen werden aus der MySQL-Tabelle INFOR- MATION_SCHEMA.COLUMNS 12 geladen, welche die Datentypen der Spalten jeder Tabelle enthält (siehe Beispiel 3.7). Die Abfrage GET index.php/tables/x dient dazu, die Daten der Tabellen der Gruppe mit der group-id X zu laden (siehe Beispiel 3.8) Johannes Kessler 51

62 KAPITEL 3. ÜBUNGSTOOL 1 [ 2 [ 3 ["1", "a", "d"], 4 ["3","c","c"], 5 ["4","d","f"], 6 ["5","d","b"], 7 ["6","e","f"] 8 ], 9 [ 10 ["a","100"], 11 ["b","300"], 12 ["c","400"], 13 ["d","200"], 14 ["e","150"] 15 ], 16 [ 17 ["a","100"], 18 ["d","200"], 19 ["f","400"], 20 ["g","120"] 21 ] 22 ] Beispiel 3.8: Antwort auf eine Abfrage index.php/tables/ Geteilte Tabellen In Abschnitt 3.3 wurde eine Möglichkeit vorgestellt, den Usern Gruppen von Tabellen für Abfragen zur Verfügung zu stellen. Der Fokus liegt dabei auf einer einfachen Wiederverwendung von vorhanden Datensätzen und Tabellen in einer Datenbank. Somit können die Daten leicht sowohl über das relationale Algebra Übungstool als auch z.b. per phpmyadmin zur Verfügung gestellt werden. Eine Alternative dazu stellt das Laden der Daten von externen Quellen dar. Das Ziel ist hierbei, eine einfache Möglichkeit zu schaffen, Tabellen für Abfragen zu veröffentlichen und auszutauschen. Dies bietet unter anderem die Möglichkeit, dass Benutzer selbst Tabellen definieren und diese mit anderen teilen können. Eine Gruppe von Tabellen besteht aus dem Namen der Gruppe, einer optionalen Beschreibung und einer oder mehreren Tabellendefinitionen. Für die Definition einer Gruppe wurde ein einfaches Format definiert, das es erlaubt, ein oder mehrere Gruppen als Klartext zu beschreiben. Die verwendete Syntax zur Definition der Tabellen entspricht der in Abschnitt vorgestellten Syntax für Abfragen in relationaler Algebra. Tabellen werden dazu als Zuweisungen (siehe Abschnitt 3.1.3) abgebildet. 52 Johannes Kessler

63 KAPITEL 3. ÜBUNGSTOOL Der Gruppenname und die optionale Beschreibung werden am Beginn der Datei notiert. 1 group: Name der Gruppe 2 description[[ Beschreibung der Gruppe 3 über <b>mehrer </b> Zeilen ]] 4 5 TabelleA = { 6 a, b 7 1, a 8 2, b 9 3, c 10 } TabelleB = { 13 a, d 14 1, , , } Tabellendefinition als komplexer Ausdruck 20 TabelleC = (pi a TabelleB) cross join { 21 e } Jede Headerdeklartation beginnt mit dem Headernamen gefolgt von einem Doppelpunkt bei einzeiligen Text (Zeile 1) oder [[ bei mehrzeiligem Text. Mehrzeilige Header werden durch ]] beendet das innerhalb des Texts als \]] escaped werden kann. Derzeit sind die Header group für den Namen der Gruppe und description für deren Beschreibung definiert. Im Beschreibungstext kann hierbei mit beliebigem HTML ausgezeichnet werden, um beispielsweise Hyperlinks auf weiterführende Literatur setzen zu können. Die Definition der Tabellen erfolgt durch eine Liste von Zuweisungen, wie sie auch in einer Abfrage verwendet werden können. Der Variablenname entspricht hierbei dem Tabellennamen in der Gruppe. Die Tabelle wird durch den zugewiesenen Ausdruck definiert. Der Ausdruck muss dabei ein gültiger RA-Ausdruck sein und ist im einfachsten Fall eine Inline-Relation (siehe Abschnitt 3.1.4). Es ist möglich, innerhalb eines Ausdrucks eine andere Relation der selben Gruppe zu verwenden. Hierbei gelten dieselben Regeln wie für die Verwendung von Zuweisungen (Abschnitt 3.1.3). Die Namen und Typen der Spalten ergeben sich aus dem Schema der Ausdrücke. Der Qualifizierer einer Tabelle wird beim Laden für alle Spalten automatisch auf den Tabellennamen gesetzt. Johannes Kessler 53

64 KAPITEL 3. ÜBUNGSTOOL Innerhalb einer Datei können mehrere Gruppen untereinander definiert werden, wobei jede mit einem eigenen Header beginnt. Dieses Format wird auch applikationsintern verwendet, um alle Gruppen zu laden, die nicht über die Serverschnittstelle aus der Datenbank geladen werden. Als Quelle wird derzeit Github Gist 13 unterstützt. Github Gist ist eine Plattform, auf der Code-Snippets einfach veröffentlicht und geteilt werden können. Jeder Gist ist dabei ein vollstädiges Git-Repository. Gists können sowohl anonym als auch als registrierter Github User erstellt werden und erhalten jeweils eine eindeutige ID. Über diese ID können die Gruppendefinitionen im Übungstool geladen werden. Dabei wird die Applikation direkt mit dem Querystring?data=gist:ID aufgerufen. Die Url lädt somit automatisch die Tabellengruppe, die im Gist mit der ID ac267b9cc810ac5f20e2 definiert wurde zuletzt besucht am Johannes Kessler

65 Kapitel 4 Grafische Benutzeroberfläche Die grafische Benutzeroberfläche des Übungstools ist komplett webbasiert und wurde mit HTML5 umgesetzt. Beim Start der Anwendung wird die Gruppenübersicht vom Server gladen. Die Tabellen werden bei der Auswahl einer Gruppe per AJAX nachgeladen. Sämtliche Berechnungen laufen clientseitig ab. Dies ermöglicht ein komfortables Arbeiten ohne Rücksichtnahme auf die aktuelle Reaktionszeit des Servers. Wie in Abbildung 4.1 auf Seite 56 zu sehen ist, besteht die Oberfläche aus den folgenden Komponenten (von links oben nach rechts unten): 1. einem Dropdownmenü zur Auswahl der Tabellengruppe 2. einer Liste mit Tabellen und deren Spalten 3. dem Editor mit Toolbar (siehe Abschnitt 4.1) 4. einer Operatorbaumdarstellung des Statements (siehe Abschnitt 4.2) 5. der RA-Formel jenes Teils der Formel, welcher berechnet wurde 6. der Anzeige der berechneten Daten als Tabelle Die Oberfläche wurde zu großen Teilen mittels Bootstrap 1 gestaltet. Für die Interaktion mit dem DOM wird jquery 2 verwendet. 1 zuletzt besucht am zuletzt besucht am

66 KAPITEL 4. GRAFISCHE BENUTZEROBERFLÄCHE Abbildung 4.1: Editor mit Toolbar im Modus für relationale Algebra. 4.1 Editor Der Editor ist eine der Hauptkomponenten der Applikation und dient neben der Texteingabe auch der Anzeige von Fehlermeldungen. Die Editorkomponente wurde mit CodeMirror 3 umgesetzt 3. CodeMirror ist ein freier webbasierter Editor, der unter der MIT-Lizenz steht und umfangreiche Erweiterungsmöglichkeiten bietet. Die Eingabe einer Abfrage kann im Übungstool sowohl in SQL als auch in relationaler Algebra erfolgen. Für die relationale Algebra steht eine umfangreiche Toolbar zur Verfügung, über die Sonderzeichen der Operatoren komfortabel eingegeben werden können. Wie in Abbildung 4.2 zu sehen ist, wird für jede Operation zusätzlich ein kurzes Beispiel angezeigt, das die Verwendung des 3 zuletzt besucht am Johannes Kessler

67 KAPITEL 4. GRAFISCHE BENUTZEROBERFLÄCHE Operators illustriert. Sprachübergreifend kann die aktuelle Abfrage mit strg. +.. oder der execute -Schaltfläche ausgeführt werden. Über dieselbe Schaltfläche kann, sobald Text innerhalb des Editors markiert ist, dieser Teil der Abfrage ausgeführt werden. Dies ist auch über die Tastatur mit strg möglich. Abbildung 4.2: Editor mit Toolbar im Modus für relationale Algebra Syntax-Highlighting Für die relationale Algebra wurde ein eigener mode 4 definiert, der für das Syntax-Highlighting verwendet wird. Dieser besteht aus einem einfachen Lexer, der die Eingabe in einzelne Tokens aufteilt, und einer einfachen Erkennung für Schlüsselwörter, Strings, einzeilige Kommentare und Blockkommentare. Jedem Token wird in diesem Schritt ein Typ zugeordnet, der das Aussehen als CSS-Klasse definiert (siehe Abbildung 4.2 auf dieser Seite). Für das Syntax-Highlighting wird nicht der Parser aus Abschnitt verwendet, da dieser nur dann einen Syntaxbaum erzeugt, wenn die gesamte Abfrage syntaktisch korrekt ist. Der Lexer besteht aus einer Funktion token und einem Zustandsobjekt. Die Funktion token wird von Codemirror selbständig aufgerufen, liest bis zum jeweils nächsten Token vom Stream und gibt den entsprechenden Typ zurück. Das Zustandsobjekt wird bei jedem Aufruf der Funktion token übergeben und enthält beispielsweise den Status, ob ein Blockkommentar geöffnet wurde. 4 zuletzt besucht am Johannes Kessler 57

68 KAPITEL 4. GRAFISCHE BENUTZEROBERFLÄCHE CodeMirror ruft die Funktion token dabei wärend der Eingabe selbständig für Teile des Texts auf. Dabei wird jeweils ein an dieser Position gültiges Zustandsobjekt übergeben. Dadurch wird vermieden, jeweils den gesamten Text neu parsen zu müssen. Ein mode für SQL ist in Codemirror bereits enthalten und musste daher nicht implementiert werden Fehlermeldungen Fehlermeldungen werden direkt im Editor angezeigt, wenn Informationen zur Position im Code zur Verfügung stehen (siehe Abbildung 4.3). Allgemeine Fehler, die nicht direkt auf eine bestimmte Textstelle bezogen werden können, werden unter dem Editor angezeigt. Abbildung 4.3: Anzeige von Fehlermeldungen im Editor. Die Überprüfung auf syntaktische und semantische Fehler erfolgt mithilfe des Lint-Addons 5 während der Eingabe automatisch im Hintergrund. Dafür wird der komplette Text kurze Zeit nach der letzten Eingabe geparst, in RA übersetzt und dort die semantische Prüfung vorgenommen. Die Codepositionen werden bei den einzelnen Schritten, wenn möglich, weitergegeben, sodass auch semantische Fehler im Text entsprechend angezeigt werden können Autovervollständigung Die Autovervollständigung kann mit strg. + Leertaste. ausgelöst werden und bietet Vorschläge zur Vervollständigung des aktuellen Wortes an. Dazu stehen einerseits die Schlüsselwörter der aktuell ausgewählten Sprache als auch die Namen und Spaltennamen der verwendeten Gruppe von Tabellen zur Verfügung (siehe Abbildung 4.4). Bei jeder erfolgreichen Übersetzung in RA werden zusätzlich alle Spaltennamen der Schemata der Operatoren hinzugefügt. 5 zuletzt besucht am Johannes Kessler

69 KAPITEL 4. GRAFISCHE BENUTZEROBERFLÄCHE Abbildung 4.4: Autovervollständigung im Code-Editor. Durch diese Erweiterungen und die alternative Plaintext Syntax für die relationale Algebra können Abfragen sehr einfach formuliert und getestet werden, ohne dafür die Maus verwenden zu müssen. 4.2 Operatorbaum Für eine einfache Darstellung des ausgeführten Statements wird dieses im Übungstool als Operatorbaum dargestellt. Die Darstellung lehnt sich dabei an Darstellungen in der Literatur (z.b. [KE11, Seite 98] und [GMUW09, Seite 48]) an und wurde in Abschnitt 2.4 vorgestellt. Durch diese Darstellung kann die Ausführungsreihenfolge selbst bei komplexen Abfragen sehr leicht nachvollzogen werden. Der Baum dient weiters zur Steuerung der Anzeige von Zwischenergebnissen. Beim Ausführen wird jeweils die gesamte Abfrage ausgewertet und das Ergebnis tabellarisch angezeigt. Durch einen Klick auf einen Operator im Baum wird das Ergebnis des jeweiligen Teilbaums berechnet und angezeigt. Der entsprechende Knoten und dessen Kindelemente wird dabei optisch hervorgehoben. Durch dieses Feature ist es den Benutzern leicht möglich, die Berechnung der Abfrage in Einzelschritten nachzuvollziehen. Beim Mouseover über einen bestimmten Knoten werden Informationen zum jeweiligen Zwischenergebnis angezeigt. Hierbei werden einerseits das Schema der Relation als auch die maximale Anzahl der Zeilen 6 angezeigt. Bei Natural-Joins wird zusätzlich angezeigt, über welche Spalten gejoint wird. Jede Verwendung einer durch eine Zuweisung entstandenen Variable (siehe Abschnitt 3.1.3) wird im Operatorbaum durch ein farbiges Label gekennzeichnet. Bei mehrfacher Verwendung derselben Variable erhält das Label jeweils die gleiche Farbe. 6 Zeilenanzahl vor der Duplikatenelimination Johannes Kessler 59

70 KAPITEL 4. GRAFISCHE BENUTZEROBERFLÄCHE In Abbildung 4.5 auf dieser Seite ist der Operatorbaum der folgenden Abfrage dargestellt: 1 S = rho S sigma Semester > 2 Studenten 2 3 Prof = sigma Rang >'C3' Professoren 4 5 T = 6 hoeren 7 natural join Vorlesungen 8 join gelesenvon=persnr Prof 9 10 pi S. MatrNr, S.Name, Semester ( 11 S join S. MatrNr=hoeren. MatrNr T 12 ) Die Wurzelknoten der Teilbäume der Variablen S, T, und Prof sind jeweils farbig hervorgehoben. Das angezeigte Ergebnis wäre das des ersten Joins, welches jedoch in der Abbildung nicht mehr dargestellt ist. Abbildung 4.6 zeigt einen Ausschnitt desselben Baums beim Mouseover eines Natural-Joins. Abbildung 4.5: Operatorbaumdarstellung mit Variablen. 60 Johannes Kessler

Informatik 12 Datenbanken SQL-Einführung

Informatik 12 Datenbanken SQL-Einführung Informatik 12 Datenbanken SQL-Einführung Gierhardt Vorbemerkungen Bisher haben wir Datenbanken nur über einzelne Tabellen kennen gelernt. Stehen mehrere Tabellen in gewissen Beziehungen zur Beschreibung

Mehr

Grundlagen: Datenbanken WS 15/16

Grundlagen: Datenbanken WS 15/16 Grundlagen: Datenbanken WS 15/16 2. Zentralübung / Wiederholung / Fragestunde Harald Lang gdb@in.tum.de Diese Folien finden Sie online. Die Mitschrift erhalten Sie im Anschluss. Termine Klausur 24.02.2016,

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Einleitung Projektion Selektion Join Mengenop. Vollst.keit. Einleitung Projektion. Selektion Join. Vollst.keit. Einleitung Projektion Selektion Join

Einleitung Projektion Selektion Join Mengenop. Vollst.keit. Einleitung Projektion. Selektion Join. Vollst.keit. Einleitung Projektion Selektion Join Parsen der Anfrage (SQL) Transformation in eine Standardform (Relationenalgebra) Logische Optimierung Transformation in alternative Zugriffspläne, Physische Optimierung Ausführung des gewählten Zugriffsplans

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Relationale Algebra. Thomas Heimrich. Rel. Algebra. Grundlagen. Beispielrelationen. rel. Algebra. Definition der rel. Algebra.

Relationale Algebra. Thomas Heimrich. Rel. Algebra. Grundlagen. Beispielrelationen. rel. Algebra. Definition der rel. Algebra. 1 / 17 Rel. Relationale Thomas Heimrich rel. Formale Sprachen Rel. relationale Die relationale ist prozedural orientiert. Sie beinhaltet implizit einen Abarbeitungsplan für die Anfrage. Die rel. ist wichtig

Mehr

Access 2010. Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli 2012. inkl. zusätzlichem Übungsanhang ACC2010-UA

Access 2010. Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli 2012. inkl. zusätzlichem Übungsanhang ACC2010-UA Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli 2012 Access 2010 Grundlagen für Anwender inkl. zusätzlichem Übungsanhang ACC2010-UA 3 Access 2010 - Grundlagen für Anwender 3 Daten in Formularen bearbeiten

Mehr

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo. Mengenvergleiche: Mehr Möglichkeiten als der in-operator bietet der θany und der θall-operator, also der Vergleich mit irgendeinem oder jedem Tupel der Unteranfrage. Alle Konten außer das, mit dem größten

Mehr

Datenbanken Microsoft Access 2010

Datenbanken Microsoft Access 2010 Datenbanken Microsoft Access 2010 Abfragen Mithilfe von Abfragen kann ich bestimmte Informationen aus einer/mehrerer Tabellen auswählen und nur diese anzeigen lassen die Daten einer/mehrerer Tabellen sortieren

Mehr

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken. In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access Die Grundlagen der Datenbanken kurspc15 Inhaltsverzeichnis Access... Fehler! Textmarke nicht

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

SQL SQL. SQL = Structured Query Language (SEQUEL) IBM San Jose Research Laboratory SYSTEM R. Grundlagen der Datenbanksysteme I

SQL SQL. SQL = Structured Query Language (SEQUEL) IBM San Jose Research Laboratory SYSTEM R. Grundlagen der Datenbanksysteme I SQL SQL = Structured Query Language (SEQUEL) IBM San Jose Research Laboratory SYSTEM R VII-1 Beispielrelationen Filiale ( Name Leiter Stadt Einlagen ) Konto ( KontoNr KundenNr FilialName Saldo ) Kredit

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5 Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5 Aufgabe 1: Projektion Datenbanksysteme I π A1,...,A n (π B1,...,B

Mehr

IT-Basics 2. DI Gerhard Fließ

IT-Basics 2. DI Gerhard Fließ IT-Basics 2 DI Gerhard Fließ Wer bin ich? DI Gerhard Fließ Telematik Studium an der TU Graz Softwareentwickler XiTrust www.xitrust.com www.tugraz.at Worum geht es? Objektorientierte Programmierung Konzepte

Mehr

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen

Mehr

5. Übung: PHP-Grundlagen

5. Übung: PHP-Grundlagen 5.1. Erstes PHP-Programm 1. Schreiben Sie PHP-Programm innerhalb einer Webseite, d.h. innerhalb eines HTML-Dokument. Ihr PHP-Programm soll einen kurzen Text ausgeben und Komentare enthalten. Speichern

Mehr

SQL - Übungen Bearbeitung der Datenbank Personal (1)

SQL - Übungen Bearbeitung der Datenbank Personal (1) Bearbeitung der Datenbank Personal (1) 1. Abfragen einer einzigen Tabelle 1.1. Zeigen Sie alle Informationen an, die über die Kinder der Mitarbeiter gespeichert sind. 1.2. Zeigen Sie aus der Tabelle stelle

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch

Mehr

Vielen Dank an Dennis Riehle für die Bereitstellung dieser Folien

Vielen Dank an Dennis Riehle für die Bereitstellung dieser Folien Vielen Dank an Dennis Riehle für die Bereitstellung dieser Folien 1.1 Definition Datenbank Ein Datenbanksystem (DBS) ist ein System zur elektronischen Datenverwaltung. Die wesentliche Aufgabe eines DBS

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen

Mehr

Datenbanken Kapitel 2

Datenbanken Kapitel 2 Datenbanken Kapitel 2 1 Eine existierende Datenbank öffnen Eine Datenbank, die mit Microsoft Access erschaffen wurde, kann mit dem gleichen Programm auch wieder geladen werden: Die einfachste Methode ist,

Mehr

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH MORE Profile Pass- und Lizenzverwaltungssystem erstellt von: Thorsten Schumann erreichbar unter: thorsten.schumann@more-projects.de Stand: MORE Projects GmbH Einführung Die in More Profile integrierte

Mehr

Diana Lange. Generative Gestaltung Operatoren

Diana Lange. Generative Gestaltung Operatoren Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

Aufbau des SELECT-Befehls. Im Folgenden werden zunächst Abfragen aus einer Tabelle vorgenommen.

Aufbau des SELECT-Befehls. Im Folgenden werden zunächst Abfragen aus einer Tabelle vorgenommen. Datenbankabfragen (Query) mit SQL (Structured Query Language) 1 Aufbau des SELECT-Befehls Im Folgenden werden zunächst Abfragen aus einer Tabelle vorgenommen. SQL-Syntax: SELECT spaltenliste FROM tabellenname

Mehr

Informationsblatt Induktionsbeweis

Informationsblatt Induktionsbeweis Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln

Mehr

Einführung in. Logische Schaltungen

Einführung in. Logische Schaltungen Einführung in Logische Schaltungen 1/7 Inhaltsverzeichnis 1. Einführung 1. Was sind logische Schaltungen 2. Grundlegende Elemente 3. Weitere Elemente 4. Beispiel einer logischen Schaltung 2. Notation von

Mehr

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3

Mehr

Auswahlabfragen mit ACCESS

Auswahlabfragen mit ACCESS Auswahlabfragen mit ACCESS Abfragekriterien und Operatoren Beim Entwerfen von ACCESS-Auswahlabfragen (queries) sind definierte Abfragekriterien bzw. Operatoren zu benutzen. Ein Abfragekriterium ist eine

Mehr

3. Das Relationale Datenmodell

3. Das Relationale Datenmodell 3. Das Relationale Datenmodell Das Relationale Datenmodell geht zurück auf Codd (1970): E. F. Codd: A Relational Model of Data for Large Shared Data Banks. Comm. of the ACM 13(6): 377-387(1970) DBMS wie

Mehr

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche etutor Benutzerhandbuch Benutzerhandbuch XQuery Georg Nitsche Version 1.0 Stand März 2006 Versionsverlauf: Version Autor Datum Änderungen 1.0 gn 06.03.2006 Fertigstellung der ersten Version Inhaltsverzeichnis:

Mehr

Waimea Phone Monitor. Handbuch. Anzeige von eingehenden Anrufen auf Telefonanlagen mit TAPI-Interface

Waimea Phone Monitor. Handbuch. Anzeige von eingehenden Anrufen auf Telefonanlagen mit TAPI-Interface Waimea Phone Monitor Handbuch Anzeige von eingehenden Anrufen auf Telefonanlagen mit TAPI-Interface Ermittlung des Namens und anderer Informationen aus einer beliebigen ODBC-Datenbank auf Basis der Telefonnummer

Mehr

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

Aufgabe 1: [Logische Modellierung]

Aufgabe 1: [Logische Modellierung] Aufgabe 1: [Logische Modellierung] a) Entwerfen Sie für das von Ihnen entworfene Modell aus Aufgabe 2 des 1. Übungsblattes ein Star-Schema. b) Entwerfen Sie für das vorangegangene Modell einen Teil eines

Mehr

10 Erweiterung und Portierung

10 Erweiterung und Portierung 10.1 Überblick In vielen Fällen werden Compiler nicht vollständig neu geschrieben, sondern von einem Rechnersystem auf ein anderes portiert. Das spart viel Arbeit, ist aber immer noch eine sehr anspruchsvolle

Mehr

Details zu den Ausdrücken nach FROM, WHERE, GROUP BY und HAVING finden Sie in den Abschnitten über JOIN, WHERE und GROUP BY.

Details zu den Ausdrücken nach FROM, WHERE, GROUP BY und HAVING finden Sie in den Abschnitten über JOIN, WHERE und GROUP BY. SELECT - Der Grundbefehl zur Auswahl von Daten Die SELECT-Anweisung fragt Daten aus einer Datenbank ab und stellt diese in einer virtuellen Tabelle zur Verfügung. Diese virtuelle Tabelle, eine Menge von

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Computeria Solothurn

Computeria Solothurn Computeria Solothurn Seniorinnen und Senioren entdecken den Computer und das Internet Sich mit «TeamViewer» von einem Supporter helfen lassen Diese Anleitung und die Illustrationen wurden unter Mac OS

Mehr

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014)

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014) Handbuch NAFI Online-Spezial 1. Auflage (Stand: 24.09.2014) Copyright 2016 by NAFI GmbH Unerlaubte Vervielfältigungen sind untersagt! Inhaltsangabe Einleitung... 3 Kundenauswahl... 3 Kunde hinzufügen...

Mehr

LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen.

LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen. Zusätze zum Gelben Rechenbuch LU-Zerlegung Peter Furlan Verlag Martina Furlan Inhaltsverzeichnis Definitionen 2 (Allgemeine) LU-Zerlegung 2 3 Vereinfachte LU-Zerlegung 3 4 Lösung eines linearen Gleichungssystems

Mehr

AjaXplorer 5.0.4 Bedienungsanleitung

AjaXplorer 5.0.4 Bedienungsanleitung AjaXplorer 5.0.4 Bedienungsanleitung (Kurze Version) Inhaltsverzeichnis AjaXplorer 5.0.4 Bedienungsanleitung... 1 1. Abstract... 1 2. Browseranforderungen... 2 3. Bedienung... 2 3.1. Ordneraktionen...

Mehr

SQL Teil 2. SELECT Projektion Selektion Vereinigung, Schnitt, Differenz Verbund Komplexer SELECT-Ausdruck

SQL Teil 2. SELECT Projektion Selektion Vereinigung, Schnitt, Differenz Verbund Komplexer SELECT-Ausdruck SELECT Projektion Selektion Vereinigung, Schnitt, Differenz Verbund Fahren fort mit SQL Befehlen. Bilden Relationenalgebra auf SQL ab. So Umsetzung von Anfragen an die DB (bzw. Tabellen) möglich. SELECT

Mehr

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004) Nachtrag: Farben Farbblindheit (Light und Bartlein 2004) 1 Vorgeschlagene Farbskalen (Light and Bartlein 2004) Farbkodierung metrisch skalierter Daten Unterscheide: 1. Sequential Data (ohne Betonung der

Mehr

Grundlagen der Theoretischen Informatik, SoSe 2008

Grundlagen der Theoretischen Informatik, SoSe 2008 1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Webalizer HOWTO. Stand: 18.06.2012

Webalizer HOWTO. Stand: 18.06.2012 Webalizer HOWTO Stand: 18.06.2012 Copyright 2003 by manitu. Alle Rechte vorbehalten. Alle verwendeten Bezeichnungen dienen lediglich der Kennzeichnung und können z.t. eingetragene Warenzeichen sein, ohne

Mehr

Access [basics] Gruppierungen in Abfragen. Beispieldatenbank. Abfragen gruppieren. Artikel pro Kategorie zählen

Access [basics] Gruppierungen in Abfragen. Beispieldatenbank. Abfragen gruppieren. Artikel pro Kategorie zählen Abfragen lassen sich längst nicht nur dazu benutzen, die gewünschten Felder oder Datensätze einer oder mehrerer Tabellen darzustellen. Sie können Daten auch nach bestimmten Kriterien zu Gruppen zusammenfassen

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

4. BEZIEHUNGEN ZWISCHEN TABELLEN

4. BEZIEHUNGEN ZWISCHEN TABELLEN 4. BEZIEHUNGEN ZWISCHEN TABELLEN Zwischen Tabellen können in MS Access Beziehungen bestehen. Durch das Verwenden von Tabellen, die zueinander in Beziehung stehen, können Sie Folgendes erreichen: Die Größe

Mehr

Dokumentation. estat Version 2.0

Dokumentation. estat Version 2.0 Dokumentation estat Version 2.0 Installation Die Datei estat.xla in beliebiges Verzeichnis speichern. Im Menü Extras AddIns... Durchsuchen die Datei estat.xla auswählen. Danach das Auswahlhäkchen beim

Mehr

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007 6. Übung zur Vorlesung Datenbanken im Sommersemester 2007 mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007 Aufgabe 1: Rekursion Betrachten Sie die folgende Tabelle

Mehr

1. Übungsblatt. Besprechung: 27.10 (Gruppe A), 3.11 (Gruppe B)

1. Übungsblatt. Besprechung: 27.10 (Gruppe A), 3.11 (Gruppe B) DATENBANKEN IN DER PRAXIS: DATA WAREHOUSING Wintersemester 2015/2016 Prof. Dr. Jens Teubner DBIS Group Übung: Dr. Cornelia Tadros ISSI Group Allgemeine Hinweise 1. Übungsblatt Besprechung: 27.10 (Gruppe

Mehr

Relationale Kalküle. Grundlagen der Datenbanken. Dr. Jérôme Kunegis Wintersemester 2013/14

Relationale Kalküle. Grundlagen der Datenbanken. Dr. Jérôme Kunegis Wintersemester 2013/14 Web Science & Technologies University of Koblenz Landau, Germany Grundlagen der Datenbanken Dr. Jérôme Kunegis Wintersemester 2013/14 Lernziele Grundideen des Domänen-Relationenkalküls (DRK) und des Tupel-Relationenkalküls

Mehr

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien Sie haben von der VR DISKONTBANK GmbH ein signiertes PDF-Dokument (i.d.r. eine Zentralregulierungsliste mit dem Status einer offiziellen Rechnung) erhalten und möchten nun die Signatur verifizieren, um

Mehr

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt 1. Vorbetrachtungen... 2 2. Die Installation... 2 3. Einstellungen - Erstellung der Verknüpfung... 3 3.1 Benutzung des Konfigurationsprogramms

Mehr

Dokumentation IBIS Monitor

Dokumentation IBIS Monitor Dokumentation IBIS Monitor Seite 1 von 16 11.01.06 Inhaltsverzeichnis 1. Allgemein 2. Installation und Programm starten 3. Programmkonfiguration 4. Aufzeichnung 4.1 Aufzeichnung mitschneiden 4.1.1 Inhalt

Mehr

Im Original veränderbare Word-Dateien

Im Original veränderbare Word-Dateien Objekte einer Datenbank Microsoft Access Begriffe Wegen seines Bekanntheitsgrades und der großen Verbreitung auch in Schulen wird im Folgenden eingehend auf das Programm Access von Microsoft Bezug genommen.

Mehr

Zwischenablage (Bilder, Texte,...)

Zwischenablage (Bilder, Texte,...) Zwischenablage was ist das? Informationen über. die Bedeutung der Windows-Zwischenablage Kopieren und Einfügen mit der Zwischenablage Vermeiden von Fehlern beim Arbeiten mit der Zwischenablage Bei diesen

Mehr

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung. Lineare Gleichungen mit einer Unbekannten Die Grundform der linearen Gleichung mit einer Unbekannten x lautet A x = a Dabei sind A, a reelle Zahlen. Die Gleichung lösen heißt, alle reellen Zahlen anzugeben,

Mehr

Hilfedatei der Oden$-Börse Stand Juni 2014

Hilfedatei der Oden$-Börse Stand Juni 2014 Hilfedatei der Oden$-Börse Stand Juni 2014 Inhalt 1. Einleitung... 2 2. Die Anmeldung... 2 2.1 Die Erstregistrierung... 3 2.2 Die Mitgliedsnummer anfordern... 4 3. Die Funktionen für Nutzer... 5 3.1 Arbeiten

Mehr

3. Die tägliche E-Mail-Flut effizient verwalten

3. Die tägliche E-Mail-Flut effizient verwalten 3. Es ist wie im normalen Leben: Wenn man etwas vernünftig einsortiert, findet man es auch rasch wieder. In Outlook ist das ähnlich. Denn mit der Zeit sammeln sich sehr viele E-Mails an. Wer da keine logische

Mehr

http://bitschmiede.com post@bitschmiede.com Drucken von Webseiten Eine Anleitung, Version 1.0

http://bitschmiede.com post@bitschmiede.com Drucken von Webseiten Eine Anleitung, Version 1.0 http://bitschmiede.com post@bitschmiede.com Drucken von Webseiten Eine Anleitung, Version 1.0 Drucken von Webseiten Autor: Christian Heisch Technischer Verantwortlicher für die Webseitenumsetzung bei

Mehr

2.5.2 Primärschlüssel

2.5.2 Primärschlüssel Relationale Datenbanken 0110 01101110 01110 0110 0110 0110 01101 011 01110 0110 010 011011011 0110 01111010 01101 011011 0110 01 01110 011011101 01101 0110 010 010 0110 011011101 0101 0110 010 010 01 01101110

Mehr

Lizenzierung von SharePoint Server 2013

Lizenzierung von SharePoint Server 2013 Lizenzierung von SharePoint Server 2013 Das Lizenzmodell von SharePoint Server 2013 besteht aus zwei Komponenten: Serverlizenzen zur Lizenzierung der Serversoftware und CALs zur Lizenzierung der Zugriffe

Mehr

Tipp III: Leiten Sie eine immer direkt anwendbare Formel her zur Berechnung der sogenannten "bedingten Wahrscheinlichkeit".

Tipp III: Leiten Sie eine immer direkt anwendbare Formel her zur Berechnung der sogenannten bedingten Wahrscheinlichkeit. Mathematik- Unterrichts- Einheiten- Datei e. V. Klasse 9 12 04/2015 Diabetes-Test Infos: www.mued.de Blutspenden werden auf Diabetes untersucht, das mit 8 % in der Bevölkerung verbreitet ist. Dabei werden

Mehr

MS Access 2010 Kompakt

MS Access 2010 Kompakt 2 ABFRAGEN Eine Abfrage ist im Wesentlichen der Filterung eines Datenbestandes sehr ähnlich. Auch hier werden aus einer Menge von Informationen nur jene Datensätze ausgewählt, die einem vorher definierten

Mehr

GEVITAS Farben-Reaktionstest

GEVITAS Farben-Reaktionstest GEVITAS Farben-Reaktionstest GEVITAS Farben-Reaktionstest Inhalt 1. Allgemeines... 1 2. Funktionsweise der Tests... 2 3. Die Ruhetaste und die Auslösetaste... 2 4. Starten der App Hauptmenü... 3 5. Auswahl

Mehr

Die bisher bereits bekannten Aggregatsfunktionen MIN, MAX, SUM, AVG, COUNT, VARIANCE und STDDEV wurden um FIRST und LAST erweitert.

Die bisher bereits bekannten Aggregatsfunktionen MIN, MAX, SUM, AVG, COUNT, VARIANCE und STDDEV wurden um FIRST und LAST erweitert. Betrifft Autor FIRST, LAST Markus Jägle (markus.jaegle@trivadis.com) Art der Info Technische Background Info (April 2002) Quelle Aus dem NF9i-Kurs, NF9i-Techno-Circle der Trivadis und Oracle9i Data Warehousing

Mehr

MS Excel 2010 Kompakt

MS Excel 2010 Kompakt MS Excel 00 Kompakt FILTERN Aus einem großen Datenbestand sollen nur jene Datensätze (Zeilen) angezeigt werden, die einem bestimmten Eintrag eines Feldes (Spalte) entsprechen. Excel unterstützt Filterungen

Mehr

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach - Projekt Personalverwaltung Erstellt von Inhaltsverzeichnis 1Planung...3 1.1Datenbankstruktur...3 1.2Klassenkonzept...4 2Realisierung...5 2.1Verwendete Techniken...5 2.2Vorgehensweise...5 2.3Probleme...6

Mehr

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand: 28.05.2014

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand: 28.05.2014 robotron*e count robotron*e sales robotron*e collect Anwenderdokumentation Version: 2.0 Stand: 28.05.2014 Seite 2 von 5 Alle Rechte dieser Dokumentation unterliegen dem deutschen Urheberrecht. Die Vervielfältigung,

Mehr

Views in SQL. 2 Anlegen und Verwenden von Views 2

Views in SQL. 2 Anlegen und Verwenden von Views 2 Views in SQL Holger Jakobs bibjah@bg.bib.de, holger@jakobs.com 2010-07-15 Inhaltsverzeichnis 1 Wozu dienen Views? 1 2 Anlegen und Verwenden von Views 2 3 Schreibfähigkeit von Views 3 3.1 Views schreibfähig

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Mediator 9 - Lernprogramm

Mediator 9 - Lernprogramm Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop

Mehr

Die Textvorlagen in Microsoft WORD und LibreOffice Writer

Die Textvorlagen in Microsoft WORD und LibreOffice Writer Die Textvorlagen in Microsoft WORD und LibreOffice Writer Liebe Teilnehmer(-innen) am Landeswettbewerb Deutsche Sprache und Literatur Baden- Württemberg, Diese Anleitung soll Ihnen helfen Ihren Wettbewerbsbeitrag

Mehr

Internet online Update (Mozilla Firefox)

Internet online Update (Mozilla Firefox) Um Ihr Consoir Beta immer schnell und umkompliziert auf den aktuellsten Stand zu bringen, bieten wir allen Kunden ein Internet Update an. Öffnen Sie Ihren Mozilla Firefox und gehen auf unsere Internetseite:

Mehr

Formale Sprachen und Grammatiken

Formale Sprachen und Grammatiken Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

1. So beginnen Sie eine Kalkulation

1. So beginnen Sie eine Kalkulation KASSE Eine iphone Apps von a-mass Dieses kleine Programm kann zur Buchführung, als Haushalts- oder Registrierkasse verwendet werden Es können laufende Kosten genauso wie jegliche Ausgaben oder Einnahmen

Mehr

Java Einführung Operatoren Kapitel 2 und 3

Java Einführung Operatoren Kapitel 2 und 3 Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig

Mehr

GITS Steckbriefe 1.9 - Tutorial

GITS Steckbriefe 1.9 - Tutorial Allgemeines Die Steckbriefkomponente basiert auf der CONTACTS XTD Komponente von Kurt Banfi, welche erheblich modifiziert bzw. angepasst wurde. Zuerst war nur eine kleine Änderung der Komponente für ein

Mehr

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Blatt Nr. 7 Übung zur Vorlesung Grundlagen: Datenbanken im WS13/14 Henrik Mühe (muehe@in.tum.de) http://www-db.in.tum.de/teaching/ws1314/dbsys/exercises/

Mehr

Abfragen: Grundbausteine

Abfragen: Grundbausteine Abfragen: Grundbausteine Abfragen sollen gezielt Teile der Information wiedergeben. Das Ergebnis einer solchen Operation ist eine. Der Aufbau der Ergebnistabelle wird durch zwei Grundverfahren festgelegt:

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser Seite 1 von 14 Cookie-Einstellungen verschiedener Browser Cookie-Einstellungen verschiedener Browser, 7. Dezember 2015 Inhaltsverzeichnis 1.Aktivierung von Cookies... 3 2.Cookies... 3 2.1.Wofu r braucht

Mehr

Eine völlig andere Form Abfragen zu erstellen ist, sie mit Hilfe der Datenbankabfragesprache SQL zu gestalten.

Eine völlig andere Form Abfragen zu erstellen ist, sie mit Hilfe der Datenbankabfragesprache SQL zu gestalten. Einführung SQL 2010 Niko Becker Mit unseren Übungen zu ACCESS können Sie Aufbau und Struktur einer relationalen Datenbank kennenlernen. Wir zeigen Ihnen wie Sie Tabellen, Formulare und Berichte erstellen

Mehr

Dokumentation für Lehrstühle

Dokumentation für Lehrstühle Dokumentation für Lehrstühle Florian Schwaiger 14. März 2015 Inhaltsverzeichnis 1 Login 2 2 Einführung in Typo3 2 3 Verwaltung des Accounts 3 3.1 Präferenz-Einstellungen............................. 3

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

Berechnungen in Access Teil I

Berechnungen in Access Teil I in Access Teil I Viele Daten müssen in eine Datenbank nicht eingetragen werden, weil sie sich aus anderen Daten berechnen lassen. Zum Beispiel lässt sich die Mehrwertsteuer oder der Bruttopreis in einer

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 13 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten 2008 netcadservice GmbH netcadservice GmbH Augustinerstraße 3 D-83395 Freilassing Dieses Programm ist urheberrechtlich geschützt. Eine Weitergabe

Mehr

Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt 4

Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt 4 Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Peter H. Schmitt David Farago, Christoph Scheben, Mattias Ulbrich Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt

Mehr