Przejdź do głównej treści
  1. Strona główna
  2. Wyniki egzaminu

Wyniki egzaminu

Nowy egzamin

Informacje o egzaminie

  • Zawód: Technik informatyk
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Rozpoczęcie: 7 czerwca 2026 23:28
  • Zakończenie: 7 czerwca 2026 23:44

Egzamin zdany!

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

Wymagane minimum: 20 punktów (50%)

Twój wynik na tle innych

Twój wynik jest lepszy niż 93% podejść do kwalifikacji INF.03.

Porównanie z 39483 zakończonymi podejściami do tej kwalifikacji (dane zbiorcze, bez wyników indywidualnych).

Poprawa! Poprzednio 85,0%, teraz 92,5% (+7,5 p.p.).

Zachowaj ten wynik na koncie

Załóż darmowe konto albo zaloguj się - ten egzamin przypiszemy do Twojego konta, więc wrócisz do swoich błędów, będziesz śledzić postęp i dostaniesz powtórki dobrane do Twoich odpowiedzi.

Pochwal się swoim wynikiem!

Szczegółowe wyniki

Pytanie 1

W HTML, aby ustawić tytuł dokumentu na "Moja strona", który pojawi się na karcie przeglądarki internetowej, należy użyć zapisu

A. <title>Moja strona</title>
B. <head>Moja strona</head>
C. <meta title="Moja strona">
D. <meta name="title" content="Moja strona">
Element <title> w HTML jest naprawdę ważny, bo to właśnie on ustala, co zobaczysz na zakładce w przeglądarce. Powinien być umieszczony w sekcji <head>, co jest zgodne z tym, co mówi W3C. Poprawny zapis wygląda tak: <title>Moja strona</title>, co sprawia, że "Moja strona" będzie się pokazywać jako tytuł w przeglądarce. Tytuł strony ma spore znaczenie dla SEO, bo wpływa na to, jak strona jest pozycjonowana w wynikach wyszukiwania. Warto, żeby tytuł był krótki, ale jednocześnie zawierał istotne informacje, a najlepiej, żeby nie miał więcej niż 60 znaków, żeby się nie obcinał w wynikach. Fajnie też umieścić w tytule kluczowe słowa, które opisują, o czym jest strona, bo to może zwiększyć jej atrakcyjność i CTR. Dobrze skonstruowany tytuł to też lepsza dostępność, bo ułatwia użytkownikom poruszanie się i orientowanie w otwartych zakładkach.

Pytanie 2

W języku JavaScript wartość typu boolean może być przedstawiana przez

A. –20
B. 45.3
C. true
D. null
Typ boolean w języku JavaScript jest jednym z podstawowych typów danych, reprezentującym jedynie dwie możliwe wartości: true (prawda) oraz false (fałsz). Typ ten jest kluczowy w programowaniu, umożliwiając tworzenie warunków oraz podejmowanie decyzji w kodzie. W praktyce, boolean jest wykorzystywany w instrukcjach warunkowych, takich jak if, gdzie wyrażenia zwracające wartość logiczną decydują o dalszym przebiegu programu. Na przykład, wyrażenie 'if (x > 10)' zwraca true, jeśli x jest większe od 10, i false w przeciwnym razie. JavaScript, zgodnie ze specyfikacją ECMA-262, nie tylko definiuje typ boolean, ale również określa sposób konwersji innych typów danych na boolean. Funkcje takie jak Boolean() oraz operatory logiczne (&&, ||, !) są używane do uzyskania wartości boolean z innych typów. Warto również zauważyć, że JavaScript stosuje tzw. "truthy" i "falsy" wartości, co oznacza, że niemal każdy typ danych może być interpretowany jako boolean w kontekście warunków, jednak tylko true i false są typowymi wartościami tego typu. Zrozumienie działania typu boolean jest fundamentalne dla programistów, umożliwiając skuteczne kontrolowanie przepływu programu oraz implementację logiki decyzyjnej."

Pytanie 3

Który sposób wyświetlenia tekstu NIE istnieje w JavaScript?

A. właściwość innerHTML
B. funkcja window.alert()
C. funkcja MessageBox()
D. metoda document.write()
W JavaScripcie nie istnieje funkcja MessageBox() - to konstrukcja z innych środowisk (np. Windows/VBScript). Dlatego sposobem NIEistniejącym jest MessageBox().

Pytanie 4

Który zapis CSS ustawi wcięcie PIERWSZEJ linii akapitu na 30 pikseli?

A.
p { text-indent: 30px; }
B.
p { text-spacing: 30px; }
C.
p { line-height: 30px; }
D.
p { line-indent: 30px; }
Pozostałe właściwości nie istnieją lub robią co innego. text-spacing i line-indent w CSS nie istnieją. line-height ustawia WYSOKOŚĆ wiersza (odstęp między liniami), a nie wcięcie. Wcięcie pierwszej linii daje text-indent.

Pytanie 5

Zmienna należąca do typu integer lub int jest w stanie przechować

A. znak
B. ciąg znaków
C. liczbę całkowitą
D. liczbę rzeczywistą
Typ zmiennych integer, czyli int, jest super ważny w programowaniu, bo służy do przechowywania liczb całkowitych. To takie liczby, co nie mają części dziesiętnych. Jest sporo języków programowania, które go używają, na przykład C++, Java czy Python. Głównie dzięki nim możemy efektywnie przechowywać i operować na tych liczbach. Wartości tego typu mogą być różne w zależności od systemu, na przykład w 32-bitowym typ int przechowuje liczby od -2 147 483 648 do 2 147 483 647. Używamy liczb całkowitych w różnych algorytmach, zwłaszcza tam, gdzie liczy się precyzja, jak w zliczaniu elementów albo w operacjach matematycznych. W standardzie C99 mamy różne typy całkowite, co pomaga w dokładnym określeniu, co potrzebujemy. Moim zdaniem, ogarnięcie typu integer to podstawa dla każdego, kto chce coś programować, bo na tym buduje się operacje matematyczne i logiczne.

Pytanie 6

Która cecha wyróżnia format PNG?

A. obsługa animacji
B. kompresja bezstratna
C. brak obsługi kanału alfa
D. reprezentacja grafiki wektorowej
PNG wyróżnia kompresja BEZSTRATNA - zmniejsza rozmiar pliku bez utraty jakości, dzięki czemu format nadaje się do grafik z ostrymi krawędziami, logo i przezroczystością (obsługuje kanał alfa). Dlatego cechą PNG jest kompresja bezstratna.

Pytanie 7

Jakie znaczenie ma przedstawiony fragment kodu w języku C++?

