KWALIFIKACJA INF3 - CZERWIEC 2022

PYTANIE NR 21.
Podczas tworzenia tabeli produkty należy utworzyć pole cena będące reprezentacją ceny produktu.
Odpowiedni typ dla tego pola, to
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Typ DECIMAL(10, 2) jest właściwy dla ceny, bo zapisuje liczbę dziesiętną ze stałą precyzją i skalą (2 miejsca po przecinku). INTEGER nie ma części ułamkowej, TINYTEXT przechowuje tekst, a ENUM służy do listy stałych wartości, nie do obliczeń cen.

Pełne wyjaśnienie:

W polu cena w tabeli produktów kluczowe jest to, że cena zwykle wymaga części ułamkowej (np. 12,99) oraz przewidywalnego zaokrąglania w obliczeniach (sumy, rabaty, podatki). Dlatego właściwym wyborem jest DECIMAL(10, 2), czyli typ liczbowy o stałej liczbie miejsc po przecinku (skala 2) i określonej maksymalnej liczbie cyfr (precyzja 10). Taki typ jest standardowo stosowany do wartości "pieniężnych" w wielu systemach bazodanowych, bo ogranicza typowe problemy z reprezentacją ułamków w zapisie binarnym.

Odpowiedź INTEGER(11) jest nieadekwatna, ponieważ przechowuje wyłącznie liczby całkowite. Gdyby użyć tego typu, nie dałoby się poprawnie zapisać groszy/centów (np. 19,99), a próby "obejścia" problemu (np. mnożenie przez 100) utrudniają czytelność, zapytania i integrację z aplikacją.

Odpowiedź TINYTEXT jest błędna, bo to typ tekstowy. Pozwala co prawda zapisać ciąg znaków wyglądający jak cena, ale utrudnia porównania i obliczenia (sortowanie leksykograficzne zamiast numerycznego, brak kontroli zakresu i skali, większe ryzyko błędów walidacji).

Odpowiedź ENUM również nie pasuje: ten typ służy do wyboru jednej wartości ze z góry zdefiniowanej listy (np. "S/M/L" lub "dostępny/niedostępny"). Cena nie jest zbiorem kilku stałych opcji, tylko wartością liczbową, na której wykonuje się obliczenia i która może przyjmować wiele różnych wartości.

Wskazówka egzaminacyjna: gdy pole opisuje wielkość mierzalną, a w szczególności wartość z częścią ułamkową wymagającą kontroli liczby miejsc po przecinku, szukaj typu dziesiętnego o określonej skali (np. 2 miejsca dla ceny).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
DECIMAL(10,2) oznacza liczbę dziesiętną o maksymalnie 10 cyfrach łącznie, w tym 2 cyfrach po przecinku. Taki zapis daje stałą skalę (2 miejsca) i przewidywalne zaokrąglanie, co jest szczególnie ważne dla cen, rabatów i podatków.
INTEGER przechowuje tylko liczby całkowite, więc nie zapiszesz wartości typu 19,99. Da się stosować obejście (np. przechowywać grosze), ale komplikuje to zapytania, raporty i integrację z aplikacją. Typ dziesiętny lepiej odzwierciedla sens danych.
Technicznie można, ale to zły pomysł: tekst utrudnia obliczenia i sortowanie numeryczne, zwiększa ryzyko błędów (np. "12,9", "12.90", "PLN 12,90") i zwykle pogarsza walidację. Cena powinna być liczbą, aby baza mogła ją poprawnie porównywać i sumować.
ENUM wybiera jedną wartość z listy stałych opcji, co pasuje do pól typu "status" lub "rozmiar". Cena nie jest zamkniętym zbiorem kilku wartości, tylko wielkością liczbową, na której wykonuje się działania matematyczne. Dlatego lepsze są typy liczbowe.
Najczęściej stosuje się 2 miejsca po przecinku, bo odpowiada to podstawowym jednostkom monetarnym (np. groszom). Jeśli system ma obsługiwać inne zasady rozliczeń (np. większą precyzję), skala może być inna. Na egzaminie zwykle przyjmuj 2 miejsca dla ceny detalicznej.
Obie cechy są istotne: skala mówi, ile jest miejsc po przecinku, a precyzja określa maksymalną liczbę cyfr łącznie. Dla ceny najczęściej kluczowa jest stała skala (np. 2), a precyzja powinna być na tyle duża, by pomieścić realne wartości (np. ceny hurtowe).
Najczęstsze błędy to wybór INTEGER ("bo cena to liczba"), wybór typu tekstowego ("bo łatwo wyświetlić") oraz mylenie ENUM z polem liczbowym. W zadaniach DDL warto zawsze zadać sobie pytanie: czy będę to sumować, porównywać i sortować jak liczbę?
W praktyce używa się poleceń typu DESCRIBE lub podglądu definicji tabeli, aby zobaczyć typ kolumny. Dobry typ dla ceny to liczbowy z ustaloną skalą (zwykle 2). Jeśli widzisz typ tekstowy, to sygnał, że obliczenia będą problematyczne.
Czasem przechowuje się kwoty w najmniejszej jednostce (np. w groszach) jako liczby całkowite, aby uniknąć nieporozumień przy formatowaniu. To jednak wymaga konsekwencji w całej aplikacji. W typowych zadaniach egzaminacyjnych i projektach szkolnych DECIMAL jest najprostszym wyborem.
Typu danych zwykle wymagają: identyfikator (np. liczbowy), nazwa (tekst), opis (dłuższy tekst), stan magazynowy (liczba całkowita), data dodania (data/czas) oraz status (np. ograniczony zestaw wartości). Kluczem jest dopasowanie typu do sposobu użycia danych.
info

To pytanie poprawnie rozwiązuje 69% zdających egzamin. średnie

Według specjalistów z branży: "Typ DECIMAL(10, 2) jest właściwy dla ceny, bo zapisuje liczbę dziesiętną ze stałą precyzją i skalą (2 miejsca po przecinku)."

Źródła:

  • MySQL 8.0 Reference Manual: Data Types (Numeric Types) – opis DECIMAL, https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html (dostęp: 2026-03-01)
  • MySQL 8.0 Reference Manual: Integer Types – opis INTEGER/INT, https://dev.mysql.com/doc/refman/8.0/en/integer-types.html (dostęp: 2026-03-01)
  • MySQL 8.0 Reference Manual: String Data Types – opis TINYTEXT, https://dev.mysql.com/doc/refman/8.0/en/string-types.html (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja systemu bazy danych w zakresie typów liczbowych (sekcja o DECIMAL/NUMERIC)
  • Materiały szkolne z projektowania relacyjnych baz danych (model logiczny i typy atrybutów)
  • Zadania praktyczne: tworzenie tabel DDL i testowe wstawianie/porównywanie wartości cen

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego