Jednym z pól tabeli ksiazki jest status czyWypozyczona przyjmujący dwie wartości true lub false. Optymalny typ dla tego pola, to
A. DOUBLE
B. CHAR
C. VARCHAR(5)
D. BOOLEAN
Pytanie z egzaminu CKE, styczeń 2024 (arkusz EE.09-SG-24.01).
Pole czyWypozyczona opisuje stan logiczny: książka jest wypożyczona albo nie jest wypożyczona. Dlatego najbardziej optymalnym typem jest BOOLEAN, bo dokładnie pasuje do dwóch możliwych wartości: true i false. To jest zgodne z dobrą praktyką projektowania baz danych: typ kolumny powinien jak najlepiej odzwierciedlać znaczenie przechowywanej informacji, a nie tylko jakoś ją zmieścić. W praktyce taka kolumna ułatwia pisanie zapytań, np. SELECT * FROM ksiazki WHERE czyWypozyczona = true, oraz zmniejsza ryzyko wpisania przypadkowych wartości typu tak, nie, FALSEE albo pustego tekstu. Warto wiedzieć, że w niektórych systemach, np. MySQL, BOOLEAN jest technicznie aliasem dla TINYINT(1), ale z punktu widzenia modelu danych nadal oznacza wartość logiczną. Moim zdaniem to ważne, bo czytelność struktury tabeli jest potem mega pomocna przy utrzymaniu aplikacji bibliotecznej.
Jeżeli pole ma przechowywać tylko informację typu tak/nie, prawda/fałsz, wypożyczona/niewypożyczona, to używanie typów liczbowych zmiennoprzecinkowych albo tekstowych jest po prostu nietrafione projektowo. DOUBLE służy do przechowywania liczb rzeczywistych, na przykład ceny, wyniku pomiaru albo wartości z częścią dziesiętną. Dla statusu logicznego byłby to przerost formy nad treścią i jeszcze mógłby sugerować, że w kolumnie wolno zapisać wartości typu 0.5 albo 12.75, co nie ma żadnego sensu w kontekście wypożyczenia książki. CHAR i VARCHAR(5) też dałyby się technicznie wykorzystać, na przykład zapisując true lub false jako tekst, ale to gorsze rozwiązanie. Tekst zajmuje więcej miejsca, wymaga porównywania napisów i otwiera furtkę do literówek oraz niespójności, np. True, false, FALSE, tak, nie. Typowym błędem jest myślenie: skoro wartości wyglądają jak słowa true i false, to trzeba użyć typu znakowego. W bazach danych ważniejsze jest jednak znaczenie danych niż ich wygląd na ekranie. BOOLEAN jasno komunikuje, że kolumna jest flagą logiczną, upraszcza zapytania SQL i lepiej współpracuje z aplikacją, np. w PHP czy JavaScripcie, gdzie wartości logiczne są normalnym typem danych. To taka mała decyzja w projekcie tabeli, ale później oszczędza sporo bałaganu.