Ilustracja do pytania
A. Zbiór zmiennych w hierarchii.
B. Trzy niezwiązane ze sobą zmienne.
C. Typ strukturalny składający się z trzech pól.
D. Interakcja między zmiennymi globalnymi a lokalnymi.
Ten fragment kodu w C++ definiuje strukturę o nazwie CONTACT, która ma trzy pola: nazwisko i telefon jako typy std::string oraz numer jako int. Struktury w C++ pozwalają na grupowanie różnych typów danych w jedną całość, co jest super przydatne w programowaniu, szczególnie gdy pracujemy z danymi. Dzięki strukturze kod widzi te dane jako jedno, co czyni go bardziej zorganizowanym. Na przykład w aplikacjach, gdzie musimy przetwarzać różne typy informacji, takie jak bazy danych czy systemy CRM, struktury sprawdzają się świetnie. Warto też dodać, że w nowoczesnym C++ wolemy korzystać z stringów, bo są łatwiejsze w użyciu niż tradycyjne tablice znaków, a standardowa biblioteka daje nam dodatkowe opcje. To podejście ułatwia życie programistom!

Pytanie 8

W SQL, aby dodać kolumnę rozmiar typu znakowego o maksymalnej długości 20 znaków do tabeli Towar, należy wykonać następujące polecenie

A. ALTER TABLE Towar ADD rozmiar varchar(20)
B. ALTER TABLE Towar DROP COLUMN rozmiar varchar(20)
C. ALTER TABLE Towar ALTER COLUMN rozmiar varchar(20)
D. ALTER TABLE Towar CREATE COLUMN rozmiar varchar(20)
Aby dodać nową kolumnę do istniejącej tabeli w bazie danych SQL, właściwe jest użycie polecenia ALTER TABLE z opcją ADD. W tym przypadku, aby dodać kolumnę 'rozmiar' typu varchar o maksymalnej długości 20 znaków do tabeli 'Towar', należy napisać: ALTER TABLE Towar ADD rozmiar varchar(20). Typ danych varchar (zmienny znak) jest często stosowany do przechowywania tekstu o zmiennej długości, co czyni go idealnym do przechowywania informacji takich jak rozmiary, nazwy czy opisy. Zachowanie maksymalnej długości kolumny do 20 znaków zapewnia, że żadne dane nie przekroczą ustalonego limitu, co z kolei może pomóc w utrzymaniu integralności danych. Dodatkowo, standard SQL definiuje ALTER TABLE jako polecenie do modyfikacji istniejących obiektów w bazie danych, co czyni go kluczowym narzędziem dla administratorów baz danych. Przykładowo, po dodaniu kolumny można zaktualizować istniejące rekordy, aby wprowadzić odpowiednie dane do nowej kolumny. Warto również zaznaczyć, że różne systemy zarządzania bazami danych (DBMS) mogą mieć swoje specyficzne rozszerzenia, ale powyższa składnia jest zgodna z SQL ANSI.

Pytanie 9

Jaką metodę zastosowano do dodania arkusza stylów do dokumentu HTML w pokazanym kodzie?

Ilustracja do pytania
A. Styl zewnętrzny
B. Styl wewnętrzny
C. Styl wpisany, lokalny
D. Styl alternatywny, zewnętrzny
Styl zewnętrzny to metoda dołączania arkusza stylów do dokumentu HTML poprzez linkowanie pliku CSS zewnętrznego w sekcji head dokumentu. Jest to najbardziej powszechna i zalecana metoda stylizacji dużych projektów ponieważ pozwala na oddzielenie logiki prezentacyjnej od struktury dokumentu HTML co ułatwia zarządzanie i ponowne wykorzystanie kodu. Tymczasem styl wewnętrzny umieszczany jest w sekcji head jako blok <style> i stosuje się go gdy chcemy zdefiniować style dla całego dokumentu bez tworzenia dodatkowego pliku CSS. Jest to rozwiązanie kompromisowe ale wciąż nie tak elastyczne jak style zewnętrzne. Styl alternatywny zewnętrzny to mechanizm dołączania alternatywnych arkuszy stylów umożliwiający użytkownikowi wybór różnych stylów podczas przeglądania strony jednak nie jest to to samo co styl wpisany lokalny. Błędne myślenie może polegać na utożsamianiu stylów wewnętrznych z wpisanymi ze względu na ich lokalny charakter lecz zasadniczo różnią się one zakresem działania i sposobem implementacji. Styl wpisany jako atrybut elementu HTML działa tylko na ten konkretny element zaś style wewnętrzne i zewnętrzne mogą wpływać na wiele elementów jednocześnie co daje większą kontrolę i spójność w projektowaniu strony. Zrozumienie tych różnic jest kluczowe dla tworzenia efektywnych i dobrze zarządzanych aplikacji webowych. Dążenie do modularności i ponownego użycia kodu jest jedną z fundamentalnych zasad dobrych praktyk w branży.

Pytanie 10

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

A. aktywacja zapory.
B. defragmentacja dysków.
C. używanie skomplikowanych haseł do bazy.
D. blokowanie portów związanych z bazą danych.
Defragmentacja dysków nie jest bezpośrednio związana z zabezpieczaniem serwera bazy danych przed atakami hakerskimi. Choć defragmentacja może poprawić wydajność systemu plików poprzez uporządkowanie fragmentów plików na dysku, nie ma wpływu na kwestie bezpieczeństwa. Przykłady skutecznych działań w zakresie zabezpieczeń obejmują włączenie zapory, co stanowi pierwszą linię obrony, blokowanie portów, które mogą być wykorzystywane przez potencjalnych intruzów, oraz stosowanie złożonych haseł, co minimalizuje ryzyko nieautoryzowanego dostępu. W kontekście zarządzania bezpieczeństwem baz danych, kluczowe jest przestrzeganie najlepszych praktyk, takich jak regularne aktualizacje oprogramowania, monitorowanie logów dostępu oraz stosowanie zasad minimalnych uprawnień. Właściwe zabezpieczenia powinny być wdrażane zgodnie z wytycznymi standardów takich jak ISO/IEC 27001.

Pytanie 11

Selektor CSS a:link {color:red} w arkuszach stylów nazywanych kaskadowymi określa

