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: 16 kwietnia 2026 09:04
  • Data zakończenia: 16 kwietnia 2026 09:36

Egzamin zdany!

Wynik: 34/40 punktów (85,0%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Aby stworzyć relację typu jeden do wielu, w tabeli reprezentującej stronę "wiele", konieczne jest zdefiniowanie

A. klucza sztucznego odnoszącego się do kluczy podstawowych obu tabel
B. klucza obcego wskazującego na klucz podstawowy tabeli reprezentującej stronę "jeden"
C. klucza obcego odnoszącego się do klucza obcego tabeli reprezentującej stronę "jeden"
D. klucza podstawowego odnoszącego się do klucza podstawowego tabeli po stronie "jeden"
Aby utworzyć relację jeden do wielu w bazach danych, kluczowym elementem jest właściwe zdefiniowanie klucza obcego. Klucz obcy w tabeli po stronie 'wiele' musi wskazywać na klucz podstawowy tabeli po stronie 'jeden'. Taki układ pozwala na powiązanie wielu rekordów z jednego tabeli z jednym rekordem w drugiej tabeli. Na przykład, w systemie zarządzania zamówieniami, tabela 'Klienci' może mieć klucz podstawowy 'ID_Klienta', podczas gdy tabela 'Zamówienia' może mieć klucz obcy 'ID_Klienta', który odnosi się do 'ID_Klienta' w tabeli 'Klienci'. Dzięki temu jedno ID klienta może być powiązane z wieloma zamówieniami. W praktyce, implementacja relacji jeden do wielu jest niezwykle przydatna w normalizacji bazy danych, co pomaga zminimalizować redundancję i poprawić integralność danych. Zgodnie z normami ACID, takie powiązania zapewniają, że operacje na danych są atomowe, spójne, izolowane i trwałe, co jest kluczowe dla niezawodności baz danych.

Pytanie 2

Sklep online używa tabeli faktury. W trakcie generowania faktury pole dataPlatnosci nie zawsze zostaje uzupełnione. Aby to skorygować, na zakończenie dnia trzeba wpisać bieżącą datę do rekordów, w których to pole nie jest wypełnione. Można to osiągnąć za pomocą kwerendy

A. UPDATE faktury SET dataPlatnosci=CURTIME() WHERE dataPlatnosci IS NOT NULL;
B. UPDATE faktury SET dataPlatnosci=CURDATE() WHERE dataplatnosci = '0000-00-00';
C. UPDATE faktury SET dataPlatnosci=CURDATE() WHERE dataPlatnosci IS NULL;
D. UPDATE faktury SET dataPlatnosci=CURTIME() WHERE id = 3;
Wybór innych opcji jest nieco problematyczny. Kwerenda, która ustawia dataPlatnosci na CURTIME() w wierszach, gdzie id = 3, nie jest zbyt sensowna, bo odnosi się tylko do jednego rekordu. Poza tym, CURTIME() zwraca czas, a nie datę, a w kontekście faktur to nie ma sensu, bo powinny mieć datę płatności, a nie tylko czas. Kolejna sprawa to aktualizacja dat w wierszach, gdzie dataPlatnosci IS NOT NULL, co prowadzi do utraty ważnych informacji. Tego typu podejście jest sprzeczne z zasadami ochrony danych i może narobić bałaganu przy audytach. I ostatnia opcja, która ustawia datę na '0000-00-00', to kompletna katastrofa. Takie coś wprowadza błędne dane, które mogą wywołać problemy później. Użycie '0000-00-00' jako znacznika braku daty jest do bani i może prowadzić do nieporozumień. Lepiej używać NULL, bo to standard w SQL. Wybierając złe opcje, nie tylko ograniczasz funkcjonalność, ale także łamiesz zasady dobrego zarządzania danymi.

Pytanie 3

Jakie są określenia typowych komend języka SQL, które dotyczą przeprowadzania operacji na danych SQL DML (np.: dodawanie danych do bazy, usuwanie, modyfikowanie danych)?

A. DELETE, INSERT, UPDATE
B. SELECT, SELECT INTO
C. ALTER, CREATE, DROP
D. DENY, GRANT, REVOKE
Odpowiedź DELETE, INSERT, UPDATE jest prawidłowa, ponieważ te polecenia stanowią podstawowe instrukcje języka SQL DML (Data Manipulation Language), które są wykorzystywane do manipulacji danymi w bazie danych. DELETE służy do usuwania rekordów z tabel, co jest niezbędne w sytuacjach, gdy dane są już nieaktualne lub niepotrzebne. INSERT umożliwia dodawanie nowych rekordów, co jest kluczowe w procesie wprowadzania danych, na przykład dodawania nowych klientów do bazy danych. Z kolei UPDATE pozwala na modyfikację już istniejących danych, co jest istotne w przypadku zmiany informacji, takich jak aktualizacja adresu klienta. W praktyce te operacje są niezwykle ważne dla utrzymania spójności i aktualności danych w systemach zarządzania bazami danych. Warto również zauważyć, że stosowanie tych poleceń zgodnie z dobrymi praktykami, takimi jak transakcje, pozwala na zabezpieczenie integralności danych oraz umożliwia łatwe wycofywanie zmian w przypadku błędów.

Pytanie 4

Aby wprowadzić dane do bazy przy użyciu polecenia PHP, konieczne jest przekazanie do jego parametrów

A. identyfikator połączenia z bazą danych w $zm1 i zapytanie INSERT INTO w $zm2
B. id wiersza w $zm1 i zapytanie INSERT INTO w $zm2
C. NULL w $zm1, aby baza mogła zapisać kod błędu i zapytanie SELECT w $zm2
D. identyfikator połączenia z bazą danych w $zm1 i zapytanie SELECT w $zm2
Poprawna odpowiedź wskazuje, że w parametrze $zm1 należy przekazać identyfikator połączenia z bazą danych, a w $zm2 zapytanie INSERT INTO. To podejście jest zgodne z zasadami korzystania z funkcji mysqli_query w PHP, która jest używana do wykonywania zapytań SQL na bazie danych. Identyfikator połączenia jest niezbędny, ponieważ pozwala PHP zidentyfikować, z którą bazą danych będzie nawiązywało interakcję. Zapytanie INSERT INTO umożliwia dodawanie nowych rekordów do określonej tabeli. Na przykład, jeśli chcemy dodać nowego użytkownika do tabeli 'users', możemy użyć polecenia: mysqli_query($connection, "INSERT INTO users (name, email) VALUES ('Jan Kowalski', '[email protected]')"). Przestrzeganie tych zasad jest zgodne z praktykami bezpieczeństwa, takimi jak unikanie SQL Injection, które można osiągnąć poprzez odpowiednie przygotowywanie zapytań oraz walidację danych przed ich wstawieniem.

Pytanie 5

Używając komendy BACKUP LOG w MS SQL Server, można

A. odczytać komunikaty generowane podczas tworzenia kopii
B. zrealizować pełną kopię zapasową
C. zalogować się do kopii zapasowej
D. wykonać kopię zapasową dziennika transakcyjnego
Polecenie BACKUP LOG w MS SQL Server służy do wykonywania kopii zapasowej dziennika transakcyjnego, co jest kluczowe dla zapewnienia integralności danych w bazach danych transakcyjnych. Dziennik transakcyjny rejestruje wszystkie zmiany dokonane w bazie, co pozwala na odtworzenie stanu bazy na dany moment oraz na przywrócenie bazy do stanu sprzed awarii. Wykonując kopię zapasową dziennika transakcyjnego, użytkownicy mogą minimalizować ryzyko utraty danych, ponieważ pozwala to na przywrócenie bazy do najnowszego stanu przed wystąpieniem awarii. W praktyce, regularne tworzenie takich kopii jest częścią polityki backupu, która powinna być dostosowana do potrzeb organizacji oraz do intensywności operacji na bazie danych. Ustalając harmonogram kopii zapasowych, należy także brać pod uwagę obciążenie bazy danych oraz wymagania dotyczące RPO (Recovery Point Objective) i RTO (Recovery Time Objective). Według najlepszych praktyk, zaleca się wykonywanie kopii zapasowych dziennika transakcyjnego przynajmniej co kilka godzin, a w środowisku o wysokiej dostępności – nawet co kilka minut.

Pytanie 6

Baza danych szkoły podstawowej dla dzieci w wieku 6 lat obejmuje tabelę szkoła, która zawiera kolumny: imie, nazwisko, klasa. Wszyscy uczniowie w klasach od 1 do 5 przeszli do wyższej klasy. W celu zwiększenia wartości w kolumnie klasa o 1, należy wykonać następujące polecenie

A. UPDATE nazwisko, imie SET klasa = klasa + 1 WHERE klasa>l OR klasa < 5
B. SELECT nazwisko, imie FROM klasa = klasa + 1 WHERE klasa>l OR klasa < 5
C. UPDATE szkoła SET klasa = klasa + 1 WHERE klasa >=1 AND klasa <= 5
D. SELECT szkoła FROM klasa = klasa + 1 WHERE klasa >=1 AND klasa <= 5
Poprawne polecenie to 'UPDATE szkoła SET klasa = klasa + 1 WHERE klasa >=1 AND klasa <= 5;'. To zapytanie aktualizuje wartość w kolumnie 'klasa' dla wszystkich uczniów w tabeli 'szkoła', których aktualny poziom klasy mieści się w zakresie od 1 do 5. Kluczowym elementem jest użycie polecenia UPDATE, które jest standardowym sposobem na modyfikowanie danych w bazach danych SQL. Oznaczenie 'SET klasa = klasa + 1' wskazuje, że chcemy zwiększyć obecną wartość w kolumnie 'klasa' o 1. Warto zwrócić uwagę na warunek WHERE, który filtruje rekordy tak, aby aktualizacja dotyczyła tylko tych uczniów, którzy są w klasach 1-5. Tego rodzaju operacje są powszechnie stosowane w zarządzaniu danymi w aplikacjach edukacyjnych i są zgodne z praktykami bezpieczeństwa i integralności danych, zapewniając, że tylko odpowiednie rekordy są aktualizowane. Przykładem praktycznego zastosowania może być coroczna aktualizacja klas uczniów po zakończeniu roku szkolnego.

Pytanie 7

Na podstawie tabeli Towar wykonano poniższe zapytanie SQL. Jaki będzie rezultat tej operacji?

SELECT nazwa_towaru
FROM`Towar`
WHERE cena_katalogowa<65
ORDER BY waga DESC
IDnazwa_towarucena_katalogowawagakolor
1Papier ksero A4112.3biel
2Zeszyt A54.20.13wielokolorowy
3Zeszyt A5 w linie3.50.12niebieski
4Kredki 24 kolory90.3wielokolorowy
5Plecak szkolny65.51.3zielony
A. Papier ksero A4, Kredki 24 kolory, Zeszyt A5, Zeszyt A5 w linie
B. Zeszyt A5, Zeszyt A5 w linie, Kredki 24 kolory, Papier ksero A4
C. Zeszyt A5 w linie, Zeszyt A5, Kredki 24 kolory, Papier ksero A4
D. Papier ksero A4, Kredki 24 kolory, Zeszyt A5 w linie, Zeszyt A5
Twoja odpowiedź jest trafiona, bo zapytanie SQL jasno pokazuje, jakie warunki muszą być spełnione, żeby dany towar pojawił się w wynikach. Klauzula WHERE filtruje produkty z ceną katalogową poniżej 65. To znaczy, że plecak szkolny za 65.5 nie przechodzi tego kryterium i nie będzie w wynikach. Potem, klauzula ORDER BY sortuje towar według wagi od najcięższego do najlżejszego. Dlatego na liście znajdą się tak jakby Papier ksero A4, Kredki 24 kolory, Zeszyt A5, a potem Zeszyt A5 w linie. To naprawdę fajna struktura zapytania SQL, bo pozwala na szybkie i skuteczne uzyskanie uporządkowanej listy produktów, które spełniają określone warunki. W sumie, to standardowa praktyka w analizie danych i zarządzaniu bazami danych.

Pytanie 8

W tabeli o nazwie pracownicy zdefiniowano klucz główny w typie INTEGER z atrybutami NOT NULL oraz AUTO_INCREMENT. Dodatkowo zdefiniowane zostały pola imie oraz nazwisko. W przypadku wykonania podanej kwerendy SQL, która dodaje dane i pomija pole klucza, w bazie danych MySQL nastąpi

INSERT INTO pracownicy (imie, nazwisko)
VALUES ('Anna', 'Nowak');
A. zignorowanie polecenia, tabela nie ulegnie zmianie
B. dodanie rekordu do tabeli, dla klucza głównego zostanie przypisana wartość NULL
C. błąd związany z niewłaściwą liczbą pól
D. dodanie rekordu do tabeli, dla klucza głównego zostanie przypisana kolejna wartość naturalna
W przypadku tabeli z kluczem głównym typu INTEGER z atrybutem AUTO_INCREMENT, kiedy wprowadzamy nowy rekord i pomijamy pole klucza głównego, baza danych MySQL sama automatycznie przydziela kolejną wartość liczbową dla tego pola. AUTO_INCREMENT to mechanizm, który zapewnia, że każdemu nowemu rekordowi przypisana jest unikalna wartość klucza głównego, zaczynając od wartości początkowej, zwykle 1, i zwiększając ją o 1 z każdym nowym rekordem. Jest to niezwykle użyteczne w sytuacjach, gdy zależy nam na unikalności wartości kluczy głównych, co zapewnia integralność danych i unika konieczności ręcznego określania wartości klucza przy każdym nowym wpisie. Takie podejście jest zgodne ze standardami dobrych praktyk, ponieważ minimalizuje ryzyko błędów związanych z duplikacją danych. Przykładowo, jeśli do tabeli pracownicy dodajemy rekord z danymi pracownika, nie musimy się martwić o wartość identyfikatora, co znacznie upraszcza proces zarządzania danymi. Mechanizm AUTO_INCREMENT jest zatem kluczowy w kontekście zarządzania bazami danych, zapewniając automatyzację i integralność danych.

Pytanie 9

Jaką funkcję SQL można uznać za nieprzyjmującą argumentów?

A. upper
B. len
C. now
D. year
Funkcja 'now' w SQL jest funkcją systemową, która nie wymaga żadnych argumentów, a jej zadaniem jest zwracanie aktualnej daty i godziny w formacie, który jest zgodny z ustawieniami serwera baz danych. Użycie tej funkcji jest szczególnie przydatne w zadaniach związanych z rejestrowaniem daty utworzenia lub ostatniej modyfikacji rekordów w bazie danych. Przykładem zastosowania może być kwerenda, która wstawia nowy rekord do tabeli, a data utworzenia jest automatycznie ustawiana na bieżący czas: 'INSERT INTO tabela (nazwa, data_utworzenia) VALUES ('Przykład', now());'. Ponadto, w wielu systemach baz danych, takich jak MySQL czy PostgreSQL, funkcje takie jak 'now()' są standardem, co oznacza ich szerokie zastosowanie i zgodność w różnych aplikacjach. Dbanie o automatyczne aktualizowanie znaczników czasowych w bazach danych przy użyciu tej funkcji jest zgodne z najlepszymi praktykami w zakresie zarządzania danymi.

Pytanie 10

Jednym z kluczowych identyfikatorów wpisu w bazie danych jest pole

A. relacji
B. klucza podstawowego
C. klucza obcego
D. numeryczne
Klucz podstawowy jest fundamentalnym elementem każdej relacyjnej bazy danych, ponieważ jednoznacznie identyfikuje każdy rekord w tabeli. Jego główną cechą jest unikalność, co oznacza, że żaden z rekordów w tabeli nie może mieć tego samego klucza podstawowego. Klucz podstawowy może składać się z jednego lub więcej atrybutów (kolumn), ale zawsze musi zapewniać jednoznaczność identyfikacji. Przykładem może być tabela 'Użytkownicy', gdzie 'ID_Użytkownika' działa jako klucz podstawowy, pozwalając na łatwe i szybkie wyszukiwanie konkretnych użytkowników. Zgodnie z najlepszymi praktykami projektowania baz danych, klucze podstawowe powinny być stabilne i niezmienne w czasie, aby uniknąć komplikacji związanych z aktualizacją wartości. Klucz podstawowy jest również kluczowy dla relacji między tabelami, ponieważ inne tabele mogą odwoływać się do niego poprzez klucze obce. Dzięki temu, struktura bazy danych staje się bardziej zorganizowana i lepiej znormalizowana, co z kolei prowadzi do zwiększonej wydajności i integralności danych.

Pytanie 11

Jaki System Zarządzania Bazą Danych jest standardowo używany w pakiecie XAMPP?

A. Oracle
B. MariaDB
C. PostgreSQL
D. Firebird
MariaDB jest systemem zarządzania bazą danych, który jest domyślnie stosowany w pakiecie XAMPP. Jest to otwarty, wieloplatformowy system, będący fork'iem MySQL, co oznacza, że zachowuje wiele z jego funkcjonalności, a jednocześnie wprowadza nowe cechy oraz poprawki. Dzięki temu, MariaDB zyskuje na wydajności i bezpieczeństwie w porównaniu do MySQL. Użytkownicy XAMPP mogą korzystać z MariaDB do lokalnego rozwoju aplikacji webowych, co pozwala na testowanie i debugowanie przed wdrożeniem na serwerze produkcyjnym. Przykładowe zastosowania to budowa dynamicznych stron internetowych, systemów e-commerce czy aplikacji do zarządzania treścią. Standardowe praktyki obejmują tworzenie kopii zapasowych, optymalizację zapytań oraz zapewnienie bezpieczeństwa danych poprzez odpowiednie konfiguracje oraz aktualizacje. MariaDB jest zgodna z SQL, co umożliwia łatwe przejście z MySQL oraz integrację z popularnymi frameworkami i CMS-ami takimi jak WordPress czy Joomla.

Pytanie 12

W bazach danych typ DECIMAL jest przeznaczony do przechowywania

A. liczb rzeczywistych stałoprzecinkowych.
B. liczb rzeczywistych zmiennoprzecinkowych.
C. liczb zapisanych w systemie binarnym.
D. danych napisowych o określonej długości.
Poprawnie – typ DECIMAL w bazach danych jest przeznaczony do przechowywania liczb rzeczywistych stałoprzecinkowych, czyli takich, gdzie liczba miejsc po przecinku jest z góry określona i zawsze dokładnie reprezentowana. W definicji kolumny podajemy zwykle dwa parametry, np. DECIMAL(10,2), gdzie 10 to całkowita liczba cyfr, a 2 to liczba cyfr po przecinku. Dzięki temu baza wie, że np. wartość 1234,50 będzie przechowywana bez zaokrągleń binarnych, które występują w typach zmiennoprzecinkowych (FLOAT, DOUBLE). To jest kluczowe w zastosowaniach finansowych: kwoty pieniędzy, stawki VAT, kursy walut, limity kredytowe, rozliczenia magazynowe. W takich miejscach nawet jeden grosz różnicy przy dużej liczbie operacji potrafi narobić bałaganu. Moim zdaniem w projektach produkcyjnych dobra praktyka jest taka, że wszystko, co ma sens biznesowy jako „kwota”, „saldo”, „cena jednostkowa”, „rabat procentowy z dokładnością do dwóch lub czterech miejsc” trzymamy właśnie w DECIMAL/NUMERIC, a nie w FLOAT. Standard SQL definiuje typy DECIMAL i NUMERIC jako typy dokładne (exact numeric), co oznacza, że operacje arytmetyczne na nich są przewidywalne i nie generują dziwnych ogonków typu 1.199999999 zamiast 1.2. W wielu silnikach (MySQL, PostgreSQL, SQL Server) DECIMAL jest implementowany wewnętrznie jako zapis dziesiętny, często podobny do „dużej liczby całkowitej” z wirtualnym przecinkiem w określonym miejscu. Dobrą praktyką jest też dobór precyzji z zapasem, np. DECIMAL(18,4) dla kwot w systemach księgowych, żeby uniknąć przepełnień przy większych sumach. W praktyce webowej, gdy aplikacja PHP czy JavaScript komunikuje się z bazą, to właśnie typ DECIMAL pozwala zachować spójność między tym, co widzi użytkownik na formularzu, a tym, co finalnie zapisuje się w tabeli – bez ukrytych błędów zaokrągleń.

Pytanie 13

Baza danych 6-letniej szkoły podstawowej zawiera tabelę uczniowie z kolumnami: imie, nazwisko, klasa. Wszyscy uczniowie w klasach 1 - 5 zaliczyli do następnej klasy. Aby zwiększyć wartość w kolumnie klasa o 1, należy wykorzystać następujące polecenie

A. UPDATE uczniowie SET klasa=klasa+1 WHERE klasa>=1 AND klasa<=5;
B. SELECT uczniowie FROM klasa=klasa+1 WHERE klasa>=1 AND klasa<=5;
C. UPDATE nazwisko, imie SET klasa=klasa+1 WHERE klasa>1 OR klasa<5;
D. SELECT nazwisko, imie FROM klasa=klasa+1 WHERE klasa>1 OR klasa<5;
Poprawna odpowiedź to 'UPDATE szkola SET klasa=klasa+1 WHERE klasa>=1 AND klasa<=5;'. To polecenie SQL jest zgodne z praktykami stosowanymi do aktualizacji danych w bazach danych. Funkcja UPDATE służy do modyfikacji istniejących rekordów w tabeli. W tym przypadku chcemy zwiększyć wartość w kolumnie 'klasa' dla wszystkich uczniów, którzy są obecnie w klasach od 1 do 5. Warunek 'WHERE klasa>=1 AND klasa<=5' zapewnia, że tylko uczniowie z tych klas zostaną zaktualizowani, co jest zgodne z logiką biznesową wskazującą, że wszyscy uczniowie klas 1-5 zdali do następnej klasy. Dzięki temu mamy pewność, że operacja jest przeprowadzana w bezpieczny sposób, minimalizując ryzyko błędów w danych. W praktyce, takie operacje są często stosowane, np. na koniec roku szkolnego, gdy uczniowie przechodzą do wyższej klasy. Ponadto, w kontekście najlepszych praktyk, ważne jest, aby przed wykonaniem operacji UPDATE przeprowadzić odpowiednie zabezpieczenia, takie jak tworzenie kopii zapasowych danych, aby uniknąć utraty informacji.

Pytanie 14

Kwerenda

ALTER TABLE artykuly MODIFY cena float;
ma na celu dokonanie zmian w tabeli artykuly.
A. zmienić typ kolumny cena na float
B. zmienić nazwę kolumny cena na float
C. dodać kolumnę o nazwie cena z typem float, jeżeli jeszcze nie istnieje
D. usunąć kolumnę o nazwie cena typu float
Twoja odpowiedź o zmianie typu na float dla kolumny cena jest całkiem na miejscu! W pracy z bazami danych ważne jest, żeby odpowiednio zarządzać typami danych w tabelach. Typ float to coś, co często wykorzystuje się do przechowywania wartości liczbowych, które mają część dziesiętną. To istotne przy cenach, które często muszą być dokładnie przedstawione, na przykład do dwóch miejsc po przecinku. Wspomniana kwerenda ALTER TABLE to świetne narzędzie do zmiany struktury tabeli, i to jest zgodne z dobrymi praktykami zarządzania bazami, zwłaszcza z zasadą elastyczności. Dzięki temu można dostosować tabelę do zmieniających się potrzeb bez potrzeby przebudowy całej bazy. Wiesz, takie operacje są dość typowe, ale trzeba uważać, by nie stracić danych czy mieć jakieś niezgodności. Dlatego zawsze warto zrobić kopię zapasową i testować zmiany w środowisku testowym. Zrozumienie takich operacji pomoże ci w lepszym zarządzaniu bazami danych i ich optymalizacji.

Pytanie 15

GRANT CREATE, ALTER ON sklep.* TO adam; Zakładając, że użytkownik adam nie dysponował wcześniej żadnymi uprawnieniami, to polecenie SQL przyzna mu prawa jedynie do

A. tworzenia oraz modyfikacji struktury wszystkich tabel w bazie sklep
B. tworzenia oraz modyfikacji struktury w tabeli sklep
C. wstawiania oraz modyfikacji danych we wszystkich tabelach bazy sklep
D. wstawiania oraz modyfikacji danych w tabeli sklep
Polecenie SQL 'GRANT CREATE, ALTER ON sklep.* TO adam;' przyznaje użytkownikowi adam prawa do tworzenia i modyfikowania struktury wszystkich tabel w bazie danych o nazwie 'sklep'. W kontekście zarządzania bazami danych, przyznawanie takich uprawnień jest kluczowe dla realizacji zadań związanych z projektowaniem i rozbudową bazy. Przykładowo, gdyby adam potrzebował dodać nową kolumnę do istniejącej tabeli lub utworzyć nową tabelę, mógłby to zrobić dzięki tym prawom. Z perspektywy bezpieczeństwa, nadawanie takich uprawnień powinna być starannie przemyślane, aby uniknąć nieautoryzowanych zmian w strukturze bazy. W praktyce, w sytuacjach, gdy wiele osób współpracuje nad projektem, zaleca się przyznawanie minimalnych uprawnień, które są niezbędne do wykonania określonych zadań. W związku z tym, wykorzystanie polecenia GRANT w sposób odpowiadający wymaganiom projektu jest najlepszą praktyką w zakresie administracji bazami danych.

Pytanie 16

Który typ danych SQL należy użyć, jako optymalny, do zapisania numeru PESEL?

A. CHAR(11)
B. FLOAT(11)
C. BLOB
D. TINYINT
Poprawny wybór to CHAR(11), ponieważ numer PESEL nie jest liczbą w sensie matematycznym, tylko identyfikatorem tekstowym złożonym z 11 znaków. W praktyce nigdy nie wykonujemy na PESEL‑u operacji arytmetycznych (dodawanie, odejmowanie, mnożenie), więc trzymanie go w typie numerycznym nie ma sensu i zwykle tylko komplikuje życie. Z punktu widzenia projektowania baz danych przyjmuje się dobrą praktykę: wszystkie identyfikatory, które mają stałą długość i mogą zaczynać się od zera, zapisujemy w typie znakowym o stałej długości, czyli właśnie CHAR(n). Dzięki CHAR(11) mamy gwarancję, że w każdej komórce kolumny PESEL będzie dokładnie 11 znaków. Silnik bazy danych może to łatwo sprawdzić, co pomaga w walidacji danych i porządku w tabeli. Nie zgubią się też zera wiodące, które przy typach liczbowych potrafią zniknąć. Moim zdaniem, szczególnie w systemach produkcyjnych (np. system kadrowy, rejestr pacjentów, e‑sklep z weryfikacją danych klienta), taki zapis jest po prostu najbezpieczniejszy i najbardziej przewidywalny. W wielu firmowych standardach programistycznych jest wręcz zapisane wprost: PESEL, NIP, REGON, numery dokumentów, numery kart, kody pocztowe – zawsze trzymamy jako CHAR/VARCHAR, a nie jako INT czy inne typy numeryczne. Dodatkowo CHAR(11) jest efektywny wydajnościowo dla stałej długości: porównywanie, indeksowanie, sortowanie takiej kolumny jest proste dla silnika SQL. W razie potrzeby możesz też na takim polu założyć indeks unikalny (UNIQUE), żeby baza nie dopuściła do wprowadzenia dwóch takich samych PESEL‑i. To jest właśnie praktyczne połączenie typów danych z zasadami integralności i jakości danych, których oczekuje się w prawidłowo zaprojektowanych bazach.

Pytanie 17

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

A. CREATE INTO
B. INSERT INTO
C. CREATE ROW
D. SELECT ROW
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 18

Efektem wykonania kwerendy dla przedstawionej tabeli rezerwacje jest

SELECT sezon, SUM(liczba_dn) FROM rezerwacje
GROUP BY sezon;

id_pokliczba_dnsezon
110lato
24zima
15lato
26zima
15lato
39zima
18zima
A. lato 3, zima 4
B. lato 20, zima 27
C. lato 10, 5, 5; zima 4, 6, 9, 8
D. lato 10, zima 4, lato 5, zima 6, lato 5, zima 9, zima 8
Dobrze, że wybrałeś odpowiedź 'lato 20, zima 27'. Jest to poprawne rozwiązanie, ponieważ zapytanie SQL, które wykonujemy na tabeli rezerwacje, grupuje wyniki według sezonu i sumuje liczbę dni dla każdego sezonu. W praktyce, jeżeli mamy tabelę z danymi o rezerwacjach na różne sezony i chcemy zrozumieć, ile łącznie dni zostało zarezerwowanych dla każdego sezonu, musimy użyć takiego zapytania. W tym przypadku, suma dni dla sezonu 'lato' wynosi 20, a dla sezonu 'zima' - 27. Wiedza ta jest niezwykle przydatna, gdy na przykład chcemy zaplanować ilość dostępnych miejsc w hotelu na kolejne sezony, biorąc pod uwagę historię rezerwacji. Zwróć uwagę, że korzystanie z funkcji agregujących jak SUM w SQL jest kluczowe dla przeprowadzania analiz danych. Właściwe zrozumienie i stosowanie tych funkcji pozwoli Ci na przeprowadzanie skomplikowanych analiz i przewidywań na podstawie zgromadzonych danych.

Pytanie 19

W bazie danych znajduje się tabela uczniowie z kolumnami: imie, nazwisko, klasa. Jakie polecenie SQL należy wykorzystać, aby znaleźć imiona oraz nazwiska uczniów, których nazwiska zaczynają się na literę M?

A. SELECT nazwisko, imie FROM uczniowie ORDER BY nazwisko IN 'M%';
B. SELECT nazwisko, imie FROM uczniowie WHERE nazwisko IN 'M%';
C. SELECT nazwisko, imie FROM uczniowie ORDER BY nazwisko = 'M%';
D. SELECT nazwisko, imie FROM uczniowie WHERE nazwisko LIKE 'M%';
Wybrana odpowiedź jest poprawna, ponieważ używa operatora LIKE, który jest standardowym rozwiązaniem w SQL do wyszukiwania wzorców w danych. W tym przypadku 'M%' oznacza, że chcemy znaleźć wszystkie nazwiska, które zaczynają się na literę M. Operator LIKE jest szczególnie przydatny w sytuacjach, gdy potrzebujemy elastycznego wyszukiwania, umożliwiającego zastosowanie symboli wieloznacznych, takich jak '%' oznaczający dowolną liczbę znaków. Przykład zastosowania tego zapytania może obejmować generowanie listy uczniów dla nauczycieli, którzy chcą szybko zobaczyć wszystkich uczniów z nazwiskiem zaczynającym się na M, co może być przydatne przy organizowaniu wydarzeń czy klas. Dobrą praktyką jest także używanie odpowiednich indeksów w bazie danych, co może znacznie przyspieszyć wykonanie zapytań, zwłaszcza w dużych zbiorach danych. Znajomość operatorów SQL i ich zastosowań, jak również umiejętność formułowania zapytań, jest kluczowa w pracy z relacyjnymi bazami danych.

Pytanie 20

W SQL wykonano poniższe instrukcje GRANT. Kto będzie miał prawa do przeglądania oraz modyfikacji danych?

GRANT ALL ON firmy TO 'admin'@'localhost';
GRANT ALTER, CREATE, DROP ON firmy TO 'anna'@'localhost';
GRANT SELECT, INSERT, UPDATE ON firmy TO 'tomasz'@'localhost';
A. Adam i Anna
B. Tomasz i Anna
C. Tylko Tomasz
D. Tomasz i Adam
Nieprawidłowe rozumienie problemu wynika z błędnej interpretacji przyznanych uprawnień SQL. Anna choć posiada uprawnienia ALTER CREATE i DROP które odnoszą się do zarządzania strukturą bazy danych takie jak dodawanie czy usuwanie tabel lub zmiana ich struktury nie ma uprawnień do przeglądania czy modyfikowania zawartości tabel. To oznacza że nie może przeglądać ani modyfikować danych co wyklucza ją jako osobę mającą prawo do przeglądania i zmiany danych w kontekście tego pytania. Adam w przesłanych komendach nie jest wymieniony co jasno wskazuje że żadne uprawnienia nie zostały mu przyznane. Często popełnianym błędem jest założenie że posiadanie uprawnień do zmiany struktury bazy danych automatycznie pozwala na przeglądanie danych jednak w rzeczywistości uprawnienia te są rozdzielone co jest kluczowe dla zapewnienia bezpieczeństwa danych. Rozróżnienie między uprawnieniami do zarządzania danymi a ich strukturyzowania jest fundamentalne w pracy z bazami danych i niezbędne do skutecznego administrowania dostępem użytkowników. Tomasz jako jedyny uzyskał odpowiednie uprawnienia do przeglądania i modyfikacji danych co jasno wynika z przyznanych mu uprawnień SQL.

Pytanie 21

Jakie jest oznaczenie typu stało-znakowego w SQL?

A. char
B. time
C. text
D. bool
Typ stało-znakowy char w języku SQL jest używany do przechowywania łańcuchów znaków o stałej długości. Oznacza to, że każdy zapisany ciąg będzie miał dokładnie taką samą liczbę znaków, co jest definiowane podczas tworzenia tabeli. Najczęściej stosowana długość to 1 do 8000 znaków, chociaż w niektórych bazach danych ta ilość może być różna. Typ char jest szczególnie przydatny, gdy z góry wiadomo, że wszystkie wartości w danej kolumnie będą miały tę samą długość, co pozwala na efektywniejsze przechowywanie danych i optymalizację wydajności. Na przykład, jeśli tworzymy tabelę użytkowników, w której każdy użytkownik ma przypisany identyfikator w postaci stałej długości, można użyć char(10) do przechowywania tych identyfikatorów. Ważne jest również, aby zwrócić uwagę na różnice między typem char a typem varchar, który przechowuje zmienną długość łańcuchów, co może prowadzić do większego zużycia pamięci w przypadkach, gdy długość przechowywanych danych jest różna. Typ char jest zgodny z wieloma standardami SQL, co czyni go powszechnie stosowanym rozwiązaniem w relacyjnych bazach danych.

Pytanie 22

Jakie cechy powinien posiadać klucz główny?

A. Jest unikatowy, nie może zawierać pustych wartości
B. Reprezentowany jest przez jedno pole tabeli, jego wartość nie może ulegać zmianie
C. Nie może przybierać wartości, reprezentowany jest przez dokładnie jedno pole tabeli
D. Jest unikatowy, może mieć tylko wartości całkowite
Odpowiedź wskazująca, że klucz główny jest unikatowy i nie może przyjmować pustych wartości jest absolutnie poprawna. Klucz główny w relacyjnych bazach danych pełni kluczową rolę w identyfikacji unikalnych rekordów w tabeli. Jego unikalność zapewnia, że każdy wiersz w tabeli można jednoznacznie zidentyfikować, co jest kluczowe dla utrzymania integralności danych. Na przykład, w tabeli użytkowników, identyfikator użytkownika (user_id) może pełnić rolę klucza głównego, co pozwala na łatwe wyszukiwanie i powiązanie danych z innymi tabelami, takimi jak zamówienia czy posty. Standardy takie jak ISO/IEC 9075 (SQL) podkreślają znaczenie kluczy głównych w projektowaniu baz danych. Dodatkowo, dobrym zwyczajem jest, aby kolumny będące kluczami głównymi były także oznaczone jako NOT NULL, co zapobiega wprowadzeniu pustych wartości, a tym samym zapewnia integralność danych. Zrozumienie tego konceptu jest niezbędne dla każdego, kto projektuje lub zarządza bazami danych, ponieważ błędy w definicji kluczy głównych mogą prowadzić do poważnych problemów z integralnością danych.

Pytanie 23

Jakie mechanizmy przyznawania zabezpieczeń, umożliwiające przeprowadzanie operacji na bazie danych, są powiązane z tematyką zarządzania kontami, użytkownikami oraz uprawnieniami?

A. Z zasadami
B. Z przywilejami systemowymi
C. Z atrybutami
D. Z przywilejami obiektowymi
Przywileje systemowe to kluczowy element zarządzania bezpieczeństwem w systemach baz danych. Obejmują one uprawnienia, które są przypisane do konta użytkownika na poziomie systemu, a niekoniecznie na poziomie obiektów bazy danych, takich jak tabele czy widoki. Dzięki nim możemy kontrolować dostęp do różnych funkcji systemowych, takich jak możliwość tworzenia nowych użytkowników, modyfikacji struktury bazy danych czy przydzielania uprawnień innym użytkownikom. Przykładem zastosowania przywilejów systemowych jest sytuacja, w której administrator bazy danych przydziela użytkownikom różne role, takie jak DBA (Database Administrator), która daje pełny dostęp do zasobów, lub rola z ograniczonymi uprawnieniami, co pozwala na wykonywanie tylko wybranych operacji. Dobrym przykładem standardów w tej dziedzinie jest podejście oparte na zasadzie minimalnych uprawnień, gdzie użytkownicy otrzymują jedynie te uprawnienia, które są absolutnie niezbędne do wykonywania ich zadań. Dzięki zastosowaniu przywilejów systemowych można skutecznie zarządzać bezpieczeństwem bazy danych oraz minimalizować ryzyko nieautoryzowanego dostępu.

Pytanie 24

Do jakiego celu służy polecenie mysqldump?

A. naprawy niespójnej bazy
B. sprawdzenia integralności bazy
C. optymalizacji bazy
D. stworzenia kopii zapasowej bazy
Niektóre odpowiedzi mogą wydawać się na pierwszy rzut oka sensowne, jednak ich analiza pokazuje, że nie oddają one rzeczywistej funkcji mysqldump. Naprawa niespójnej bazy danych jest zadaniem, które wymaga zastosowania innych narzędzi, takich jak `myisamchk` dla silnika MyISAM lub `innodb_force_recovery` dla silnika InnoDB. Mysqldump nie zawiera mechanizmów naprawczych, więc jego użycie w tym kontekście jest błędne. Ponadto proces optymalizacji bazy danych, taki jak reorganizacja indeksów czy usuwanie nieużywanych danych, również nie jest domeną mysqldump, lecz narzędzi takich jak `OPTIMIZE TABLE` czy `ANALYZE TABLE`. Kolejnym błędnym podejściem jest sugestia, że mysqldump służy do sprawdzania integralności bazy danych. Integralność danych w bazach MySQL zapewniają różne mechanizmy, w tym transakcje, a także kontrola spójności danych na poziomie aplikacji. Mysqldump nie jest narzędziem do przeprowadzania walidacji danych ani analizy ich integralności, a skupić się powinien przede wszystkim na tworzeniu kopii zapasowych. W związku z tym, aby poprawnie zrozumieć zastosowanie mysqldump, warto wystrzegać się mylnych przekonań dotyczących jego funkcji, bazując na rzeczywistych możliwości tego narzędzia. Właściwe zrozumienie ról różnych narzędzi w ekosystemie baz danych jest kluczowe dla efektywnego zarządzania i ochrony danych.

Pytanie 25

Jakie wartości powinny mieć zmienne w funkcji z biblioteki mysqli, by ustanowić połączenie z serwerem i bazą danych?

mysqli_connect($a, $b, $c, $d) or die('Brak połączenia z serwerem MySQL.');
A. adres serwera - $c, nazwa bazy danych - $d, login - $b, hasło - $a
B. adres serwera - $a, nazwa bazy danych - $b, login - $c, hasło - $d
C. adres serwera - $a, nazwa bazy danych - $d, login - $b, hasło - $c
D. adres serwera - $c, nazwa bazy danych - $d, login - $a, hasło - $b
Wybór złych odpowiedzi pewnie wynika z tego, że nie do końca zrozumiałeś, jak ważna jest prawidłowa kolejność argumentów w funkcji mysqli_connect. Często zdarza się pomylić kolejność argumentów przy połączeniu z bazą danych. Rozumienie tej logiki jest naprawdę istotne: pierwszy argument to adres serwera, np. localhost, a drugi to nazwa użytkownika. Trzeci to hasło do bazy, a czwarty to nazwa bazy, z którą chcesz się połączyć. Jak zmienisz kolejność tych zmiennych, to nie uda się nawiązać połączenia, bo serwer nie będzie wiedział, jak uwierzytelnić użytkownika ani znaleźć bazy. Użytkownikom, którzy nie czują się pewnie w tym temacie, może to być frustrujące. Z mojego doświadczenia, kluczem jest dobrze poznać specyfikację funkcji oraz myśleć logicznie, żeby przypisać zmienne do odpowiednich argumentów. Jak to ogarniesz, to unikniesz wielu błędów i lepiej sobie poradzisz z bazami danych w przyszłości.

Pytanie 26

Jaką wartość zwróci zapytanie z ramki wykonane na pokazanej tabeli? ```SELECT COUNT(DISTINCT wykonawca) FROM muzyka;```

Ilustracja do pytania
A. 4
B. 3
C. 1
D. 0
Zapytanie SQL SELECT COUNTDISTINCT wykonawca) FROM muzyka; ma na celu zliczenie unikalnych wartości w kolumnie wykonawca tabeli muzyka. W tym przypadku w tabeli są trzy różne wartości w tej kolumnie: Czesław Niemen Stan Borys i Mikołaj Czechowski. Funkcja COUNTDISTINCT zwraca liczbę niepowtarzających się wykonawców co w tym zestawie danych daje wynik 3. Zrozumienie użycia funkcji COUNTDISTINCT jest kluczowe w analizie danych szczególnie gdy chcemy określić liczebność unikalnych elementów w dużych zbiorach danych. To podejście jest szeroko stosowane w raportowaniu i analizach biznesowych gdzie istotne jest zidentyfikowanie niepowtarzalnych wpisów na przykład liczby unikalnych klientów czy produktów w sklepie. Dobre praktyki w SQL obejmują używanie aliasów w celu zwiększenia czytelności zapytań oraz optymalizację wydajności przez właściwe indeksowanie kolumn które są często wykorzystywane w funkcjach zliczających.

Pytanie 27

SELECT count(*) FROM Uczniowie WHERE srednia = 5;
Wynikiem uruchomienia przedstawionego zapytania SQL jest:
A. Liczba uczniów, których średnia ocen wynosi 5.
B. Liczba wszystkich uczniów.
C. Suma ocen uczniów, których średnia ocen wynosi 5.
D. Średnia ocen wszystkich uczniów.
Poprawnie – to zapytanie zwraca liczbę uczniów, których kolumna „srednia” ma wartość równą dokładnie 5. Funkcja agregująca COUNT(*) w SQL nie liczy sumy ani średniej, tylko po prostu zlicza wiersze spełniające warunek w klauzuli WHERE. W tym przypadku tabela Uczniowie jest filtrowana warunkiem srednia = 5, więc do liczenia trafiają wyłącznie rekordy uczniów, którzy mają średnią ocen równą 5. Dopiero na takim przefiltrowanym zbiorze wykonywany jest COUNT(*), który zwraca jedną liczbę – ile takich rekordów istnieje. Moim zdaniem to jedno z najczęściej używanych połączeń: WHERE + COUNT(*), bo w praktyce non stop chcemy wiedzieć „ile jest elementów spełniających warunek”. W raportach, panelach administracyjnych, dashboardach – np. ile jest klientów z określonym statusem, ilu użytkowników ma aktywne konto, ilu pracowników ma premię powyżej jakiegoś progu itd. Warto też zauważyć, że COUNT(*) liczy wszystkie wiersze, niezależnie od tego, czy jakieś inne kolumny są NULL, a kluczowe jest tylko to, że warunek WHERE jest spełniony. Dobrą praktyką jest zawsze dokładne określanie warunku filtrowania, bo drobna zmiana, np. srednia >= 5 zamiast srednia = 5, całkowicie zmienia znaczenie zapytania. W projektowaniu baz danych i zapytań SQL takie precyzyjne myślenie o warunkach i funkcjach agregujących jest absolutną podstawą profesjonalnej pracy z danymi.

