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 00:13
  • Data zakończenia: 8 czerwca 2026 00:34

Egzamin zdany!

Wynik: 21/40 punktów (52,5%)

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

W języku JavaScript, aby zweryfikować, czy liczba mieści się w zakresie (100;200>, należy użyć zapisu:

A. if (liczba > 100 || liczba <= 200)
B. if (liczba > 100 && liczba <= 200)
C. if (liczba < 100 || liczba >= 200)
D. if (liczba < 100 && liczba <= 200)
W analizowanych odpowiedziach pojawiają się spore błędy w podejściu do warunków. Na przykład, w pierwszej odpowiedzi masz 'liczba < 100 && liczba <= 200', co nie ma sensu, bo nie może być liczba, która jest mniejsza od 100, a jednocześnie mniejsza lub równa 200. Trochę się to kłóci, prawda? W drugiej odpowiedzi mamy '||', a to też jest mylące, bo mówi, że liczba może być większa od 100 LUB mniejsza lub równa 200. To oznacza, że liczby powyżej 200 też będą spełniać ten warunek, a to nie jest to, co chcemy. Ta kolejna odpowiedź mówi, że 'liczba < 100 || liczba >= 200' sprawdzi, czy liczba jest poniżej 100 LUB na 200 lub wyżej, co kompletnie pomija to, czego szukamy. Takie błędy często wynikają z tego, że nie do końca rozumiesz, jak działają te operatory. Kluczowe jest, żeby dobrze definiować warunki i wiedzieć, jak logika operatorów wpływa na wynik, bo to pozwala tworzyć lepsze aplikacje bez błędów.

Pytanie 2

Który zestaw pojęć opisuje interfejs użytkownika strony internetowej?

A. obróbka danych, system zarządzania treścią, projektowanie informacji
B. szkic strony, diagram witryny, diagram przepływu informacji
C. przyciski, menu, interakcja użytkownika z aplikacją
D. wysyłanie zapytań do bazy, skrypty PHP
Interfejs użytkownika (UI - User Interface) to wszystko, przez co użytkownik komunikuje się ze stroną lub aplikacją: przyciski, menu, formularze, ikony, pola tekstowe oraz reakcje na jego działania (interakcja). Jego zadaniem jest sprawić, by obsługa była czytelna i wygodna. To warstwa widoczna w przeglądarce (front-end), w odróżnieniu od logiki serwerowej i baz danych. Dlatego interfejs użytkownika opisują przyciski, menu i interakcja z aplikacją.

Pytanie 3

Jak nazywa się proces przedstawienia, w formie właściwej dla danego środowiska, informacji zawartych w dokumencie elektronicznym?

A. rasteryzacja
B. mapowanie
C. renderowanie
D. teksturowanie
Pozostałe pojęcia oznaczają inne operacje. Mapowanie to przyporządkowanie elementów jednego zbioru do drugiego (np. klawiszy do funkcji, danych do struktur) - nie tworzy obrazu dokumentu. Rasteryzacja to konkretna zamiana grafiki wektorowej na siatkę pikseli, czyli wycinek szerszego procesu, a nie samo przedstawienie dokumentu. Teksturowanie należy do grafiki 3D i polega na nakładaniu tekstur (obrazów) na powierzchnie modeli. Przekształcenie dokumentu w jego widoczną postać to renderowanie, dlatego ta odpowiedź jest poprawna.

Pytanie 4

Który typ komunikatu jest przesyłany WYŁĄCZNIE „w dół” - od kierownika do pracownika?

A. uwagi dotyczące polityki organizacji
B. powierzenie zadania
C. zgłaszanie
D. poszukiwanie rozwiązań
Komunikacja „w dół” płynie od przełożonego do podwładnego, a jej typowym przykładem jest POWIERZENIE ZADANIA - kierownik przydziela pracownikowi obowiązek do wykonania. Dlatego komunikatem „w dół” jest powierzenie zadania.

Pytanie 5

Język JavaScript wspiera

A. abstrakcyjne klasy
B. wysyłanie ciastek z identycznymi informacjami do wielu użytkowników strony
C. obiekty DOM
D. funkcje wirtualne
Obiekty DOM (Document Object Model) są fundamentalnym aspektem języka JavaScript, umożliwiającym interakcję z dokumentami HTML i XML. Dzięki DOM, programiści mogą dynamicznie manipulować strukturą dokumentu, co pozwala na tworzenie interaktywnych aplikacji webowych. Na przykład, za pomocą JavaScript można zmieniać tekst w elementach HTML, dodawać lub usuwać elementy, a także reagować na zdarzenia użytkownika, takie jak kliknięcia czy ruchy myszy. Przykładowy kod: document.getElementById('example').innerHTML = 'Nowa zawartość'; ilustruje, jak można zmienić zawartość elementu z identyfikatorem 'example'. Zrozumienie i umiejętność pracy z DOM jest kluczowe w nowoczesnym tworzeniu stron internetowych oraz aplikacji w JavaScript, co wpisuje się w najlepsze praktyki rozwoju oprogramowania, takie jak separacja logiki od prezentacji i programowanie obiektowe.

Pytanie 6

Jaką metodę używa się w języku PHP do tworzenia komentarza obejmującego więcej niż jedną linijkę?

A. //
B. <!-- -->
C. #
D. /* */
W kontekście komentowania w języku PHP ważne jest zrozumienie, że różne metody mają swoje specyficzne zastosowania i ograniczenia. Użycie znaku '#' do komentowania nie jest właściwe w PHP, gdyż ta składnia jest typowa dla języka shellowego i nie jest wspierana w PHP. Próba użycia '#' spowoduje błąd składniowy, co jest klasycznym błędem popełnianym przez osoby, które mają doświadczenie w innych językach programowania, ale stają się mylące w kontekście PHP.

Z kolei pojedyncza linia komentarza, oznaczona przez '//', pozwala na komentowanie tylko jednej linii, co może być niewystarczające w przypadkach, gdy potrzebujesz dłuższego wyjaśnienia. To ograniczenie w praktyce prowadzi do fragmentacji komentarzy, co może obniżyć czytelność kodu. Użycie z kolei znaku '<!-- -->' jest związane z HTML i również nie jest poprawne w kontekście PHP. Tego rodzaju komentarze są ignorowane przez przeglądarki internetowe, co sprawia, że są one całkowicie nieprzydatne w kodzie PHP, gdzie potrzebujemy, aby komentarze były zrozumiałe dla programisty, a nie dla użytkownika końcowego.

Błędem myślowym związanym z tymi podejściami jest przekonanie, że można swobodnie przenosić metody komentowania z jednego języka do innego. Zrozumienie specyfiki każdego języka programowania, w tym jego zasadności i konwencji dotyczących komentarzy, jest kluczowe dla efektywnego pisania kodu, który jest zarówno funkcjonalny, jak i łatwy do zrozumienia.

Pytanie 7

Na stronie www znajduje się formularz, do którego należy stworzyć następujące funkcje: walidacja: w czasie wypełniania formularza na bieżąco kontrolowana jest poprawność danych, przesyłanie danych: po zrealizowaniu formularza i jego zatwierdzeniu, dane są przekazywane do bazy danych na serwerze. Aby zrealizować tę funkcjonalność w jak najprostszy sposób, należy zapisać

A. walidację w języku JavaScript, a przesyłanie danych w skrypcie PHP
B. walidację oraz przesyłanie danych w języku JavaScript
C. walidację oraz przesyłanie danych w języku PHP
D. walidację w skrypcie PHP, a przesyłanie danych w JavaScript
Wybór walidacji oraz przesyłania danych wyłącznie w PHP nie tylko nie jest optymalny, ale również niezgodny z dobrymi praktykami. Walidacja po stronie serwera, bez wcześniejszego sprawdzenia danych po stronie klienta, prowadzi do gorszego doświadczenia użytkownika, ponieważ każde błędne dane są wysyłane na serwer przed zwróceniem błędu do użytkownika. Taki proces zwiększa obciążenie serwera, ponieważ każde błędne żądanie wiąże się z niepotrzebnym przetwarzaniem, co jest szczególnie nieefektywne w przypadku formularzy często używanych przez użytkowników. W przypadku przesyłania danych w JavaScript, istnieje ryzyko, że dane mogą być manipulowane po drodze, co prowadzi do problemów z bezpieczeństwem, takich jak ataki typu Cross-Site Scripting (XSS). Oprócz tego, nie jest właściwe korzystanie z PHP do walidacji rzeczywistych danych wejściowych w interfejsie użytkownika, gdyż PHP jest językiem działającym po stronie serwera i nie ma dostępu do stanu interfejsu. Przykładem błędnego myślenia może być założenie, że serwer może efektywnie obsłużyć wszystkie błędy walidacji na etapie zapisu danych w bazie, co jest nieefektywne w praktyce. W związku z tym każda aplikacja internetowa powinna implementować walidację danych po stronie klienta i serwera, aby zminimalizować problemy z użytkownikami oraz zapewnić bezpieczeństwo aplikacji.

Pytanie 8

Do usuwania czego stosuje się w MySQL polecenie TRUNCATE TABLE?

A. tabel
B. wierszy tabeli
C. baz danych
D. kolumn
Pozostałe obiekty usuwają inne polecenia. Całą tabelę (ze strukturą) kasuje DROP TABLE, kolumnę - ALTER TABLE ... DROP COLUMN, a bazę - DROP DATABASE. TRUNCATE TABLE usuwa wyłącznie wiersze.

Pytanie 9

Aby zadeklarować pole klasy, do którego dostęp mają jedynie metody tej klasy, a które nie jest dostępne dla klas pochodnych, należy użyć kwalifikatora dostępu

A. prywatny
B. publikowany
C. chroniony
D. publiczny
Pole, które ma być widoczne tylko dla metod własnej klasy i niedostępne dla klas pochodnych, deklarujemy z modyfikatorem private. To najsilniejsze ograniczenie dostępu: pole prywatne istnieje w obiekcie, ale odwołać się do niego może wyłącznie kod tej samej klasy. Realizuje to zasadę hermetyzacji (enkapsulacji) - ukrywamy wewnętrzny stan obiektu i wystawiamy go na zewnątrz przez kontrolowane metody (gettery i settery). Dzięki temu nikt z zewnątrz, ani nawet klasa dziedzicząca, nie zmieni pola w sposób łamiący jego poprawność. Przykładowo pole z saldem konta zadeklarowane jako prywatne można modyfikować jedynie przez metody klasy, które pilnują reguł biznesowych.

Pytanie 10

Która funkcja PHP ustawia KODOWANIE znaków połączenia z bazą (np. dla polskich liter)?

A.
mysqli_connect()
B.
mysqli_fetch_assoc()
C.
mysqli_set_charset()
D.
mysqli_query()
Nawet gdy tabele są w utf8, połączenie PHP-baza może domyślnie używać innego kodowania - i wtedy „ą”, „ś”, „ł” zamieniają się w „krzaki”. Naprawia to mysqli_set_charset($polaczenie, "utf8"), ustawiając kodowanie znaków dla całej komunikacji z bazą. Wywołuje się ją raz, zaraz po połączeniu. Zapamiętaj: „set_charset” = ustaw zestaw znaków połączenia, żeby polskie litery zapisywały się i czytały poprawnie.

Pytanie 11

Który zapis w języku JavaScript daje jednakowy rezultat do przedstawionego kodu?

x = 0;
x += 10;
A. x = 10; x = 0;
B. x = 0; x++; x = x + 9;
C. x = 0; x--; x *= 9;
D. x = 10; x = x + 10;
Wybrana przez Ciebie odpowiedź, niestety nie jest zgodna z przykładem kodu przedstawionym na zdjęciu. Wszystkie niepoprawne odpowiedzi zawierają błędny rozumowanie dotyczące operacji na zmiennych w JavaScript. Bardzo częstym błędem jest mylenie operatorów inkrementacji i dekrementacji. Operator '--' w JavaScript zmniejsza wartość zmiennej o 1, a nie zwiększa. Również, operator '*=' jest skrótem dla mnożenia i przypisania wyniku do zmiennej, a nie dla dodawania. Kolejnym błędem jest niezrozumienie przypisania wartości do zmiennej. Instrukcja 'x = 10; x = 0;' przypisuje najpierw wartość 10 do zmiennej 'x', a potem nadpisuje ją wartością 0, co jest niezgodne z kodem na zdjęciu. To są typowe błędy, które prowadzą do niepoprawnych wniosków na temat działania JavaScript. Ważne jest zrozumienie podstawowych operatorów i ich działania, aby uniknąć takich pomyłek. Pamiętaj, że zrozumienie zasad działania języka programowania jest kluczowe dla tworzenia poprawnych i efektywnych kodów.

Pytanie 12

Która kolejność stylów CSS jest poprawna pod względem priorytetu (od najwyższego)?

A. lokalny → wewnętrzny → zewnętrzny
B. rozciąganie stylu → zewnętrzny → lokalny
C. wewnętrzny → zewnętrzny → rozciąganie stylu
D. zewnętrzny → wydzielone bloki → lokalny
Przy kaskadzie CSS najwyższy priorytet ma styl LOKALNY (inline, w atrybucie style), potem WEWNĘTRZNY (w <style> w nagłówku), a najniższy ZEWNĘTRZNY (dołączony plik CSS). Dlatego kolejność to: lokalny, wewnętrzny, zewnętrzny.

Pytanie 13

Jakie słowo kluczowe w SQL należy zastosować, aby usunąć powtarzające się rekordy?

A. ORDER BY
B. DISTINCT
C. LIKE
D. GROUP BY
Wybór słów kluczowych takich jak ORDER BY, LIKE czy GROUP BY w kontekście eliminacji duplikatów może prowadzić do nieporozumień dotyczących ich rzeczywistej funkcji w SQL. ORDER BY służy do sortowania wyników zapytania, co nie ma wpływu na eliminację duplikatów. Chociaż sortowanie może pomóc w lepszym zrozumieniu danych, to nie rozwiązuje problemu powtarzających się wartości w wynikach. Podobnie, słowo kluczowe LIKE jest używane do wyszukiwania wzorców w tekstach i nie ma żadnego zastosowania w kontekście duplikatów. Z kolei GROUP BY, chociaż może być używane do agregacji danych, nie jest bezpośrednim narzędziem do eliminacji duplikatów. Grupując dane, możemy zliczać, sumować lub wykonywać inne operacje na grupach rekordów, ale sama konstrukcja GROUP BY nie gwarantuje usunięcia duplikatów z wyników. Często mylone jest z DISTINCT, ponieważ efektywnie może prowadzić do zmniejszenia liczby wyników, ale jego główną funkcją jest agregacja. W rezultacie, użycie tych słów kluczowych zamiast DISTINCT może prowadzić do błędnych wyników lub utraty istotnych danych. Zrozumienie właściwej roli każdego z tych słów kluczowych jest kluczowe dla efektywnego wykorzystania SQL w praktyce oraz dla unikania typowych błędów w analizie danych.

Pytanie 14

W języku PHP zapisano fragment kodu działającego na bazie MySQL. Jego zadaniem jest wypisanie

$z = mysqli_query($db, "SELECT ulica, miasto, kod_pocztowy FROM adresy");
$a = mysqli_fetch_row($z);
echo "$a[1], $a[2]";
A. miasta i kodu pocztowego z pierwszego zwróconego rekordu.
B. miasta i kodu pocztowego ze wszystkich zwróconych rekordów.
C. ulicy i miasta ze wszystkich zwróconych rekordów.
D. ulicy i miasta z pierwszego zwróconego rekordu.
Niestety, wybrałeś niepoprawną odpowiedź. W twoim fragmencie kodu PHP, wykonujesz zapytanie SQL, które wybiera kolumny 'ulica', 'miasto', 'kod pocztowy' z tabeli 'adresy'. Następnie używasz funkcji mysqli_fetch_row(), która pobiera pierwszy zwrócony rekord jako indeksowaną tablicę. Funkcja echo wyświetla drugi i trzeci element tej tablicy (indeksy 1 i 2), które odpowiadają kolumnom 'miasto' i 'kod pocztowy'. Niepoprawne odpowiedzi sugerują, że twój kod wypisze 'ulicę i miasto' lub 'miasto i kod pocztowy' ze wszystkich zwróconych rekordów, co jest nieprawdą. Niezrozumienie, jak funkcje PHP działają z MySQL i jaki jest ich wynik, może prowadzić do poważnych błędów w kodzie. Wskazane jest dokładne zrozumienie, jakie dane są zwracane przez SQL i jak je przetwarzać w PHP.

Pytanie 15

Który z podanych jest plikiem konfiguracyjnym serwera Apache?

A.
.htaccess
B.
configuration.php
C.
.configuration
D.
htaccess.cnf
Plik .htaccess to plik konfiguracyjny serwera Apache działający na poziomie katalogu - umieszczony w folderze zmienia ustawienia Apache dla niego i podkatalogów, bez ruszania głównej konfiguracji. Stosuje się go m.in. do przekierowań i reguł mod_rewrite, ochrony katalogu hasłem czy ustawień stron błędów. Główna, serwerowa konfiguracja Apache mieści się w pliku httpd.conf (lub apache2.conf), ale spośród podanych opcji to .htaccess jest realnym plikiem konfiguracyjnym Apache. Dlatego ta odpowiedź jest poprawna.

Pytanie 16

Polecenie serwera MySQL w postaci

REVOKE DELETE, UPDATE ON pracownicy FROM 'tKowal'@'localhost'
spowoduje, że użytkownikowi tKowal zostaną
A. odebrane uprawnienia usuwania oraz dodawania rekordów w tabeli pracownicy
B. przydzielone uprawnienia do usuwania oraz aktualizowania danych w tabeli pracownicy
C. odebrane prawa usuwania i modyfikowania danych w tabeli pracownicy
D. przydzielone uprawnienia do wszelkich zmian struktury tabeli pracownicy
Odpowiedzi sugerujące, że użytkownikowi tKowal przydzielono prawa lub odebrano inne uprawnienia, takie jak prawa do dodawania rekordów czy zmiany struktury tabeli, są mylące i niezgodne z tym, co faktycznie robi polecenie REVOKE. Przede wszystkim, polecenie to dotyczy konkretnych operacji na danych, a w opisywanym przypadku wyraźnie odnosi się do usuwania i aktualizowania danych, co oznacza, że inne operacje, takie jak dodawanie rekordów, nie zostały w ogóle wspomniane. W praktyce, aby zrozumieć mechanizm uprawnień w MySQL, należy pamiętać, że każde polecenie ma określony kontekst i zastosowanie. Niezrozumienie tej struktury może prowadzić do błędnych wniosków, które z kolei mogą wpływać na zarządzanie bezpieczeństwem bazy danych. Ponadto, pojmowanie błędów polegających na myleniu usuwania i aktualizowania danych z innymi operacjami, takimi jak zmiana struktury tabeli, nie tylko wprowadza zamieszanie, ale także może prowadzić do niepoprawnej konfiguracji uprawnień, co stwarza luki w bezpieczeństwie. Fundamentalnym błędem jest nieczytelne rozróżnienie pomiędzy różnymi rodzajami uprawnień, a także brak świadomości, że MySQL zarządza uprawnieniami w sposób bardzo szczegółowy i kontekstowy.

Pytanie 17

W systemie MySQL należy użyć polecenia REVOKE, aby odebrać użytkownikowi anna możliwość wprowadzania zmian tylko w definicji struktury bazy danych. Odpowiednie polecenie do zrealizowania tej operacji ma formę

A. REVOKE CREATE UPDATE DROP ON tabela1 FROM 'anna'@'localhost'
B. REVOKE CREATE INSERT DELETE ON tabela1 FROM 'anna'@'localhost'
C. REVOKE CREATE ALTER DROP ON tabela1 FROM 'anna'@'localhost'
D. REVOKE ALL ON tabela1 FROM 'anna'@'localhost'
Wszystkie inne odpowiedzi są nieprawidłowe z kilku powodów. W pierwszej z nich, 'REVOKE ALL ON tabela1 FROM 'anna'@'localhost'', przyznawane są wszystkie uprawnienia, co jest sprzeczne z intencją odebrania tylko określonych praw. Użytkownicy powinni być ograniczani jedynie w tych obszarach, gdzie to konieczne. Z kolei odpowiedź 'REVOKE CREATE UPDATE DROP ON tabela1 FROM 'anna'@'localhost'' zawiera 'UPDATE', co jest związane z danymi, a nie strukturą bazy, co również czyni ją niewłaściwą. Odmowa praw do aktualizacji danych nie jest odpowiednia w kontekście modyfikacji struktury bazy. Z kolei opcja 'REVOKE CREATE INSERT DELETE ON tabela1 FROM 'anna'@'localhost'' ponownie nie odnosi się do struktury bazy, ponieważ odnosi się do manipulacji danymi, nie do struktury. Kluczowym błędem w tym kontekście jest mylenie uprawnień związanych z danymi z uprawnieniami związanymi ze strukturą bazy danych. W zarządzaniu uprawnieniami w MySQL istotne jest zrozumienie różnicy pomiędzy tymi kategoriami, aby skutecznie zabezpieczyć bazę danych. W praktyce dobrym podejściem jest wdrożenie zasady minimalnych uprawnień, co zmniejsza ryzyko nieautoryzowanych zmian w strukturze i danych bazy.

Pytanie 18

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

A. klucza obcego
B. klucza podstawowego
C. relacji
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 19

W MSSQL Server rola dbcreator, która jest predefiniowana, umożliwia użytkownikowi

A. zarządzanie plikami na dysku
B. tworzenie, modyfikowanie, usuwanie i odzyskiwanie bazy danych
C. zarządzanie bezpieczeństwem systemu
D. wykonywanie każdej operacji na serwerze i posiadanie prawa własności każdej bazy
Rola dbcreator w Microsoft SQL Server jest jedną z predefiniowanych ról serwerowych, która umożliwia użytkownikom zaawansowane zarządzanie bazami danych. Użytkownicy z tą rolą mają pełne uprawnienia do tworzenia nowych baz danych, modyfikowania istniejących oraz usuwania ich, co jest kluczowe dla administratorów i deweloperów pracujących w środowisku SQL. Rola ta pozwala także na odzyskiwanie baz danych, co jest niezbędne w kontekście zarządzania danymi krytycznymi oraz zapewniania ciągłości działania aplikacji. Przykład praktyczny zastosowania roli dbcreator można zobaczyć w sytuacji, gdy zespół deweloperski tworzy nowe środowisko testowe na podstawie istniejącej bazy danych produkcyjnej. Dzięki tej roli, deweloperzy mogą w łatwy sposób sklonować bazę, przeprowadzić modyfikacje i testy, a następnie usunąć niepotrzebne już zasoby. Standardy bezpieczeństwa oraz dobre praktyki zarządzania danymi zalecają ograniczanie uprawnień, co czyni rolę dbcreator narzędziem potężnym, ale wymagającym odpowiedzialnego podejścia ze strony użytkowników.

Pytanie 20

Model barw oparty na trzech parametrach: odcień (hue), nasycenie (saturation) i jasność (brightness/value) to

A. RGB
B. CMYK
C. CMY
D. HSV
Pozostałe modele opisują kolor inaczej. RGB miesza składowe światła: czerwoną, zieloną i niebieską. CMY i CMYK to modele druku (cyan, magenta, yellow, a w CMYK czarny K). Parametry odcień-nasycenie-jasność tworzą model HSV.

Pytanie 21

Efekt przedstawiony w filmie powinien być zdefiniowany w selektorze

A. td, th { background-color: Pink; }
B. tr:active { background-color: Pink; }
C. tr { background-color: Pink; }
D. tr:hover { background-color: Pink; }
Poprawny selektor to tr:hover { background-color: Pink; }, bo dokładnie opisuje sytuację pokazaną na filmie: efekt pojawia się dopiero po najechaniu kursorem na cały wiersz tabeli. Pseudo-klasa :hover w CSS służy właśnie do definiowania stylów w momencie, gdy użytkownik „najeżdża” myszką na dany element. Jeśli więc chcemy, żeby podświetlał się cały rząd tabeli, logiczne i zgodne z dobrymi praktykami jest przypięcie efektu do znacznika tr, a nie do pojedynczych komórek.

W praktyce taki zapis stosuje się bardzo często w interfejsach webowych: w panelach administracyjnych, listach zamówień, tabelach z uczniami, produktami, logami systemowymi itd. Dzięki temu użytkownik łatwiej śledzi, który wiersz właśnie ogląda. To niby detal, ale z punktu widzenia UX robi sporą różnicę. Z mojego doświadczenia to jeden z tych prostych trików CSS, które od razu poprawiają „odczuwalną” jakość strony.

Ważne jest też to, że :hover jest częścią standardu CSS (opisane m.in. w specyfikacji CSS Selectors Level 3/4) i działa w praktycznie wszystkich współczesnych przeglądarkach. Nie trzeba do tego żadnego JavaScriptu, żadnych skomplikowanych skryptów – czysty CSS. Dobrą praktyką jest również używanie bardziej stonowanych kolorów niż Pink w prawdziwych projektach, np. #f5f5f5 albo lekki odcień niebieskiego, tak żeby kontrast był czytelny i nie męczył wzroku. Warto też pamiętać, że podobny mechanizm możesz zastosować na innych elementach: np. a:hover dla linków, button:hover dla przycisków czy nawet div:hover dla całych kafelków w layoutach. Kluczowe jest to, żeby pseudo-klasa :hover była przypięta dokładnie do tego elementu, który ma reagować na interakcję użytkownika.

Pytanie 22

Dana jest tabela uczniowie, do której wpisano rekordy jak na rysunku. Co będzie wynikiem działania przedstawionego zapytania SQL?

SELECT AVG(ocena) FROM uczniowie;

NazwiskoImieocena
KowalskiSebastian4
KaczmarekMarta3
BaryłaZenon4
GotaAnna3
A. Wartość 3.5
B. Suma ocen równa 14
C. Dane 4, 3, 4, 3
D. Liczba wierszy równa 4
Tak, poprawna odpowiedź to 'Wartość 3.5'. W zapytaniu SQL 'SELECT AVG(ocena) FROM uczniowie;' używamy funkcji AVG, żeby obliczyć średnią. W tym przypadku ona bierze oceny z tabeli 'uczniowie' i liczy, ile wynosi średnia. Jak to działa? Suma wszystkich ocen to 14 (3 + 4 + 3 + 4), a mamy cztery oceny, więc dzielimy 14 przez 4 i wychodzi nam 3.5. To jest super przykład, jak można wykorzystać funkcję AVG w SQL, co jest naprawdę przydatne, szczególnie, gdy mamy dużą ilość danych do przeanalizowania. Dobrze jest znać takie funkcje agregujące jak AVG, SUM, MAX czy MIN, bo ułatwiają one analizę danych.

Pytanie 23

Aby strona WWW była przesyłana do przeglądarki w postaci zaszyfrowanej, należy zastosować protokół:

A. HTTPS
B. SFTP
C. HTTP
D. SSH
HTTPS to protokół HTTP działający przez szyfrowane połączenie TLS. Dane wymieniane między serwerem a przeglądarką - treść strony, dane logowania, formularze - są szyfrowane, więc osoba podsłuchująca ruch nie odczyta ich ani nie podmieni. Certyfikat serwera pozwala też przeglądarce potwierdzić tożsamość witryny (kłódka w pasku adresu). Dlatego do bezpiecznego, zaszyfrowanego przesyłania strony WWW stosuje się właśnie HTTPS.

Pytanie 24

Została zaprezentowana tabela o nazwie konta. Aby obliczyć liczbę rejestracji w poszczególnych latach oraz wyświetlić te wartości razem z rokiem rejestracji, należy wykonać zapytanie

A. ```SELECT rejestracja, COUNT(rejestracja) FROM konta GROUP BY rejestracja;```
B. ```SELECT COUNT(rejestracja) FROM konta JOIN rejestracja ON id;```
C. ```SELECT rejestracja, COUNT(rejestracja) FROM konta;```
D. ```SELECT COUNT(rejestracja) FROM konta GROUP BY rejestracja;```
Rozważając inne odpowiedzi, można zauważyć kilka typowych błędów w rozumieniu operacji SQL. Odpowiedź 'SELECT rejestracja, COUNT(rejestracja) FROM konta;' pomija klauzulę GROUP BY, która jest niezbędna do prawidłowego grupowania wyników po kolumnie 'rejestracja'. Bez niej, zapytanie spowoduje błąd, ponieważ próbuje zliczyć wartości bez określenia, jak je grupować. Takie podejście jest niezgodne z zasadami SQL, które wymagają, aby wszystkie kolumny niewykorzystywane w funkcjach agregujących były zawarte w klauzuli GROUP BY.

W przypadku 'SELECT COUNT(rejestracja) FROM konta GROUP BY rejestracja;', mamy poprawnie użyte GROUP BY, ale brak jest kolumny 'rejestracja' w selekcji, co oznacza, że wyniki wyświetlą tylko liczby bez odpowiadających im lat, co nie spełnia założeń pytania.

Odpowiedź 'SELECT COUNT(rejestracja) FROM konta JOIN rejestracja ON id;' wprowadza dodatkowy błąd związany z niepoprawnym użyciem JOIN. Kolumna 'rejestracja' nie jest tabelą, a próbując połączyć ją z tabelą 'konta' za pomocą JOIN, wprowadza się błędną koncepcję struktury danych. JOIN jest używany do łączenia różnych tabel na podstawie powiązanych kolumn, co w tym przypadku nie ma zastosowania. Takie niezrozumienie składni SQL może prowadzić do błędnych wyników i niepotrzebnego skomplikowania zapytań. Powszechnym błędem w korzystaniu z JOIN jest niepoprawne używanie go do prostych operacji grupowania, które nie wymagają połączenia wielu tabel.

Pytanie 25

W zaprezentowanej części formularza HTML znajduje się pole, które można określić jako?

<input type="password" name="pole">
A. ukrywa wprowadzone znaki.
B. pozwala na wprowadzanie jedynie wartości liczbowych.
C. domyślnie posiada wpisany tekst "pole".
D. wyświetla wprowadzone znaki.
Wybrana przez ciebie odpowiedź jest niepoprawna. Możesz myśleć, że pole <i>input</i> ma domyślny tekst 'pole', ale zapomniałeś, że atrybut 'value', który to robi, nie występuje w tym kodzie. Poza tym, nie ma żadnych danych wskazujących, że to pole przyjmuje tylko liczby. Zazwyczaj, używa się atrybutu 'type' z wartością 'number', ale tutaj jest ustawiony na 'password'. Gdy mówisz, że pole pokazuje wprowadzone znaki, to też nie jest prawda. Jak mamy 'type' ustawione na 'password', to wszystko jest ukryte, żeby użytkownik był bezpieczny. Takie pomyłki to najczęściej efekt braku zrozumienia różnych atrybutów w HTML. Ważne, żeby ogarnąć, że atrybut 'type' mówi, jakie dane można wprowadzać, a różne wartości mają różne skutki.

Pytanie 26

Ile razy należy wprowadzić instrukcję warunkową, aby zrealizować przedstawiony algorytm w danym języku programowania?

Ilustracja do pytania
A. Raz.
B. Trzy razy.
C. Dwa razy.
D. Cztery razy.
Instrukcja warunkowa jest kluczowym elementem w programowaniu, pozwalającym na podejmowanie decyzji w trakcie wykonywania programu. W algorytmie przedstawionym na diagramie, widzimy dwie sytuacje, w których możliwe są różne ścieżki działania w zależności od spełnienia określonych warunków. Każda z tych sytuacji wymaga użycia instrukcji warunkowej w kodzie. W praktyce, oznacza to konieczność zapisania instrukcji takich jak if-else dwa razy, aby poprawnie odwzorować logikę algorytmu. Jest to zgodne ze standardami programowania, które promują klarowność i czytelność kodu. Stosowanie instrukcji warunkowych umożliwia optymalizację przepływu sterowania, co jest istotne dla efektywności i wydajności programów. Przykład z życia codziennego to system zarządzania ruchem sygnalizacji świetlnej, który używa wielu instrukcji warunkowych do reagowania na zmienne warunki ruchu. Zrozumienie, gdzie i jak zastosować instrukcje warunkowe, jest kluczowe dla tworzenia elastycznych i skalowalnych rozwiązań programistycznych. Ważne jest także stosowanie dobrych praktyk, takich jak unikanie nadmiernego zagnieżdżania instrukcji, co wpływa na czytelność i utrzymywalność kodu.

Pytanie 27

Podaj zapis w języku JavaScript, który sprawdzi, czy spełniony jest przynajmniej jeden z następujących warunków: 1) dowolna liczba naturalna a jest liczbą trzycyfrową, 2) dowolna liczba całkowita b jest liczbą ujemną?

A. ((a>99) && (a<1000)) || (b<0)
B. ((a>99) || (a<1000)) && (b<0)
C. ((a>99) && (a<1000)) && (b<0)
D. ((a>99) || (a<1000)) || (b<0)
Odpowiedź ((a>99) && (a<1000)) || (b<0) jest prawidłowa, ponieważ warunek ten skutecznie sprawdza, czy dowolna naturalna liczba a jest trzycyfrowa lub czy dowolna całkowita liczba b jest ujemna. Część wyrażenia (a>99) && (a<1000) weryfikuje, czy liczba a jest w przedziale od 100 do 999, co definiuje liczby trzycyfrowe. Z kolei druga część (b<0) sprawdza, czy liczba b jest mniejsza od zera. Całość połączona jest operatorem OR (||), co oznacza, że wystarczy spełnienie jednego z tych warunków, aby cały warunek był spełniony. W praktyce, takie wyrażenia są powszechnie stosowane w programowaniu, szczególnie w formularzach walidacyjnych, gdzie ważne jest, aby dane wprowadzone przez użytkowników spełniały określone kryteria. Dobrą praktyką jest dbałość o czytelność kodu i stosowanie odpowiednich nazw zmiennych, co ułatwia zrozumienie logiki działania aplikacji. Warto również pamiętać o testowaniu różnych przypadków, aby upewnić się, że warunki działają zgodnie z zamierzeniami, co jest kluczowe w zapewnieniu wysokiej jakości oprogramowania.

Pytanie 28

Funkcję mysqli_num_rows() w PHP można wywołać po wykonaniu zapytania:

A.
DELETE
B.
SELECT
C.
UPDATE
D.
INSERT
Funkcja mysqli_num_rows() zwraca liczbę wierszy w zbiorze wynikowym i ma sens tylko wtedy, gdy zapytanie taki zbiór zwraca - czyli po SELECT (lub np. SHOW). Przekazuje się jej wynik zapytania, np. $w = mysqli_query($db, "SELECT * FROM klienci"); $ile = mysqli_num_rows($w);. Dla zapytań modyfikujących dane liczbę zmienionych wierszy podaje inna funkcja - mysqli_affected_rows(). Dlatego mysqli_num_rows() stosuje się po zapytaniu SELECT.

Pytanie 29

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

A. TRUNCATE TABLE adresy;
B. DELETE * FROM adresy;
C. DELETE TABLE adresy;
D. DROP TABLE adresy;
TRUNCATE TABLE adresy; jest najszybszym sposobem na usunięcie wszystkich rekordów z tabeli bez usuwania jej struktury. Operacja TRUNCATE działa na poziomie strony, co oznacza, że nie przetwarza pojedynczych wierszy, jak ma to miejsce w przypadku DELETE. Dzięki temu, TRUNCATE jest znacznie wydajniejszy, szczególnie w przypadku dużych zbiorów danych. W praktyce, użycie TRUNCATE TABLE jest zalecane, gdy chcemy szybko oczyścić tabelę z danych, a następnie wprowadzić nowe rekordy. Warto jednak pamiętać, że TRUNCATE nie wywołuje kaskadowych usunięć w tabelach powiązanych z kluczami obcymi, co może być istotne w projektowaniu bazy danych. Użycie TRUNCATE może również przywrócić licznik identyfikatorów (np. AUTO_INCREMENT w MySQL) do wartości początkowej, co jest ważnym aspektem, jeśli zależy nam na tym, by nowe dane zaczynały się od określonej wartości. Praktyka wykorzystania TRUNCATE powinna być jednak stosowana ostrożnie, szczególnie w kontekście transakcji, ponieważ operacja ta nie jest odwracalna w przypadku dużych zbiorów danych, co skontrastować należy z DELETE, które można wykorzystać w ramach transakcji i przywrócić dane, jeśli zajdzie taka potrzeba. Dlatego, TRUNCATE TABLE jest zalecaną metodą w odpowiednich scenariuszach, ale jej użycie wymaga pełnego zrozumienia kontekstu bazy danych oraz powiązań między tabelami.

Pytanie 30

Jakie znaczniki należy zastosować, aby umieścić kod w języku PHP w pliku z rozszerzeniem .php?

A.
<?php ... ?>
B.
<php ... />
C.
<php> ... </php>
D.
<?php>...<php?>
Atrybut w bazie danych to nazwana KOLUMNA tabeli, opisująca jedną określoną cechę obiektu (encji) - np. w tabeli „Uczeń” atrybutami są „imię”, „nazwisko”, „klasa”. Każda krotka (wiersz) ma dla danego atrybutu konkretną wartość. Dlatego atrybut to nazwana kolumna opisująca cechę.

Pytanie 31

Który rastrowy format graficzny jest obsługiwany przez przeglądarki internetowe?

A. PNG
B. FLIF
C. PCX
D. TGA
Spośród wymienionych to PNG jest rastrowym formatem obsługiwanym natywnie przez przeglądarki internetowe - obok JPG i GIF tworzy zestaw bezpiecznych formatów webowych. Wyświetli się bez wtyczek i konwersji. Zapamiętaj webowe rastry: JPG (zdjęcia), PNG (jakość + przezroczystość), GIF (proste animacje).

Pytanie 32

Której metody JavaScript użyć, aby wyświetlić okno z POLEM do wpisania danych oraz przyciskami OK i Anuluj?

A.
alert();
B.
confirm();
C.
message();
D.
prompt();
Pozostałe metody nie pobierają tekstu. alert() tylko WYŚWIETLA komunikat z przyciskiem OK (bez pola). confirm() zadaje pytanie OK/Anuluj i zwraca true/false, ale też bez pola tekstowego. message() nie istnieje. Pole do wpisania danych daje prompt().

Pytanie 33

Kiedy zostanie wywołane w JavaScript zdarzenie onKeydown?

A. gdy klawisz myszy zostanie zwolniony
B. gdy klawisz klawiatury zostanie zwolniony
C. gdy klawisz myszy zostanie wciśnięty
D. gdy klawisz klawiatury zostanie wciśnięty
Zdarzenie onkeydown jest wywoływane w chwili, gdy użytkownik WCIŚNIE klawisz KLAWIATURY (zanim go puści). Para zdarzeń to onkeydown (wciśnięcie) i onkeyup (zwolnienie), a onkeypress było używane dla znaków drukowalnych. Dzięki onkeydown można np. reagować na klawisze sterujące (strzałki, Enter, Esc). Zapamiętaj: „down” = w dół = wciśnięcie.

Pytanie 34

Jakie polecenie w CSS umożliwia dodanie zewnętrznego arkusza stylów?

A. open
B. include
C. import
D. require
Użycie poleceń takich jak 'require', 'include' czy 'open' w kontekście CSS jest błędne, ponieważ nie są one częścią standardowego języka CSS. 'Require' i 'include' są terminami używanymi w kontekście języków programowania, takich jak PHP, gdzie umożliwiają one włączanie plików, ale nie mają zastosowania w CSS. Przykładowo, w PHP można załączyć plik z funkcjami w ten sposób: 'include 'functions.php';', co pokazuje, jak specyficzne języki programowania mają swoje własne mechanizmy włączania plików. W przypadku CSS, celem jest stylizacja dokumentów HTML, a nie manipulacja strukturą plików. 'Open' natomiast nie jest terminem związanym z załączaniem stylów i nie ma odpowiednika w CSS. Powszechnym błędem jest mylenie koncepcji załączania plików, które są specyficzne dla danej technologii. W CSS jedyną poprawną metodą jest użycie '@import', co zapewnia, że style są ładowane w odpowiedniej kolejności i w odpowiednich kontekście, co jest kluczowe dla zachowania integralności wizualnej i funkcjonalnej strony. Dlatego ważne jest, aby zwracać uwagę na specyfikę każdego języka i stosować odpowiednie dla niego mechanizmy, unikając przenoszenia koncepcji z innych technologii, co może prowadzić do nieporozumień.

Pytanie 35

Jak nazywa się informacje opisujące inne informacje (dane o danych)?

A. język znaczników (markup language)
B. metadane (metadata)
C. metajęzyk (metalanguage)
D. databus
Informacje opisujące inne dane (dane o danych) to METADANE - np. autor, data utworzenia, format czy rozmiar pliku. Dlatego mowa o metadanych.

Pytanie 36

W relacyjnych bazach danych encja jest przedstawiana przez

A. kwerendę.
B. relację.
C. tabelę.
D. rekord.
Nieprawidłowe odpowiedzi wskazują na pewne nieporozumienia dotyczące definicji podstawowych elementów relacyjnych baz danych. Rekord, chociaż jest istotnym składnikiem tabeli, nie reprezentuje encji, lecz pojedynczą instancję encji. Mylne jest również utożsamianie tabeli z relacją, ponieważ relacja w kontekście teorii zbiorów odnosi się do zbioru krotek, podczas gdy tabela jest fizycznym i trwałym przedstawieniem tychże zbiorów w bazie danych. Kwerenda natomiast to instrukcja używana do uzyskiwania danych z bazy danych, a nie do ich reprezentacji. To podejście do zrozumienia modeli relacyjnych może prowadzić do błędnych wniosków w projektowaniu baz danych. Dla przykładu, nieumiejętność rozróżnienia między tabelą a rekordem może skutkować niewłaściwym modelowaniem danych, co wpłynie negatywnie na wydajność i integralność bazy danych. Warto zwrócić uwagę na znaczenie właściwego stosowania terminologii oraz zrozumienie struktury danych w relacyjnych bazach danych, co jest kluczowe dla efektywnego zarządzania danymi i ich relacjami.

Pytanie 37

W języku PHP pętla umieści liczby w tablicy

$x=0;
for($i=0; $i<10; $i++)
{
    $tab[$i]=$x;
    $x=$x+10;
}
A. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
B. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
C. 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
D. 0, 10, 20, 30, 40, 50, 60, 70, 80, 90
Pętla w języku PHP przedstawiona w kodzie używa zmiennej $x, która początkowo jest ustawiona na 0. Pętla for inicjalizuje zmienną $i na 0 i wykonuje się dopóki $i jest mniejsze od 10, inkrementując $i o 1 przy każdym obiegu. Wewnątrz pętli, do tablicy $tab dla indeksu $i przypisywana jest obecna wartość $x, która następnie jest zwiększana o 10. Dzięki temu w wyniku działania pętli wartości przypisywane do tablicy to 0, 10, 20, 30, 40, 50, 60, 70, 80, 90. To podejście jest zgodne z dobrą praktyką iteracyjnego budowania tablicy w oparciu o logiczną sekwencję wartości. Takie rozwiązanie jest przydatne w sytuacjach, gdzie potrzebujemy stworzyć serię danych np. przy generowaniu serii zdarzeń czasowych czy też w programach finansowych do obliczeń w stałych odstępach. Wykorzystywanie pętli do wypełniania tablicy wartościami sekwencyjnymi w oparciu o ustalony krok jest powszechne w wielu zastosowaniach programistycznych i jest przykładem efektywnego zarządzania danymi w pamięci.

Pytanie 38

Zaprezentowano tabelę stworzoną za pomocą kodu HTML, bez zastosowania stylów CSS. Która część kodu HTML odnosi się do pierwszego wiersza tabeli?

Ilustracja do pytania
A. B
B. A
C. D
D. C
Niepoprawne podejścia w odpowiedziach A, B i C wynikają z błędnego zastosowania znaczników HTML, co wpływa na sposób, w jaki przeglądarka interpretuje dane w tabeli. Odpowiedź A używa znaczników <td> zamiast <th> do definiowania nagłówków kolumn. Znacznik <td> jest przeznaczony do zwykłych komórek tabeli, co sprawia, że przeglądarka nie traktuje ich jako nagłówków, przez co nie są wstępnie formatowane jako pogrubione i wyśrodkowane. To podejście narusza zasady semantyki HTML, ponieważ nagłówki powinny być jasno zdefiniowane za pomocą <th>, co wspiera dostępność i zrozumienie struktury danych. Odpowiedź B, mimo że używa <th>, stosuje dodatkowo <i>, co zmienia styl na kursywę, a to nie odpowiada formatowi wizualnemu przedstawionemu w pytaniu. Użycie <i> może być mylące, jeśli nie jest to zgodne z oczekiwanym stylem, i może powodować problemy z dostępnością. Wreszcie, odpowiedź C używa <center>, co jest przestarzałym sposobem na wyrównanie treści w HTML. Zamiast tego, stylowanie powinno być osiągane za pomocą CSS, co jest zgodne z nowoczesnymi standardami projektowania stron i wspiera lepszą separację struktury od prezentacji. Wszystkie te podejścia pokazują, jak ważne jest stosowanie semantycznych elementów HTML dla poprawności i dostępności stron internetowych, a jednocześnie podkreślają znaczenie zgodności z aktualnymi standardami sieciowymi.

Pytanie 39

Które z wymienionych oprogramowań NIE jest systemem zarządzania treścią (CMS)?

A. Apache
B. Mambo
C. WordPress
D. Joomla
Pozostałe pozycje to systemy zarządzania treścią. WordPress to najpopularniejszy CMS, używany do blogów i serwisów. Joomla! to kolejny rozbudowany CMS, a Mambo był jego protoplastą. Wszystkie służą do tworzenia i zarządzania zawartością witryn. Apache pełni inną rolę - jest serwerem WWW dostarczającym strony użytkownikom - więc to on nie jest CMS-em, dlatego ta odpowiedź jest poprawna.

Pytanie 40

Na przedstawionym diagramie ER zapis FK1 oznacza

Ilustracja do pytania
A. klucz obcy.
B. klucz podstawowy.
C. relację 1:N.
D. relację 1:1.
Na diagramach ER oznaczenia typu FK1 zwykle odnoszą się do kluczy obcych, a nie do samej relacji ani do kluczy podstawowych. Łatwo się tu pomylić, bo obok tego symbolu widać też graficzne oznaczenie relacji 1:N między tabelami Klienci i Zamówienia, więc część osób automatycznie kojarzy podpis z typem połączenia. Tymczasem relacja 1:1 czy 1:N jest przedstawiana linią i odpowiednimi znacznikami przy końcach (kreska, „gałązki”, kółko), natomiast skróty PK i FK pojawiają się wewnątrz tabel i opisują role konkretnych kolumn. PK to primary key, czyli klucz podstawowy – unikalny identyfikator w danej tabeli. Na diagramie widać go przy NR_klienta w tabeli Klienci oraz przy ID_Zamówienia w tabeli Zamówienia. Oznaczenie FK1 przy NR_klienta w tabeli Zamówienia nie może więc oznaczać kolejnego klucza podstawowego ani samej relacji, tylko właśnie klucz obcy, który wskazuje na PK w innej tabeli. Częsty błąd polega na mieszaniu pojęć „relacja 1:N” z „kluczem obcym”. Relacja 1:N jest pojęciem konceptualnym: mówi, że jeden klient może mieć wiele zamówień. Klucz obcy to implementacja tej relacji w fizycznym modelu bazy: konkretna kolumna, która przechowuje wartość klucza podstawowego z drugiej tabeli. Innymi słowy, FK jest narzędziem, a 1:N opisem zależności. Kiedy ktoś interpretuje FK1 jako relację 1:1 albo 1:N, miesza warstwę symboliki linii z opisem kolumn. Dobra praktyka w projektowaniu baz danych i w narzędziach CASE jest taka, że PK i FK stoją zawsze przy nazwach atrybutów, a typ relacji rozczytujemy z grafiki między encjami, nie z tych skrótów. Zrozumienie tej różnicy jest kluczowe, bo potem w SQL dokładnie tak samo rozdzielamy definicję struktury tabel (PRIMARY KEY, FOREIGN KEY) od logicznej interpretacji, ile rekordów może być po każdej stronie relacji.