A. klasę.
B. pseudoklasę.
C. identyfikator.
D. pseudoelement.
Wybór odpowiedzi związanej z klasą, identyfikatorem lub pseudoelementem nie uwzględnia kluczowej różnicy między tymi pojęciami a pseudoklasami. Klasa w CSS definiuje grupę elementów, które mają wspólne cechy stylistyczne, natomiast identyfikator jest unikalny dla jednego elementu na stronie i powinien być używany tylko raz. Klasy i identyfikatory są przypisywane za pomocą atrybutów 'class' i 'id' w HTML, co czyni je bardziej statycznymi, podczas gdy pseudoklasy odnoszą się do konkretnego stanu elementu, co wprowadza element dynamiki. Pseudoelementy, takie jak '::before' lub '::after', również różnią się, ponieważ pozwalają na stylizację części elementu, a nie jego całego stanu. Typowe błędy myślowe związane z myleniem tych pojęć wynikają często z braku zrozumienia, jak działa kaskadowość i dziedziczenie w CSS. Kluczowe jest zrozumienie, że pseudoklasy są narzędziem do reakcji na interakcje użytkownika, co pozwala na bardziej zaawansowane i intuicyjne projektowanie stron internetowych. Ignorowanie tych różnic prowadzi do nieefektywnego stylowania i może obniżać jakość interfejsów użytkownika.

Pytanie 12

W systemie baz danych stworzono tabelę Mieszkancy zawierającą informacje. Aby usunąć tę tabelę wraz z danymi, należy użyć komendy

A. DROP TABLE Mieszkancy;
B. DELETE FROM Mieszkancy;
C. ALTER TABLE Mieszkancy;
D. TRUNCATE TABLE Mieszkancy;
Polecenie 'DROP TABLE Mieszkancy;' jest właściwym sposobem na usunięcie tabeli wraz z jej zawartością w bazie danych. To polecenie nie tylko usuwa tabelę, ale również wszystkie dane, które w niej się znajdują oraz wszelkie powiązania, takie jak klucze obce. W praktyce, gdy programista chce całkowicie wyeliminować strukturę tabeli oraz jej dane, wykorzystuje 'DROP TABLE'. Jest to szczególnie przydatne w sytuacjach, gdy tabela nie jest już potrzebna w systemie, a jej usunięcie pozwala na zwolnienie zasobów oraz uproszczenie struktury bazy danych. Warto również pamiętać, że przed wykonaniem tego polecenia warto stworzyć kopię zapasową danych, jeśli są one istotne, ponieważ operacja ta jest nieodwracalna. Ponadto, zgodnie z zasadami dobrych praktyk, przed usunięciem tabeli należy upewnić się, że nie ma na nią żadnych zależności w innych częściach bazy danych, aby uniknąć potencjalnych problemów z integralnością danych.

Pytanie 13

Wymień dwa sposoby na zabezpieczenie bazy danych Microsoft Access

A. Funkcje anonimowe oraz ustawienie hasła do otwarcia bazy danych
B. Zaszyfrowanie pliku bazy danych oraz wiadomości SMS z kodem autoryzacyjnym
C. Ustalanie hasła do otwarcia bazy danych oraz zabezpieczeń na poziomie użytkownika
D. Ustalenie zabezpieczeń na poziomie użytkownika oraz w sesji
Ustalanie hasła do otwarcia bazy danych oraz zabezpieczeń na poziomie użytkownika to kluczowe elementy ochrony danych w Microsoft Access. Ustalenie hasła otwarcia bazy danych zapewnia podstawowy poziom bezpieczeństwa, uniemożliwiając nieautoryzowanym użytkownikom dostęp do pliku. W praktyce, aby ustawić hasło, wystarczy przejść do opcji 'Informacje' w menu, a następnie wybrać 'Szyfrowanie z hasłem'. Zabezpieczenia na poziomie użytkownika natomiast pozwalają na definiowanie ról i uprawnień dla różnych użytkowników, co jest istotne w sytuacjach, gdzie dostęp do danych powinien być ograniczony do wybranych osób. Implementacja tych rozwiązań jest zgodna z dobrymi praktykami bezpieczeństwa danych, które zalecają stosowanie wielowarstwowych mechanizmów ochrony. Przykładem może być firma, która przechowuje wrażliwe dane klientów, gdzie konieczne jest, aby tylko wyznaczeni pracownicy mieli dostęp do konkretnych informacji, co można zrealizować właśnie poprzez zabezpieczenia na poziomie użytkownika.

Pytanie 14

Który operator w PHP wyznacza resztę z dzielenia?

A.
@
B.
&
C.
%
D.
#
Resztę z dzielenia (modulo) wyznacza w PHP operator %, np. 7 % 3 daje 1, a 10 % 2 daje 0. To bardzo praktyczny operator: $n % 2 == 0 sprawdza parzystość, a modulo przydaje się też do „zawijania” indeksów czy cykli. Zapamiętaj: % pyta „ile zostaje po podziale”, a nie „ile razy się mieści”.

Pytanie 15

W języku PHP, instrukcja foreach pełni rolę

A. Pętli, przeznaczonej wyłącznie dla elementów tablicy
B. Wyboru, dotyczącej elementów tablicy
C. Pętli, niezależnej od typu zmiennej
D. Warunkową, niezależną od typu zmiennej
W PHP, instrukcja foreach to super sposób na przechodzenie przez elementy tablicy. Dzięki niej nie musisz się martwić o indeksy, tylko po prostu przeglądasz wszystkie wartości, co naprawdę ułatwia pisanie kodu. Na przykład, jeżeli mamy tablicę z nazwiskami, taką jak $nazwiska = ['Kowalski', 'Nowak', 'Wiśniewski'], to możemy to wrzucić w foreach: foreach ($nazwiska as $nazwisko) { echo $nazwisko; }. W tym przypadku każda wartość z tablicy zostanie wyświetlona po kolei. Z mojego doświadczenia, dobrze jest używać foreach kiedy mamy do czynienia z tablicami, bo to sprawia, że kod jest bardziej przejrzysty i łatwiejszy do zrozumienia. Co więcej, foreach ma tę fajną cechę, że poradzi sobie z różnymi typami wartości w tablicy, więc to naprawdę uniwersalne narzędzie. Pamiętaj, że używając tej pętli, poprawiasz nie tylko wydajność swojego kodu, ale też jego czytelność, co jest super ważne, zwłaszcza w dużych projektach.

Pytanie 16

Na ilustracji zaprezentowano koncepcję układu bloków strony internetowej. Przyjmując, że bloki są realizowane za pomocą znaczników sekcji, a szerokość jest określona tylko dla bloków 2, 3 oraz 4, ich stylowanie powinno uwzględniać właściwość

Ilustracja do pytania
A. float: left dla wszystkich bloków
B. clear: both dla bloku 5 i float: left jedynie dla bloków 2, 3 oraz 4
C. clear: both dla wszystkich bloków
D. float: left jedynie dla bloków 3 i 4 oraz clear: both dla bloku 2
Odpowiedź jest prawidłowa, ponieważ wykorzystanie float: left dla bloków 2, 3 i 4 pozwala na ich ustawienie obok siebie w poziomie. Jest to klasyczna technika stosowana w CSS do tworzenia layoutów, gdzie elementy mają płynąć obok siebie. Definiując float: left, elementy zaczynają od lewej krawędzi rodzica i układają się w linii poziomej. Użycie clear: both dla bloku 5 zapewnia, że blok ten zacznie się poniżej pływających bloków 2, 3 i 4, a nie obok nich. Clear: both jest konieczne, aby zapewnić, że blok 5 nie zostanie zakłócony przez floating, co jest powszechną praktyką przy tworzeniu wielokolumnowych layoutów. Kiedy float jest używany bez clear, może prowadzić do overlapania elementów, co jest niepożądane w strukturze layoutu. Praktyczne zastosowanie tego podejścia obejmuje układy z nagłówkiem, treścią i stopką, gdzie nagłówek i stopka powinny być pełnej szerokości, a treść podzielona na kolumny obok siebie. To podejście jest zgodne z tradycyjnymi metodami budowania stron przed wprowadzeniem flexboxa i grida, gdzie float był jednym z podstawowych narzędzi do zarządzania układem strony. Współczesne dobre praktyki wciąż uznają jego istotność, zwłaszcza w kontekście starszych projektów utrzymywanych z biegiem czasu.

Pytanie 17

W HTML informacje o autorze, streszczeniu oraz słowach kluczowych strony powinny być umieszczone

A. pomiędzy znacznikami <head> i </head>, w znaczniku <style>
B. pomiędzy znacznikami <body> i </body>, w znaczniku <html>
C. pomiędzy znacznikami <body> i </body>, w znaczniku <meta>
D. pomiędzy znacznikami <head> i </head>, w znaczniku <meta>
W HTML kluczowe informacje, takie jak autor, streszczenie i słowa kluczowe, powinny być umieszczone między znacznikami <head> i </head>. Te znaczniki <meta> są naprawdę ważne, bo to one informują przeglądarki i wyszukiwarki o tym, co jest w Twojej stronie. Na przykład, znaczniki <meta name="description" content="Opis strony"> oraz <meta name="keywords" content="słowo1, słowo2, słowo3">. Dzięki tym danym, wyszukiwarki lepiej rozumieją, o czym jest strona, co może wpłynąć na jej pozycję w wynikach wyszukiwania. Moim zdaniem, dobrze przemyślane opisy i słowa kluczowe to klucz do sukcesu, bo to one przyciągają użytkowników do kliknięcia w Twój link. Pamiętaj też, że znacznik <title> i inne meta tagi w <head> są mega istotne dla SEO. Informacje te tworzą podstawy Twojego dokumentu HTML, więc warto je dobrze wypełnić, żeby strona działała jak należy.

Pytanie 18

Dostępna jest tabela z danymi o mieszkaniach, zawierająca kolumny: adres, metraż, liczba_pokoi, standard, status, cena. Wykonanie poniższej kwerendy SQL SELECT spowoduje wyświetlenie

SELECT metraz, cena FROM mieszkania WHERE ile_pokoi > 3;
A. Wszystkie informacje o tych mieszkaniach, które mają minimum 3 pokoje
B. Metraż oraz koszt tych mieszkań, które mają przynajmniej 3 pokoje
C. Wszystkie informacje poza adresem tych mieszkań, które mają więcej niż 3 pokoje
D. Metraż oraz koszt tych mieszkań, które mają więcej niż 3 pokoje
W tym zapytaniu SQL chodzi o to, żeby ściągnąć konkretne dane z tabeli mieszkania. Używamy klauzuli SELECT, dlatego wybieramy tylko te kolumny, które nas interesują, czyli metraż i cena. I to wszystko bierzemy z tabeli mieszkania, co mamy w klauzuli FROM. Jeszcze dodajemy filtr WHERE, który mówi, że bierzemy tylko te mieszkania, które mają więcej niż trzy pokoje. To naprawdę dobra strategia, bo dzięki temu dokładnie widzimy, co nas interesuje. Takie zapytanie przydaje się w analizach rynku nieruchomości, bo można porównywać ceny mieszkań z większą ilością pokoi. Ogólnie mówiąc, SQL jest super narzędziem do pracy z danymi, bo pozwala nam szybko i efektywnie wyciągać to, co jest dla nas ważne. Wiedza na temat takich zapytań to podstawa, zwłaszcza w pracy z dużymi bazami danych i generowaniu różnych raportów.

Pytanie 19

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

A. w relacji 1..n pole klucza obcego łączy się z polem klucza obcego innej tabeli
B. pole klucza podstawowego nie może pozostawać puste
C. pole klucza podstawowego musi mieć utworzony indeks
D. pole klucza obcego nie może być puste
Pole klucza podstawowego, definiujące unikalność wierszy w tabeli, nie może być puste. Jest to fundamentalna zasada normalizacji baz danych, która zapewnia integralność danych oraz ich jednoznaczność. W praktyce oznacza to, że każda tabela w relacyjnej bazie danych musi mieć przynajmniej jeden klucz podstawowy, który nie dopuszcza do pojawienia się dwóch identycznych rekordów. Na przykład, w bazie danych klientów, numer identyfikacyjny klienta (np. PESEL lub ID) powinien być kluczem podstawowym. Dzięki temu można jednoznacznie identyfikować każdy rekord, co jest kluczowe dla operacji takich jak aktualizacja lub usunięcie danych. Dobrą praktyką jest także zapewnienie, aby klucz podstawowy był prosty w użyciu, zrozumiały dla użytkowników oraz, w miarę możliwości, niemożliwy do zmiany, co zmniejsza ryzyko błędów przy zarządzaniu danymi. Dodatkowo, klucz podstawowy powinien być indeksowany, co przyspiesza operacje wyszukiwania, ale jego podstawową cechą pozostaje unikalność i obowiązek posiadania wartości.

Pytanie 20

Tabela o nazwie naprawy zawiera kolumny: klient, czyNaprawione. Jakie polecenie należy użyć, aby wykasować rekordy, w których pole czyNaprawione ma wartość prawdziwą?