Pytanie 28

Podczas tworzenia tabeli w SQL, dla jednej z kolumn ustalono klucz główny. Jakie atrybuty należy zastosować, aby uniemożliwić wprowadzenie wartości pustej?

A. DEFAULT
B. NOT NULL
C. NULL
D. UNIQUE
Atrybut NOT NULL jest kluczowym elementem w definiowaniu struktury tabeli w języku SQL, który zabezpiecza kolumnę przed wstawianiem wartości pustych (NULL). W kontekście klucza głównego, który ma zapewnić unikalność i identyfikowalność każdego rekordu w tabeli, użycie NOT NULL jest niezbędne, aby zagwarantować, że każda wartość w tej kolumnie jest zawsze obecna. Dla przykładu, w stworzonej tabeli `Pracownicy`, jeśli kolumna `ID_Pracownika` jest kluczem głównym, atrybut NOT NULL wymusi, że każde wstawienie rekordu będzie wymagało podania unikalnej wartości dla `ID_Pracownika`, co uniemożliwia dodanie rekordu bez tej wartości. Standard SQL definiuje NOT NULL jako jeden z podstawowych atrybutów, które mogą być używane w deklaracji kolumn, a jego stosowanie jest kluczowe dla integracji danych oraz zapewnienia spójności bazy danych. W praktyce, w przypadku prób dodania rekordu z pustą wartością w takiej kolumnie, system generuje błąd, co eliminuje ryzyko powstawania niekompletnych danych.

Pytanie 29

Aby przesłać informacje za pomocą funkcji mysqli_query) w skrypcie PHP, który dodaje do bazy danych dane uzyskane z formularza na stronie internetowej, jako jeden z argumentów trzeba użyć kwerendy

A. ALTER
B. INSERT INTO
C. UPDATE
D. SELECT
Wybór odpowiedzi 'INSERT INTO' jest poprawny, ponieważ służy do wstawiania nowych rekordów do bazy danych w systemie zarządzania bazą danych (DBMS). Kiedy chcemy przesłać dane z formularza w PHP, używamy tej kwerendy, aby określić, do której tabeli w bazie danych chcemy dodać nowe informacje oraz jakie wartości mają być wstawione w poszczególnych kolumnach. Przykładowo, jeśli mamy formularz rejestracji użytkownika, możemy użyć kwerendy: "INSERT INTO uzytkownicy (imie, email) VALUES ('Jan', '[email protected]')". Warto pamiętać o przygotowywaniu zapytań (prepared statements) w celu zabezpieczenia aplikacji przed atakami SQL Injection, co jest standardową dobrą praktyką w tworzeniu aplikacji webowych. Użycie kwerendy 'INSERT INTO' jest kluczowe, ponieważ pozwala na efektywne dodawanie nowych danych, co jest podstawową operacją w bazach danych.

Pytanie 30

W języku SQL zrealizowano polecenia GRANT przedstawione w ramce. Kto uzyska prawo do przeglądania oraz modyfikowania danych?

GRANT ALL ON frmy TO 'adam'@'localhost';
GRANT ALTER, CREATE, DROP ON frmy TO 'anna'@'localhost';
GRANT SELECT, INSERT, UPDATE ON frmy TO 'tomasz'@'localhost';
A. Adam oraz Anna
B. Jedynie Tomasz
C. Tomasz i Adam
D. Tomasz oraz Anna
Odpowiedź, że prawo do przeglądania i zmiany danych mają Tomasz i Adam, jest prawidłowa, ponieważ wynikają one z poleceń GRANT wykonanych w SQL. Adam otrzymuje pełne prawa do bazy danych 'frmy' dzięki komendzie 'GRANT ALL', co oznacza, że może zarówno przeglądać, jak i modyfikować wszelkie dane w tej bazie. Z kolei Tomasz, dzięki przyznanym mu uprawnieniom SELECT, INSERT i UPDATE, również ma możliwość przeglądania danych oraz ich zmiany. Ta sytuacja odzwierciedla kluczowe aspekty zarządzania uprawnieniami w systemach baz danych, gdzie precyzyjne przydzielanie ról i dostępów jest fundamentalne dla zapewnienia bezpieczeństwa i integralności danych. Praktyczne zastosowania takich operacji obejmują sytuacje, w których administratorzy baz danych muszą zróżnicować dostęp do danych w zależności od ról użytkowników, co jest zgodne z zasadami minimalnych uprawnień, które są standardem w branży IT.

