Ich war gerade als Datenbankexperte zu einer Autohandelsplattform hinzugestossen, welche über Performance-Probleme bei einem Release klagte, welcher in wenigen Tagen live gehen sollte. Auf die Schnelle konnte ich zwar mit Indexen etwas helfen, aber die Statements, welche auf die Datenbank gefeuert wurden, schockierten mich: Es gab bei jedem Seitenaufruf zahlreiche Komplettabfragen ganzer Tabellen. Offenbar wurde nichts gecached und nur wenig gefiltert. Ich machte den CEO auf das Risiko aufmerksam, aber er hatte den Goin-Live schon zuviel herumposaunt, als dass er jetzt noch einen Rückzieher machen könnte ohne einen gewissen Gesichtsverlust: Die Presse stand bereit, die Partner erwarteten viel, die Konkurrenz zitterte. Dann um 8 Uhr Morgens wurde geswitched. Und es passierte zunächst nichts. Gar nichts. Bis nach etwa einer halben Minute die Seite sich langsam aufbaute. Und es wurde schnell immer langsamer. Der Rückzieher musste nun unter den Augen aller schmerzlich vollzogen werden.

Als ich den Applikations-Code dann zum ersten mal zu sehen bekam, fiel es mir wie Schuppen von den Augen: Der  Auftragnehmer – ein akademisch wohl anerkanntes Unternehmen – hatte einen Businesslayer aus der Datenbank generiert. Damals war es gerade Modern, sich auf diese Weise von der Datenbank zu entkoppeln, vorallem für Entwickler, welche mit der Datenbank nichts am Hut haben wollten oder konnten und lieber geladene Daten im Nachhinein zu filtern statt sinnvolle Anfragen zu stellen. Ich bekam den Auftrag, diese Situation zu retten – und riss als erstes den ganzen Businesslayer raus und ersetzte ihn durch einen Layer aus Datenbank-Prozeduren. Plötzlich lief die Applikation konkurrenzlos schnell. Dies lehrte mich, nicht jedem akademischen Hype blindlings zu vertrauen, sondern nur das zu implementieren, was notwendig ist ohne grossen Überbau, dafür homogen und gut strukturiert. Code-First  Datenbankapplikationen sind höchstens für Prototypen geeignet, Entwickler sollten die Finger davon lassen und sich Basiskenntnisse in Datenbankprogrammierung aneignen. Stored-Procedures können solche Layer auch sehr gut abstrahieren, und wer hat heutzutage schon ein Produkt, welches nicht auf nur einer bestimmten Datenbank laufen soll? Für die Tansan ist das EntityFramework ein No-Go und höchstens für dessen Ersatz zu haben.