Databases Reference
In-Depth Information
des Konzept von prozeduralen Programmiersprachen. Andererseits sind Men-
gen aber die Basis für relationale Datenbanken und - auch wenn man sich weit
vom relationalen Modell entfernt hat - für SQL. Von Haus aus passen Ergebnis-
mengen und Programmvariable offenbar nicht zusammen; man spricht hier auch
vom impedance mismatch. Wenn wir also aus einer Anwendung mit einem RDBMS
kommunizieren wollen, muss es ein Standardmuster geben, um die mengenorien-
tierte Welt mit der Welt der Variablen zu verknüpfen. Wenn unsere Anwendung
beispielsweise eine select -Anweisung zum RDBMDS sendet, soll dort die Er-
gebnismenge ermittelt werden, die anschließend von der Anwendung verarbeitet
wird. Auf den ersten Blick scheinen Arrays ein geeigneter Aufbewahrungsort für
die Datensätze zu sein: Die Ergebnisse werden einfach auf diese listenförmige
Struktur abgebildet und können dann versendet und bequem von der Anwen-
dung verarbeitet werden. Hier treten aber zwei Probleme auf:
Ergebnismengen können sehr groß werden. Werden diese großen Datenvolu-
mina gleichzeitig von mehreren Nutzern über das Netzwerk angefordert, wird
die Infrastruktur übermäßig belastet.
Wenn die Datensätze im Array sind, sind sie vom RDBMS entkoppelt. Teilweise
müssen wir aber in der Anwendung auch Datensätze gleich beim Lesen sper-
ren, um sie vor Änderungen von anderen Benutzern zu schützen (siehe auch
Abschnitt 17.5).
Der Cursor hat sich als Brücke zwischen Programmiersprachen und relationalen
Datenbanken bestens bewährt. Es gibt einige Varianten des Cursors, die aber alle
die gleiche Basis haben:
Die Ergebnismenge einer select -Anweisung wird vom RDBMS ermittelt.
Wenn die Anwendung Ergebnisse anfordert, liefert das RDBMS ihr einen Teil
der Ergebnismenge.
Der Cursor ist ein Satzzeiger, der die Ergebnismenge durchläuft. Immer wenn
die Anwendung einen Datensatz anfordert, bewegt sich der Cursor zum
nächsten Datensatz.
Die Inhalte des aktuellen Datensatzes werden dann in eine oder mehrere Va-
riable der Anwendung geschrieben.
Findet der Cursor keinen Datensatz mehr, fordert die Anwendung die nächste
Teilmenge des Ergebnisses vom RDBMS an. Die Anforderung und der Trans-
port in Paketen sind dabei für den Entwickler - und erst recht für den Endan-
wender - transparent.
Die Arbeit mit Cursorn gehört zum Handwerkszeug des Anwendungsentwick-
lers. In Bibliotheken wie ADO .Net oder JDBC sind die Cursor so weit in Objekten
gekapselt, dass man sie oft nicht mehr wahrnimmt. Obwohl Cursor gewisserma-
ßen im Verborgenen tätig sind, verstehen wir einige Eigenarten der Datenbank-
 
Search WWH ::




Custom Search