Pytanie 31

W przedstawionym diagramie bazy danych biblioteka, elementy: czytelnik, wypozyczenie i ksiazka są

Ilustracja do pytania
A. krotkami.
B. encjami.
C. atrybutami.
D. polami.
W diagramie bazy danych pokazanym w pytaniu elementy „czytelnik”, „wypozyczenie” i „ksiazka” to klasyczne przykłady encji. Encja w modelu relacyjnym (a dokładniej w modelu ER – Entity-Relationship) oznacza pewien typ obiektu ze świata rzeczywistego, o którym chcemy przechowywać dane w bazie. W praktyce encja odpowiada tabeli w relacyjnej bazie danych: encja CZYTELNIK → tabela czytelnik, encja KSIĄŻKA → tabela ksiazka, encja WYPOŻYCZENIE → tabela wypozyczenie. Każda z tych encji ma swój klucz główny (np. czytelnik_id, ksiazka_id, wypozyczenie_id), czyli atrybut jednoznacznie identyfikujący rekord. To jest dokładnie to, co w dobrych praktykach projektowania baz danych (np. wg standardowych metodologii ERD używanych w SQL Server, MySQL Workbench czy Oracle Data Modeler) uważa się za podstawę poprawnego modelu danych. Moim zdaniem bardzo ważne jest rozróżnienie poziomów: encja to „typ obiektu” (tabela), atrybut to „cecha obiektu” (kolumna), a krotka/rekord to „konkretne wystąpienie obiektu” (pojedynczy wiersz). Na przykład: encja CZYTELNIK opisuje wszystkich możliwych czytelników biblioteki, atrybuty tej encji to imie, nazwisko, ulica itd., a jedna konkretna krotka w tabeli czytelnik opisuje jedną osobę, np. Jana Kowalskiego z ulicy Lipowej 5. W projektowaniu systemów bibliotecznych, systemów sprzedażowych, magazynowych czy w aplikacjach webowych z bazą danych zawsze zaczyna się właśnie od zidentyfikowania encji: klient, zamówienie, produkt, faktura itd. Dopiero potem dopisuje się atrybuty, ustala relacje (tak jak tu: czytelnik – wypożyczenie – książka) i definiuje klucze obce. To podejście jest zgodne z normalizacją i ogólnymi zasadami projektowania relacyjnych baz danych – pomaga uniknąć nadmiarowości danych i błędów logicznych w aplikacji.

