Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 30 kwietnia 2026 10:49
  • Data zakończenia: 30 kwietnia 2026 11:03

Egzamin niezdany

Wynik: 15/40 punktów (37,5%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

UPDATE klient SET miejscowosc='Warszawa' WHERE id IN(2,4);
W tabeli klient o polach: id, imie, nazwisko, miejscowosc znajduje się 5 rekordów o id od 1 do 5. Dla których wartości kolumny id przedstawiona kwerenda zaktualizuje zawartość pola miejscowosc na Warszawa?
A. 2, 4
B. 2, 3, 4
C. 1, 5
D. 3
Zapytanie UPDATE, które widzisz w treści pytania, działa bardzo precyzyjnie: `UPDATE klient SET miejscowosc='Warszawa' WHERE id IN(2,4);` oznacza wprost „zmień wartość kolumny miejscowosc na 'Warszawa' tylko w tych wierszach, w których kolumna id ma wartość 2 albo 4”. Klauzula `WHERE id IN (2,4)` to po prostu skrócony zapis warunku: `WHERE id = 2 OR id = 4`. Skoro w tabeli są rekordy o id 1, 2, 3, 4, 5, to modyfikacji podlegają tylko te dwa wiersze, które spełniają warunek logiczny, czyli id równe 2 i id równe 4. Pozostałe rekordy nie są w żaden sposób dotykane przez to polecenie – ich miejscowość zostaje bez zmian. Z mojego doświadczenia to bardzo często używany wzorzec w praktyce, np. gdy trzeba szybko poprawić dane tylko wybranych klientów, zamówień czy produktów. Warto pamiętać, że polecenie UPDATE bez klauzuli WHERE zaktualizuje wszystkie rekordy w tabeli, co zwykle jest niebezpieczne i w realnych projektach uznawane za błąd, jeśli nie jest to w pełni świadome działanie. W profesjonalnych systemach bazodanowych dobrą praktyką jest zawsze dokładne sprawdzanie warunku WHERE, czasem nawet poprzedzonego zapytaniem SELECT z takim samym warunkiem, żeby zobaczyć, które wiersze zostaną zmienione przed wykonaniem UPDATE. W tym przykładzie można by najpierw zrobić: `SELECT * FROM klient WHERE id IN (2,4);`, a dopiero potem uruchomić UPDATE. W codziennej pracy z SQL konstrukcja `IN` jest też wygodna, gdy lista identyfikatorów jest dłuższa, np. `IN (2,4,7,10,15)`, zamiast pisać długie wyrażenie z wieloma OR. To poprawia czytelność i zmniejsza ryzyko pomyłki przy edycji kodu, co jest po prostu zdrową praktyką w zespole programistów i administratorów baz danych.

Pytanie 2

Przedstawiony kod PHP nawiązuje połączenie z serwerem bazy danych. Jakiego typu operacje powinny się znaleźć w instrukcji warunkowej w miejscu trzech kropek?
$db = mysqli_connect("localhost", "root", "qwerty", "baza1");
if (!$db) {
...
}

A. Informacja o udanym połączeniu z bazą
B. Zamknięcie połączenia z bazą danych
C. Obsługa błędu połączenia
D. Obsługa danych uzyskanych z bazy
Zamknięcie bazy danych w kontekście nieudanego połączenia jest koncepcją, która nie ma sensu. Jeśli połączenie się nie uda, to nie ma nawet nawiązanej sesji, która mogłaby być zamknięta. Połączenie z bazą danych powinno być zamykane tylko w momencie, gdy zostało nawiązane i jest już niepotrzebne, a nie w przypadku, gdy wystąpił błąd w trakcie łączenia. Komunikat o pomyślnym połączeniu także nie ma zastosowania w tej sytuacji, ponieważ, skoro połączenie się nie udało, nie ma podstaw do informowania użytkownika o jego powodzeniu. Obsługa danych pobranych z bazy również nie ma miejsca, jeśli połączenie nie zostało ustanowione, co czyni te odpowiedzi błędnymi. Właściwe podejście w takich sytuacjach to zawsze najpierw sprawdzenie, czy połączenie zostało nawiązane, a następnie działania w przypadku usunięcia błędu. Ignorowanie tej zasady może prowadzić do nieprzewidzianych zachowań aplikacji, a nawet do wycieków danych lub awarii serwerów.

Pytanie 3

Jakie jest zastosowanie zapytania z klauzulą JOIN?

A. pozyskać dane z dwóch tabel, które są ze sobą powiązane
B. wywołać funkcję agregującą
C. uzyskać wynik tylko z jednej tabeli
D. określić klucz obcy dla tabeli
Zrozumienie błędnych odpowiedzi na to pytanie wymaga analizy kilku koncepcji, które są często mylone w kontekście relacyjnych baz danych. Wywoływanie funkcji agregujących, jak SUM czy AVG, ma na celu przetwarzanie danych w obrębie jednej tabeli, co nie jest bezpośrednio związane z mechanizmem łączenia tabel. Klauzula JOIN nie jest używana do wywoływania funkcji agregujących, lecz do łączenia danych z wielu tabel. Z kolei definiowanie klucza obcego jest procesem strukturalnym, który zapewnia integralność relacji między tabelami, ale nie służy do pozyskiwania danych z tych tabel. W przypadku trzeciej odpowiedzi, uzyskanie wyników jedynie z jednej tabeli jest sprzeczne z ideą klauzuli JOIN, która ma na celu eksplorację relacji między tabelami. Błędy myślenia, które prowadzą do nieprawidłowych wniosków, często polegają na braku zrozumienia podstawowych zasad projektowania baz danych i ich normalizacji. W praktyce, efektywne korzystanie z JOIN pozwala na uzyskiwanie zaawansowanych analiz, jak na przykład raporty sprzedaży, które łączą różne źródła danych. Wiedza na temat właściwego użycia klauzul i relacji w bazach danych jest kluczowa dla każdego, kto dąży do skutecznego zarządzania danymi.

Pytanie 4

Funkcja pg_connect w języku PHP służy do nawiązania połączenia z bazą danych

A. MS SQL
B. PostgreSQL
C. mySQL
D. MS ACCESS
Wszystkie inne odpowiedzi dotyczą baz danych, które nie są obsługiwane przez funkcję pg_connect. Użycie MS SQL, MS ACCESS lub mySQL w kontekście pg_connect wprowadza w błąd, ponieważ każda z tych technologii ma swoje własne metody połączenia. MS SQL, na przykład, jest systemem zarządzania bazą danych stworzonym przez Microsoft i do połączeń z tą bazą używa się funkcji syb_connect lub PDO w zależności od preferencji programisty. MS ACCESS, z kolei, jest bazą danych, która często jest wykorzystywana w mniejszych aplikacjach i wymaga innych podejść do połączeń, często przy użyciu ODBC lub DAO. MySQL, popularna baza danych open source, używa funkcji mysqli_connect lub PDO_MySQL. Typowe błędy myślowe prowadzące do nieprawidłowych odpowiedzi często wynikają z nieznajomości specyfiki i architektury różnych systemów baz danych oraz błędnego utożsamiania ich z funkcjami PHP. Każde z tych rozwiązań ma swoje unikalne cechy i różnice, które są istotne dla projektowania aplikacji oraz ich późniejszego rozwoju.

Pytanie 5

Jaki zapis jest używany do definiowania klucza obcego w MySQL?

A. AUTO_INCREMENT(ID)
B. UNIQUE KEY(ID)
C. FOREIGN KEY(ID)
D. PRIMARY KEY(ID)
Odpowiedź FOREIGN KEY(ID) jest poprawna, ponieważ klucz obcy (foreign key) jest używany w bazach danych do ustanowienia i wymuszenia relacji pomiędzy dwiema tabelami. Klucz obcy w tabeli A wskazuje na klucz podstawowy (primary key) w tabeli B, co pozwala na utrzymanie integralności referencyjnej danych. Na przykład, jeżeli mamy tabelę 'Zamówienia', w której zapisujemy informacje o zamówieniach, i tabelę 'Klienci', w której mamy dane o klientach, możemy zastosować klucz obcy w tabeli 'Zamówienia', aby wskazywał na ID klienta w tabeli 'Klienci'. Dzięki temu, nie będzie możliwości dodania zamówienia dla nieistniejącego klienta, co zapewnia spójność i integralność bazy danych. Używanie kluczy obcych jest zgodne z najlepszymi praktykami projektowania baz danych, ponieważ pozwala na łatwiejsze zarządzanie danymi i ogranicza możliwość wystąpienia błędów. Warto również zauważyć, że klucze obce mogą być używane w kontekście kaskadowej aktualizacji lub usuwania, co dodatkowo ułatwia zarządzanie relacjami między tabelami.

Pytanie 6

Aby usunąć tabelę, trzeba użyć kwerendy

A. UNIQUE
B. DELETE
C. TRUNCATE TABLE
D. DROP TABLE
Odpowiedź 'DROP TABLE' jest poprawna, ponieważ jest to standardowe polecenie SQL służące do usunięcia całej tabeli z bazy danych. Użycie tego polecenia oznacza, że wszystkie dane przechowywane w tabeli zostaną trwale usunięte, a sama struktura tabeli również zostanie skasowana. Przykład zastosowania: jeśli mamy tabelę 'klienci' i chcemy usunąć ją z bazy danych, stosujemy polecenie 'DROP TABLE klienci;'. Ważne jest, aby przed wykonaniem tego polecenia upewnić się, że nie ma już odniesień do tej tabeli w innych obiektach bazy danych, takich jak klucze obce. Usunięcie tabeli jest procesem nieodwracalnym, dlatego zaleca się wykonanie kopii zapasowej danych przed podjęciem takiej decyzji. W praktyce, ten operator jest często używany w sytuacjach, gdy dane są zbędne, a struktura bazy danych wymaga reorganizacji lub uproszczenia, co jest zgodne z najlepszymi praktykami w zarządzaniu bazami danych.

Pytanie 7

Kod       SELECT imie, pesel, wiek FROM dane WHERE wiek IN (18,30) spowoduje wybranie

A. imion, nazwisk i numerów PESEL osób młodszych niż 18 lat
B. imion, numerów PESEL oraz wieku ludzi mających ponad 30 lat
C. imion, numerów PESEL oraz wieku osób w przedziale 18 do 30 lat
D. imion, numerów PESEL i wieku osób, które mają 18 lub 30 lat
Pierwsza odpowiedź, która wskazuje na osoby poniżej 18 lat, jest błędna. To zapytanie SQL nie ma na celu wybrania młodszych; przecież filtruje tych, którzy mają 18 lub 30 lat. Co do drugiej odpowiedzi, to sugeruje, jakoby zapytanie wybierało osoby w przedziale od 18 do 30, co też jest pomyłką. Operator IN wskazuje konkretne liczby, a nie przedzial, dlatego w tym przypadku wiek pośredni nie ma miejsca. Trzecia odpowiedź, dotycząca osób powyżej 30 lat, kompletnie nie pasuje, bo nie dotyczy tego, co jest w zapytaniu. Właściwie to nie ma związku między tą składnią SQL a osobami, które mają więcej niż 30 lat. Każda z tych odpowiedzi wynika z niepoprawnego zrozumienia, jakie jest intencja zapytania, które jasno wybiera osoby tylko w dwóch podanych przedziałach. Myślę, że ważne jest, żeby dobrze rozumieć, jak działają operatory w SQL, żeby unikać takich pomyłek i nieporozumień.

Pytanie 8

W bazie danych znajduje się tabela pracownicy z kolumnami: id, imie, nazwisko, pensja. W nowym roku zdecydowano o podwyżce pensji dla wszystkich pracowników o 100 zł. Ta aktualizacja w bazie danych powinna mieć formę

A. UPDATE pensja SET 100
B. UPDATE pracownicy SET pensja = pensja + 100
C. UPDATE pensja SET +100
D. UPDATE pracownicy SET pensja = 100
Odpowiedź 'UPDATE pracownicy SET pensja = pensja + 100;' jest właściwa, ponieważ używa standardowej składni SQL do aktualizacji danych w tabeli. W tym przypadku, instruktacja 'SET pensja = pensja + 100' oznacza, że dla każdego rekordu w tabeli 'pracownicy', wartość kolumny 'pensja' zostanie zwiększona o 100 zł. To podejście jest zgodne z zasadami dobrych praktyk w programowaniu SQL, ponieważ aktualizuje wartość na podstawie jej bieżącej wartości, co pozwala na zachowanie pełnej kontroli nad danymi. Tego rodzaju aktualizacja jest często stosowana w bazach danych, gdy konieczne jest modyfikowanie istniejących danych na podstawie ich aktualnych wartości. Na przykład, jeśli w tabeli mamy pracowników z różnymi wynagrodzeniami, każdemu z nich dodamy stałą kwotę, co sprawia, że struktura danych pozostaje spójna. Dodatkowo, takie podejście ma zastosowanie w praktycznych scenariuszach, takich jak coroczne podwyżki wynagrodzeń, co jest powszechną praktyką w wielu organizacjach, a poprawność tej operacji można zweryfikować poprzez zapytania SELECT po aktualizacji.

Pytanie 9

Jaki typ powinien być zastosowany, aby pole w bazie danych mogło przechowywać liczby zmiennoprzecinkowe?

A. INT
B. FLOAT
C. VARCHAR
D. CHAR
Odpowiedź FLOAT jest poprawna, ponieważ ten typ danych w systemach baz danych jest zaprojektowany do przechowywania liczb zmiennoprzecinkowych, co oznacza, że może reprezentować liczby rzeczywiste z ułamkami. Typ FLOAT jest szczególnie przydatny w aplikacjach wymagających precyzyjnych obliczeń matematycznych, takich jak finanse, nauki przyrodnicze czy inżynieria. W przeciwieństwie do INT, który przechowuje tylko liczby całkowite, FLOAT pozwala na dużą elastyczność w zakresie wartości. Przykładem może być aplikacja bankowa, która potrzebuje przechowywać wartości depozytów oraz wypłat, które mogą być liczone z dokładnością do dwóch miejsc po przecinku. Dobrą praktyką jest także zrozumienie, że FLOAT, w zależności od implementacji, może mieć ograniczenia precyzyjności, dlatego w sytuacjach wymagających ekstremalnej dokładności, takich jak obliczenia naukowe, warto rozważyć użycie typu DOUBLE, który oferuje większą precyzję. W kontekście zarządzania bazą danych, istotne jest również, aby typ danych był zgodny z wymaganiami aplikacji oraz stosowany w odpowiednich konwencjach i standardach branżowych.

Pytanie 10

Aby stworzyć poprawną kopię zapasową bazy danych, która będzie mogła zostać później przywrócona, należy najpierw sprawdzić

A. poprawność składni zapytań
B. spójność bazy
C. możliwość udostępnienia bazy danych
D. uprawnienia dostępu do serwera bazy danych
Spójność bazy danych jest kluczowym elementem, który należy sprawdzić przed wykonaniem kopii bezpieczeństwa, ponieważ zapewnia, że wszystkie dane są zgodne i nie zawierają błędów. Spójność oznacza, że wszelkie reguły i ograniczenia, takie jak klucze główne, klucze obce oraz unikalne indeksy, są spełnione. W przypadku naruszenia spójności, kopia bazy danych mogłaby zawierać uszkodzone lub niekompletne dane, co mogłoby uniemożliwić jej prawidłowe odtworzenie w przyszłości. Przykładem może być sytuacja, gdy mamy tabelę zamówień, która odwołuje się do tabeli klientów. Jeśli rekord klienta został usunięty, a zamówienia pozostają, to mamy do czynienia z naruszeniem spójności. Standardy, takie jak ACID (Atomicity, Consistency, Isolation, Durability), podkreślają znaczenie spójności w zarządzaniu bazami danych, co czyni ją niezbędnym krokiem w procesie tworzenia kopii zapasowych.

Pytanie 11

W tabeli podzespoly należy zaktualizować wartość pola URL na "toshiba.pl" dla wszystkich wierszy, gdzie producent to TOSHIBA. W SQL zapis tej modyfikacji będzie wyglądać następująco:

A. UPDATE producent = 'TOSHIBA' SET URL = 'toshiba.pl';
B. UPDATE podzespoly SET URL = 'toshiba.pl' WHERE producent = 'TOSHIBA';
C. UPDATE podzespoly.producent = 'TOSHIBA' SET URL = 'toshiba.pl';
D. UPDATE podzespoly SET URL = 'toshiba.pl'
Odpowiedź jest poprawna, ponieważ zawiera właściwą składnię polecenia SQL do aktualizacji wartości w tabeli. W SQL, instrukcja UPDATE jest używana do modyfikacji danych w istniejących rekordach. W tym przypadku, polecenie 'UPDATE podzespoly SET URL = 'toshiba.pl' WHERE producent = 'TOSHIBA';' zmienia wartość pola URL na 'toshiba.pl' tylko dla tych rekordów, gdzie producent jest równy 'TOSHIBA'. To podejście jest zgodne z dobrymi praktykami w zarządzaniu bazami danych, ponieważ pozwala na precyzyjne określenie, które rekordy mają zostać zaktualizowane. W praktyce, przed wykonaniem takiej aktualizacji, zaleca się zawsze wykonać zapytanie SELECT, aby zweryfikować, które rekordy zostaną zmodyfikowane. Zapewnia to dodatkową warstwę kontroli i zabezpiecza przed niezamierzonymi zmianami. Prawidłowe użycie klauzuli WHERE jest kluczowe, aby nie zmienić wszystkich rekordów w tabeli, co mogłoby doprowadzić do utraty danych. Zrozumienie struktury SQL i zasad działania instrukcji jest fundamentem pracy z relacyjnymi bazami danych.

Pytanie 12

W bazie danych istnieje tabela ksiazki, która posiada pola: tytul, id_autora, data_wypoz, id_czytelnika. Codziennie tworzony jest raport dotyczący książek wypożyczonych w danym dniu, który wyświetla jedynie tytuły książek. Która kwerenda SQL jest odpowiednia do generowania tego raportu?

A. SELECT tytul FROM ksiazki WHERE data_wypoz = CURRENT_DATE()
B. SELECT tytul FROM ksiazki
C. SELECT * FROM ksiazki
D. SELECT tytul, data_wypoz FROM ksiazki WHERE data_wypoz = CURRDATENT_E()
Ta odpowiedź jest prawidłowa, ponieważ wykorzystuje funkcję CURRENT_DATE(), która zwraca bieżącą datę systemową. Zapytanie SQL SELECT tytul FROM ksiazki WHERE data_wypoz = CURRENT_DATE(); umożliwia wybranie jedynie tych książek, które zostały wypożyczone w dniu, w którym raport jest generowany. To podejście jest zgodne z dobrymi praktykami w zakresie zarządzania danymi, ponieważ pozwala na efektywne filtrowanie danych bez zbędnych informacji. W kontekście bazy danych, operacje takie jak filtrowanie danych według daty są kluczowe dla tworzenia raportów, które są użyteczne i zrozumiałe dla użytkowników. Dzięki temu możemy na przykład generować codzienne zestawienia wypożyczeń książek, co jest szczególnie przydatne w bibliotekach oraz innych instytucjach zajmujących się wynajmem materiałów. Użycie odpowiednich funkcji w SQL jest nie tylko korzystne, ale również zwiększa efektywność procesów analitycznych oraz zarządzania danymi.

Pytanie 13

Jakim systemem do zarządzania wersjami oprogramowania jest

A. FileZilla
B. GIT
C. TotalCommander
D. Eclipse
TotalCommander, Eclipse i FileZilla to popularne narzędzia, które służą do innych celów w procesie tworzenia oprogramowania, ale nie są systemami kontroli wersji. TotalCommander jest menedżerem plików, który ułatwia nawigację i zarządzanie plikami na komputerze, jednak nie oferuje funkcji śledzenia zmian w kodzie czy współpracy zespołowej. Eclipse to zintegrowane środowisko programistyczne (IDE), które wspiera rozwój aplikacji, ale nie pełni roli systemu kontroli wersji, chociaż może korzystać z różnych systemów kontroli wersji za pomocą odpowiednich wtyczek. FileZilla to klient FTP, który umożliwia przesyłanie plików na serwery, co również nie ma związku z kontrolą wersji. Często mylnie przyjmuje się, że narzędzia związane z zarządzaniem plikami czy programowaniem mogą zastępować systemy kontroli wersji, co jest błędnym podejściem. Systemy kontroli wersji, takie jak GIT, są zaprojektowane z myślą o zarządzaniu zmianami w kodzie źródłowym, co jest kluczowe w nowoczesnym procesie wytwarzania oprogramowania. Ignorowanie tej specyfikacji i nieodróżnianie narzędzi do zarządzania plikami od systemów kontroli wersji może prowadzić do problemów w organizacji pracy zespołu oraz utraty wydajności w projektach.

Pytanie 14

Atrybut autor w tabeli ksiazka oznacza

CREATE TABLE ksiazka (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  tytul VARCHAR(200),
  autor SMALLINT UNSIGNED NOT NULL,
  CONSTRAINT `dane` FOREIGN KEY (autor) REFERENCES autorzy(id)
);
A. atrybut używany w relacji z tabelą dane
B. kluczem obcym powiązanym z tabelą autorzy
C. atrybut typu tekstowego zawierający informacje o autorze
D. kluczem podstawowym tabeli ksiazka
Pole autor w tabeli ksiazka jest zdefiniowane jako klucz obcy co oznacza że tworzy relację z inną tabelą w bazie danych w tym przypadku z tabelą autorzy która zawiera id autorów W relacyjnych bazach danych klucz obcy jest mechanizmem który pozwala na utrzymanie integralności danych pomiędzy powiązanymi tabelami Jest to szczególnie ważne w kontekście modelowania rzeczywistości gdzie różne encje takie jak książki i autorzy są zależne od siebie W powyższym przykładzie pole autor odwołuje się do pola id w tabeli autorzy umożliwiając przypisanie konkretnego autora do danej książki Taka konstrukcja bazy danych jest zgodna z zasadami normalizacji które dążą do minimalizacji redundancji danych i zapewnienia ich spójności Klucze obce są powszechnie stosowaną praktyką w projektowaniu baz danych dzięki której złożone relacje mogą być reprezentowane i zarządzane w sposób efektywny Umożliwiają one implementację mechanizmu kaskadowego aktualizowania lub usuwania danych co pomaga w zachowaniu spójności w całej bazie danych

Pytanie 15

Wskaż zapytanie, w którym dane są uporządkowane.

A. SELECT AVG(ocena) FROM uczniowie WHERE klasa = 2;
B. SELECT imie, nazwisko FROM mieszkancy WHERE wiek > 18 ORDER BY wiek;
C. SELECT nazwisko FROM firma WHERE pensja > 2000 LIMIT 10;
D. SELECT DISTINCT produkt, cena FROM artykuly;
Zapytania, które nie zawierają klauzuli ORDER BY, nie realizują sortowania wyników, co jest kluczowym aspektem w analizie danych. W przypadku zapytania, które wykorzystuje SELECT DISTINCT, jak w "SELECT DISTINCT produkt, cena FROM artykuly;", celem jest eliminacja duplikatów w wynikach, a nie ich sortowanie. Tego typu zapytania są przydatne, gdy chcemy uzyskać unikalne wartości, ale nie mają one na celu uporządkowania danych. Drugie zapytanie, "SELECT AVG(ocena) FROM uczniowie WHERE klasa = 2;" oblicza średnią ocen, co również nie wymaga sortowania, ponieważ zwraca jedną wartość agregującą. Z kolei zapytanie "SELECT nazwisko FROM firma WHERE pensja > 2000 LIMIT 10;" ogranicza liczbę zwracanych rekordów, lecz także nie sortuje ich, co może prowadzić do nieprzewidywalnych wyników, gdyż nie wiadomo, które konkretnie nazwiska zostaną zwrócone. Zrozumienie różnicy między eliminacją duplikatów, obliczaniem wartości agregujących a sortowaniem danych jest kluczowe dla efektywnego korzystania z SQL. W praktyce, brak stosowania klauzuli ORDER BY może prowadzić do trudności w interpretacji wyników, a także do niezgodności w analizie danych, co jest typowym błędem myślowym w podejściu do zapytań SQL.

Pytanie 16

Tabela Pacjenci ma pola: imie, nazwisko, wiek, lekarz_id. Aby zestawić raport zawierający wyłącznie imiona i nazwiska pacjentów poniżej 18 roku życia, którzy zapisani są do lekarza o id równym 6, można posłużyć się kwerendą SQL

A. SELECT imie, nazwisko WHERE wiek < 18 OR lekarz_id = 6;
B. SELECT imie, nazwisko FROM Pacjenci WHERE wiek < 18 OR lekarz_id = 6;
C. SELECT imie, nazwisko WHERE wiek < 18 AND lekarz_id = 6;
D. SELECT imie, nazwisko FROM Pacjenci WHERE wiek < 18 AND lekarz_id = 6;
W tym zadaniu kluczowe są dwie rzeczy: poprawna składnia SQL i właściwe zrozumienie logiki warunków w klauzuli WHERE. Wiele osób intuicyjnie skupia się tylko na treści pytania i trochę pomija formalne wymagania języka, a to potem mści się w realnych systemach. Pierwszy typ błędu to pomijanie klauzuli FROM. Instrukcje w stylu SELECT imie, nazwisko WHERE wiek < 18 ... wyglądają na pierwszy rzut oka sensownie, bo jest wybór kolumn i jest warunek, ale w SQL standardowo nie da się filtrować rekordów bez wskazania źródła danych. Serwer bazodanowy musi wiedzieć, z której tabeli pobrać kolumny imie, nazwisko, wiek i lekarz_id. Brak FROM Pacjenci powoduje po prostu błąd składni, a nie „prawie działającą” kwerendę. Z mojego doświadczenia to bardzo typowy błąd osób zaczynających przygodę z SQL: mieszanie logiki „co chcę” z tym „jak to ma być zapisane w języku”. Drugi, bardziej podstępny problem to mylenie operatorów logicznych AND i OR. W zadaniu chodzi o pacjentów poniżej 18 roku życia, którzy jednocześnie są przypisani do lekarza o id = 6. To jest klasyczny przypadek koniunkcji – oba warunki muszą być spełnione. Użycie OR zamiast AND powoduje zupełnie inne działanie: zapytanie zwróci wszystkich pacjentów młodszych niż 18 lat niezależnie od lekarza, a dodatkowo wszystkich pacjentów lekarza nr 6 w każdym wieku. W praktyce taki raport byłby kompletnie niezgodny z założeniem, a co gorsza, na pierwszy rzut oka mógłby wyglądać „prawie dobrze”, bo część wyników się zgadza. Warto też zwrócić uwagę na to, że przy prostych warunkach AND/OR bez nawiasów kolejność oceny może być myląca, dlatego dobrą praktyką w bardziej złożonych zapytaniach jest stosowanie nawiasów, np. WHERE (wiek < 18 AND lekarz_id = 6) OR ... itd. Tutaj warunek jest prosty, ale nawyk myślenia o logice boole’owskiej bardzo się przydaje. Podsumowując, poprawne zapytanie musi mieć: wskazaną tabelę w klauzuli FROM, właściwie dobrane kolumny w SELECT oraz warunek z użyciem AND, który zawęża wynik do rekordów spełniających oba kryteria jednocześnie. Pomyłki w którymkolwiek z tych elementów prowadzą albo do błędu składni, albo – co gorsza – do logicznie błędnych raportów, których użytkownik nie zauważy od razu, a to w systemach produkcyjnych bywa naprawdę groźne.

Pytanie 17

Głównym celem systemu CMS jest oddzielenie treści portalu informacyjnego od jego wyglądu. Taki efekt osiąga się przez generowanie zawartości

A. z bazy danych oraz wyglądu ze zdefiniowanego szablonu
B. z bazy danych oraz wyglądu za pomocą atrybutów HTML
C. ze statycznych plików HTML oraz wyglądu ze zdefiniowanego szablonu
D. ze statycznych plików HTML oraz wyglądu za pomocą technologii FLASH
Podstawowym zadaniem systemu CMS (Content Management System) jest efektywne oddzielenie treści od warstwy prezentacyjnej, co znacząco ułatwia zarządzanie stroną internetową. Systemy CMS wykorzystują bazy danych do przechowywania treści, co pozwala na dynamiczne generowanie stron internetowych na podstawie zdefiniowanych szablonów. Przy pomocy szablonów można łatwo zmieniać wygląd i układ strony, co jest kluczowe w dzisiejszym szybko zmieniającym się środowisku online. Przykładowo, w systemach takich jak WordPress, treści są przechowywane w bazie danych MySQL, a szablony w PHP. Dzięki temu możesz zmieniać motyw i dostosowywać wygląd strony bez konieczności modyfikacji poszczególnych elementów treści. Dobre praktyki branżowe wskazują na konieczność stosowania tego typu rozdzielenia, co nie tylko przyspiesza proces aktualizacji serwisu, ale także poprawia jego bezpieczeństwo i ułatwia utrzymanie. Takie podejście jest również korzystne w kontekście SEO, ponieważ pozwala na optymalizację treści bez ryzyka wprowadzenia błędów w kodzie.

Pytanie 18

Jakie polecenie pozwala na dodanie kolumny zadanie kompletne do tabeli zadania?

A. ADD COLUMN zadanie kompletne WITH zadania
B. ALTER TABLE zadania ADD COLUMN zadaniekompletne int
C. INSERT INTO zadania VALUES zadania kompletne
D. CREATEINDEX zadania ADD COLUMN zadanie_kompletne int
Patrząc na błędne odpowiedzi, widać, że są tam spore pomyłki dotyczące zarządzania tabelami w relacyjnych bazach danych. Pierwsza błędna odpowiedź mówi o używaniu polecenia INSERT INTO, które tak naprawdę dodaje nowe wiersze, a nie zmienia struktury tabeli. Użycie tego polecenia do dodawania kolumny to pomyłka, co pokazuje brak zrozumienia podstaw SQL. Kolejna odpowiedź wspomniana przy CREATEINDEX jest równie myląca, bo to polecenie robi indeksy, co może szybko wyszukiwać dane, ale nie zmienia struktury tabeli. Stosowanie go w tym kontekście to nieporozumienie. No i ta propozycja 'ADD COLUMN zadanie kompletne WITH zadania' to coś, co nie istnieje w SQL, więc nie ma jak tego wykorzystać. Widać, że wiele błędów brało się z mylenia różnych pojęć dotyczących danych i struktur. Żeby poprawić swoje umiejętności, dobrze by było poświęcić trochę czasu na naukę podstawowych poleceń SQL i ich zastosowania w praktyce, bo to pomoże unikać takich pomyłek w przyszłości.

Pytanie 19

Model, w którym wszystkie dane są zapisane w jednej tabeli, określa się mianem

A. hierarchicznym
B. sieciowym
C. relacyjnym
D. jednorodnym
Modele sieciowe i hierarchiczne są zupełnie inne od modelu jednorodnego, bo wprowadzają więcej złożoności w to, jak dane są trzymane. Na przykład model sieciowy pozwala tworzyć różne powiązania jak w grafie, co daje większą elastyczność, ale już dla prostych aplikacji to może być przesada. Z kolei model hierarchiczny z tą swoją drzewiastą strukturą też potrafi namieszać, bo trudniej wtedy zarządzać informacjami. Żeby dobrze zrozumieć, jak to wszystko działa, trzeba pojąć hierarchię i jak ze sobą te dane grają, co czasami bywa problematyczne, jak relacje się zmieniają. Moim zdaniem, w modelu relacyjnym, gdzie dane są w różnych tabelach połączonych kluczami, zyskujemy więcej elastyczności, ale też zwiększa się złożoność. Dlatego często można się zagubić w tych wszystkich możliwościach, a model jednorodny zazwyczaj jest najlepszy tylko tam, gdzie nic skomplikowanego nie trzeba. Większość systemów bazodanowych korzysta jednak z modelu relacyjnego, bo to zgodne ze standardami SQL, co ułatwia życie na dłuższą metę.

Pytanie 20

Która funkcja PHP obsługi bazy danych służy do kodowania polskich znaków?

A. mysqli_fetch_assoc()
B. mysqli_query()
C. mysqli_connect()
D. mysqli_set_charset()
W tym pytaniu łatwo się pomylić, bo wszystkie podane funkcje należą do rozszerzenia mysqli i często pojawiają się obok siebie w kodzie. Kluczowe jest jednak zrozumienie, która z nich faktycznie odpowiada za ustawienie kodowania znaków, a które służą do zupełnie innych zadań. W praktyce większość problemów z polskimi znakami wynika z braku świadomości, że samo połączenie z bazą to za mało – trzeba jeszcze jasno powiedzieć, w jakim zestawie znaków ma odbywać się komunikacja. Funkcja mysqli_query() służy wyłącznie do wykonywania zapytań SQL na już istniejącym połączeniu. Można przez nią wysłać SELECT, INSERT, UPDATE, a nawet ręcznie wykonać polecenie typu SET NAMES, ale to jest obejście, a nie dobra praktyka. W nowoczesnym kodzie właśnie mysqli_set_charset() jest rekomendowaną metodą ustawiania kodowania, a używanie do tego zwykłego zapytania SQL jest uznawane za rozwiązanie przestarzałe i bardziej podatne na błędy konfiguracyjne. Z kolei mysqli_connect() tworzy samo połączenie z serwerem bazy danych. Ona nie ustawia domyślnie właściwego kodowania dla aplikacji – to, jakie będzie kodowanie po połączeniu, zależy od konfiguracji serwera MySQL i może się różnić między środowiskami (lokalnie coś działa, na serwerze produkcyjnym już nie). Typowy błąd początkujących polega na założeniu, że skoro połączenie działa, to problem kodowania „sam się ogarnie”. Niestety nie, bez jawnego mysqli_set_charset() często kończy się to krzaczkami. Natomiast mysqli_fetch_assoc() odpowiada tylko za pobieranie kolejnych wierszy wyniku zapytania w postaci tablicy asocjacyjnej. Ona nie ma żadnego wpływu na to, w jakim kodowaniu dane zostały przysłane z serwera. Jeśli połączenie działa w złym charsetcie, to mysqli_fetch_assoc() po prostu zwróci już zepsute ciągi znaków. Próby „naprawiania” tego na tym etapie zwykle prowadzą do jeszcze większego chaosu. Typowy błąd myślowy przy tym pytaniu polega na mieszaniu pojęć: skoro funkcja jest związana z zapytaniami lub z pobieraniem danych, to część osób intuicyjnie wiąże ją też z kodowaniem. W rzeczywistości kwestia charsetu jest konfiguracją połączenia z bazą, a nie pojedynczego zapytania czy sposobu pobierania wyników. Właśnie dlatego jedyną poprawną odpowiedzią w tym zestawie jest mysqli_set_charset(), bo to ona wprost i formalnie ustawia zestaw znaków dla danego połączenia zgodnie z dobrymi praktykami programowania w PHP.

Pytanie 21

Jakie uprawnienia posiada użytkownik jan po wykonaniu poniższych poleceń na bazie danych? ```GRANT ALL PRIVILEGES ON klienci TO jan;``` ```REVOKE SELECT, INSERT, UPDATE, DELETE ON klienci FROM jan;```

A. Będzie miał możliwość zmiany struktury tabeli klienci
B. Będzie miał możliwość wstawiania rekordów do tabeli klienci
C. Będzie miał możliwość usuwania rekordów z tabeli klienci
D. Będzie miał możliwość wyszukiwania danych w tabeli klienci
Użytkownik jan po wykonaniu podanych poleceń SQL nie będzie miał możliwości usuwania rekordów z tabeli klienci. W rzeczywistości polecenie GRANT ALL PRIVILEGES na początku miało na celu nadanie wszystkich uprawnień do tej tabeli, jednak po wykonaniu polecenia REVOKE SELECT, INSERT, UPDATE, DELETE odebrano mu możliwość wykonywania podstawowych operacji na danych, takich jak wstawianie, usuwanie czy aktualizowanie rekordów. Jest to częsty błąd w myśleniu, gdzie użytkownicy mogą sądzić, że uprawnienia ogólne obejmują również wszystkie podkategorie, nawet jeśli nie zostały określone. Podobnie, możliwość wyszukiwania danych w tabeli klienci również została usunięta z uwagi na odebranie uprawnienia SELECT. To pokazuje, jak kluczowe jest zrozumienie struktury uprawnień w SQL, gdzie każdy typ uprawnienia ma swoje własne znaczenie. W praktyce, w wielu organizacjach ważne jest, aby administracja bazą danych była przeprowadzana zgodnie z zasadą najmniejszych uprawnień, aby ograniczyć dostęp do krytycznych operacji oraz zminimalizować ryzyko błędów i incydentów związanych z bezpieczeństwem. Z tego powodu, odpowiedzi sugerujące, że jan ma jakieś uprawnienia do wstawiania lub usuwania danych w tabeli klienci, są nieprawidłowe, ponieważ zostały one jasno odwołane w ostatnim poleceniu.

Pytanie 22

Który z komponentów dokumentacji aplikacji powinien być zawarty w dokumentacji dla użytkownika?

A. Instrukcja obsługi funkcji systemu
B. Szczegółowy opis kodu źródłowego
C. Opis algorytmów użytych w kodzie
D. Wyjaśnienie zastosowanych technologii oraz bibliotek
Opis kodu źródłowego nie jest odpowiedni do zawarcia w dokumentacji użytkownika, ponieważ skupia się na technicznych detalach implementacji, które są zrozumiałe głównie dla programistów i osób zajmujących się rozwojem oprogramowania. Tego typu dokumentacja jest istotna w kontekście rozwoju aplikacji, ale nie ma zastosowania w kontekście użytkownika końcowego, który nie jest zazwyczaj zainteresowany wewnętrzną strukturą kodu. Opis wykorzystanej technologii i bibliotek również nie jest adekwatny do dokumentacji użytkownika, ponieważ użytkownik nie musi znać szczegółów dotyczących technologii, na której oparta jest aplikacja. W większości przypadków, klienci są bardziej zainteresowani funkcjonalnościami i sposobem użytkowania aplikacji, a nie tym, jakie technologie zostały użyte w jej produkcji. Opis algorytmów zastosowanych w kodzie również nie jest właściwy, ponieważ użytkownicy końcowi rzadko potrzebują wiedzieć, jakie algorytmy stoją za działaniem aplikacji. Chociaż zrozumienie algorytmów może być przydatne dla inżynierów i programistów, dla przeciętnego użytkownika najważniejsze jest to, jak aplikacja działa w praktyce i jak ją wykorzystać do realizacji swoich potrzeb. Z tego względu, informacje te są istotne w kontekście dokumentacji technicznej, ale nie są użyteczne w dokumentacji użytkownika.

Pytanie 23

W języku SQL, aby wstawić wiersz danych do tabeli w bazie danych, należy zastosować polecenie

A. INSERT INTO
B. SELECT ROW
C. CREATE ROW
D. CREATE INTO
Poprawną składnią do wstawiania nowych wierszy w SQL jest polecenie INSERT INTO i to jest taki absolutny fundament pracy z bazą danych. Standard SQL (ANSI/ISO) definiuje właśnie tę komendę jako podstawowy mechanizm dodawania rekordów do tabeli. Typowy zapis wygląda na przykład tak: INSERT INTO klienci (imie, nazwisko, email) VALUES ('Jan', 'Kowalski', '[email protected]');. Najpierw podajemy nazwę tabeli, potem listę kolumn, a następnie wartości w dokładnie tej samej kolejności. W praktyce, w aplikacjach webowych, to właśnie INSERT INTO stoi za dodawaniem nowych użytkowników, zamówień, wpisów na blogu czy logów systemowych. Moim zdaniem warto od razu wyrabiać sobie dobre nawyki: zawsze jawnie wypisuj nazwy kolumn, zamiast polegać na kolejności kolumn w tabeli. Dzięki temu, jeśli ktoś kiedyś doda nową kolumnę albo zmieni ich układ, Twoje zapytania dalej będą działały poprawnie. Jest też drugi, często używany wariant: INSERT INTO tabela VALUES (...), ale on jest bezpieczny tylko wtedy, gdy dokładnie kontrolujesz strukturę tabeli. INSERT INTO może też współpracować z SELECT, np. do masowego kopiowania danych: INSERT INTO archiwum_zamowien SELECT * FROM zamowienia WHERE data < '2023-01-01';. W systemach produkcyjnych łączy się tę komendę z transakcjami (BEGIN, COMMIT, ROLLBACK), żeby zapewnić spójność danych. Warto pamiętać, że różne silniki (MySQL, PostgreSQL, SQL Server) mają swoje rozszerzenia, ale sama idea INSERT INTO jest wspólna i zgodna ze standardem. To takie must-have dla każdego, kto poważnie myśli o pracy z bazami danych.

Pytanie 24

Czym jest proces normalizacji tabel w kontekście baz danych?

A. analiza i optymalizacja bazy danych
B. wizualizacja struktury bazy danych
C. wyłącznie stworzenie tabel oraz relacji w bazie
D. wprowadzenie nowych rekordów do bazy
Podczas analizy niepoprawnych odpowiedzi, istotne jest zrozumienie, dlaczego niektóre koncepcje są mylone z procesem normalizacji. Odpowiedzi sugerujące dodawanie rekordów do bazy oraz graficzne przedstawienie bazy nie mają związku z normalizacją, która koncentruje się na organizacji istniejących danych w sposób redukujący ich duplikację. Proces dodawania rekordów odnosi się do operacji DML (Data Manipulation Language) w SQL, podczas gdy normalizacja jest bardziej związana z teorią projektowania baz danych. Odpowiedź sugerująca, że normalizacja dotyczy jedynie tworzenia tabel i relacji, ignoruje złożoność tego procesu. Tworzenie tabel to tylko jeden z kroków w procesie normalizacji, który obejmuje również identyfikację zależności między danymi oraz eliminację niepożądanych redundancji. Niezrozumienie tego może prowadzić do nieefektywnej struktury bazy danych, co w perspektywie czasu skutkuje trudnościami w zarządzaniu danymi. Natomiast stwierdzenie, że normalizacja odnosi się jedynie do optymalizacji bazy danych, pomija jej fundamentalne założenia dotyczące integralności danych oraz eliminacji anomalii, które są kluczowe dla prawidłowego funkcjonowania systemów bazodanowych. W ten sposób można zauważyć, że mylenie tych pojęć prowadzi do błędnych wniosków na temat podstawowych zasad projektowania baz danych.

Pytanie 25

Jaką funkcję pełni CONCAT w języku SQL?

A. przycinanie wyświetlanego tekstu
B. usuniecie określonego tekstu
C. określenie podłańcucha znaków z tekstu wejściowego
D. łączenie tekstu do wyświetlenia
Funkcja CONCAT w języku SQL jest używana do łączenia dwóch lub więcej ciągów tekstowych w jeden. Jest to bardzo przydatne narzędzie w zarządzaniu danymi, gdyż pozwala na tworzenie bardziej złożonych i informacyjnych komunikatów tekstowych z pojedynczych elementów. Funkcja ta przyjmuje jako argumenty dowolną liczbę ciągów znakowych, a jej wynik to jeden skonsolidowany ciąg. Na przykład, jeżeli mamy dwie kolumny, 'imię' i 'nazwisko', używając CONCAT możemy stworzyć pełne imię i nazwisko: SELECT CONCAT(imię, ' ', nazwisko) AS pełne_imie FROM użytkownicy; W wyniku tego zapytania otrzymamy pełne imiona i nazwiska użytkowników. Funkcja ta jest zgodna z normami ANSI SQL i jest wspierana przez większość systemów zarządzania bazami danych, takich jak MySQL, PostgreSQL, czy Microsoft SQL Server, co sprawia, że jest bardzo uniwersalnym narzędziem w świecie baz danych.

Pytanie 26

Wskaż najefektywniejszą metodę wyczyszczenia wszystkich danych z tabeli adresy, nie wpływając na jej strukturę

A. DELETE * FROM adresy;
B. TRUNCATE TABLE adresy;
C. DELETE TABLE adresy;
D. DROP TABLE adresy;
Usunięcie wszystkich rekordów z tabeli adresy bez usuwania jej struktury można zrealizować na wiele sposobów, jednak nie wszystkie z nich są właściwe. DROP TABLE adresy; jest komendą, która usuwa całą tabelę wraz z jej strukturą oraz danymi, co jest całkowicie sprzeczne z założeniem pytania. Takie podejście może prowadzić do poważnych problemów w aplikacjach, które polegają na istnieniu tabeli, ponieważ po wykonaniu tej komendy tabela przestaje istnieć, co uniemożliwia dalsze operacje na niej. DELETE * FROM adresy; wydaje się być poprawną próbą usunięcia danych, ale składnia ta jest błędna, ponieważ w SQL nie używa się znaku „*” w kontekście polecenia DELETE. Poprawna składnia powinna być DELETE FROM adresy;, co z kolei prowadzi do przetwarzania każdego rekordu w tabeli i może być znacznie wolniejsze w przypadku dużych zbiorów danych. DELETE również nie resetuje identyfikatorów autoinkrementacyjnych, co może być niepożądanym efektem. Z kolei DELETE TABLE adresy; to niewłaściwe wyrażenie, ponieważ SQL nie rozpoznaje komendy DELETE TABLE. W rzeczywistości, by usunąć tabelę, musielibyśmy użyć DROP TABLE. Zasadniczo, błędne odpowiedzi wskazują na niepełne zrozumienie zasadności i syntaktyki SQL oraz różnic pomiędzy operacjami na danych. Warto zatem przywiązywać wagę do detali, aby unikać nieefektywnych i błędnych rozwiązań, szczególnie w pracy z bazami danych, gdzie każdy błąd może prowadzić do utraty cennych danych.

Pytanie 27

W celu wykonania kopii bazy danych biblioteka w systemie MySQL należy w konsoli użyć polecenia

A. mysqlduplicate –u root biblioteka > kopia.sql
B. backupmysql -u root biblioteka kopia.sql
C. copymysql –u root biblioteka kopia.sql
D. mysqldump -u root biblioteka > kopia.sql
W poleceniu do wykonywania kopii bazy danych MySQL kluczowe jest użycie właściwego narzędzia oraz poprawnej składni. W systemach z MySQL standardowym, oficjalnym narzędziem do tworzenia logicznych kopii zapasowych jest program mysqldump. Nazwy takie jak „copymysql”, „backupmysql” czy „mysqlduplicate” po prostu nie istnieją w standardowej dystrybucji MySQL i wynikają raczej z intuicyjnego myślenia typu: skoro chcę skopiować bazę, to pewnie będzie jakaś komenda „copy” albo „backup”. To naturalne skojarzenie, ale niestety oderwane od rzeczywistych narzędzi dostępnych w praktyce administracji bazami danych. MySQL dostarcza konkretny zestaw binariów: mysql (klient), mysqld (serwer), mysqldump (backup), mysqladmin, mysqlimport itd. Nazwa mysqldump jest trochę mało oczywista, ale to właśnie ona jest właściwa do wykonywania zrzutów baz danych. Błędne odpowiedzi sugerują istnienie narzędzi, które brzmieniem przypominają operacje typu „backup” czy „duplicate”, jednak w profesjonalnym środowisku trzymamy się dokładnych nazw binariów i składni opisanej w dokumentacji. W praktyce administracyjnej takie pomyłki kończą się po prostu komunikatem „command not found” w konsoli. Drugi aspekt to samo przekierowanie do pliku. W poprawnym poleceniu używa się znaku „>”, który jest elementem powłoki systemowej, a nie MySQL. To przekierowanie bierze standardowe wyjście programu mysqldump i zapisuje je do wskazanego pliku tekstowego, np. kopia.sql. Jeżeli ktoś pominie to przekierowanie, zobaczy cały zrzut bazy na ekranie, co jest kompletnie niepraktyczne. Jeżeli natomiast spróbuje używać nieistniejących poleceń typu „copymysql … kopia.sql” bez znaku „>”, to ani nie wywoła prawidłowego narzędzia, ani nie zapisze danych we właściwy sposób. Z mojego doświadczenia typowy błąd myślowy polega na traktowaniu MySQL jakby miał wbudowane jakieś „magiczne” polecenie backupu, na wzór prostych programów typu „kopiuj plik”. Baza danych to jednak usługa sieciowa działająca w tle, a kopie wykonuje się przez specjalistyczne narzędzia, które rozumieją jej strukturę, zależności, typy danych i potrafią wygenerować poprawne instrukcje SQL do późniejszego odtworzenia. Dlatego tak ważne jest, żeby zapamiętać nie tylko poprawną odpowiedź, ale i samą ideę: do backupu MySQL używamy mysqldump, z odpowiednimi opcjami, a wynik zapisujemy do pliku przez przekierowanie. To jest zgodne z dokumentacją MySQL i ogólnie przyjętymi dobrymi praktykami w administracji serwerami i bezpieczeństwie danych.

Pytanie 28

Jednoznacznym identyfikatorem rekordu w bazie danych jest pole

A. wyłącznie typu logicznego.
B. klucza głównego.
C. klucza obcego.
D. wyłącznie typu tekstowego.
W tym zagadnieniu łatwo pomylić różne typy pól i ich role w bazie danych, szczególnie gdy ktoś dopiero zaczyna przygodę z SQL i projektowaniem relacyjnych baz danych. Jednoznaczny identyfikator rekordu to takie pole, które pozwala bez żadnych wątpliwości wskazać dokładnie jeden wiersz w tabeli. W standardzie relacyjnych baz danych tę rolę pełni klucz główny, oznaczany jako PRIMARY KEY. Klucz obcy jest często mylony z kluczem głównym, bo też dotyczy identyfikatorów, ale jego zadanie jest inne. Foreign key służy do tworzenia powiązań między tabelami – przechowuje wartości klucza głównego z innej tabeli. Sam w sobie nie musi być unikalny, wręcz przeciwnie, w relacji 1:N zwykle powtarza się wiele razy. Dlatego nie może być uznany za jednoznaczny identyfikator rekordu w swojej tabeli. Gdybyśmy próbowali identyfikować rekordy po kluczu obcym, szybko okazałoby się, że wiele wierszy ma tę samą wartość i nie da się wskazać jednego, konkretnego. Kolejny typ błędnego rozumowania to przekonanie, że o byciu identyfikatorem decyduje typ danych, np. logiczny albo tekstowy. Typ logiczny (BOOLEAN, TINYINT(1) itp.) ma zwykle tylko dwie możliwe wartości: true/false, 0/1. Nietrudno zauważyć, że w dowolnej realnej tabeli więcej niż dwa rekordy nie będzie mogło mieć unikalnej wartości takiego pola, więc nie da się w ten sposób jednoznacznie identyfikować wierszy. Typ tekstowy też sam w sobie niczego nie gwarantuje. Można mieć kolumnę VARCHAR z e-mailem użytkownika, ale jeśli nie nałożymy ograniczenia unikalności i nie oznaczymy jej jako klucz główny, baza danych nie będzie pilnowała, by wartości się nie powtarzały. Częsty błąd myślowy polega na tym, że skoro w praktyce „zazwyczaj” coś jest unikalne (np. PESEL, e-mail), to ktoś zakłada, że to automatycznie jest klucz główny. Tymczasem dopiero formalne zadeklarowanie PRIMARY KEY (ewentualnie UNIQUE + NOT NULL, ale to już bardziej obejście) nadaje kolumnie rolę jednoznacznego identyfikatora w sensie technicznym. Dlatego nie typ danych, nie to czy pole wygląda na ważne, tylko jego definicja jako klucza głównego w strukturze tabeli decyduje o tym, że identyfikuje rekord jednoznacznie.

Pytanie 29

Które zapytanie MySQL należy użyć, aby usunąć jedynie pracowników, którzy zarabiają nie mniej niż 500 i nie więcej niż 1000 zł oraz ich miejsce pracy zawiera frazę tx

A. DELETE FROM pracownicy WHERE pensja IN (500,1000) AND miejsce_pracy LIKE '*tx*';
B. DELETE FROM pracownicy WHERE pensja > 500 AND pensja < 1000 AND miejsce_pracy LIKE '%tx%';
C. DELETE FROM pracownicy WHERE pensja BETWEEN 500 AND 1000 OR miejsce_pracy LIKE '%tx%';
D. DELETE FROM pracownicy WHERE pensja BETWEEN 500 AND 1000 AND miejsce_pracy LIKE '%tx%';
W tym zadaniu widać kilka typowych pułapek związanych z SQL-em: składnią operatora LIKE, doborem zakresu liczbowego oraz użyciem spójników logicznych AND i OR. Zacznijmy od wzorca tekstowego. W MySQL, zgodnie ze standardową składnią SQL, do dopasowań wzorców używa się znaków % i _. Procent oznacza dowolny ciąg znaków, a podkreślnik pojedynczy znak. Natomiast gwiazdka * nie jest prawidłowym wildcardem w operatorze LIKE, więc zapis typu LIKE '*tx*' po prostu nie zadziała tak, jak większość osób intuicyjnie zakłada. To jest częsty błąd u osób, które mieszają składnię SQL z np. wyrażeniami w stylu systemów plików czy niektórych narzędzi linuksowych. Kolejna sprawa to warunki logiczne. W tym poleceniu chodziło o wybranie rekordów, które spełniają oba kryteria jednocześnie: pensja w określonym przedziale i miejsce pracy zawiera „tx”. Użycie operatora OR całkowicie zmienia znaczenie zapytania, bo wtedy wystarczy, że spełniony jest tylko jeden z warunków. W efekcie można by usunąć osoby, które mają odpowiednią pensję, ale w ogóle nie mają „tx” w miejscu pracy, albo odwrotnie – mają „tx” w miejscu pracy, ale zarabiają dużo mniej lub więcej niż zadany zakres. To klasyczny przykład nieprecyzyjnie dobranego spójnika logicznego, który na produkcyjnej bazie może zakończyć się masowym usunięciem nie tych danych, co trzeba. Trzeci problem dotyczy interpretacji zakresu. Operator IN z wartościami (500,1000) nie wybiera przedziału od 500 do 1000, tylko dokładnie dwie wartości: 500 i 1000. To nie ma nic wspólnego z „między 500 a 1000”, więc zadanie nie byłoby zrealizowane. Z drugiej strony użycie warunku pensja > 500 AND pensja < 1000 wyklucza wartości graniczne, czyli 500 i 1000, co jest sprzeczne z opisem „nie mniej niż 500 i nie więcej niż 1000”. Z mojego doświadczenia najczęściej takie błędy wynikają z pośpiechu i nieprzeczytania dokładnie treści zadania. Dobra praktyka jest taka, żeby zawsze świadomie decydować, czy zakres ma być domknięty (BETWEEN) czy otwarty (>, <) oraz żeby testować zapytanie w wersji SELECT przed wykonaniem operacji DELETE albo UPDATE. To pozwala od razu zauważyć, że warunki logiczne albo wzorzec LIKE nie działają tak, jak zakładaliśmy w głowie.

Pytanie 30

Wskaż PRAWIDŁOWE stwierdzenie dotyczące polecenia: CREATE TABLE IF NOT EXISTS ADRES(ulica VARCHAR(70) CHARACTER SET utf8);

A. Do tabeli nie można wprowadzać ulic, które zawierają w nazwie polskie znaki
B. Klauzula CHARACTER SET utf8 jest wymagana
C. IF NOT EXISTS jest stosowane opcjonalnie, aby upewnić się, że tabela nie istnieje już w bazie danych
D. Rekordem tabeli nie może być 3 MAJA
W kontekście analizy innych stwierdzeń, warto zauważyć, że nie jest prawdą, iż do tabeli nie można wprowadzać ulic zawierających w nazwie polskie znaki. Typ danych 'VARCHAR' w MySQL z użyciem zestawu znaków 'utf8' pozwala na przechowywanie wielu różnych znaków, w tym polskich. Użycie 'CHARACTER SET utf8' jest zalecane, aby zapewnić, że dane tekstowe będą poprawnie przechowywane i wyświetlane, jednak nie oznacza to, że ogranicza to możliwość użycia takich znaków w nazwach ulic. Klauzula 'CHARACTER SET' nie jest obowiązkowa. Jeśli zostanie pominięta, MySQL użyje domyślnego zestawu znaków dla danej bazy danych, co może być wystarczające w wielu przypadkach. W odniesieniu do stwierdzenia o rekordzie '3 MAJA', tabela może zawierać dowolne wartości, w tym daty, o ile spełniają wymagania typu danych. Zrozumienie tych koncepcji jest istotne, ponieważ niepotrzebne ograniczenia mogą prowadzić do błędów w implementacji oraz zaniżenia elastyczności aplikacji bazodanowych. Typowe błędy myślowe związane z tymi stwierdzeniami często wynikają z braku znajomości specyfikacji MySQL i zasad działania systemów zarządzania bazami danych.

Pytanie 31

Jakie parametry trzeba przekazać do polecenia PHP, aby wprowadzić dane do bazy?

mysqli_query($zm1, $zm2);
A. identyfikator połączenia z bazą danych w $zm1 oraz zapytanie SELECT w $zm2
B. NULL w $zm1, aby baza mogła zapisać tam kod błędu oraz zapytanie SELECT w $zm2
C. identyfikator połączenia z bazą danych w $zm1 oraz zapytanie INSERT INTO w $zm2
D. id wiersza w $zm1 oraz zapytanie INSERT INTO w $zm2
Problem ze zrozumieniem jak należy przekazywać parametry do funkcji mysqli_query może wynikać z niezrozumienia struktury połączenia z bazą danych i operacji jakie można na niej wykonywać. Pierwszy błędny pomysł zakłada użycie zapytania SELECT które służy do pobierania danych a nie ich dodawania. Stąd nie pasuje do kontekstu wstawiania danych. Identyfikator połączenia to kluczowy element oznaczający uchwyt do sesji z bazą a nie id wiersza który w tym kontekście nie ma zastosowania. Próba użycia NULL jako parametru wskazuje na błędne zrozumienie mechanizmów obsługi błędów w PHP. Bazy danych nie zapisują kodów błędów w zmiennej przekazywanej do zapytania. Takie podejście świadczy o braku świadomości jak zarządzać błędami w programowaniu z wykorzystaniem PHP gdzie standardem jest analiza wartości zwracanych przez funkcje i wykorzystanie funkcji takich jak mysqli_error do diagnozowania problemów. W kontekście wstawiania danych do bazy poprawne rozumienie mechanizmu polega na znajomości struktury SQL i obsługi połączeń z bazą co jest fundamentalne dla efektywnej pracy z bazami danych w PHP. Zrozumienie tych koncepcji pozwala na bezpieczne i skuteczne wykonywanie operacji na danych a także na efektywne diagnozowanie i obsługę błędów dzięki czemu aplikacje są bardziej odporne na awarie i ataki zewnętrzne co jest kluczowe dla ich stabilności i bezpieczeństwa.

Pytanie 32

Wśród technik rozwiązywania problemów w przedsiębiorstwie znajdują się: ignorowanie, separacja, arbitraż oraz kompromis. Wskaż metodę, która szczególnie może być niebezpieczna i prowadzić do zaostrzenia konfliktu w firmie?

A. ignorowanie
B. arbitraż
C. separacja
D. kompromis
Wybór arbitrażu, separacji czy kompromisu jako technik rozwiązywania problemów jest często mylny, gdyż wiele osób nie dostrzega ich potencjalnych ograniczeń i ryzyk. Arbitraż, na przykład, może być postrzegany jako skuteczna metoda, ponieważ angażuje bezstronną osobę, która podejmuje decyzję w sprawie sporu. Jednakże, w praktyce, takie podejście może prowadzić do frustracji stron, które czują się wykluczone z procesu podejmowania decyzji, co z kolei może zwiększyć napięcie i niechęć do współpracy w przyszłości. Separacja, czyli fizyczne lub psychiczne oddzielenie stron, natomiast, może prowadzić do dalszego wyobcowania i braku komunikacji, co w dłuższej perspektywie osłabia zespół oraz zdolność do współpracy między działami. Z drugiej strony, kompromis, mimo że wydaje się być zrównoważonym rozwiązaniem, często prowadzi do niepełnego zaspokojenia potrzeb obu stron, co może w przyszłości powodować niezadowolenie i dalsze konflikty. Zastosowanie tych technik bez wcześniejszej analizy sytuacji oraz zrozumienia ich potencjalnych skutków może prowadzić do poważnych problemów w organizacji, a także do utraty zaufania między członkami zespołu. Dlatego kluczowe jest, aby w procesie rozwiązywania konfliktów opierać się na solidnych podstawach teoretycznych oraz praktycznych, takich jak te opisane w badaniach dotyczących dynamiki grup i zarządzania konfliktami.

Pytanie 33

Czego nie należy robić, aby zabezpieczyć serwer bazy danych przed atakami hakerów?

A. blokowanie portów związanych z bazą danych.
B. używanie skomplikowanych haseł do bazy.
C. aktywacja zapory.
D. defragmentacja dysków.
Włączenie zapory sieciowej jest istotnym krokiem w zabezpieczaniu serwera bazy danych. Zapora działa jako filtr, który kontroluje ruch przychodzący i wychodzący, blokując potencjalnie szkodliwe połączenia, co jest kluczowe w kontekście ochrony przed atakami DDoS oraz nieautoryzowanym dostępem. Ponadto stosowanie złożonych haseł jest fundamentalnym elementem bezpieczeństwa, jako że proste hasła mogą być łatwo złamane przez ataki typu brute-force. Wdrożenie polityki silnych haseł, które zawierają kombinacje liter, cyfr oraz symboli, znacząco zwiększa poziom ochrony dostępu do bazy danych. Blokowanie portów to kolejna ważna praktyka; poprzez zamykanie portów, które nie są używane przez serwer bazy danych, znacznie ograniczamy możliwości ataków, ponieważ wiele złośliwych działań opiera się na próbie skanowania otwartych portów w celu znalezienia luk w zabezpieczeniach. Zrozumienie tych aspektów jest kluczowe dla wszystkich administratorów baz danych, którzy muszą dbać o integralność i bezpieczeństwo danych. Ignorowanie tych praktyk w imię nieistotnych działań, takich jak defragmentacja, może prowadzić do poważnych naruszeń bezpieczeństwa, co podkreśla znaczenie stosowania znanych i sprawdzonych metod ochrony w środowisku IT.

Pytanie 34

W tabeli mieszkancy, która zawiera pola id, imie, nazwisko, ulica, numer oraz czynsz (kwota całkowita), należy uzyskać informacje o osobach zamieszkujących ulicę Mickiewicza pod numerami 71, 72, 80, których czynsz nie przekracza 1000 zł. Klauzula WHERE w zapytaniu powinna wyglądać następująco

A. WHERE ulica = 'Mickiewicza' AND numer IN (71, 72, 80) OR czynsz < 1000
B. WHERE ulica = 'Mickiewicza' AND numer IN (71, 72, 80) AND czynsz < 1000
C. WHERE ulica = 'Mickiewicza' OR numer IN (71, 72, 80) OR czynsz < 1000
D. WHERE ulica = 'Mickiewicza' AND numer > 70 AND numer < 81 OR czynsz < 1000
Jak patrzę na twoje odpowiedzi, to widzę, że główny problem leży w tym, jak używasz operatorów logicznych i jak stawiasz warunki. W pierwszej próbie, zastosowanie OR, czyli 'ulica = 'Mickiewicza' OR numer IN (71, 72, 80) OR czynsz < 1000', prowadzi do tego, że dostaniesz dane wszystkich mieszkańców, nawet tych z innych ulic, co zupełnie nie jest tym, czego szukamy. W drugiej opcji, klauzula 'numer > 70 AND numer < 81' znowu nie daje ci dokładnych numerów mieszkań, bo może zwrócić wyniki spoza naszego zakresu. Trzecia wersja też nie wychodzi najlepiej, bo łączy operator OR i przez to dostajesz dane o czynszu poniżej 1000 zł, niezależnie od lokalizacji. Kluczowy błąd w zrozumieniu SQL polega na tym, że AND i OR różnią się w swoich zastosowaniach i wpływają na końcowy wynik. Ogólnie, lepiej starannie przemyśleć zapytania SQL i testować je na małych zbiorach danych, żeby nie wpaść w pułapki.

Pytanie 35

Przedstawiony kod PHP nawiązuje połączenie z serwerem bazy danych. Jakiego typu operacje powinny się znaleźć w instrukcji warunkowej w miejscu trzech kropek?

$db = mysqli_connect("localhost", "root", "qwerty", "baza1");
if (!$db) {
...
}
A. Obsługa błędu przy nawiązywaniu połączenia
B. Przetwarzanie danych uzyskanych z bazy
C. Informacja o pomyślnym nawiązaniu połączenia z bazą
D. Zamknięcie połączenia z bazą danych
Zamknięcie bazy danych w kontekście nawiązywania połączenia z bazą danych nie ma sensu, ponieważ w momencie, gdy kod wykonuje sprawdzenie połączenia, to takie połączenie nie zostało jeszcze nawiązane. Próba zamknięcia niezainicjowanego połączenia nie tylko nie przyniesie żadnego efektu, ale także może prowadzić do mylnych wniosków dotyczących kodu. Ponadto, zachowanie takie może wprowadzać w błąd, sugerując, że operacje na bazie danych mogłyby być przeprowadzone w tym momencie, co jest nieprawdziwe. Obsługa danych pobranych z bazy również nie jest właściwym podejściem w momencie, gdy połączenie nie zostało jeszcze ustanowione - przed przetwarzaniem jakichkolwiek danych, najpierw musimy upewnić się, że połączenie jest aktywne. Natomiast komunikat o pomyślnym połączeniu z bazą nie powinien być używany w instrukcji warunkowej, gdyż działa on na zasadzie potwierdzenia, a nie na detekcji błędów. Ważne jest, aby zrozumieć, że każda z tych odpowiedzi nie odpowiada na istotę problemu - w przypadku problemów z połączeniem zwłaszcza w aplikacjach produkcyjnych, brak odpowiedniego komunikatu o błędzie może prowadzić do poważnych trudności w diagnozowaniu i naprawie problemów, co może wpływać na całkowitą funkcjonalność systemu oraz jego niezawodność.

Pytanie 36

Jakie są wyniki wykonania zapytania SQL?

SELECT count(*) FROM Uczniowie WHERE srednia=5;
A. łączna liczba uczniów
B. ilość uczniów, których średnia ocen wynosi 5
C. średnia wszystkich ocen uczniów
D. suma ocen uczniów z średnią 5
Zapytanie SQL używa funkcji COUNT aby policzyć liczbę rekordów w tabeli Uczniowie spełniających warunek srednia=5 Klauzula WHERE ogranicza zestaw zliczanych rekordów do tych gdzie średnia ocen ucznia wynosi dokładnie 5 W efekcie wynik zapytania odpowiada liczbie uczniów mających średnią ocen równą 5 Takie podejście jest powszechnie stosowane w analizie danych gdzie wymagane jest określenie liczby jednostek spełniających konkretne kryteria Zastosowanie COUNT w połączeniu z WHERE umożliwia precyzyjną kontrolę nad analizowanym zbiorem danych co jest standardem w wielu systemach bazodanowych Praktyczne zastosowanie tej techniki można spotkać w raportowaniu wyników nauczania generowaniu statystyk czy w analizach biznesowych gdzie kluczowe jest zrozumienie struktury i charakterystyki danych Zapytanie to ilustruje dobrą praktykę pracy z bazami danych polegającą na efektywnym i precyzyjnym formułowaniu zapytań w celu uzyskania wartościowych i precyzyjnych informacji

Pytanie 37

Wskaż właściwą zasadę związaną z integralnością danych w bazie danych?

A. pole klucza obcego nie może być puste
B. pole klucza podstawowego musi mieć utworzony indeks
C. w relacji 1..n pole klucza obcego łączy się z polem klucza obcego innej tabeli
D. pole klucza podstawowego nie może pozostawać puste
Niepoprawne odpowiedzi wskazują na niewłaściwe zrozumienie zasad spójności danych w kontekście relacyjnych baz danych. Pole klucza obcego, które powinno być używane do tworzenia powiązań między różnymi tabelami, może być puste w przypadku, gdy dany rekord nie odnosi się do innego. Na przykład, w systemie zarządzania zamówieniami, pole klucza obcego, które łączy tabelę zamówień z tabelą klientów, może być puste, jeśli zamówienie jest anonimowe lub tymczasowe. Istotne jest, aby zrozumieć, że klucz obcy nie zawsze musi wskazywać na obiekt zależny, co pozwala na większą elastyczność w projektowaniu bazy danych. Odpowiedzi, które sugerują, że klucz podstawowy musi mieć utworzony indeks lub że w relacji 1..n klucz obcy jest połączony z kluczem obcym innej tabeli, również są mylne. Indeksowanie klucza podstawowego jest praktyką zalecaną, ale nie jest to obowiązkowe z punktu widzenia definicji klucza. Klucz obcy jest używany do ustanawiania relacji i nie musi być połączony z innym kluczem obcym, a może wskazywać tylko na klucz podstawowy innej tabeli. Te nieporozumienia mogą prowadzić do błędnego projektowania bazy danych, co w dłuższej perspektywie wpływa na wydajność, integralność oraz bezpieczeństwo danych.

Pytanie 38

W tabeli zwierzeta znajdują się pola: nazwa, gatunek, gromada, cechy oraz dlugosc_zycia. Aby uzyskać listę nazw zwierząt, które dożywają przynajmniej 20 lat i są ssakami, należy wykonać zapytanie:

A. SELECT nazwa FROM zwierzeta WHERE dlugosc_zycia >=20;
B. SELECT nazwa FROM zwierzeta WHERE gromada = 'ssak';
C. SELECT nazwa FROM zwierzeta WHERE dlugosc_zycia >=20 OR gromada = 'ssak';
D. SELECT nazwa FROM zwierzeta WHERE dlugosc_zycia >=20 AND gromada = 'ssak';
Twoja odpowiedź jest jak najbardziej na miejscu, bo spełnia te dwa ważne wymagania z pytania: pokazuje nazwy zwierząt, które żyją przynajmniej 20 lat i są ssakami. Użycie AND w klauzuli WHERE sprawia, że w wynikach są tylko te zwierzęta, które pasują do obu kryteriów. To zapytanie ma swoje zastosowanie, na przykład w analizach zoologicznych, gdzie długość życia niektórych gatunków ssaków może być kluczowa, zwłaszcza w kontekście ochrony i badań nad ich ekologią. Z osobistego doświadczenia mogę powiedzieć, że dobrze jest stosować takie zapytania w bazach danych, bo to zapewnia lepszą efektywność i wydajność w przetwarzaniu danych. Generalnie w tworzeniu zapytań SQL warto zawsze ustalać konkretne warunki w klauzuli WHERE, żeby uniknąć niechcianych wyników i zmniejszyć obciążenie bazy danych.

Pytanie 39

Jakie zapytanie SQL należy użyć, aby zmienić strukturę już istniejącej tabeli?

A. INSERT INTO
B. CREATE TABLE
C. ALTER TABLE
D. UPDATE
Odpowiedź 'ALTER TABLE' jest poprawna, ponieważ to polecenie SQL służy do modyfikacji struktury istniejącej tabeli w bazie danych. Dzięki 'ALTER TABLE' możemy dodawać nowe kolumny, modyfikować istniejące kolumny (np. zmieniając ich typ danych czy nazwę), a także usuwać kolumny, które nie są już potrzebne. Przykładowe zastosowanie polecenia to dodanie nowej kolumny do tabeli pracowników: 'ALTER TABLE pracownicy ADD COLUMN wiek INT;'. Ponadto, 'ALTER TABLE' pozwala na wprowadzanie ograniczeń, takich jak klucze obce czy unikalności, co jest kluczowe w kontekście integracji danych i zapewnienia ich spójności. W praktyce, odpowiednie zarządzanie strukturą tabel jest fundamentalnym aspektem utrzymania bazy danych w dobrej kondycji. Należy pamiętać, aby stosować te zmiany zgodnie z najlepszymi praktykami, takimi jak testowanie zapytań w środowisku deweloperskim przed ich wdrożeniem w produkcji, co minimalizuje ryzyko błędów i strat danych.

Pytanie 40

Rezultatem wykonania podanego zapytania SQL jest

SELECT count(*) FROM Uczniowie WHERE srednia = 5;
A. Całkowita liczba uczniów.
B. Suma ocen uczniów, których średnia ocen wynosi 5.
C. Liczba uczniów, którzy mają średnią ocen równą 5.
D. Średnia ocen wszystkich uczniów.
Ogólne zrozumienie działania zapytań SQL wymaga znajomości podstawowych funkcji agregujących oraz sposobu filtrowania danych za pomocą klauzuli `WHERE`. W tym przypadku zapytanie używa funkcji `COUNT(*)`, która służy do zliczania wszystkich wierszy spełniających określone kryteria. Kryterium w klauzuli `WHERE` to `srednia = 5`, co oznacza, że tylko uczniowie z średnią ocen równą 5 będą brani pod uwagę. Powszechnym błędem jest mylenie funkcji agregujących, takich jak `SUM()` i `COUNT()`. `COUNT()` zwraca liczbę wierszy, podczas gdy `SUM()` zwraca sumę wartości w określonej kolumnie. Dlatego odpowiedź mówiąca o sumie ocen jest niepoprawna, ponieważ zapytanie nie używa `SUM()`. Również odpowiedź dotycząca średniej ocen wszystkich uczniów jest błędna, ponieważ zapytanie nie używa `AVG()`, które oblicza średnią wartości. Zrozumienie tych różnic jest kluczowe dla poprawnego formułowania zapytań i interpretacji wyników w SQL, co jest fundamentalne w analizie danych.