Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik informatyk
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 8 czerwca 2026 12:54
  • Data zakończenia: 8 czerwca 2026 13:12

Egzamin niezdany

Wynik: 19/40 punktów (47,5%)

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Zmienna zadeklarowana w C++ jako double x*; to

A. parametr formalny typu zmiennoprzecinkowego
B. zmienna zmiennoprzecinkowa
C. zmienna typu całkowitego
D. wskaźnik
Parametr formalny typu rzeczywistego nie ma zastosowania w kontekście 'double x*;', ponieważ nie jest to definicja dla parametru funkcji, lecz dla wskaźnika na zmienną typu double. Zmienna rzeczywista odnosi się do prostej deklaracji zmiennej, która przechowuje wartość typu double, jednak w tym przypadku mamy do czynienia z wskaźnikiem, a nie ze zmienną przechowującą wartość. Zmienna całkowita z kolei jest typem danych przechowującym liczby całkowite, a więc nie ma związku z typem double, który jest przeznaczony dla liczb zmiennoprzecinkowych. Wskaźniki są bardziej zaawansowanym konceptem w C++, pozwalającym na manipulacje adresami w pamięci oraz umożliwiającym dynamiczne alokacje pamięci. Użycie wskaźników jest kluczowe w przypadku struktur danych oraz programowania obiektowego, gdzie pozwalają one na efektywne przechowywanie i zarządzanie danymi. Zrozumienie różnic między różnymi typami danych w języku C++ oraz ich zastosowań jest niezbędne dla prawidłowego projektowania aplikacji i unikania błędów programistycznych.

Pytanie 2

Wskaź na właściwą sekwencję tworzenia aplikacji?

A. Specyfikacja wymagań, analiza potrzeb klienta, tworzenie, wdrażanie, testowanie
B. Analiza potrzeb klienta, specyfikacja wymagań, tworzenie, testowanie, wdrażanie
C. Tworzenie, analiza potrzeb klienta, specyfikacja wymagań, wdrażanie, testowanie
D. Analiza potrzeb klienta, specyfikacja wymagań, tworzenie, wdrażanie, testowanie
Prawidłowa kolejność tworzenia aplikacji zaczyna się od analizy wymagań klienta, co jest kluczowym etapem, pozwalającym zrozumieć oczekiwania oraz potrzeby użytkowników. Następnie, na podstawie zebranych informacji, sporządzana jest specyfikacja wymagań, która dokładnie opisuje, jakie funkcjonalności i cechy powinna posiadać aplikacja. To dokument, który stanowi fundament dla dalszych prac programistycznych. W kolejnej fazie następuje etap tworzenia, w którym programiści przekształcają specyfikację w kod, implementując wszystkie wymagane funkcje. Po zakończeniu kodowania, aplikacja przechodzi testy, które mają na celu wykrycie błędów oraz weryfikację zgodności z wymaganiami. W końcowej fazie, po przeprowadzeniu testów i eliminacji ewentualnych problemów, aplikacja jest wdrażana, co oznacza jej udostępnienie użytkownikom. Cały proces powinien być zgodny z najlepszymi praktykami oraz standardami, takimi jak Agile czy Scrum, które kładą duży nacisk na iteracyjny rozwój oraz stałą komunikację z klientem, co zwiększa szansę na sukces projektu.

Pytanie 3

W tabeli podzespoly należy zaktualizować wartość pola URL na "toshiba.pl" dla wszystkich rekordów, w których pole producent jest równe TOSHIBA. Jak będzie wyglądała ta zmiana w języku SQL?

A. UPDATE podzespoly SET URL = 'toshiba.pl';
B. UPDATE producent='TOSHIBA' SET URL = 'toshiba.pl';
C. UPDATE podzespoly.producent='TOSHIBA' SET URL = 'toshiba.pl';
D. UPDATE podzespoly SET URL='toshiba.pl' WHERE producent='TOSHIBA';
Aby zaktualizować wartość pola URL w tabeli podzespoly na 'toshiba.pl' dla wszystkich rekordów, gdzie pole producent jest równe 'TOSHIBA', należy użyć instrukcji UPDATE w języku SQL. Właściwa składnia tej instrukcji to: UPDATE podzespoly SET URL='toshiba.pl' WHERE producent='TOSHIBA';. W tej instrukcji UPDATE najpierw wskazujemy, której tabeli dotyczy modyfikacja, w tym przypadku 'podzespoly'. Następnie określamy, jakie pole chcemy zaktualizować, czyli 'URL', oraz ustawiamy nową wartość, którą w tym przypadku jest 'toshiba.pl'. Kluczowym elementem tej operacji jest klauzula WHERE, która filtruje rekordy, które mają być zaktualizowane; w tym przypadku tylko te, które mają producenta 'TOSHIBA'. Bez klauzuli WHERE wszystkie rekordy w tabeli zostałyby zmodyfikowane, co mogłoby prowadzić do utraty danych. Przykład ilustruje, jak precyzyjnie można zarządzać danymi w bazie poprzez odpowiednie warunki. Tego typu operacje są zgodne z normami SQL, co zapewnia ich efektywność i bezpieczeństwo w zarządzaniu danymi.

Pytanie 4

W języku SQL używanym przez bazę danych MySQL atrybut UNIQUE w poleceniu CREATE TABLE

A. wymusza niepowtarzalne nazwy kolumn tabeli
B. uniemożliwia wprowadzenie wartości NULL
C. jest stosowany jedynie w przypadku kolumn liczbowych
D. jest używany, jeżeli wartości w danej kolumnie nie mogą się powtarzać
W pierwszej niepoprawnej odpowiedzi wspomniano o wymogu unikatowości nazw pól tabeli. To stwierdzenie jest błędne, ponieważ atrybut UNIQUE nie dotyczy nazw kolumn, lecz wartości przechowywanych w tych kolumnach. W SQL możemy mieć wiele kolumn w tabeli o tej samej nazwie, o ile są one częścią różnych tabel. Zatem, atrybut UNIQUE nie ma wpływu na nazywanie kolumn, a jego głównym celem jest zapewnienie unikalności danych. Kolejną nieprawidłową informacją jest stwierdzenie, że atrybut UNIQUE blokuje możliwość wpisania wartości NULL. W rzeczywistości, w MySQL atrybut UNIQUE pozwala na wprowadzenie wartości NULL, ponieważ wartość NULL jest traktowana jako brak danych, co oznacza, że różne rekordy mogą mieć NULL jako wartość w kolumnie oznaczonej przez UNIQUE. Wreszcie, twierdzenie, że atrybut UNIQUE jest stosowany tylko w przypadku pól liczbowych, jest również fałszywe. Atrybut UNIQUE można zastosować do dowolnego typu danych, w tym tekstowych, datowych czy liczbowych. W praktyce, atrybut ten może być używany w różnych kontekstach, aby zapewnić unikalność danych w każdej kolumnie, niezależnie od ich typów.

Pytanie 5

Który zapis wyświetli słowo „TEKST” w kolorze czarnym?

A.
<body color="black">TEKST</font>
B.
<font color="czarny">TEKST</font>
C.
<font color="#000000">TEKST</font>
D.
<body bgcolor="black">TEKST</body>
<body color="black"> jest błędny - <body> nie ma atrybutu color, a znaczniki są niedomknięte. <font color="czarny"> używa polskiej nazwy koloru, której HTML nie rozumie (nazwy są po angielsku lub kodem). <body bgcolor="black"> ustawia kolor TŁA. Czarny tekst daje <font color="#000000">TEKST</font>.

Pytanie 6

Aby wyeliminować nienaturalne odwzorowanie ukośnych krawędzi w grafice rastrowej, czyli tak zwane schodkowanie, należy zastosować filtr:

A. szumu
B. gradientu
C. pikselizacji
D. antyaliasingu
Schodkowanie (aliasing) to widoczne „schodki” na ukośnych i zaokrąglonych krawędziach w grafice rastrowej, która składa się z kwadratowych pikseli. Antyaliasing usuwa ten efekt: na granicy kształtu wprowadza piksele o kolorach pośrednich między obiektem a tłem, dzięki czemu przejście wygląda płynnie i naturalnie. Stosuje się go przy renderowaniu czcionek, kształtów i krawędzi grafiki na strony internetowe. Dlatego to właśnie filtr antyaliasingu odpowiada za wygładzenie schodkowania.

Pytanie 7

W CSS zapis w formie: p{background-image: url"rysunek.jpg")} spowoduje, że rysunek.png stanie się

A. tłem całej witryny
B. tłem każdego bloku tekstowego
C. wyświetlany obok każdego bloku tekstowego
D. pokazany, jeśli w kodzie użyty będzie znacznik img
Pierwsza niepoprawna odpowiedź twierdzi, że obrazek ma być tłem całej strony. W rzeczywistości, żeby ustawić tło dla całej strony, używa się body, a nie <p>. Tło ustawione dla paragrafów nie zmienia wyglądu całej strony. Druga niepoprawna odpowiedź sugeruje, że obrazek ma być obok każdego paragrafu. To mógłbyś osiągnąć innymi właściwościami, jak float czy display inline-block, ale background-image nie wyświetla go obok, to działa jako tło. Ostatnia niepoprawna odpowiedź mówi o użyciu znacznika img. Użycie img to inna sprawa – obrazek dodany w takim znaczniku będzie oddzielnym elementem, a nie tłem. W skrócie, background-image i img to różne techniki i używa się ich w różnych sytuacjach, więc te odpowiedzi nie mają sensu w kontekście pytanie.

Pytanie 8

Która funkcja PHP ZWRACA jako wynik połowę kwadratu przekazanej wartości $a?

A.
function licz($a) { echo $a/2; }
B.
function licz($a) { echo $a*$a/2; }
C.
function licz($a) { return $a/2; }
D.
function licz($a) { return $a*$a/2; }
Aby funkcja ZWRACAŁA wynik do dalszego użycia (a nie tylko go wypisywała), musi użyć return. Połowa kwadratu $a to $a*$a/2, więc poprawna funkcja to function licz($a) { return $a*$a/2; }. Wtedy $x = licz(4); zapisze do $x wartość 8. Zapamiętaj: echo pokazuje na ekranie, return oddaje wartość programowi.

Pytanie 9

Którego znacznika użyć, aby umieścić na stronie animację Flash (.swf)?

A.
<img>
B.
<audio>
C.
<video>
D.
<object>
Animację Flash (plik .swf) osadza się na stronie znacznikiem <object> - to uniwersalny kontener na obiekty zewnętrzne obsługiwane przez wtyczki (kiedyś Flash Player), z parametrami podawanymi w <param>. Warto pamiętać, że Flash jest dziś technologią wycofaną i przeglądarki go nie wspierają - współcześnie animacje robi się w HTML5/CSS lub <canvas>. Mimo to formalnie poprawnym kontenerem dla .swf jest <object>.

Pytanie 10

CAPTCHA to technika zabezpieczeń stosowana na stronach WWW, która pozwala:

A. przyspieszyć logowanie do aplikacji internetowej
B. pominąć proces uwierzytelniania w aplikacji
C. potwierdzić, że dane z formularza wysyła człowiek, a nie program
D. automatycznie wypełnić formularz danymi użytkownika
CAPTCHA to test, który ma odróżnić człowieka od programu (bota) - np. przepisanie zniekształconego tekstu, wskazanie obrazków czy proste zadanie. Stosuje się ją w formularzach (rejestracja, komentarze, logowanie), by utrudnić masowe, automatyczne wysyłanie danych przez boty i spam. Dlatego CAPTCHA potwierdza, że dane z formularza wysyła człowiek.

Pytanie 11

Baza danych księgarni zawiera tabelę o nazwie książki, w której znajdują się: id, idAutor, tytul, ileSprzedanych oraz tabelę autorzy z polami: id, imie, nazwisko. Aby wygenerować raport dotyczący sprzedanych książek z tytułami i nazwiskami autorów, co należy zrobić?

A. stworzyć kwerendę wyszukującą tytuły książek
B. zdefiniować relację 1..n pomiędzy tabelami książki i autorzy, a następnie przygotować kwerendę łączącą obie tabele
C. zdefiniować relację 1..1 pomiędzy tabelami książki i autorzy, a następnie przygotować kwerendę łączącą obie tabele
D. przygotować dwie oddzielne kwerendy: pierwszą wyszukującą tytuły książek, drugą wyszukującą nazwiska autorów
Jak chcesz zrobić raport o sprzedanych książkach, musisz najpierw ustalić, jak połączone są tabelki 'książki' i 'autorzy'. W tym przypadku relacja 1..n jest najlepsza, bo każdy autor może napisać wiele książek, a każda książka ma swojego jednego autora. Kiedy już to masz ustalone, możesz zabrać się za pisanie kwerendy, która połączy te tabele. W SQL użyjesz JOIN, co pozwala połączyć dane i zobaczyć pełne informacje o sprzedanych książkach, w tym tytuły i nazwiska autorów. Przykładowa kwerenda może wyglądać tak: SELECT książki.tytul, autorzy.nazwisko FROM książki JOIN autorzy ON książki.idAutor = autorzy.id. Takie podejście umożliwia łączenie danych z różnych źródeł i jest podstawą analizy baz danych. Dobrze zdefiniowane relacje między tabelami to też klucz do utrzymania porządku w danych i efektywności zapytań.

Pytanie 12

Który z wymienionych to rozproszony system kontroli wersji projektu programistycznego?

A. Git
B. Eclipse
C. FileZilla
D. Total Commander
Git to ROZPROSZONY system kontroli wersji - każdy programista ma pełną kopię historii repozytorium i może pracować lokalnie, a zmiany synchronizuje z innymi. Dlatego systemem kontroli wersji jest Git.

Pytanie 13

Której klauzuli należy użyć w poleceniu CREATE TABLE, aby pole nie mogło pozostać puste?

A.
NULL
B.
CHECK
C.
DEFAULT
D.
NOT NULL
Pozostałe klauzule nie wymuszają niepustości. NULL działa odwrotnie - jawnie zezwala, by pole pozostawało bez wartości. CHECK nakłada warunek na zawartość kolumny (np. cena > 0), ale samo w sobie nie zabrania wartości pustej. DEFAULT ustala wartość wstawianą, gdy nie podano innej, jednak nadal dopuszcza zapis NULL, jeśli ktoś go celowo wpisze. Zakaz pustego pola wprowadza NOT NULL, dlatego ta odpowiedź jest poprawna.

Pytanie 14

Aby odebrać użytkownikowi wcześniej nadane uprawnienia, należy zastosować polecenie:

A.
DELETE
B.
REVOKE
C.
DELETE PRIVILEGES
D.
GRANT NO PRIVILEGES
Do odbierania uprawnień służy REVOKE - polecenie z grupy DCL (Data Control Language), które stanowi odwrotność GRANT. Wskazujesz w nim, jakie uprawnienia i na jakim obiekcie chcesz cofnąć oraz któremu użytkownikowi, na przykład REVOKE INSERT ON klienci FROM jan. Dzięki temu administrator może w każdej chwili ograniczyć dostęp, gdy zmienia się zakres obowiązków lub konto przestaje być potrzebne. To właśnie REVOKE jest poprawną odpowiedzią.

Pytanie 15

Który znacznik sekcji <head> jest wymagany w HTML5, a jego brak walidator zgłasza jako błąd?

A.
title
B.
link
C.
meta
D.
style
Pozostałe znaczniki <head> są opcjonalne. <link> dołącza zasoby (np. CSS), <meta> podaje metadane, a <style> zawiera reguły CSS - żaden nie jest wymagany. Obowiązkowy jest <title>.

Pytanie 16

W SQL, aby zmienić dane w tabeli, wykorzystuje się instrukcję

A. CREATE
B. UPDATE
C. SELECT
D. JOIN
Odpowiedź 'UPDATE' jest poprawna, ponieważ w języku SQL polecenie to służy do modyfikacji danych w istniejących rekordach tabeli. Umożliwia aktualizację wartości w jednym lub więcej polach w wybranych wierszach, których identyfikacja może być dokonana poprzez zastosowanie klauzuli WHERE. Na przykład, aby zaktualizować nazwisko użytkownika w tabeli 'Użytkownicy', można użyć polecenia: 'UPDATE Użytkownicy SET nazwisko = 'NoweNazwisko' WHERE id = 1;'. Dobrą praktyką jest zawsze uwzględnienie klauzuli WHERE, aby uniknąć przypadkowego zaktualizowania wszystkich rekordów w tabeli. Polecenie UPDATE jest częścią standardu SQL i szeroko stosowane w codziennej pracy z bazami danych, co czyni je kluczowym narzędziem w zarządzaniu danymi. Warto również pamiętać, że przed wykonaniem aktualizacji zaleca się wykonanie kopii zapasowej danych, aby zabezpieczyć się przed niezamierzonymi zmianami.

Pytanie 17

Tabela przedmioty ma pola ocena i uczenID. Która kwerenda policzy ŚREDNIĄ ocen ucznia o ID 7?

A.
SELECT AVG(ocena) FROM przedmioty WHERE uczenID = 7;
B.
AVG SELECT ocena FROM przedmioty WHERE uczenID = 7;
C.
SELECT COUNT(ocena) FROM przedmioty WHERE uczenID = 7;
D.
COUNT SELECT ocena FROM przedmioty WHERE uczenID = 7;
Średnią wartości z kolumny liczy funkcja agregująca AVG. Zapis SELECT AVG(ocena) FROM przedmioty WHERE uczenID = 7; najpierw warunkiem WHERE wybiera oceny ucznia o ID 7, a potem AVG(ocena) je uśrednia. Dlatego ta kwerenda jest poprawna.

Pytanie 18

Za pomocą zapytania SQL trzeba uzyskać z bazy danych nazwiska pracowników, którzy pełnią funkcję kierownika, a ich wynagrodzenie mieści się w przedziale jednostronnie domkniętym (3000, 4000>. Która klauzula sprawdza ten warunek?

A. WHERE kierownik = true AND pensja => 3000 AND pensja <= 4000
B. WHERE kierownik = true AND pensja > 3000 AND pensja <= 4000
C. WHERE kierownik = true OR pensja > 3000 OR pensja <= 4000
D. WHERE kierownik = true AND pensja => 3000 OR pensja < 4000
Odpowiedź WHERE kierownik = true AND pensja > 3000 AND pensja <= 4000 jest poprawna, ponieważ precyzyjnie definiuje warunki, które muszą być spełnione, aby zwrócić odpowiednich pracowników. Klauzula WHERE jest fundamentalnym elementem zapytań SQL, który pozwala na filtrację wyników na podstawie określonych kryteriów. W tym przypadku, warunek 'kierownik = true' zapewnia, że tylko pracownicy pełniący rolę kierowników zostaną uwzględnieni w wynikach. Dodatkowo, użycie operatorów porównania '>' oraz '<=' dla pensji umożliwia dokładne zdefiniowanie przedziału, w którym pensja musi się mieścić. W praktyce, w kontekście baz danych, taka filtracja pozwala na efektywne zarządzanie danymi oraz generowanie raportów zgodnych z wymaganiami analizy. Stosowanie tego typu warunków w zapytaniach SQL jest zgodne z najlepszymi praktykami, gdyż umożliwia precyzyjne i wydajne wyszukiwanie danych, co jest kluczowe w zarządzaniu informacjami w złożonych systemach bazodanowych.

Pytanie 19

Jak nazywa się program, który wykonuje instrukcje zawarte w kodzie źródłowym bez wcześniejszego generowania programu wynikowego?

A. interpreter
B. kompilator
C. konwerter kodu
D. konwerter języka
Pozostałe odpowiedzi nie pasują do opisu. Kompilator działa odwrotnie - najpierw tłumaczy cały kod źródłowy na program wynikowy (np. plik .exe lub kod pośredni), który dopiero potem się uruchamia; nie wykonuje instrukcji „na żywo”. „Konwerter kodu” i „konwerter języka” nie są standardowymi nazwami narzędzi uruchamiających program - kojarzą się raczej z tłumaczeniem między formatami czy językami, a nie z wykonywaniem instrukcji. Kod źródłowy bez generowania programu wynikowego wykonuje interpreter, dlatego ta odpowiedź jest poprawna.

Pytanie 20

W systemie baz danych hurtowni utworzono tabelę sprzedaz z polami: id, kontrahent, grupa_cenowa, obrot. Jakie polecenie należy zastosować, aby znaleźć jedynie kontrahentów z drugiej grupy cenowej, których obrót przekracza 4000zł?

A. SELECT sprzedaz FROM kontrahent WHERE obrot > 4000
B. SELECT sprzedaz FROM kontrahent WHERE grupa_cenowa = 2 AND obrot > 4000
C. SELECT kontrahent FROM sprzedaz WHERE grupa_cenowa = 2 OR obrot > 4000
D. SELECT kontrahent FROM sprzedaz WHERE grupa_cenowa = 2 AND obrot > 4000
Wszystkie pozostałe odpowiedzi zawierają błędne konstrukcje zapytań SQL, które nie prawidłowo realizują wymagania postawione w pytaniu. W pierwszej propozycji brak jest odpowiedniego wskazania na konkretne pole, które ma być wybrane. W SQL polecenie 'SELECT sprzedaz' nie jest poprawne, gdyż zamiast tego należy wskazać konkretne kolumny, które nas interesują. Z kolei w drugiej odpowiedzi, użycie operatora OR zamiast AND prowadzi do sytuacji, w której wynikiem zapytania mogą być kontrahenci z grupy 2, ale także każdy inny kontrahent, którego obrót przekracza 4000 zł, co jest sprzeczne z zamierzonym celem wyszukiwania. Tego rodzaju błędy często wynikają z nieprecyzyjnego zrozumienia logiki zapytań SQL, co może prowadzić do uzyskiwania niezamierzonych wyników. Ważne jest, aby zawsze przy tworzeniu zapytań jasno określić, jakie warunki muszą być spełnione, aby uzyskać pożądane dane. Kolejną częstą pułapką jest użycie niepoprawnych nazw tabel czy pól. W dobrych praktykach programistycznych sugeruje się, aby dokładnie zweryfikować struktury bazy danych przed formułowaniem zapytań, co pozwala uniknąć typowych błędów i nieporozumień w wynikach. Konsekwentne stosowanie operatorów logicznych oraz upewnienie się, że każda część zapytania jest odpowiednio sformułowana, jest kluczowe dla efektywności i skuteczności pracy z bazami danych.

Pytanie 21

Który z akapitów wykorzystuje opisaną właściwość stylu CSS?

Ilustracja do pytania
A. A
B. B
C. C
D. D
Odpowiedź B jest poprawna, ponieważ właściwość CSS border-radius: 20% określa zaokrąglenie narożników elementu. W tym przypadku zastosowanie 20% promienia powoduje, że narożniki akapitu są zaokrąglone w umiarkowanym stopniu. Właściwość ta jest powszechnie wykorzystywana w projektowaniu stron internetowych, aby nadać elementom bardziej łagodny, przyjazny wygląd. Użycie procentowej wartości oznacza, że wielkość zaokrąglenia zależy od wymiarów elementu, co pozwala na zachowanie proporcji na różnych urządzeniach i przy różnych rozmiarach ekranu. Zaokrąglenie w CSS jest istotnym aspektem responsywnego designu, ponieważ może poprawiać czytelność i estetykę interfejsu użytkownika. Praktyczne zastosowania obejmują przyciski, karty, obrazki i inne elementy interfejsu, gdzie płynne linie mogą wpływać na ogólne wrażenie wizualne strony. Zrozumienie i umiejętne wykorzystanie border-radius jest częścią standardowych umiejętności projektanta stron internetowych, co również wspiera zgodność ze współczesnymi trendami w UI/UX.

Pytanie 22

Którego zdarzenia należy użyć, aby funkcja JavaScript uruchamiała się za każdym razem, gdy użytkownik wpisze znak w polu edycji?

A.
onclick
B.
onkeydown
C.
onmouseout
D.
onload
Pozostałe zdarzenia nie reagują na wpisywanie z klawiatury. onclick wywołuje się po kliknięciu myszą - nie zależy od tego, co użytkownik pisze. onmouseout zachodzi, gdy kursor opuszcza obszar elementu, czyli również dotyczy myszy, a nie klawiatury. onload uruchamia się tylko raz, po wczytaniu strony lub elementu, więc nie nadąży za kolejnymi znakami. Reakcję na każdy naciśnięty klawisz zapewnia onkeydown, dlatego to ono jest poprawne.

Pytanie 23

Reprezentacja znacznika HTML w formacie

<a href="#hobby">przejdź</a>
A. jest błędny, użyto niewłaściwego znaku "#" w atrybucie href
B. jest poprawny, po kliknięciu w odnośnik strona zostanie przewinięta do sekcji o nazwie "hobby"
C. jest poprawny, po kliknięciu w odnośnik otworzy się strona internetowa o URL "hobby"
D. jest błędny, w atrybucie href należy wpisać adres URL
W odpowiedziach, które wskazują na błędy w zapisie znacznika HTML, pojawiają się nieporozumienia dotyczące funkcji atrybutu href w tagu <a>. Niepoprawne są twierdzenia sugerujące, że użycie znaku '#' w atrybucie href jest błędne. Wręcz przeciwnie, znak '#' jest standardowym sposobem definiowania odnośników do identyfikatorów na tej samej stronie. Zastosowanie atrybutu href w takiej formie jest powszechnie akceptowane i stosowane w praktyce web developerskiej. Kolejnym błędnym wnioskiem jest stwierdzenie, że w atrybucie href należy podać pełny adres URL. W rzeczywistości, gdy celem jest nawigacja do sekcji na tej samej stronie, wystarczy użyć symbolu '#' i odpowiedniego identyfikatora. Dodatkowo, pominięcie praktyki użycia href do nawigacji wewnętrznej prowadzi do mniejszych korzyści w zakresie użyteczności strony. Użytkownicy oczekują, że będą mogli łatwo przemieszczać się pomiędzy różnymi sekcjami długich treści, a niewłaściwe podejście do definiowania odnośników może prowadzić do frustracji i obniżenia jakości doświadczeń użytkowników. Warto zatem zrozumieć, że poprawne stosowanie takich odnośników jest kluczowe dla skutecznego projektowania stron internetowych.

Pytanie 24

Ile razy zostanie wykonana zaprezentowana pętla w języku PHP, zakładając, że zmienna sterująca nie jest zmieniana wewnątrz pętli?

 for ($i = 0; $i <= 10; $i++) {
    // kod pętli
}
A. 11
B. 10
C. Nieskończenie wiele
D. 0
Nieprawidłowe odpowiedzi mogą wynikać z kilku błędnych założeń dotyczących działania pętli for. Jednym z częstszych błędów jest myślenie, że pętla for będzie iterować tylko do wartości 10, co skutkuje odpowiedzią 10. W rzeczywistości jednak warunek '$i <= 10' oznacza, że wartość 10 także jest wliczana do całkowitej liczby iteracji, przez co pętla będzie wykonana 11 razy. Z kolei odpowiedź sugerująca nieskończoną liczbę iteracji może pojawić się u osób, które nie zauważają, że zmienna $i jest inkrementowana w każdej iteracji. Warto również wspomnieć, że w przypadku początkowej wartości zmiennej $i wynoszącej 0 oraz braku modyfikacji tej zmiennej wewnątrz pętli nie może wystąpić sytuacja, w której pętla nie kończy się, co prowadzi do błędnego wniosku o 0 iteracjach. Kluczowe jest zrozumienie, jak struktura pętli for działa i jakie warunki wpływają na liczbę jej iteracji. Świadomość tych zasad jest niezbędna do pisania efektywnego i poprawnego kodu w PHP oraz innych językach programowania.

Pytanie 25

Który atrybut pola <input> ogranicza maksymalną liczbę znaków, jaką można w nim wpisać?

A. value
B. maxlength
C. name
D. readonly
Atrybut maxlength ogranicza maksymalną liczbę znaków, jaką użytkownik może wpisać w pole tekstowe, np. <input type="text" maxlength="10"> pozwoli wprowadzić najwyżej 10 znaków. Przydaje się przy polach o ustalonej długości, takich jak kod pocztowy czy PESEL. Dlatego limit znaków ustala maxlength.

Pytanie 26

Które wartości będą przechowywane w zmiennych po wykonaniu przedstawionej pętli języka PHP?

$i = 20;    $a = 0;
while($i) {
  $a += 2;
  $i--;
}
A. a = 40, i = 20
B. a = 0, i = 20
C. a = 20, i = 20
D. a = 40, i = 0
Zrozumienie, jak działa pętla w języku PHP, jest kluczowe do efektywnej pracy z tym językiem. Błędne odpowiedzi sugerują niezrozumienie, jak zmienne są aktualizowane i przechowywane w pętli. Można pomylić, że wartość 'a' będzie wynosić 0 lub 20, jeżeli nie zauważymy, że wartość 'a' jest zwiększana o 2 w każdej iteracji pętli. Podobnie, można pomylić, że wartość 'i' pozostanie na 20, jeśli nie zrozumie się, że 'i' jest zmniejszane o 1 w każdej iteracji pętli, aż osiągnie wartość 0, co kończy pętlę. To jest typowy błąd, który można zrobić, jeżeli nie zwróci się uwagi na szczegóły operacji wykonywanych w pętli. Przypomnijmy, że zrozumienie, jak działa pętla, jest kluczowe do tworzenia efektywnych i wydajnych programów w PHP i w każdym języku programowania.

Pytanie 27

W języku HTML zapisano formularz. Który z efektów działania kodu będzie wyświetlony przez przeglądarkę zakładając, że w drugie pole użytkownik wpisał wartość "ala ma kota"?

<form>
  <select>
    <option value="v1">Kraków</option>
    <option value="v2">Poznań</option>
    <option value="v3">Szczecin</option>
  </select> <br>
  <input type="password" />
</form>


Kraków
Poznań
Szczecin
Efekt 1

Efekt 2

Efekt 3
Kraków
Poznań
Szczecin
Efekt 4
A. Efekt 3.
B. Efekt 1.
C. Efekt 2.
D. Efekt 4.
Pozostałe odpowiedzi nie są poprawne, ponieważ nie odpowiadają one opisowi działania kodu HTML formularza. W przypadku odpowiedzi 'Efekt 1', 'Efekt 3' oraz 'Efekt 4', możemy zauważyć, że nie są one zgodne z opisanym działaniem formularza. W HTML, pole hasła reprezentowane jest jako ciąg znaków zastępczych - kropeczki. Przy wpisaniu 'ala ma kota' do pola hasła, nie jesteśmy w stanie zobaczyć tej wartości, tylko kropeczki. Przy wyborze odpowiedzi 'Efekt 1', 'Efekt 3' lub 'Efekt 4', musielibyśmy zobaczyć wpisaną wartość 'ala ma kota' zamiast kropeczek, co jest niezgodne ze standardami HTML. Dlatego też, odpowiedzi te są nieprawidłowe. Pamiętaj, że ważne jest zrozumienie, jak działają różne elementy formularza w HTML, aby poprawnie przewidzieć efekt ich działania w przeglądarce.

Pytanie 28

W stylu CSS zdefiniowano klasę uzytkownik:

p.uzytkownik {
    color: blue;
}
Na stronie będą wyświetlane czcionką w kolorze niebieskim:
A. wszystkie akapity.
B. tylko elementy tekstowe typu <p>, <h1>.
C. paragrafy, do których została przypisana klasa uzytkownik.
D. wszystkim elementom w sekcji <body> z przypisaną klasą uzytkownik.
Klucz do tego pytania leży w zrozumieniu, jak działa składnia selektorów CSS. Wiele osób patrzy na fragment p.uzytkownik i automatycznie myśli: „to pewnie wszystkie akapity” albo „wszystko z klasą uzytkownik w body”. Tymczasem CSS jest dość precyzyjny. Sam selektor p oznaczałby rzeczywiście wszystkie paragrafy <p> w dokumencie, niezależnie od klas. Natomiast .uzytkownik bez literki przed kropką oznaczałby wszystkie elementy HTML, które mają w atrybucie class wpisane uzytkownik – mogłyby to być <p>, <div>, <span>, <h1> i inne. Właśnie taki zapis spowodowałby nadanie stylu „wszystkim elementom z klasą uzytkownik w body”, o ile oczywiście są w tym zakresie dokumentu.
Pojawia się też częsty błąd myślowy, że skoro w pytaniu jest mowa o akapitach i o klasie, to może chodzi o „tylko elementy tekstowe typu <p>, <h1>”. CSS jednak nie rozumie pojęcia „element tekstowy” w taki sposób – <h1> to zupełnie inny typ elementu niż <p>, więc selektor p.uzytkownik nigdy nie dopasuje nagłówka <h1>, nawet jeśli nadasz mu class="uzytkownik". Żeby stylować zarówno <p>, jak i <h1> z tą klasą, trzeba by użyć selektora złożonego: p.uzytkownik, h1.uzytkownik { ... }.
Z mojego doświadczenia wynika, że pomieszanie selektora typu, klasy i ich kombinacji to jedna z typowych przyczyn „magicznych” błędów w wyglądzie strony – coś nagle zmienia kolor, bo ktoś użył za szerokiego selektora .uzytkownik zamiast p.uzytkownik, albo odwrotnie, styl „nie działa”, bo autor oczekiwał, że reguła obejmie wszystko z daną klasą, a zawęził ją do konkretnego tagu. Dlatego dobrze jest zawsze czytać selektor od lewej do prawej: najpierw jaki element (p), potem jaka klasa (.uzytkownik). Tylko połączenie tych dwóch warunków powoduje zastosowanie stylu. W aktualnych specyfikacjach CSS (np. Selectors Level 3 i 4) ta logika jest jasno określona i jest standardem we wszystkich nowoczesnych przeglądarkach, więc warto się do niej przyzwyczaić i świadomie z niej korzystać.

Pytanie 29

W bazie Access tworzona kontrolka ma odwoływać się do kontrolki z INNEGO formularza. Czy jest to możliwe?

A. niemożliwe
B. możliwe tylko dla danych liczbowych
C. niemożliwe poza trybem projektowania
D. możliwe przez podanie ścieżki w właściwości „Źródło kontrolki”

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W MS Access kontrolka może odwołać się do kontrolki z INNEGO formularza - wystarczy w jej właściwości „Źródło kontrolki” podać odpowiednią ścieżkę (np. odwołanie do formularza i jego pola). Dlatego jest to możliwe przez podanie ścieżki w „Źródle kontrolki”.

Pytanie 30

Ikona przedstawiająca funkcję w edytorze grafiki rastrowej, znana jako „kubełek”, pozwala na

Ilustracja do pytania
A. zmianę bieżących kolorów
B. wypełnienie obszaru, który został zaznaczony kolorem
C. wybór obszaru o identycznym kolorze
D. pobranie wybranej barwy i ustawienie jej jako aktywnej
Narzędzie 'kubełek', często spotykane w edytorach grafiki rastrowej takich jak Adobe Photoshop czy GIMP, służy do wypełniania zaznaczonego obszaru kolorem. Jest to szczególnie przydatne w sytuacjach, gdy chcemy szybko zapełnić jednolitym kolorem duże powierzchnie, takie jak tła lub obiekty. Działa na zasadzie zalewania najbliższych pikseli wybranym kolorem, uwzględniając podobieństwo kolorów, co można regulować za pomocą opcji tolerancji. W praktyce, narzędzie to usprawnia proces tworzenia grafik, ponieważ eliminuje potrzebę ręcznego kolorowania każdego piksela. Dodatkowo 'kubełek' może być stosowany w połączeniu z różnymi trybami mieszania, co pozwala na uzyskanie bardziej zaawansowanych efektów wizualnych. Praca z 'kubełkiem' wymaga zrozumienia koncepcji warstw, ponieważ wypełnianie na konkretnej warstwie ma wpływ na finalny wygląd projektu. Wiedza o tym, jak skutecznie używać narzędzia 'kubełek', jest niezbędna dla każdego grafika cyfrowego, który chce pracować efektywnie i profesjonalnie, realizując projekty zgodnie z najlepszymi praktykami branżowymi.

Pytanie 31

Wskaż, na czym polega błąd w kodzie napisanym w języku C++.

char str1[30] = 'Ala ma kota'; printf("%s", str1);
A. Napis powinien być umieszczony w cudzysłowach.
B. Napis powinien mieć dokładnie 30 znaków.
C. Do funkcji printf przekazano zbyt mało argumentów.
D. W funkcji printf nie można używać formatowania %s.
Wskaźnik 'str1' jest zdefiniowany jako tablica znaków, która ma przechowywać łańcuch znaków. W C++ łańcuchy znaków muszą być umieszczone w cudzysłowach, aby kompilator mógł je poprawnie zinterpretować jako dane typu string. W przypadku przypisania wartości 'Ala ma kota' bez cudzysłowów, kompilator traktuje to jako pojedynczy znak, co prowadzi do błędu. Aby poprawnie zainicjować tablicę 'str1', należy użyć: char str1[30] = "Ala ma kota";. Taki zapis jest zgodny z regułami C++ i zapewnia, że napis zostanie potraktowany jako łańcuch znaków. Ponadto, dobrym zwyczajem jest zapewnienie, że tablica ma wystarczającą ilość miejsca na znak null ('\0'), który oznacza koniec łańcucha, co w tym przypadku jest zapewnione przez zdefiniowanie tablicy o rozmiarze 30. Warto również pamiętać, że stosowanie cudzysłowów zamiast apostrofów dla łańcuchów znaków jest podstawową zasadą programowania w C++.

Pytanie 32

W CSS zastosowano stylowanie elementu listy, przy czym żadne inne style CSS nie zostały ustalone. Użyte stylowanie spowoduje, że

li :hover { color: Maroon; }
A. Teksty wszystkich elementów, którym nadano id „hover”, będą w kolorze Maroon.
B. Po najechaniu kursorem na element listy, kolor tekstu zmieni się na Maroon.
C. Wszystkie teksty elementów listy będą w kolorze Maroon.
D. Kolor Maroon będzie dotyczył co drugiego elementu listy.
Twoja odpowiedź jest na pewno trafna, bo reguła CSS li:hover { color: Maroon; } działa w kontekście pseudo-klasy :hover. To znaczy, że jak najedziesz kursorem na element listy (li), to jego kolor tekstu zmienia się na Maroon. Fajnie, że to wiesz! Takie podejście jest zgodne z zasadami CSS, które pozwalają na dynamiczne zmiany wyglądu elementów, gdy użytkownik z nimi interaguje. Na przykład, jeżeli masz listę z elementami <li>, to najeżdżając na nie, kolor tekstu zmienia się na Maroon. To może naprawdę poprawić użytkowanie strony i wyróżnić ważne elementy w interfejsie. Używanie pseudo-klas, jak :hover, to standard w projektowaniu stron, które są responsywne i interaktywne, co znacznie podnosi komfort przeglądania.

Pytanie 33

Narzędziem do zarządzania bazą danych wbudowanym w pakiet XAMPP jest

A. MySQL Workbench
B. phpMyAdmin
C. pgAdmin
D. SQLite
phpMyAdmin to popularne narzędzie webowe, które jest częścią pakietu XAMPP, służące do zarządzania bazami danych MySQL. Umożliwia użytkownikom interakcję z bazą danych poprzez intuicyjny interfejs graficzny, co znacznie upraszcza wykonanie operacji takich jak tworzenie, edytowanie i usuwanie baz danych oraz tabel. Dzięki phpMyAdmin można z łatwością zarządzać uprawnieniami użytkowników, importować i eksportować dane, a także wykonywać zapytania SQL bez konieczności korzystania z linii poleceń. To narzędzie jest szczególnie przydatne dla osób, które nie mają doświadczenia w pracy z bazami danych, a jego dostępność w XAMPP czyni go idealnym rozwiązaniem dla programistów webowych i administratorów systemów. W praktyce, phpMyAdmin wspiera wiele standardów, takich jak UTF-8, co zapewnia poprawne przetwarzanie danych w różnych językach. Warto zaznaczyć, że korzystanie z phpMyAdmin jest zgodne z najlepszymi praktykami w zakresie zarządzania bazami danych, ponieważ umożliwia skuteczne monitorowanie i optymalizację wydajności bazy danych.

Pytanie 34

Jakie mogą być źródła rekordów dla raportu?

A. tabela
B. inny raport
C. zapytanie GRANT
D. zapytanie INSERT INTO
Odpowiedzi, które wskazują na inny raport, zapytanie GRANT lub zapytanie INSERT INTO jako źródła rekordów dla raportu, są niepoprawne. Inny raport, choć może zawierać dane, sam w sobie nie jest bezpośrednim źródłem do generowania nowych raportów. Może jednak posłużyć jako inspiracja lub szablon do tworzenia nowych analiz, co nie czyni go źródłem w sensie technicznym. Przykładowo, raport sprzedaży nie może być bezpośrednio wykorzystany jako źródło danych do raportu o wydatkach z powodu różnicy w kontekście i strukturze danych. Zapytanie GRANT natomiast, służy do przyznawania uprawnień użytkownikom w bazie danych, co jest zupełnie inną funkcjonalnością. Użycie tego zapytania w kontekście raportowania jest błędne, ponieważ nie ma ono związku z pozyskiwaniem danych, a jedynie z zarządzaniem dostępem. Na koniec, zapytanie INSERT INTO służy do wstawiania danych do tabel, a nie do ich pozyskiwania. Typowym błędem myślowym jest mylenie tych operacji z procesem tworzenia raportów, gdzie kluczowym elementem jest analizy danych już istniejących w tabelach, a nie dodawanie nowych danych. W kontekście tworzenia raportów, istotne jest, aby skupić się na źródłach, które już przechowują dane, a nie na operacjach, które te dane zmieniają lub manipulują.

Pytanie 35

Rezultatem wykonania podanego zapytania SQL jest

SELECT count(*) FROM Uczniowie WHERE srednia = 5;
A. Całkowita liczba uczniów.
B. Średnia ocen wszystkich uczniów.
C. Liczba uczniów, którzy mają średnią ocen równą 5.
D. Suma ocen uczniów, których średnia ocen wynosi 5.
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.

Pytanie 36

<form>
  <input type="email" id="addr" required>
  <input type="submit" value="Zapisz">
</form>
Na podstawie przedstawionego kodu formularza HTML można powiedzieć, że pole edycyjne:
A. może być puste.
B. nie powinno zawierać znaków numerycznych.
C. wymaga wpisania jedynie znaków alfanumerycznych.
D. nie może być puste i wymaga wpisania tekstu ze znakiem @.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
W tym fragmencie kodu HTML masz dwa bardzo ważne atrybuty: type="email" oraz required. To właśnie one razem powodują, że poprawna jest odpowiedź, że pole nie może być puste i wymaga wpisania tekstu ze znakiem @. Atrybut required oznacza, że pole jest obowiązkowe. Przeglądarka, zgodnie ze specyfikacją HTML5, nie pozwoli wysłać formularza, dopóki pole nie będzie wypełnione. Użytkownik kliknie przycisk „Zapisz”, a formularz po prostu się nie wyśle – pojawi się komunikat walidacyjny po stronie przeglądarki. To jest tzw. walidacja po stronie klienta, domyślnie wbudowana w HTML. Z kolei type="email" uruchamia specjalny mechanizm sprawdzania formatu wpisanego tekstu. Przeglądarka sprawdza, czy ciąg znaków wygląda jak adres e‑mail: musi zawierać co najmniej znak @ i jakąś część przed i po nim. To nie jest super zaawansowana walidacja, ale wystarcza jako pierwszy filtr, np. "[email protected]" przejdzie, a "jan.domena.pl" już nie. Moim zdaniem to bardzo wygodne, bo nie trzeba od razu pisać własnego JavaScriptu tylko po to, żeby odsiać oczywiste błędy. W praktyce w aplikacjach webowych zwykle łączy się tę prostą walidację HTML5 z dodatkowymi sprawdzeniami po stronie serwera (np. w PHP czy w innym backendzie), bo dane z formularza zawsze trzeba traktować z ograniczonym zaufaniem. Dobrym nawykiem jest też dodanie atrybutu name, np. name="email", żeby serwer mógł poprawnie odebrać wartość pola. Warto też wiedzieć, że niektóre przeglądarki mobilne, gdy widzą type="email", podpowiadają użytkownikowi specjalną klawiaturę z łatwym dostępem do znaku @ i kropki, co realnie poprawia wygodę wpisywania adresu. To taki mały szczegół, ale w profesjonalnych projektach UX ma znaczenie. Podsumowując: required blokuje puste wysłanie formularza, a type="email" wymusza poprawny, podstawowy format adresu ze znakiem @ – dokładnie to opisuje poprawna odpowiedź.

Pytanie 37

Wypisanie tekstu w języku JavaScript nie jest możliwe przy użyciu

A. własności innerHTML
B. funkcji MessageBox()
C. metody window.alert()
D. metody document.write()
W kontekście JavaScriptu w przeglądarce kluczowe jest rozumienie, jakie dokładnie narzędzia udostępnia środowisko uruchomieniowe, a jakie pochodzą z innych technologii czy języków. Częsty błąd polega na mieszaniu pojęć z różnych platform: ktoś programował kiedyś w C#, Delphi czy nawet w jakimś starszym systemie okienkowym i automatycznie zakłada, że funkcja MessageBox() będzie także dostępna w JavaScripcie. Tymczasem standardowe API przeglądarki definiuje inne mechanizmy do wyświetlania komunikatów.

Właściwość innerHTML jest elementem DOM i absolutnie można za jej pomocą „wypisać” tekst na stronie. W praktyce sprowadza się to do modyfikacji zawartości konkretnego elementu HTML. Jeśli pobierzemy np. paragraf przez document.getElementById i ustawimy jego innerHTML na jakiś tekst, to użytkownik od razu zobaczy tę zmianę. Część osób myśli, że to coś „bardziej zaawansowanego” i nie traktuje tego jako zwykłego wypisywania, ale w realnych projektach właśnie tak się pokazuje dane: wyniki obliczeń, komunikaty, odpowiedzi z serwera itp.

Metoda window.alert() jest prostym, ale w pełni poprawnym sposobem wyświetlania tekstu. Nie umieszcza treści w strukturze HTML, tylko pokazuje systemowe okienko dialogowe. Nadal jednak jest to forma prezentacji tekstu użytkownikowi, więc jak najbardziej spełnia definicję „wypisania tekstu” w kontekście zadania. Błędne przekonanie, że „prawdziwe” wypisywanie to tylko coś, co pojawia się w treści strony, jest po prostu zbyt wąskim podejściem.

Document.write() z kolei jest mechanizmem historycznym, ale technicznie pozwala wstrzyknąć tekst do dokumentu podczas jego ładowania. W wielu nowych materiałach odradza się jego używanie, ponieważ utrudnia utrzymanie kodu i może nadpisać zawartość strony po załadowaniu, jednak to nie zmienia faktu, że tekst jest nim realnie wypisywany. Mylenie „złej praktyki” z „brakiem możliwości” to kolejny typowy błąd.

Funkcja MessageBox() nie jest częścią standardowego API JavaScriptu w przeglądarce. Jeżeli nie zdefiniujemy jej sami w kodzie, interpreter zgłosi błąd. Właśnie dlatego to ona jest jedynym poprawnym wyborem jako mechanizm, którego nie da się użyć do wypisania tekstu w typowym środowisku webowym. Dobrą praktyką jest zawsze sprawdzanie dokumentacji konkretnego języka i platformy, a nie opieranie się na intuicji wyniesionej z innych technologii.

Pytanie 38

Co oznacza pojęcie integralności referencyjnej w bazie danych?

A. Wartość atrybutu należy do jego dziedziny (dozwolonego zbioru)
B. Baza jest odporna na awarie sprzętu i oprogramowania
C. Każdej wartości klucza obcego odpowiada istniejąca wartość klucza podstawowego
D. Każda encja ma klucz podstawowy o wartości unikatowej i różnej od NULL

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Integralność referencyjna to reguła pilnująca spójności powiązań między tabelami: każda wartość klucza obcego musi wskazywać na istniejący rekord tabeli nadrzędnej (na realną wartość jej klucza podstawowego) albo być pusta (NULL, jeśli dozwolone). Dzięki temu nie powstają „osierocone” rekordy wskazujące na nieistniejące dane. Dlatego poprawna jest odpowiedź o zgodności klucza obcego z kluczem podstawowym.

Pytanie 39

W której notacji diagramów ER został zapisany model związków encji przedstawiony na ilustracji?

Ilustracja do pytania
A. Bachmana.
B. Min-Max.
C. Martina.
D. Chena.

Brak odpowiedzi na to pytanie.

Wyjaśnienie poprawnej odpowiedzi:
Prawidłowa odpowiedź to notacja Martina. Na diagramie widać bardzo charakterystyczne cechy tej notacji: encje są przedstawione jako prostokąty z nagłówkiem wypełnionym innym kolorem (tu: ciemnoszary pasek z nazwą encji KLIENT, ZAKUP, TOWAR), a pod spodem w formie tabelki wypisane są atrybuty, jeden pod drugim. Klucz główny jest po prostu pierwszym atrybutem na liście (ID), bez dodatkowych ozdobników typu podkreślenie czy elipsa, co jest typowe właśnie dla podejścia Martina, zorientowanego na projektowanie relacyjnej bazy danych. Związki między encjami są rysowane liniami z tzw. crow’s foot ("kurzą łapką") po stronie encji wielokrotnej, a po stronie encji pojedynczej mamy prostą kreskę. Na ilustracji dokładnie to widać: ZAKUP jest encją pośredniczącą, a relacje KLIENT–ZAKUP i TOWAR–ZAKUP mają klasyczną symbolikę notacji Martina. W praktyce, w wielu narzędziach CASE (np. w starszych wersjach ERwin, PowerDesigner, Visio z szablonem Database Model Diagram) domyślny styl ERD jest właśnie bardzo zbliżony do notacji Martina. Taki diagram jest od razu „bliski” strukturze fizycznej tabel w SQL, więc łatwo go przełożyć na CREATE TABLE, klucze obce i indeksy. Z mojego doświadczenia w firmach produkcyjnych i w małych software house’ach notacja Martina jest często używana przy projektach, gdzie liczy się szybkie przejście z modelu koncepcyjnego do modelu logicznego i fizycznego, bez zbyt rozbudowanej symboliki teoretycznych ER-ów. Dlatego rozpoznanie tej notacji po wyglądzie encji-tabelek i crow’s foot jest bardzo praktyczną umiejętnością przy pracy z bazami danych.

Pytanie 40

Który typ danych należy przypisać atrybutowi „Telefon”, jeśli numer zaczyna się od znaku „+” i numeru kierunkowego kraju?

A. binarny
B. liczbowy
C. tekstowy
D. wyliczeniowy
Numer telefonu zaczynający się od „+” i kodu kraju zawiera znaki, których typ liczbowy nie przechowa (np. plus, ewentualne spacje czy zera wiodące), dlatego atrybutowi „Telefon” przypisuje się typ TEKSTOWY. Na numerze i tak nie wykonuje się działań matematycznych. Dlatego właściwy jest typ tekstowy.