Poprawna odpowiedź używa polecenia ALTER TABLE z klauzulą ADD i odpowiednim typem danych tekstowych: ALTER TABLE pracownicy ADD miejscowosc VARCHAR(100);. W SQL instrukcja ALTER TABLE służy właśnie do modyfikowania istniejącej tabeli: możemy dodawać kolumny, usuwać je, zmieniać typy, klucze itp. Skoro tabela pracownicy już istnieje, nie tworzymy jej od nowa, tylko ją rozszerzamy o nową kolumnę. Sama składnia jest dość typowa: po nazwie tabeli podajemy słowo kluczowe ADD, potem nazwę nowej kolumny i jej typ danych. Dla nazwy miejscowości naturalny jest typ znakowy, najczęściej VARCHAR z rozsądną długością, np. 50, 80 czy 100 znaków. VARCHAR oznacza, że długość jest zmienna, czyli baza nie marnuje miejsca na puste znaki, gdy ktoś wpisze krótszą nazwę, np. „Łódź” czy „Rzeszów”. Moim zdaniem 100 znaków to bezpieczny, dość często spotykany limit w praktycznych projektach. W realnych bazach (MySQL, PostgreSQL, SQL Server) bardzo podobnie dodaje się inne kolumny, np. numer telefonu czy kod pocztowy: ALTER TABLE pracownicy ADD telefon VARCHAR(20);. Dobrą praktyką jest też od razu przemyślenie, czy kolumna może być NULL, czy powinna mieć domyślną wartość. Przykładowo można napisać: ALTER TABLE pracownicy ADD miejscowosc VARCHAR(100) NOT NULL DEFAULT 'nieznana'; – to już trochę wyższy poziom projektowania, ale w większych systemach ma duże znaczenie. Warto zapamiętać ogólny schemat: ALTER TABLE nazwa_tabeli ADD nazwa_kolumny typ;. To jedno z podstawowych poleceń DDL (Data Definition Language) i w administracji bazami danych jest używane bardzo często, gdy trzeba rozbudować istniejący schemat bez kasowania danych.
Żeby dobrze zrozumieć to zadanie, trzeba rozdzielić trzy różne obszary: modyfikację istniejącej tabeli, tworzenie nowej tabeli oraz usuwanie elementów z tabeli. W pytaniu chodzi konkretnie o dodanie nowej kolumny do już istniejącej tabeli pracownicy. To od razu sugeruje użycie instrukcji ALTER TABLE z klauzulą ADD, bo właśnie ta kombinacja jest standardowym sposobem modyfikowania struktury tabeli w SQL. Jednym z częstych nieporozumień jest użycie nieodpowiedniego typu danych. W niektórych odpowiedziach pojawia się typ FLOAT(2) dla nazwy miejscowości. FLOAT jest typem liczbowym zmiennoprzecinkowym, używanym do przechowywania wartości numerycznych, np. cen, pomiarów czy wyników obliczeń. Nazwa miasta to typowe dane tekstowe, czyli powinna być przechowywana w typie znakowym, takim jak VARCHAR czy ewentualnie CHAR. Próba użycia typu liczbowego do przechowywania tekstu jest po prostu sprzeczna z logiką projektowania baz danych i dobrymi praktykami normalizacji, bo utrudnia walidację i późniejsze operacje na danych. Inny błąd to sięganie po instrukcję DROP COLUMN. DROP w kontekście ALTER TABLE oznacza usunięcie kolumny z tabeli, a nie jej dodanie. Jeśli ktoś nieuważnie czyta polecenie lub myli słowa kluczowe, może mu się wydawać, że DROP „coś zmienia w strukturze”, ale kierunek jest dokładnie odwrotny do wymaganego – kolumna miejscowosc zostałaby usunięta (o ile w ogóle istnieje), a nie dodana. W praktyce administracji bazą jest to bardzo niebezpieczna pomyłka, bo DROP COLUMN usuwa dane bezpowrotnie. Zdarza się też pomylenie CREATE TABLE z ALTER TABLE. CREATE TABLE służy do zakładania całkowicie nowej tabeli, a nie do modyfikacji istniejącej. Składnia CREATE TABLE nie przewiduje klauzuli ADD w środku, tylko od razu listę kolumn w nawiasach. Próba napisania czegoś w stylu CREATE TABLE pracownicy ADD ... jest po prostu składniowo błędna w SQL i żadna sensowna baza nie przyjmie takiego polecenia. To typowy błąd osób, które pamiętają, że „ADD dodaje kolumnę”, ale nie łączą tego poprawnie z kontekstem ALTER TABLE. Z mojego doświadczenia dobrą praktyką jest zawsze zadanie sobie dwóch pytań: czy tabela już istnieje, oraz czy chcę coś dodać, usunąć czy zmienić. Jeśli tabela istnieje i coś dokładamy – używamy ALTER TABLE ... ADD ..., dobierając typ danych zgodny z charakterem informacji. W tym zadaniu wszystkie błędne odpowiedzi łamią jedną z tych zasad: albo używają złego typu (FLOAT zamiast tekstu), albo złego słowa kluczowego (DROP zamiast ADD), albo złej instrukcji (CREATE TABLE zamiast ALTER TABLE).