A. DELETE FROM naprawy WHERE czyNaprawione = TRUE;
B. DELETE naprawy WHERE czyNaprawione = TRUE;
C. DELETE FROM naprawy;
D. DELETE klient FROM naprawy WHERE czyNaprawione = TRUE;
Poprawna odpowiedź to 'DELETE FROM naprawy WHERE czyNaprawione = TRUE;'. To polecenie SQL jest zgodne z syntaksą używaną do usuwania rekordów z tabeli, gdzie spełniony jest określony warunek. W tym przypadku, usuwamy wszystkie rekordy z tabeli 'naprawy', dla których pole 'czyNaprawione' ma wartość TRUE. Użycie słowa kluczowego 'FROM' jest niezbędne, aby wskazać, z której tabeli chcemy usunąć dane. Przykładowo, jeśli w tabeli 'naprawy' mamy wielu klientów, z którymi nie zostały jeszcze dokonane naprawy, a chcemy zachować tylko te, które zostały zakończone, takie polecenie jest idealne. W praktyce, stosowanie takich zapytań jest istotne, aby utrzymywać bazę danych w porządku i eliminować nieaktualne informacje. Ponadto, zgodnie z dobrymi praktykami, przed wykonaniem polecenia DELETE warto wykonać zapytanie SELECT z tym samym warunkiem, aby zobaczyć, które rekordy zostaną usunięte.

Pytanie 21

Wskaź poprawną formę kodowania polskich znaków w pliku HTML?

A. <meta content='UTF8'>
B. <meta "content=UTF-8">
C. <meta charset="UTF-8">
D. <meta char set= "UTF-8">
Odpowiedź <meta charset="UTF-8"> to strzał w dziesiątkę! To zgodny z nowoczesnymi standardami HTML sposób na określenie kodowania znaków w dokumencie. Dzięki temu, że używamy atrybutu 'charset' z wartością 'UTF-8', mówimy przeglądarkom, że tekst powinien być interpretowany według tego kodowania. UTF-8 jest super popularne, bo obsługuje wszystkie znaki w Unicode. To oznacza, że możemy pisać wszystkie polskie znaki diakrytyczne, czyli te jak ą, ć, ę, ł itd., bez obaw o błędy w wyświetlaniu. Jeśli wstawisz ten tag w sekcji <head> swojego dokumentu HTML, masz pewność, że strona będzie dobrze wyglądać w różnych przeglądarkach i na różnych urządzeniach. Dobrze jest umieszczać go na początku sekcji <head>, żeby uniknąć problemów z pokazywaniem treści. Co więcej, korzystanie z UTF-8 jest rekomendowane przez W3C, więc to naprawdę dobry wybór dla nowoczesnych aplikacji webowych.

Pytanie 22

Do czego służy w JavaScript metoda Math.random()?

A. do zaokrąglenia liczby w górę do całkowitej
B. do zwrócenia liczby po zaokrągleniu
C. do zwrócenia liczby pseudolosowej
D. do porównania dwóch napisów
Metoda Math.random() zwraca liczbę pseudolosową z przedziału od 0 (włącznie) do 1 (wyłącznie). Mnożąc i zaokrąglając wynik, uzyskuje się losowe liczby z dowolnego zakresu. Dlatego Math.random() zwraca liczbę pseudolosową.

Pytanie 23

Podaj słowo kluczowe w języku C++, które umieszczane przed wbudowanym typem danych, umożliwia przyjmowanie jedynie nieujemnych wartości liczbowych?

A. unsigned
B. short
C. const
D. long
Słowo kluczowe 'unsigned' w języku C++ jest używane do deklaracji zmiennych, które będą przechowywać tylko wartości nieujemne. Oznacza to, że zmienna zadeklarowana jako 'unsigned int' będzie miała zakres od 0 do 4 294 967 295 (dla 32-bitowej reprezentacji), co podwaja maksymalną wartość w porównaniu do standardowego 'int', który może przyjmować wartości od -2 147 483 648 do 2 147 483 647. Zastosowanie 'unsigned' jest szczególnie przydatne w sytuacjach, gdzie negatywne wartości nie mają sensu, jak w przypadku liczników, indeksów tablic czy operacji na bitach. Przykład zastosowania: w pętli for, gdy iterujemy przez elementy tablicy, możemy użyć 'unsigned int' dla indeksu, aby upewnić się, że nie przyjmiemy błędnej wartości indeksu, co mogłoby prowadzić do nieprzewidzianych błędów. W praktyce, stosowanie 'unsigned' wspiera bezpieczeństwo i integralność danych, a także zwiększa zakres wartości, które można przechowywać.

Pytanie 24

Który zapis definiuje w JavaScripcie komentarz JEDNOLINIOWY?

