Database Reference
In-Depth Information
BEGIN
TRANSACTION;
UPDATE
account
SET
total=total+5000.0
WHERE
account
_
id=1337;
UPDATE
account
SET
total=total-5000.0
WHERE
account
_
id=45887;
END
;
Wenn etwas zwischen den beiden Updates schiefgeht, hat die Bank fünf Rie-
sen verloren. Doch innerhalb eines Transaktionsblocks wird das erste Update
aufgehoben, selbst wenn der Server explodiert.
Stored Procedures
Alle Befehle, die Sie bisher gesehen haben, waren deklarativ, doch manchmal
muss man auch Code ausführen. An diesem Punkt muss man eine Entschei-
dung treffen: Soll der Code auf Seiten des Clients oder auf der Datenbank
ausgeführt werden?
Stored Procedures (also „gespeicherte Prozeduren“) bieten große Perfor-
mance-Vorteile zum Preis hoher Architekturkosten. Sie können den Abruf
tausender Datensätze an eine Client-Anwendung einsparen, haben Ihren An-
wendungscode aber auch an diese Datenbank gebunden. Die Entscheidung
für Stored Procedures sollte nicht leichtfertig getroffen werden.
Ungeachtet aller Warnungen wollen wir eine Prozedur (oder
FUNCTION
)ent-
wickeln, die den
INSERT
eines neuen Events zu einem Veranstaltungsort er-
laubt, ohne die
venue
_
id
kennen zu müssen. Wenn der Veranstaltungsort
noch nicht existiert, wird er zuerst angelegt und dann im neuen Event ange-
geben. Wir wollen (als kleine Feinheit) einen Booleschen Wert zurückgeben,
der dem Benutzer anzeigt, ob ein neuer Veranstaltungsort eingefügt wurde.
Was ist mit der Anbieterabhängigkeit?
Als relationale Datenbanken ihre Blütezeit hatten, waren sie das Schweizer Armee-
messer der Technik. Man konnte nahezu alles in ihnen speichern - und sogar ganze
Projekte mit ihnen entwickeln (z. B. mit Microsoft Access). Die wenigen Unterneh-
men, die diese Software anboten, förderten die Nutzung proprietärer Unterschiede
und nutzten diese Abhängigkeit dann aus, um enorme Lizenz- und Beratungsge-
bühren zu verlangen. Das war die gefürchtete
Anbieterabhängigkeit
,dieneuerePro-
grammiermethoden in den 1990ern und frühen 2000ern zu lindern versuchten.
Doch in dem Bestreben, die Anbieter zu neutralisieren, entstanden Maximen wie
keine Logik in der Datenbank
. Das ist eine Schande, weil relationale Datenbanken
über so viele verschiedene Datenbankmanagement-Optionen verfügen. Viele Aktio-
nen, die wir in diesem Buch vorstellen, sind hochgradig implementierungspezifisch.
Dennoch lohnt es sich zu wissen, wie man Datenbanken bis an die Grenzen ausreizt,
statt Tools wie Stored Procedures
apriori
abzulehnen.