Eine SQL-Datenbank ist einfach zu verwalten und Abfragen liefern tabellarische Ergebnisse. In der Regel werden Ergebnisse von SQL-Abfragen direkt weiter verarbeitet, d.h. die Ergebnisse durchlaufen keine weiteren Manipulationen, da die Manipulationen auf SQL-Ebene selbst erfolgen. Das bedeutet, dass das Ergebnis einer SQL-Abfrage klar definiert ist. Die magische Frage lautet jedoch, was ist, wenn das Ergebnis nicht klar definiert ist, so dass keine Einzelelemente verarbeitet werden können oder wenn man ein Gesamtergebnis erhalten möchte, dass danach erst weiter verarbeitet werden soll?
Meine Idee dazu ist die Darstellung von Ergebnissen in Form von Listen. Für Listen kann man eine Vielzahl von Operationen definieren, um sie zu verwalten und man kann Listen ineinander verschachteln, um z.B. Ergebniskaskaden zu verwalten. Wir müssen also nur eine Syntax definieren, in der die Listen notiert werden. Dann benötigen wir noch ein paar Manipulationsfunktionen und schon können wir die Ergebnisse von SQL-Abfragen generisch in den Arbeitsspeicher transferieren, um sie dort mit „intelligenten“ Funktionen dynamisch aufzubereiten.
Das Ganze klingt zu verworren? Dann noch mal anders dargestellt:
- Bei der Verarbeitung einer SQL-Abfrage müssen wir vorher wissen, wie das Ergebnis aussehen könnte, um eine Verarbeitung überhaupt durchführen zu können
- Bei der Überführung des Ergebnisses einer SQL-Abfrage in eine Liste können wir die Ergebnisliste danach analysieren und dann dynamisch entscheiden, wie wir mit den einzelnen Elementen umgehen.
Wozu braucht man das eigentlich, denn man sollte doch immer wissen, was man eigentlich will? So einfach ist es leider nicht. Häufig kennt man nicht die tatsächliche Ausgangssituation der Daten und damit ist das Ergebnis einer SQL-Abfrage auch nicht deterministisch (oder besser „vorhersagbar“) und es ergibt sich auch die Situation, dass man mit dem Ergebnis einer Abfrage etwas „herumspielen“ möchte, ohne jedes mal eine neue Abfrage zu generieren. So kommen wir zum Konzept der Listen.
Eine entsprechende Darstellung ist sehr einfach. Das Gesamtergebnis einer Datenbankabfrage ist eine Liste. Die einzelnen Datenzeilen der Abfrage sind selbst wiederum Listen, die in der Gesamtliste enthalten sind. Da eine Liste nun sowohl Elemente als auch Listen enthalten kann, ist eine beliebige Verschachtelung möglich. Man benötigt dann nur noch funktionen, mit denen Elemente bzw. ihre Existenz abgefragt werden können. Das Schöne dabei ist, dass das Rad damit nicht neu erfunden wird. Für die Analyse und Verarbeitung von Listen gibt es eine Vielzahl von Programmen. Wenn man z.B. Wolfram Mathematica verwendet, so kann man entsprechende Listen dort direkt weiter verarbeiten und analysieren.
ich werde in einem weiteren Artikel darauf eingehen, wie wir solche Listen und ihre Verwaltung in INVEP eingebaut haben und wie ein Anwender auf sie zugreifen kann, ohne detaillierte Programmierkenntnisse zu besitzen.