A.
//
B.
#
C.
/*
D.
?
W JavaScripcie komentarz jednoliniowy zaczyna się od // - wszystko od tych znaków do końca wiersza jest pomijane. Dlatego komentarz jednoliniowy to //.

Pytanie 25

Które z poniższych poleceń JavaScript zmieni kolor tekstu na niebieski w paragrafie oznaczonym w HTML?

<p id="jeden">Kwalifikacja EE.01</p>
A. document.getElementById("jeden").style.background-color = "blue";
B. document.getElementById("jeden").style.color = "blue";
C. document.getElementById("jeden").color = "blue";
D. document.getElementById("jeden").background-color = "blue";
W języku JavaScript do zmiany stylu elementu HTML używamy obiektu style powiązanego z danym elementem. W przypadku zmiany koloru tekstu w akapicie używamy właściwości color. Poprawna składnia to document.getElementById("jeden").style.color = "blue";. Funkcja getElementById pobiera element o podanym identyfikatorze w tym przypadku jeden. Następnie poprzez przypisanie wartości blue do style.color zmieniamy kolor tekstu wewnątrz tego elementu na niebieski. Jest to zgodne z praktykami programowania w JavaScript ponieważ separacja stylów od treści jest istotna dla czytelności i utrzymania kodu a użycie style pozwala na bezpośrednią modyfikację właściwości CSS. Dobre praktyki sugerują aby stylowanie umieszczać w plikach CSS jednak JavaScript daje możliwość dynamicznej modyfikacji stylów co jest użyteczne w interaktywnych aplikacjach webowych. Przykładowo podczas tworzenia dynamicznych interfejsów użytkownika możemy reagować na różne zdarzenia zmieniając style elementów w odpowiedzi na działania użytkownika co zwiększa responsywność i atrakcyjność aplikacji.

Pytanie 26

Etap, w którym identyfikuje się oraz eliminuje błędy w kodzie źródłowym programów, to

A. standaryzacja
B. kompilowanie
C. debugowanie
D. normalizacja
Debugowanie to proces identyfikacji, analizy i eliminacji błędów w kodzie źródłowym programów komputerowych. Jest to kluczowy etap w cyklu życia oprogramowania, który zapewnia, że aplikacje działają zgodnie z założeniami projektowymi. W praktyce debugowanie może obejmować różne techniki, takie jak stosowanie punktów przerwania, śledzenie wartości zmiennych czy analiza stosu wywołań. Przykładowo, programista może użyć narzędzi debugujących, takich jak GDB dla programów w C/C++ lub wbudowane debugery w IDE, takie jak Visual Studio czy Eclipse. Debugowanie jest również związane z dobrymi praktykami, jak testowanie jednostkowe i integracyjne, które pozwalają na wczesne wykrycie błędów. Zrozumienie i umiejętność efektywnego debugowania jest niezbędna dla każdego programisty, aby tworzyć wysokiej jakości, niezawodne i wydajne oprogramowanie. Warto również podkreślić znaczenie dokumentacji oraz korzystania z systemów kontroli wersji, takich jak Git, które pozwalają śledzić zmiany w kodzie i ułatwiają proces debugowania.

Pytanie 27

Aby poprawnie udokumentować poniższą linię kodu, po znakach // należy dodać komentarz, że linia ta:

document.getElementById("tytul").style.color = "red"; //
A. zmienia treść elementu o id „tytuł” na słowo „red”
B. tworzy nowy element o id „tytuł”
C. zmienia kolor tekstu elementu o id „tytuł” na czerwony
D. zawiera błąd składniowy i nie zadziała
document.getElementById("tytul") odnajduje element strony o id „tytuł”, a przypisanie do jego właściwości style.color zmienia kolor tekstu tego elementu. Wartość "red" oznacza kolor czerwony. W efekcie tekst elementu „tytuł” staje się czerwony. Dlatego komentarz powinien mówić, że linia zmienia kolor tekstu elementu o id „tytuł” na czerwony.

Pytanie 28

Które zapytanie SQL wybiera nazwiska z tabeli klient, które mają co najmniej jedną literę i zaczynają się na literę Z?

A. SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z_%'
B. SELECT nazwisko FROM klient WHERE nazwisko='Z_?'
C. SELECT nazwisko FROM klient WHERE nazwisko='Z?'
D. SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z%'
Odpowiedź SELECT nazwisko FROM klient WHERE nazwisko LIKE 'Z%'; jest poprawna, ponieważ wykorzystuje operator LIKE, który jest standardowym narzędziem w SQL do wyszukiwania wzorców w danych tekstowych. Znak procenta (%) w tym kontekście oznacza, że może wystąpić dowolna liczba znaków po literze Z, co jest zgodne z wymaganiem, aby nazwiska były co najmniej jednoliterowe. W praktyce, takie zapytanie umożliwia efektywne wyszukiwanie danych w bazach, co jest kluczowe w kontekście aplikacji zarządzających danymi klientów. Dobre praktyki w projektowaniu baz danych zalecają stosowanie operatora LIKE do filtrowania wyników, co pozwala na zwiększenie przejrzystości i wydajności. W przypadku wyszukiwania nazwisk, można również użyć indeksów, aby przyspieszyć wykonanie zapytań, co jest ważne w kontekście dużych zbiorów danych, gdzie czas odpowiedzi aplikacji może mieć istotne znaczenie dla użytkowników końcowych. Używanie LIKE w połączeniu z odpowiednimi znakami wieloznacznymi jest więc kluczowym elementem efektywnego zarządzania danymi.

Pytanie 29

W języku PHP do zmiennej a przypisano ciąg znaków, w którym wielokrotnie pojawia się słowo Kowalski. Aby jednym poleceniem wymienić w zmiennej a wszystkie wystąpienia słowa Kowalski na słowo Nowak, należy użyć polecenia

A. $a = str_replace('Kowalski', 'Nowak', $a);
B. $a = str_replace('Nowak', 'Kowalski');
C. $a = str_replace('Nowak', 'Kowalski', $a);
D. $a = str_rep('Kowalski', 'Nowak', $a);
Odpowiedź $a = str_replace('Kowalski', 'Nowak', $a); jest jak najbardziej trafna. Funkcja str_replace w PHP działa tak, że zamienia wszystkie wystąpienia jednego ciągu znaków na inny w danym tekście. W tym przypadku zastępujemy 'Kowalski' słowem 'Nowak'. To działa tak, że jak masz tekst 'Jan Kowalski i Anna Kowalski' w zmiennej $a, po wykonaniu tego kodu $a zmieni się na 'Jan Nowak i Anna Nowak'. Tego typu operacje są naprawdę przydatne w PHP, zwłaszcza gdy zajmujemy się danymi, które musimy zmieniać lub aktualizować, na przykład w aplikacjach internetowych. Pamiętaj, żeby używać takich funkcji w odpowiednich miejscach, bo operacje na dużych zbiorach danych mogą być wymagające.

Pytanie 30

W języku SQL, jaki będzie efekt wykonania poniższego zapytania?

ALTER TABLE osoba DROP COLUMN grupa;
A. Zmieniona zostanie nazwa tabeli na grupa.
B. Dodana zostanie kolumna grupa.
C. Usunięta zostanie kolumna grupa.
D. Zmieniona zostanie nazwa kolumny na grupa.
Gratulacje, wybrałeś poprawną odpowiedź. W zaprezentowanym pytaniu skupiliśmy się na instrukcji 'ALTER TABLE' w języku SQL, a dokładniej na jej konkretnej odmianie, tj. 'DROP COLUMN'. Ta instrukcja służy do usunięcia kolumny z istniejącej tabeli. W tym konkretnym przypadku, użyto jej do usunięcia kolumny o nazwie 'grupa' z tabeli 'osoba'. Jest to przydatne narzędzie w przypadku, gdy chcemy usunąć dane z bazy bez usuwania całej tabeli. Pamiętaj jednak o skutkach utraty wszystkich danych z tej kolumny. Zawsze warto zrobić backup bazy danych przed taką operacją. Dobrą praktyką jest także sprawdzenie, jakie inne elementy bazy są zależne od usuwanej kolumny, aby uniknąć niespodziewanych problemów.

Pytanie 31

Aby w języku PHP odwołać się do danych formularza przesłanych metodą POST, należy użyć tablicy:

A.
$_SERVER
B.
$_FILES
C.
$_POST
D.
$_SESSION
Dane pól formularza wysłanego metodą POST PHP udostępnia w tablicy superglobalnej $_POST. Odwołujesz się do konkretnego pola po jego atrybucie name, na przykład $_POST["login"]. Jest ona dostępna w każdym miejscu skryptu bez deklarowania. Analogicznie dane wysłane metodą GET trafiają do $_GET. Dlatego do odczytania pól formularza przesłanego przez POST używa się właśnie $_POST.

Pytanie 32

Aby nałożyć na zdjęcie półprzezroczysty znak wodny (logo prześwitujące przez obraz), należy:

A. poprawić nasycenie kolorów
B. odpowiednio przyciąć obraz
C. wykorzystać kanał alfa
D. zastosować filtr Gaussa
Aby logo prześwitywało przez zdjęcie (półprzezroczysty znak wodny), wykorzystuje się KANAŁ ALFA - steruje on stopniem przezroczystości pikseli, więc nakładana warstwa może być częściowo widoczna. Dlatego należy wykorzystać kanał alfa.

Pytanie 33

W tabeli mieszkancy znajdują się dane o osobach z całej Polski. Aby zliczyć, ile różnych miast jest zawartych w tej tabeli, należy wykonać kwerendę

A. SELECT COUNT(miasto) FROM mieszkancy;
B. SELECT DISTINCT miasto FROM mieszkancy;
C. SELECT COUNT(DISTINCT miasto) FROM mieszkancy;
D. SELECT COUNT(miasto) FROM mieszkancy DISTINCT;
Wybrana kwerenda SELECT COUNT(DISTINCT miasto) FROM mieszkancy; jest poprawna, ponieważ pozwala na zliczenie unikalnych miast w tabeli mieszkancy. Funkcja DISTINCT eliminuje duplikaty, co oznacza, że tylko różne wartości miasto będą brane pod uwagę w procesie zliczania. Użycie COUNT w połączeniu z DISTINCT jest standardową praktyką w SQL, która zapewnia dokładne wyniki przy analizie danych. Taka metoda jest szczególnie przydatna w przypadku dużych zbiorów danych, gdzie wiele rekordów może odnosić się do tego samego miasta. Na przykład, jeśli mamy 1000 rekordów, z których 200 dotyczy Warszawy, 300 Krakowa oraz 500 Gdańska, kwerenda zwróci wynik 3, ponieważ tylko trzy różne miasta zostały uwzględnione. Tego typu zapytania są powszechne w raportach analitycznych, gdzie istotne jest zrozumienie dystrybucji danych oraz identyfikacja różnych kategorii w zbiorze, co jest niezbędne dla podejmowania decyzji biznesowych.

Pytanie 34

Co można powiedzieć o przedstawionym zapisie języka HTML 5?

<title>Strona o psach</title>
A. Pojawi się na karcie dokumentu w przeglądarce.
B. Zostanie umieszczony w treści strony, na samym czubku.
C. Jest fakultatywny w kontekście HTML 5 i nie jest wymagany w dokumencie.
D. Stanowi jedynie informację dla robotów wyszukiwania i nie jest widoczny w przeglądarce.
Zaznaczenie poprawnej odpowiedzi pokazuje, że to, co jest w znaczniku <title>, pojawia się na karcie w przeglądarce. To naprawdę ważny element HTML, bo informuje użytkowników, o czym jest dana strona. Zgodnie z tym, co mówi W3C, tytuł strony jest kluczowy dla SEO, gdyż wyświetla się w wynikach wyszukiwania i na zakładkach przeglądarek. Fajnie, jak tytuł jest krótki, ma kluczowe słowa, które mówią o zawartości, i przyciąga wzrok. Na przykład, jak zrobisz stronę o psach rasowych, to tytuł <title> w stylu 'Strona o psach - Poradnik dla właścicieli' nie tylko mówi, o czym będzie treść, ale też może sprawić, że lepiej widać ją w wynikach wyszukiwania. Pamiętaj, że zawartość znacznika <title> widać na górze okna przeglądarki, co ułatwia poruszanie się i znajdowanie otwartych kart.

Pytanie 35

Formatowanie CSS dla akapitu określa styl szarej ramki z następującymi właściwościami:

p {
    padding: 15px;
    border: 2px dotted gray;
}
A. Linia kropkowa; grubość 2 px; odległości pomiędzy tekstem a ramką 15 px
B. Linia ciągła; grubość 2 px; odległości pomiędzy tekstem a ramką 15 px
C. Linia kreskowa; grubość 2 px; odległości poza ramką 15 px
D. Linia ciągła; grubość 2 px; odległości poza ramką 15 px
Odpowiedź ta jest prawidłowa, ponieważ w CSS stylizowanie elementu akapitu za pomocą podanego kodu definiuje ramkę o linii kropkowej, grubości 2 pikseli oraz paddingu wynoszącym 15 pikseli. Padding to przestrzeń wewnętrzna pomiędzy zawartością elementu a jego ramką, co oznacza, że tekst w akapicie będzie oddalony od krawędzi ramki o 15 pikseli. Styl ramki 'dotted' jest często używany w projektach webowych, aby stworzyć efekt wizualny, który jest mniej formalny, a zarazem estetyczny. Można go wykorzystać w kontekście wyróżniania ważnych informacji lub sekcji strony, co zwiększa czytelność i przyciąga uwagę użytkowników. Przykładem zastosowania może być sekcja z informacjami o promocjach, gdzie forma wizualna ma na celu przyciągnięcie wzroku. Używając standardów CSS, dobrego podejścia do UX (User Experience) oraz wytycznych W3C, projektanci stron internetowych mogą efektywnie komunikować intencje i priorytety poprzez stylowanie wizualne.

Pytanie 36

Do której właściwości można przypisać wartości: static, relative, fixed, absolute oraz sticky?

A. display
B. position
C. list-style-type
D. text-transform
Odpowiedź 'position' to strzał w dziesiątkę! To właściwość w CSS, która mówi nam, jak elementy mają być ustawione na stronie. Masz różne opcje, jak 'static', 'relative', 'fixed', 'absolute' i 'sticky', które każda z nich ma swoje przeznaczenie. Na przykład 'static' to standard, który nic nie zmienia w układzie, a 'relative' umożliwia przesunięcie elementu w stosunku do jego pierwotnej pozycji. Z kolei 'absolute' pozwala umieścić element w odniesieniu do najbliższego przodka, który nie jest ustawiony na 'static', co świetnie się sprawdza, gdy chcesz, żeby coś się ładnie ułożyło na stronie. 'fixed' trzyma element w tym samym miejscu na ekranie, nawet jak przewijasz stronę – idealne dla nagłówków. 'Sticky' łączy w sobie cechy 'relative' i 'fixed', co daje lepszą kontrolę nad pozycjonowaniem przy przewijaniu. Używanie tych wartości jest naprawdę ważne, jeżeli projektujesz responsywne interfejsy, więc dobrze, że to wiesz!

Pytanie 37

Na przedstawionej grafice widać fragment bazy danych. Jakie kwerendę należy zastosować, aby uzyskać nazwy produktów zakupionych przez klienta o id = 1?

Ilustracja do pytania
A. SELECT nazwa FROM produkty JOIN transakcje_produkty USING(nr_produktu) WHERE nr_klienta = 1
B. SELECT nazwa FROM produkty JOIN transakcje ON nr_produktu = nr_klienta WHERE nr_klienta = 1
C. SELECT nazwa FROM produkty JOIN transakcje_produkty JOIN transakcje WHERE nr_klienta = 1
D. SELECT nazwa FROM produkty JOIN transakcje_produkty USING(nr_produktu) JOIN transakcje USING(nr_transakcji) WHERE nr_klienta = 1
Prawidłowa odpowiedź używa właściwego połączenia tabel baz danych aby otrzymać nazwy produktów zakupionych przez klienta o konkretnym identyfikatorze. W SQL kwerenda z JOIN umożliwia łączenie danych z więcej niż jednej tabeli na podstawie wspólnego pola. W tym przypadku tabela produkty jest połączona z transakcje_produkty przez pole nr_produktu oraz tabela transakcje jest połączona z transakcje_produkty przez pole nr_transakcji. Dzięki temu możliwe jest uzyskanie pełnego obrazu transakcji dla klienta o id = 1. Zastosowanie USING(nr_produktu) i USING(nr_transakcji) upraszcza kwerendę eliminując konieczność jawnego określania kolumn po obu stronach klauzuli ON. Praktyczne zastosowanie takich kwerend jest podstawą w analizie danych sprzedażowych gdzie analiza historii zakupów klientów może dostarczyć cennych informacji dla działów marketingu oraz logistyki. Dobre praktyki obejmują również optymalizację zapytań SQL aby były jak najbardziej efektywne co jest kluczowe przy pracy z dużymi zbiorami danych.

Pytanie 38

Które zapytanie SQL zwróci wszystkie kolumny z tabeli produkty?

A.
SELECT * FROM produkty;
B.
SELECT produkty FROM *;
C.
FETCH * FROM produkty;
D.
GET * FROM produkty;
Aby pobrać wszystkie kolumny tabeli, w miejscu listy pól wstawia się gwiazdkę: SELECT * FROM produkty;. Symbol * znaczy „wszystkie pola”, więc zapytanie zwróci pełne wiersze tabeli produkty. Dlatego ta kwerenda jest poprawna.

Pytanie 39

Aby utworzyć strukturę strony internetowej za pomocą znaczników semantycznych języka HTML 5, zgodnie z przedstawionym na ilustracji projektem, SEKCJA B powinna być zawarta w znaczniku

Ilustracja do pytania
A. <nav></nav>
B. <header></header>
C. <section></section>
D. <article></article>
Poprawnie – sekcja B na ilustracji to klasyczne menu nawigacyjne strony, więc w semantycznym HTML5 powinna być zawarta w znaczniku <nav>. Ten element został wprowadzony właśnie po to, żeby jasno oznaczać blok linków służących do poruszania się po serwisie: główne menu, nawigacja w stopce, paginacja artykułów itp. Przeglądarki, czytniki ekranu i roboty wyszukiwarek rozpoznają <nav> jako specjalny region nawigacyjny i dzięki temu lepiej „rozumieją” strukturę strony. To jest bardzo ważne z punktu widzenia dostępności (WCAG) i SEO. W typowym szkielecie strony HTML5 nagłówek z tytułem umieszcza się w <header>, menu w <nav>, główną treść w <main>, artykuły w <article>, a poboczne informacje w <aside>. U Ciebie: sekcja A to najpewniej <header>, sekcja B – <nav>, a sekcja C – jakiś <section> lub <article>. W praktyce kod dla pokazanej sekcji B wyglądałby np.: <nav><a href="index.html">Główna</a><a href="onas.html">O nas</a><a href="kontakt.html">Kontakt</a></nav>. Moim zdaniem dobrze jest od początku wyrabiać nawyk używania <nav> tylko dla głównych bloków nawigacji, a nie dla każdego przypadkowego linka w tekście. Dzięki temu dokument ma czytelną hierarchię, łatwiej się go styluje w CSS i utrzymuje w większych projektach.

Pytanie 40

Określ na podstawie diagramu, jaką liczebność należy zdefiniować przy związku pomiędzy encjami Podręcznik i Wydawnictwo zakładając, że dane dotyczące różnych podręczników odpowiadają jednemu wydawnictwu.

Ilustracja do pytania
A. 1-1 (1 przy encji Podręcznik, 1 przy encji Wydawnictwo)
B. 1-N (1 przy encji Podręcznik, N przy encji Wydawnictwo)
C. N-1 (N przy encji Podręcznik, 1 przy encji Wydawnictwo)
D. M-N (M przy encji Podręcznik, N przy encji Wydawnictwo)
Poprawnie wskazana krotność N–1 oznacza, że wiele podręczników może być powiązanych z jednym wydawnictwem, natomiast każdy pojedynczy podręcznik ma dokładnie jedno wydawnictwo. Dokładnie to wynika z treści: „dane dotyczące różnych podręczników odpowiadają jednemu wydawnictwu”. W notacji związków encji mówimy więc o relacji wiele‑do‑jednego z punktu widzenia encji Podręcznik. W praktycznym modelu relacyjnej bazy danych przekłada się to na klucz obcy w tabeli PODRĘCZNIK, który wskazuje na klucz główny (np. id_wydawnictwa) w tabeli WYDAWNICTWO. Dzięki temu nie powielamy danych o wydawnictwie przy każdym rekordzie, tylko przechowujemy je w jednym miejscu, zgodnie z zasadą normalizacji (co najmniej 2. i 3. postać normalna). Moim zdaniem to jest jedno z podstawowych i najczęściej wykorzystywanych powiązań: podobny schemat mamy przy relacji Produkt–Producent, Samochód–Marka, Student–Grupa itp. W takich przypadkach w tabeli „wiele” zawsze ląduje kolumna z kluczem obcym do tabeli „jeden”. Dodatkowo warto zauważyć, że gdybyśmy kiedyś chcieli pozwolić na zmianę nazwy wydawnictwa, to dzięki takiemu modelowi robimy to tylko w jednym wierszu tabeli WYDAWNICTWO, a wszystkie powiązane podręczniki automatycznie „widzą” zaktualizowaną wartość. To jest dokładnie ta dobra praktyka projektowania: minimalizacja redundancji i łatwiejsze utrzymanie spójności danych (integralność referencyjna, klucze obce z ON UPDATE/DELETE). W dobrze zaprojektowanych systemach bibliotecznych czy księgarni internetowych ta relacja N–1 między książką/podręcznikiem a wydawnictwem jest standardem branżowym i praktycznie normą w modelach ER.