Które ze stwierdzeń prawidłowo charakteryzuje zdefiniowaną tabelę?
CREATE TABLE dane (kolumna INTEGER(3));
A. Tabela posiada jedną kolumnę zawierającą trzyelementowe tablice.
B. Kolumny tabeli dane nazywają się: kolumna1, kolumna2, kolumna3.
C. Tabela o nazwie dane posiada trzy kolumny liczb całkowitych.
D. Tabela o nazwie dane posiada jedną kolumnę liczb całkowitych.
Pytanie z egzaminu CKE, wrzesień 2014 (arkusz E.14-X-14.08).
Instrukcja CREATE TABLE dane (kolumna INTEGER(3)); definiuje tabelę o nazwie dane i dokładnie jedną kolumnę o nazwie kolumna. Typ tej kolumny to liczba całkowita, czyli INTEGER. Zapis INTEGER(3) bywa trochę mylący, szczególnie w MySQL, bo liczba w nawiasie nie oznacza trzech osobnych kolumn ani tablicy z trzema elementami. W starszych wersjach MySQL była to tzw. szerokość wyświetlania, a nie ograniczenie wartości do trzech cyfr. Czyli baza nadal może przechowywać zwykłe liczby całkowite zgodnie z zakresem typu INTEGER. Moim zdaniem warto zapamiętać prostą zasadę: liczba kolumn wynika z liczby definicji oddzielonych przecinkami w nawiasie po nazwie tabeli. Gdyby tabela miała trzy kolumny, zapis wyglądałby raczej tak: CREATE TABLE dane (kolumna1 INTEGER, kolumna2 INTEGER, kolumna3 INTEGER);. W praktyce przy projektowaniu baz danych lepiej jasno nazywać kolumny i używać ograniczeń, np. NOT NULL, PRIMARY KEY albo CHECK, jeśli chcemy pilnować zakresu wartości. To jest zgodne z dobrymi praktykami SQL i pomaga uniknąć nieporozumień przy późniejszej pracy z rekordami.
W tym poleceniu łatwo dać się złapać na nawias przy INTEGER(3), ale trzeba rozdzielić dwie rzeczy: definicję struktury tabeli i parametry typu danych. Nazwy kolumn nie są generowane automatycznie przez bazę na podstawie liczby wpisanej w nawiasie. Jeżeli w definicji widzimy tylko jedną nazwę kolumny, czyli kolumna, to tabela ma jedną kolumnę. System bazodanowy nie dopisze sam kolumna1, kolumna2 i kolumna3, bo SQL tak nie działa. Każda kolumna musi być jawnie zadeklarowana, zwykle jako para: nazwa kolumny oraz typ danych. Częsty błąd myślowy polega też na traktowaniu INTEGER(3) jak informacji o liczbie pól w tabeli. Liczbę pól rozpoznaje się po kolejnych definicjach oddzielonych przecinkami, a nie po parametrze typu. Nie jest to również definicja trzyelementowej tablicy. W SQL tablice, jeżeli w ogóle są obsługiwane przez dany system, zapisuje się inaczej, na przykład w PostgreSQL można spotkać typ integer[], ale to już zależy od konkretnego silnika bazy. Zwykłe INTEGER(3) nie oznacza struktury złożonej. W wielu materiałach szkolnych przyjmuje się po prostu, że INTEGER oznacza liczbę całkowitą, a dopisek w nawiasie nie zmienia faktu, że mamy jedną kolumnę. Z mojego doświadczenia najlepiej czytać takie polecenie od zewnątrz: CREATE TABLE tworzy tabelę dane, a wewnątrz nawiasu znajduje się lista kolumn. Tutaj na tej liście jest tylko jedna pozycja, więc tabela przechowuje rekordy z jednym polem liczbowym.