Formatowanie Kodu
Jak formatować kod SQL żeby był czytelny? Każdy zespół czy firma ma swoje własne zasady i nie ma tu jednej poprawnej odpowiedzi jak należy to robić. Ważne by wszędzie było tak samo i żeby dla każdego było to czytelne. Nie ma najlepszego sposobu formatowania więc zawsze jeden może być dla kogoś lepszy od drugiego i odwrotnie 🙂 Poniżej przedstawię kilka kawałków kodu i opiszę jakie zasady formatowania staram się zachowywać.
Ten kurs jest częścią cyklu Kurs SQL
Zapisz się na autorskie Szkolenie SQL
Formatowanie DDL
W pierwszej kolejności opiszę na przykładzie jak staram się formatować kod do definiowania struktury danych:
CREATE TABLE TEST_TABLE (
ID NUMBER GENERATED ALWAYS AS IDENTITY
, KOLUMNA_NR_DWA DATE NOT NULL
, BAR VARCHAR2(100 CHAR)
, CONSTRAINT ID_PK PRIMARY KEY (ID)
);
A więc jakie zasady formatowania starałem się tu zawrzeć?
- Nazwy oddzielone znakiem podkreślenia
- Wszystko dużymi/małymi literami.
- Przecinki z przodu, nie na końcu.
- ID zawsze jako pierwsza kolumna
- Pierwsza kolumna z 4 spacjami odstępu. Tak aby wszystkie kolumny zaczynały się w tym samym miejscu.
- Kolejne kolumny: Dwie spacje, przecinek, spacja i nazwa kolumn.
- Typy danych w tej samej linii
- Typ danych varchar2 zawsze z typem np. “CHAR”
- Constrainty na końcu, pierw PK dalej FK
- Kolumny NOT NULL na początku. W kursie kolejność kolumn w tabeli opisuję dlaczego staram stosować się, tą zasadę.
Formatowanie zapytań
Nieco inne jednak w podobnym duchu formatowanie staram się zachować przy zapytaniach:
SELECT
TT.FOO
, TT.BAR
, OT.XYZ
FROM TEST_TABLE TT
LEFT JOIN OTHER_TABLE OT ON OT.ID = TT.ID
AND OT.EFF_DATE > SYSDATE
WHERE 1 = 1
AND TT.CODE = 'JAN';
Jakie zasady formatowania starałem się tu uwzględnić:
- SELEKT i nowa linia
- Wszystko dużymi/małymi literami
- Pierwsza kolumna z 4 spacjami
- Każda kolejna kolumna: Dwie spacje, przecinek, spacja, reszta
- Jeżeli występują aliasy używam ich wszędzie
- FROM i pierwsza tabela
- Każdy JOIN jako osobna linia
- W JOIN po ON i lewej stronie warunków podaję kolumny z tabeli joinowanej
- Przy JOIN ON i AND i kolejne warunki kończące się w tej samej linii
- Przy joinach NIE używać Oraclowych (+)
- WHERE 1=1
- Warunki w kolejnych liniach, jeden warunek na jedną linię
- AND/OR po lewej stronie
Często słyszę pytania po co dodaję 1=1 przy warunku WHERE i odpwfoedzi dlaczego tak robię są dwie:
- Wymusza to dodawanie AND po lewej stronie przez co łatwiej jest komentować poszczególne warunki w trakcie pisania kodu
- Gdy piszemy w PL/SQL czasami potrzebujemy dynamicznie dodać warunki do ograniczeń WHERE. jeżeli byśmy nie dodali 1=1 po where to tworząc dynamicznie pytanie musielibyśmy rozróżniać czy dany warunek jest pierwszy czy nie i wtedy odpowiednio dodawać AND lub nie dodawać przed warunkiem. Dodanie WHERE 1=1 powoduje, że zawsze dodajemy warunek z AND na początku niezależnie który w kolejności jest to warunek. Co prawda w pisaniu po prostu zwykłego selekta nie ma to żadnego znaczenia ale już mam takie przyzwyczajenie 🙂
Automatyczne formatowanie kodu w SQL Developerze
Powyżej przedstawiłem swoje propozycje na to jak formatować kod. Jest to czysto subiektywne odczucie czy takie formatowanie się podoba i jest czytelne czy nie 🙂 Istnieją jednak możliwości automatycznego formatowania kodu. Dla przykładu SQL Developer posiada dwie funkcje pomagające szybko sformatować kod.
Pierwsza funkcja układa kod w odpowiedniej kolejności np. miejsca przecinków, podział na nowe linie czy odstępy. W SQL Developerze służy do tego skrót CTR+F7. Powyższe zapytanie po domyślnym sformatowaniu wygląda jak poniżej:
SELECT
tt.foo,
tt.bar,
ot.xyz
FROM TEST_TABLE TT
LEFT JOIN other_table ot ON ot.id = tt.id
AND ot.eff_date > SYSDATE
WHERE 1 = 1
AND tt.code = 'JAN';
W SQL Developerze istnieje możliwość definiowania własnego standardu formatowania kodu w zakładce: Preferences -> Cod Editor -> Format -> Advence Format.
Kolejną funkcją formatującą kod w SQL Developerze jest możliwość automatycznej zmiany wielkości liter poprzez skrót: ALT + quote. Przycisk quote to ten z cudzysłowiem (“). Istnieje kilka trybów formatowania wielkości liter więc należy klikać aż dojdziemy do interesującego nas standardu. Zamiast ALT + quote można z edytora użyć dedykowanego przycisku:
Podsumowanie
- Nie ma najlepszego sposobu formatowania
- Ważne by stosować ten sam sposób formatowania
- Jeżeli nie wiemy jak formatować skorzystajmy z gotowych narzędzi
- Rozszerzeniem tematu formatowania kodu sql jest kurs dotyczący Code Review SQL.