Pytanie 32

Aby zaktualizować maksymalną długość kolumny imie w tabeli klienci do 30 znaków, należy zastosować w języku SQL poniższy kod

A. ALTER TABLE klienci CHANGE imie TEXT;
B. CHANGE TABLE klienci MODIFY imie CHAR(30);
C. ALTER TABLE klienci MODIFY COLUMN imie VARCHAR(30);
D. CHANGE TABLE klienci TO COLUMN imie SET CHAR(30);
Odpowiedzi, które nie zostały uznane za poprawne, zawierają istotne błędy w składni i logice użycia poleceń SQL. W pierwszym przypadku, użycie 'CHANGE TABLE' oraz 'TO COLUMN' jest niezgodne z syntaksą SQL. W SQL nie istnieje polecenie 'CHANGE TABLE', co czyni tę odpowiedź całkowicie błędną. Dodatkowo, 'SET CHAR(30)' nie jest akceptowaną konstrukcją w kontekście modyfikacji kolumn. W drugim przypadku, użycie 'CHAR(30)' zamiast 'VARCHAR(30)' ogranicza możliwość przechowywania danych do stałej długości 30 znaków, co nie jest optymalne dla pól tekstowych, w których długość danych może się różnić. To może prowadzić do marnotrawienia przestrzeni w bazie danych. Ostatnia odpowiedź, w której proponuje się użycie polecenia 'CHANGE' oraz 'TEXT', jest również błędna, ponieważ 'TEXT' nie jest odpowiednim typem danych w tym kontekście i nie odpowiada wymaganiom dotyczącym długości. Właściwe polecenia powinny być zgodne z zasadami SQL oraz specyfiką danych, które chcemy przechowywać, co w tym przypadku nie zostało spełnione.

Pytanie 33

Dostępna jest tabela programisci, która zawiera pola: id, nick, ilosc_kodu, ocena. Pole ilosc_kodu wskazuje liczbę linii kodu stworzonych przez programistę w danym miesiącu. W celu obliczenia łącznej liczby linii kodu napisanych przez wszystkich programistów, należy zastosować poniższe polecenie

A. SELECT SUM(ocena) FROM ilosc_kodu;
B. SELECT COUNT(programisci) FROM ilosc_kodu;
C. SELECT SUM(ilosc_kodu) FROM programisci;
D. SELECT MAX(ilosc_kodu) FROM programisci;
Aby obliczyć sumę linii kodu napisanych przez wszystkich programistów w tabeli 'programisci', poprawne jest użycie zapytania SQL: SELECT SUM(ilosc_kodu) FROM programisci. Zapytanie to wykorzystuje funkcję agregującą SUM(), która sumuje wartości w określonej kolumnie, w tym przypadku 'ilosc_kodu'. Kolumna ta zawiera liczbę linii kodu napisanych przez każdego programistę w danym miesiącu. Przykładem zastosowania tego zapytania może być sytuacja, w której chcemy określić całkowitą produktywność zespołu programistycznego w danym okresie czasu. Możemy rozszerzyć to zapytanie, dodając klauzulę WHERE, aby zsumować tylko linie kodu z określonego miesiąca lub roku. Warto również pamiętać o standardach SQL oraz zasadach normalizacji baz danych, które zalecają unikanie redundancji danych i umożliwiają efektywne przetwarzanie zapytań. Dzięki poprawnym praktykom można zapewnić optymalizację wydajności bazy danych oraz ułatwić późniejsze analizy danych.

Pytanie 34

Które z poniższych zapytań SQL zwróci wszystkie kolumny z tabeli 'produkty'?

A. FETCH * FROM produkty;
B. GET * FROM produkty;
C. SELECT * FROM produkty;
D. SELECT produkty FROM *;
Zapytanie SQL, które zwraca wszystkie kolumny z tabeli, wykorzystuje składnię SELECT * FROM nazwa_tabeli. Gwiazdka (*) jest symbolem, który oznacza, że chcemy pobrać wszystkie kolumny z danej tabeli. Jest to bardzo przydatne, gdy chcemy szybko uzyskać pełne dane z tabeli bez konieczności wymieniania każdej kolumny z osobna. W praktyce często używa się tej składni w sytuacjach, gdy chcemy wykonać operacje diagnostyczne lub szybkie przeglądanie zawartości tabeli. Jednakże, w środowiskach produkcyjnych, zaleca się raczej precyzyjne określanie potrzebnych kolumn zamiast używania "*", ponieważ pozwala to na optymalizację zapytań i może zmniejszyć obciążenie bazy danych. Niemniej jednak, zapytanie SELECT * FROM produkty; jest poprawne i zgodne z SQL-owym standardem, co czyni je prawidłowym wyborem w tym kontekście.

Pytanie 35

Element bazy danych, którego podstawowym celem jest generowanie lub prezentowanie zestawień informacji, to

A. raport
B. moduł
C. formularz
D. makro
Raport to taki dokument w bazie danych, który ma za zadanie pokazać dane w przejrzysty i uporządkowany sposób. To jest mega ważne, zwłaszcza kiedy chcemy analizować różne informacje. Można je wykorzystać do robienia zestawień, statystyk, a nawet wykresów, co naprawdę ułatwia podejmowanie decyzji. Zazwyczaj raporty tworzy się na podstawie danych z różnych miejsc, jak tabele czy zapytania. W programach do zarządzania bazami, jak Microsoft Access, można korzystać z kreatora raportów, który pomaga ustawić wszystko tak, jak się chce – wybieramy źródło danych, układ i format. Oczywiście, do pozyskiwania danych często wykorzystuje się SQL, no i potem już te dane można analizować i przedstawiać w raportach. Jak sobie pomyślisz o przykładzie, to taki miesięczny raport sprzedaży to super narzędzie dla menedżerów, bo mogą ocenić, jak im idzie w sprzedaży i podejmować lepsze decyzje strategiczne.

Pytanie 36

Na zakończenie dnia w systemie zarządzania magazynem sklepu spożywczego generowany jest raport, który przedstawia produkty oraz ich dostawców, dla których ilość na stanie jest mniejsza niż 10 sztuk. Do stworzenia tego raportu zastosowano kwerendę

