Das Märchen vom Drachen Elias

Kilian Berthold erzählt, welche Tücken es bei der Optimierung und Entwicklung von Datenbanken geben kann.

bilder/Das_Maerchen_vom_Drachen_Elias.png

Es war einmal ein uralter Drache namens Elias. Er schlief seit langer Zeit unter einem Berg, an dem auch eine Stadt lad, die für ihr Handwerk berühmt war. Er gab den Menschen der Stadt Rat und wusste alles über alle Waren, die dort jemals erstellt wurden.

Eines Tages wurde beschlossen, dem Gedächtnis des Drachen etwas auf die Sprünge zu helfen. Solche Aktionen wurden schon früher von Mitarbeitern der KK-Gilde von Geo durchgeführt, die nun aber nicht mehr dort arbeiteten. Damals wurde das Aussehen des Drachens nur auf Vordermann gebracht und sie brachten ihm neue Tricks bei. Und so rief der Verwalter der Stadt die KK-Gilde erneut auf, den Wartungsvertrag zu erfüllen und Helden zu entschicken, die diese Aufgabe bewältigen könnten.

 

Die Helden

Der namenlose Held und sein getreuer Begleiter Felix

Zusammen machten sie sich daran, die Aufgabe zu bewältigen. Felix übernahm die Aufgabe, das Gedächtnis des Drachen von MySQL zu MSSQL (Heldenbegriffe, muss man nicht verstehen) zu konvertieren. Er erledigte dies meisterhaft und zog weiter, um eigene Abenteuer zu erleben.

Der namenlose Held allerdings blieb zurück mit der Aufgabe, die vielen durch die Konvertierung entstandenen Fehler zu beheben…

Beispielsweise sprach der Drache nun einen seltsamen Dialekt und verstand viele der Tricks, die er einst gelernt hatte, nicht mehr. Er konnte manche Informationen nicht mehr komplett aufnehmen und weigerte sich dann, sich diese zu merken. Er wollte er manche Informationen aus unerfindlichen Gründen gar nicht mehr preisgeben.

Und so machte sich der Held daran, diese Probleme zu beheben. Die Programmierung des Drachen sollte dabei aber weitestgehend unverändert bleiben. Dabei stieß er jedoch auf Schreckliches…

 

Schlimmer noch: Das Gedächtnis des Drachen war nicht nur überladen, sondern auch in keinster Weise normalisiert! Außerdem war es sehr schwer nachzuvollziehen, welche Tabellen miteinander verknüpft waren, weil die Datenfelder teilweise unverständlich oder falsch benannt waren. Der Drache durchlief beim Aufrufen des Hauptformulars vier Funktionen, eine davon sogar dreimal, und lud dementsprechend lange. Er holte seine Bilder von einem Laufwerk, blieb dabei erst einmal hängen falls das Laufwerk nicht existierte.

Diese Hindernisse verlangsamten die Arbeiten. Dennoch wurden sie im zeitlichen Rahmen abgeschlossen.

 

Vortrag zu DatenbankenEinige Zeit später rief der Verwalter wieder nach dem Helden. Diesmal hatte er einige neue Featurewünsche und auch eine Frage:

Was macht dieses Feld überhaupt?

 

Die Recherche beginnt:

  • Das zu „Zuord. Spez-bez.:“ gehörige Feld heißt pz_spezkriterien
  • Seltsamerweise heißt das Formular „Prüfgruppe“, obwohl die tab_pruefzuordnung als Datenquelle fungiert.
  • Tab_pruefgruppe existiert auch, wird aber für anderes verwendet.
  • Das Feld hat kein Ereignis in diesem Dokument.

Schauen wir also in den Code!

 

Im Code

Eine kurze Suche ergibt:

  • Pz_spezkriterien kommt dreimal im Code vor
  • Pz_spezkriterien wird jedes Mal per Update in die tab_pruefen eingetragen, wo es zu pruef_spezkrit umbenannt wird.

Die Suche geht weiter

Suchen wir also nach pruef_spezkrit.

  • Es wird dreimal in die tab_messwert_allg eingetragen, wo es zu mwallg_spezkrit umbenannt wird. Mit diesem Wert passiert sonst nichts mehr.
  • Es wird im mod_sollwerte in der Funktion sollwertart_unterscheiden (pruef_id As Long) via DLookup geholt und dann gecheckt, ob es 0 ist oder nicht. Je nachdem werden (0 ||1 ) || 2 returned.

Und weiter

Das sieht doch gut aus!

  • Die Funktion sollwertart_unterscheiden wird in der Funktion sollwert_eintragen aufgerufen.
  • Je nachdem welcher Wert zurückgegeben wurde, wird via
    Select… Case Werte aus der tab_std_sk_vit oder der tab_std_sk_res genutzt, um… Moment.

Hm…

  • tab_std_sk_vit? tab_std_sk_res?
  • Müssten die nicht irgendwo hier sein?
  • Tabellen mit dem Namen gibt es nicht und Views auch nicht!

Hmmm…

Das muss doch irgendwann einmal aufgefallen sein, dass hier Tabellen fehlen. Auf jeden Fall hätte ein Fehler auftreten müssen!

Außer natürlich… Die beiden einzigen Aufrufe sind auskommentiert worden. 

Hmmmmmm…

Man kann daraus schließen:

  • Es wurde irgendwann einmal geplant, dieses Modul einzusetzen
  • Oder es wurde einmal benutzt, aber dann entfernt.

Auf jeden Fall:

  1. Es wird nicht mehr benutzt.
  2. Niemand hat es vermisst.
  3. Die Tabellen dafür haben in der letzten Version vor dem Serverumzug auch nicht existiert.

 

Ich schließe daraus

Zuord. Spez-bez.: ist im Moment absolut funktionsfrei.

Und der Drache Elias darf für die nächste Zeit erst mal wieder schlafen, bis die nächsten Änderungswünsche kommen.

ENDE - THE END - fin


Beitrag vom 15.11.2016

Kommentar abgeben: