Funktionale Design (Ästhetik) von SQL

This Article in English…

Überblick

Ein guter Programmierstil ist Grundlage für Lesbarkeit und Verständlichkeit von Quellcode und trägt damit wesentlich zur Wartbarkeit von Software im weitesten Sinne bei. Gut formatierter Code, die Definition und Einhaltung von Namenskonventionen sind nur einige Kriterien für einen guten Programmierstil. Die konkrete Ausgestaltung hiervon ist allerdings subjektiv und führt wie so oft zu philosophischen Kontroversen unter Software-Entwicklern. Jeder hat eben seine persönlichen Präferenzen. Integrierte Entwicklungsumgebungen wie Microsoft Visual Studio unterstützen bei der Software-Entwicklung sehr gut mit automatischer Quellcode-Formatierung und Code-Analysen. Anders sieht es bei der Entwicklung von SQL-Artefakten im SQL Server Management Studio (SSMS) aus. SSMS unterstützt den Entwickler nur mäßig bis gar nicht. Bekannte Programmierstile sind darüber hinaus nur schwer auf SQL anwendbar, da eine einzige SQL-Anweisung im Gegensatz zu einer Software-Anweisung sich gerne mal über hunderte Zeilen erstrecken kann. Schließlich folgen SQL und Software-Programmiersprachen komplett unterschiedlichen Paradigmen. Während Software als Folge von Einzelanweisungen erstellt wird, ist SQL darauf ausgelegt viele Arbeitsschritte in einer einzigen Anweisung auszuführen. Hieraus ergibt sich eine besondere Herausforderung ein gutes SQL Statement zu schreiben.

Was zeichnet also gutes SQL aus? Welche Rolle spielt die Ästhetik von SQL und warum soll Ästhetik funktional sein?

Guter SQL-Code ist lesbar und verständlich. Wesentliche Kriterien hierfür sind eine saubere Gliederung und Strukturierung sowie eine ausreichend präzise Formatierung und Ausrichtung des Codes. Sind diese Bedingungen erfüllt, erlauben Power-Features des SSMS Editors, wie zum Beispiel die blockweise Selektion und Bearbeitung von Code mit dem Spalten-Editor in Verbindung mit der Funktion Suchen&Ersetzen eine äußerst effiziente Bearbeitung von Code. So gesehen ergibt sich die Forderung nach strukturiertem und formatiertem – also im weitesten Sinne ästhetischem – SQL-Code aus den funktionalen Power Features des verwendeten Editors.

Ästhetik

Gemäß Wikipedia ist Ästhetik die Lehre von der wahrnehmbaren Schönheit, von Gesetzmäßigkeiten und Harmonie in der Natur und Kunst.

Das folgende SQL Statement ist zugegebenen Maßen nicht sinnvoll, aber dennoch valide und kann in der Datenbank AdventureWorksDW2017 ohne Probleme ausgeführt werden:

Auch wenn Ästhetik subjektiv ist, so kann hier die Schönheit, Gesetzmäßigkeiten, Harmonie und sicherlich auch die Sinnhaftigkeit dieses Statements in Frage gestellt werden.

Das gleiche Statement etwas umformatiert und umgeschrieben erscheint ästhetischer als das vorige Statement:

Auf jeden Fall ist dieses Statement lesbarer und verständlicher. Einzelne Bestandteile des Statements können allein aufgrund der Position innerhalb des Statements identifiziert werden. Der Begriff der Ästhetik mag hier im technischen Sinne weit hergeholt sein, allerdings können viele Anforderungen an strukturiertem Code unter diesem Begriff zusammengefasst werden.

Funktionalität

Die Überschrift dieses Artikels stellt auf die Funktionalität der Ästhetik ab. Der Artikel hat hier weniger die Funktion von SQL-Befehlen im Blick, sondern eher mächtige Editierfunktionen von SSMS (aber auch anderen Editoren), die eine effiziente strukturelle und formale Gestaltung eines SQL Statements erlauben. Zwei wichtige Power-Features sind hier der Spalten-Editor und die Suchen&Ersetzen Funktion. In Verbindung mit einer gewissen Affinität für die Verwendung der Tastatur anstatt der Maus lässt sich schnell ein gut strukturiertes und formatiertes SQL Statement erstellen.

Der Spalten-Editor

Der Spalten-Editor ist ein derart mächtiges Feature in zahlreichen Editoren, dass es mir unverständlich ist, wie wenig dieses Power-Feature unter Entwicklern bekannt ist bzw. genutzt wird. Im Wesentlichen unterstützt der Spalten-Editor die blockweise Selektion und Bearbeitung von Texten, während standardmäßig die Selektion und Bearbeitung von Text zeilenbasiert ist.

Für die zeilenweise Selektion von Text wird die Shift-Taste benötigt. Über die Tastenkombination Shift+Cursor Right wird ein Text beginnend bei der aktuellen Cursor Position nach rechts selektiert. Die Selektion erfolgt hier zeichenweise und kann sich auch über mehrere Zeilen erstrecken:

Für eine blockweise Selektion von Text wird die Shift-Taste in Kombination mit der ALT-Taste verwendet. Über die Tastenkombination ALT+Shift+Cursor Down kann der Cursor in dem folgenden Beispiel ausgehend von dem ersten Vorkommen des Alias T01 zunächst über mehrere Zeilen erweitert werden, um anschließend über ALT+Shift+Cursor Right einen Block über alle Aliase zu selektieren.

Der Spalten-Editor ermöglicht also die Erweiterung des Cursors über mehrere Zeilen und die Selektion eines Blockes an einer beliebigen Stelle des Editors. Texteingaben werden auf alle Zeilen, über die sich der Cursor erstreckt, angewendet. Der nachfolgende Text wurde nicht durch Copy&Paste dupliziert, sondern nach der Erweiterung des Cursors über 5 Zeilen genau einmal (in alle 5 Zeilen) geschrieben.

Der Spalten Editor kann auch in Verbindung mit der Maus verwendet werden. Ausgehend von der aktuellen Cursor-Position kann bei gleichzeitigem Drücken von ALT+Shift und der linken Maustaste ein Rechteck aufgezogen werden.

Grundvoraussetzung für einen effizienten Einsatz des Spalten-Editor ist neben einer strukturierten Gliederung von SQL Statements vor allem eine präzise Einrückung der Elemente eines SQL Statements.

Die Verwendung des Spalten-Editors ist anfänglich etwas gewöhnungsbedürftig. Wer ihn aber einmal zu schätzen gelernt hat, wird dieses Feature nicht mehr missen wollen.

Anmerkung

  • Die Verwendung des Spalten-Editors funktioniert nur in den Bereichen des Editors in denen Zeilenumbrüche vorliegen.
  • Eine effiziente Verwendung des Spalten-Editors ist nur dann gegeben, wenn Tabs durch Leerzeichen eingefügt werden. Siehe hierzu auch Editor Optionen in SSMS.
  • Die blockweise Selektion wird von zahlreichen Editoren und sogar Microsoft Word unterstützt: SQL Server Management Studio, Microsoft Visual Studio, Notepad++, etc.
  • Die Implementierung dieses Power Features kann jedoch von Editor zu Editor stark abweichen.
  • In SQL Server Management Studio und Microsoft Visual Studio ist das Feature identisch implementiert. Notepad++ macht den Spalten-Editor ebenfalls über die Tastenkombination ALT+Shift verfügbar, die Implementierung des Features weicht jedoch von der Implementierung in den Microsoft Produkten ab und ist meines Erachtens nicht so intuitiv und komfortabel.

Suchen&Ersetzen

Die Suchen&Ersetzen Funktion ist wohl jedem bekannt und in SSMS über die Tastenkombination Ctrl+H verfügbar. Ursprünglich wohl eher für die Ersetzung einzelner Textfragmente geplant, erweist sich diese Feature als weiteres Power-Feature für die Formatierung von SQL-Code.

Ein Beispiel… SQL Server unterstützt als Bezeichnungsbegrenzer (Delimiter) für Feldnamen wahlweise das Anführungszeichen („) oder eckige Klammern ([ ]). Delimiter sind zwar nicht grundsätzlich erforderlich, sie erhöhen allerdings die Lesbarkeit.

Die nachfolgenden beiden SELECT Statements unterscheiden sich lediglich durch die Delimiter der Feldnamen.

Das Einfügen von Delimitern erscheint bei größeren Statements eine Herausforderung. Insbesondere das Einfügen der schließenden eckigen Klammern ist problematisch, da die Position der schließenden eckigen Klammern von Zeile zu Zeile abweicht.

Tatsächlich ist diese Aufgabe aber in wenigen Momenten erledigt.

Die Klammern sind schnell über den Spalten Editor wie in der nachfolgenden Abbildung eingefügt.

Durch geschickte Verwendung der Suchen&Ersetzen Funktion können die schließenden eckigen Klammern so weit nach links eingerückt werden, bis zwischen dem letzten Zeichen der Feldnamen und der schließenden Klammer keine Leerzeichen mehr vorhanden sind. Hierbei ist der Text <Leerzeichen>] durch den Text ]<Leerzeichen> solange zu ersetzen bis kein Vorkommen von <Leerzeichen>] mehr gefunden werden kann.

Fazit

Je strukturierter und formatierter SQL-Code ist, desto lesbarer und wartbarer wird er. SSMS bietet mit dem Spalten-Editor und der Suchen&Ersetzen Funktion zwei mächtige Power-Features zur Verfügung, mit Hilfe derer SQL-Code schnell und effizient strukturiert und formatiert werden kann. Das Ergebnis mag ästhetisch empfunden werden oder nicht. Sie ist hier jedoch nur ein beiläufiges Attribut. Der Begriff der Ästhetik wurde in diesem Artikel als provokantes Buzzword verwendet.