A. UPDATE
B. INSERT INTO
C. SELECT
D. CHECK TABLE
Odpowiedź 'SELECT' jest poprawna, ponieważ to polecenie służy do pobierania danych z bazy danych. Kwerenda SELECT umożliwia zdefiniowanie, jakie kolumny oraz z jakich tabel chcemy wyświetlić. W kontekście raportu dla sklepu spożywczego, który wyświetla produkty z ich dostawcami, gdzie stan magazynowy jest mniejszy niż 10 sztuk, kwerenda SELECT pozwoli na precyzyjne określenie kryteriów wyszukiwania, takich jak nazwa produktu, nazwa dostawcy oraz warunek dotyczący stanu magazynowego. Przykładowa kwerenda mogłaby wyglądać następująco: 'SELECT product_name, supplier_name FROM inventory WHERE stock < 10'. W praktyce, stosowanie kwerend SELECT w raportach umożliwia monitorowanie stanów magazynowych, co jest kluczowe dla efektywnego zarządzania zapasami oraz podejmowania decyzji o zamówieniach. Takie podejście jest zgodne z dobrymi praktykami w zarządzaniu danymi w sklepach detalicznych, gdzie ciągłe monitorowanie stanu magazynowego jest kluczowe dla utrzymania płynności sprzedaży i zadowolenia klientów.

Pytanie 37

W języku SQL, aby z tabeli Uczniowie wyodrębnić rekordy dotyczące wyłącznie uczennic o imieniu "Aleksandra", które przyszły na świat po roku "1998", należy sformułować zapytanie

A. SELECT * FROM Uczniowie WHERE imie ="Aleksandra" OR rok_urodzenia < "1998"
B. SELECT * FROM Uczniowie WHERE imie="Aleksandra" AND rok_urodzenia > "1998"
C. SELECT * FROM Uczniowie WHERE imie="Aleksandra" OR rok_urodzenia > "1998"
D. SELECT * FROM Uczniowie WHERE imie="Aleksandra" AND rok_urodzenia < "1998"
Ta odpowiedź jest prawidłowa, ponieważ wykorzystuje operator logiczny AND, aby jednocześnie spełnić dwa kryteria: imię uczennicy musi być równe 'Aleksandra', a rok urodzenia musi być większy niż 1998. Użycie AND zapewnia, że tylko te rekordy, które spełniają obydwa warunki, zostaną zwrócone, co jest zgodne z wymaganiami zadania. W praktyce, takie zapytanie mogłoby być użyte w systemie edukacyjnym do generowania raportów dla nauczycieli, aby zidentyfikować i analizować uczennice o konkretnych cechach. Stosowanie operatora AND jest zgodne z dobrymi praktykami w SQL, które preferują precyzyjne określenie warunków w zapytaniach. Warto również zauważyć, że w bazach danych, zapewnienie poprawności danych i odpowiednich filtrów na poziomie zapytań jest kluczowe, aby uniknąć błędnych analiz oraz zapewnić, że wyciągane informacje są rzetelne i użyteczne w kontekście podejmowania decyzji.

Pytanie 38

W SQL instrukcja INSERT INTO

A. wprowadza nową tabelę.
B. wprowadza dane do tabeli.
C. modyfikuje rekordy przypisaną wartością.
D. dodaje kolumny do istniejącej tabeli.
Odpowiedzi sugerujące, że polecenie INSERT INTO dodaje tabelę, dodaje pola do tabeli lub aktualizuje rekordy, są nieprawidłowe z kilku powodów. Po pierwsze, dodawanie tabeli w SQL odbywa się za pomocą polecenia CREATE TABLE, które jest zupełnie innym działaniem. CREATE TABLE pozwala na definiowanie struktury tabeli, w tym nazw kolumn oraz ich typów danych. Kiedy ktoś myli INSERT z CREATE, może prowadzić do nieporozumień w zakresie zarządzania strukturą bazy danych. Po drugie, dodawanie pól do istniejącej tabeli realizuje się przez polecenie ALTER TABLE, które umożliwia modyfikację struktury tabeli, na przykład dodawanie nowych kolumn lub zmienianie typów istniejących. W kontekście aktualizacji rekordów, SQL oferuje polecenie UPDATE, które służy do modyfikacji istniejących danych w tabeli. Wprowadzenie nowych danych i aktualizacja istniejących to różne operacje, które mają różne cele i zastosowania. Często ludzie mylą te operacje, co może prowadzić do błędów podczas pisania zapytań. W przypadku błędnego użycia INSERT, użytkownik może napotkać na błędy typu 'duplicate key', jeśli próbuje wprowadzić dane, które naruszają ograniczenia unikalności. Zrozumienie różnic między tymi poleceniami jest kluczowe do efektywnego zarządzania danymi w bazach danych oraz do zapewnienia integralności i poprawności danych.

Pytanie 39

Podczas tworzenia tabeli, do pola, które ma automatycznie przyjmować następne liczby całkowite, należy wprowadzić atrybut

A. NOT NULL
B. NULL
C. PRIMARY KEY
D. AUTO_INCREMENT
Właściwość AUTO_INCREMENT w bazach danych, takich jak MySQL, jest kluczowym elementem, który umożliwia automatyczne zwiększanie wartości liczbowej w polu, co jest szczególnie przydatne przy tworzeniu identyfikatorów dla rekordów. Gdy pole jest oznaczone jako AUTO_INCREMENT, każda nowa wartość wstawiana do tego pola jest automatycznie zwiększana o jeden w porównaniu do ostatniej wprowadzonej wartości. Na przykład, jeśli ostatni rekord miał identyfikator 5, to nowy rekord otrzyma identyfikator 6. Umożliwia to uniknięcie ręcznego zarządzania numeracją identyfikatorów i minimalizuje ryzyko ich powtórzenia, co jest kluczowe dla zachowania integralności danych. Praktycznie, stosowanie AUTO_INCREMENT w tabelach, które przechowują dane o użytkownikach, zamówieniach czy transakcjach, zapewnia wydajność oraz spójność w zarządzaniu unikalnymi identyfikatorami. Dobrą praktyką jest również łączenie AUTO_INCREMENT z PRIMARY KEY, aby zapewnić, że każdy rekord w tabeli jest unikalny i łatwy do identyfikacji.

Pytanie 40

Na serwerze MySQL do odebrania praw użytkownikowi służy polecenie

A. GRANT
B. REVOKE
C. CREATE
D. RENAME
Poprawna komenda do odebrania uprawnień użytkownikowi w MySQL to REVOKE i warto ją sobie dobrze zakodować w głowie, bo w administracji bazą używa się jej naprawdę często. Składnia w najprostszym wariancie wygląda np. tak: REVOKE SELECT, INSERT ON baza.tabela FROM 'user'@'localhost'; – tutaj odbierasz konkretne prawa (SELECT, INSERT) do wskazanej tabeli danemu użytkownikowi. Można też odebrać wszystkie uprawnienia: REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'localhost';, co jest przydatne, gdy chcesz „odciąć” konto od bazy, ale jeszcze go nie usuwać. Z mojego doświadczenia lepiej jest właśnie ograniczać i porządkować uprawnienia, niż od razu kasować użytkowników, bo często wracasz do tych kont np. w środowisku testowym. W MySQL cały mechanizm praw opiera się na parze GRANT/REVOKE: GRANT nadaje uprawnienia, REVOKE je odbiera. To jest zgodne z dobrymi praktykami bezpieczeństwa – minimalny dostęp, tylko tyle, ile jest faktycznie potrzebne (zasada least privilege). W realnych projektach webowych np. aplikacja PHP powinna mieć konto w MySQL z ściśle ograniczonym zakresem operacji, a gdy zmienia się rola aplikacji, zamiast tworzyć nowe konto „na pałę”, lepiej doprecyzować lub cofnąć stare uprawnienia właśnie przez REVOKE. Warto też pamiętać, że po większych zmianach praw dobrze jest wykonać FLUSH PRIVILEGES w starszych wersjach MySQL lub po modyfikacjach bezpośrednio w tabelach systemowych, chociaż standardowo przy GRANT/REVOKE nie jest to już konieczne. Moim zdaniem opanowanie REVOKE to podstawa świadomej administracji serwerem bazodanowym, szczególnie gdy mówimy o środowiskach produkcyjnych, gdzie każdy nadmiarowy przywilej może być potencjalnym zagrożeniem.