Wyniki egzaminu

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

Egzamin zdany!

Wynik: 31/40 punktów (77,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

Które wyrażenie w C++ sprawdza, czy liczba jest TRZYCYFROWĄ wartością PARZYSTĄ?

A.
liczba % 2 == 0 && liczba > 99 && liczba < 999
B.
liczba % 2 == 0 || liczba > 99 || liczba < 999
C.
liczba % 2 == 0 && (liczba > 99 || liczba < 999)
D.
liczba % 2 == 0 || (liczba > 99 && liczba < 999)
Liczba trzycyfrowa to wartość z przedziału od 100 do 999, czyli liczba > 99 && liczba < 999 (lub równoważnie >= 100 && <= 999), a parzysta to liczba % 2 == 0. Wszystkie warunki muszą zachodzić naraz, więc łączy je &&. Dlatego poprawne jest liczba % 2 == 0 && liczba > 99 && liczba < 999.

Pytanie 2

Który z poniższych znaczników jest częścią sekcji <head> dokumentu HTML?

A. <span>
B. <title>
C. <img>
D. <section>
Znacznik <title> jest fundamentalnym elementem sekcji <head> dokumentu HTML. Jego głównym zadaniem jest określenie tytułu strony, który jest wyświetlany na pasku tytułowym przeglądarki oraz w wynikach wyszukiwania. Dobrze skonstruowany tytuł powinien być zwięzły, ale jednocześnie informacyjny, aby skutecznie przyciągnąć uwagę użytkowników. Zgodnie z wytycznymi W3C, tytuł powinien mieć od 50 do 60 znaków, aby uniknąć obcinania w wynikach wyszukiwania. Przykładem dobrze sformułowanego tytułu może być: „Jak stworzyć responsywną stronę internetową - poradnik krok po kroku”. Ważne jest, aby tytuł był unikalny dla każdej podstrony w witrynie, co nie tylko poprawia SEO, ale również ułatwia użytkownikom nawigację. W kontekście standardów i dobrych praktyk, należy również unikać umieszczania w tytule zbędnych słów kluczowych, co może być uznane za spam przez wyszukiwarki. Dobrze zaprojektowany tytuł jest kluczem do efektywnego pozycjonowania i budowania marki w sieci.

Pytanie 3

Którą wartość zwróci funkcja zapisana w języku C++, jeżeli jej parametrem wejściowym jest tablica wypełniona w następujący sposób: tablica[6] = {3, 4, 2, 4, 10, 0};?

int fun1(int tab[]) {
    int wynik = 0;
    for (int i = 0; i < 6; i++)
        wynik += tab[i];
    return wynik;
}
A. 960
B. 0
C. 23
D. 10
Twoja odpowiedź jest niepoprawna. Wygląda na to, że nie do końca zrozumiałeś, jak działa ta funkcja w języku C++. Funkcja, o której mówimy, sumuje wartości wszystkich elementów tablicy. W podanym pytaniu mamy tablicę z sześcioma elementami: 3, 4, 2, 4, 10, 0. Suma tych elementów wynosi 23, a nie 960, 10 ani 0. Wartości 960, 10 i 0 mogą pochodzić z różnorodnych błędnych wniosków. Na przykład, 960 to produkt wszystkich elementów tablicy, a nie ich suma. Podobnie, 10 to najwyższa wartość w tablicy, a 0 to najniższa. Możliwe, że te wartości byłyby poprawne w innych kontekstach, na przykład, gdybyśmy pytali o produkt elementów, największy element lub najmniejszy element. Ważne jest, aby zawsze dokładnie czytać pytanie i zrozumieć, czego dokładnie oczekuje od nas funkcja. Praca z tablicami jest kluczowym aspektem programowania w języku C++, dlatego warto poświęcić więcej czasu na zrozumienie, jak one działają.

Pytanie 4

W przypadku podanego fragmentu kodu walidator HTML zgłosi błąd, ponieważ <img src="kwiat.jpg alt="kwiat">

A. zastosowano nieznany atrybut alt
B. nie zamknięto cudzysłowu
C. użyto niewłaściwego znacznika do wyświetlenia obrazu
D. brak obrazu kwiat.jpg
W przedstawionym kodzie HTML występuje błąd związany z niedomknięciem cudzysłowu dla atrybutu 'src'. Prawidłowa składnia powinna wyglądać następująco: <img src="kwiat.jpg" alt="kwiat">. Brak cudzysłowu po 'kwiat.jpg' uniemożliwia poprawne zinterpretowanie kodu przez przeglądarki, co skutkuje błędem walidacji. Zasady walidacji kodu HTML są zgodne z wytycznymi W3C, które zalecają, aby każdy atrybut był zamknięty cudzysłowem. Poprawność kodu nie tylko wpływa na jego działanie, ale również na dostępność strony oraz SEO. Użytkownicy, którzy poruszają się po stronach bez pełnej obsługi HTML, mogą napotkać problemy z wyświetlaniem obrazów. W praktyce, zawsze warto stosować dobregi praktyki kodowania, takie jak użycie linterów do sprawdzania poprawności kodu przed jego publikacją, aby uniknąć takich błędów.

Pytanie 5

W języku PHP wartość 1 została przypisana do zmiennej $a. Porównanie $a === $b zwraca true, gdy zmienna $b ma wartość

A. C. 1 lub '1'
B. B. '1'
C. A. *1
D. D. "1" lub '1'
W przypadku użycia operatora == w porównaniu zmiennych w PHP, może dojść do automatycznej konwersji typów, co prowadzi do niejasnych wyników. Wiele osób myśli, że porównanie zmiennej typu integer z zmienną typu string zawsze będzie zachodzić poprawnie, co jest jednym z najczęstszych błędów. Na przykład, jeśli zmienna $b jest zainicjowana wartością '1' (string), operator == zwróci true, ponieważ PHP automatycznie przekształci string na liczbę przed porównaniem. To podejście może prowadzić do nieprzewidywalnych wyników, gdy porównujemy różne typy danych, co może być źródłem błędów w bardziej złożonych aplikacjach. Ponadto, w kontekście programowania w PHP, praktyki związane z silnym typowaniem zyskują na znaczeniu, a operator === staje się preferowany, ponieważ zapewnia większą przewidywalność i bezpieczeństwo kodu. Używanie operatora == może prowadzić do sytuacji, gdzie programista nie jest świadomy, że różne typy danych są porównywane, co może skutkować nieprawidłowymi wynikami. Warto również rozważyć, że w przypadku porównania z typem string, takie jak '1', PHP zastosuje konwersję, co może prowadzić do błędów, jeśli nie jesteśmy świadomi tej konwencji. Dlatego kluczowe jest zrozumienie różnicy między tymi operatorami, aby uniknąć niezamierzonych konsekwencji w logicznych warunkach w kodzie.

Pytanie 6

Przedstawiona ikona funkcji edytora grafiki rastrowej o nazwie "kubełek" umożliwia

Ilustracja do pytania
A. wypełnienie zaznaczonego obszaru kolorem.
B. zaznaczenie obszaru o takim samym kolorze.
C. pobranie wskazanej barwy i ustawienie jej, jako aktywnej.
D. zmianę aktywnych kolorów.
Gratulacje, odpowiedź jest poprawna. Ikona 'kubełek farby' w edytorach grafiki rastrowej jest narzędziem umożliwiającym wypełnienie zaznaczonego obszaru wybranym kolorem. Działanie tego narzędzia jest podobne do rozlewania farby - kolor wypełnia ciągły obszar aż do napotkania krawędzi lub pikseli o innym kolorze. Ta funkcja pozwala na szybkie i efektywne kolorowanie większych powierzchni obrazu. W praktyce, jest to niezwykle przydatne narzędzie, szczególnie gdy potrzebujesz szybko zmienić tło obrazu lub wypełnić obszar jednolitym kolorem. Warto również zauważyć, że różne edytory mogą mieć dodatkowe opcje dla tego narzędzia, takie jak możliwość wyboru tolerancji (która decyduje, jak bardzo podobny kolor musi być, aby został wypełniony) czy wypełnianie według warstwy czy według obrazu.

Pytanie 7

Jaką właściwość pola w tabeli powinno się ustawić, aby akceptowało ono wyłącznie dane liczbowe?

Ilustracja do pytania
A. Regułę sprawdzania poprawności
B. Wartość domyślną
C. Tagi inteligentne
D. Maskę wprowadzania
Tagi inteligentne są narzędziem umożliwiającym szybki dostęp do dodatkowych funkcji lub opcji związanych z danymi w polu. Nie mają jednak zdolności do ograniczania samej zawartości pola w kontekście dozwolonych znaków. Ich rola jest raczej wspomagająca użytkownika poprzez dodawanie kontekstowych opcji, ale nie dotyczą bezpośrednio walidacji danych. Wartość domyślna to z kolei predefiniowana wartość, jaką pole przyjmuje w momencie tworzenia nowego rekordu, jednak nie wpływa na to, jakie dane użytkownik może wprowadzić. Jest użyteczna do ułatwienia tworzenia danych, ale nie służy do ograniczania formatu wprowadzanych danych. Chociaż reguła sprawdzania poprawności może być stosowana do określania, jakie dane są uznawane za poprawne, jej główną rolą jest weryfikacja już wprowadzonych danych, a nie ich formatowanie w trakcie wprowadzania. Reguły te mogą informować o błędach po wprowadzeniu danych, lecz nie zapobiegają samemu wprowadzaniu błędnych danych. Wiele osób może mylnie sądzić, że reguła sprawdzania poprawności i maska wprowadzania pełnią podobne funkcje, jednak maska działa na poziomie interfejsu wprowadzania, wymuszając określony format w czasie rzeczywistym, podczas gdy reguła działa retrospektywnie. Zrozumienie tych różnic pozwala na odpowiednie zastosowanie tych narzędzi w projektowaniu baz danych, co skutkuje lepszym zarządzaniem jakością danych oraz zwiększeniem intuicyjności interfejsu użytkownika. Stosowanie masek wprowadzania jest szczególnie korzystne w kontekście aplikacji z dużą ilością danych liczbowych, gdzie precyzja jest kluczowa, a reguły poprawności lepiej sprawdzają się w kontekście logicznych zależności pomiędzy polami danych. To rozróżnienie jest kluczowe dla osiągnięcia wysokiej jakości danych i łatwej obsługi w systemach informatycznych.

Pytanie 8

Formularze do zarządzania bazami danych są tworzone w celu

A. łatwiejszego wprowadzania, edytowania oraz usuwania danych
B. generowania raportów z danych
C. wyszukiwania rekordów spełniających określone kryteria
D. tworzenia powiązań w relacyjnych bazach danych
Formularze do obsługi baz danych są kluczowym narzędziem, które umożliwia użytkownikom łatwe wprowadzanie, edytowanie i usuwanie danych w sposób zorganizowany i efektywny. Głównym celem formularzy jest zapewnienie przyjaznego interfejsu, który upraszcza interakcję z bazą danych, eliminując potrzebę bezpośredniego wprowadzania poleceń SQL czy pracy z tabelami w surowej formie. Dzięki formularzom użytkownicy mogą szybko wprowadzać dane do bazy, a także modyfikować istniejące rekordy, co jest szczególnie istotne w codziennym zarządzaniu danymi. Przykładem zastosowania formularzy jest system CRM, gdzie zespół sprzedażowy może w prosty sposób dodawać nowe informacje o klientach czy aktualizować dane kontaktowe. Dobre praktyki w projektowaniu formularzy obejmują zapewnienie walidacji danych, co pozwala na uniknięcie błędów podczas wprowadzania, oraz stosowanie odpowiednich typów pól, takich jak daty, numery czy listy rozwijane, które zwiększają użyteczność formularza. W skrócie, formularze są nieodłącznym elementem efektywnego zarządzania danymi i poprawiają wydajność pracy z bazami danych.

Pytanie 9

Który z obrazków ilustruje efekt działania podanego fragmentu kodu HTML?

Ilustracja do pytania
A. Obrazek C
B. Obrazek D
C. Obrazek B
D. Obrazek A
Odpowiedzi inne niż C są niepoprawne ponieważ nie uwzględniają poprawnie działania atrybutu rowspan co prowadzi do błędnego renderowania tabeli. W przypadku błędnego rozumienia atrybutu rowspan możemy obserwować sytuacje gdzie komórki tabeli są wyświetlane w niewłaściwych miejscach co może sugerować że atrybut ten jest błędnie zrozumiany jako wpływający na szerokość a nie na wysokość komórki. Często spotykanym błędem jest zakładanie że rowspan działa podobnie jak colspan co prowadzi do błędnego ułożenia komórek w tabeli. Ważne jest aby zrozumieć że rowspan definiuje ile wierszy ma zajmować dana komórka a nie ile kolumn co jest kluczowe dla prawidłowego zrozumienia układów tabelarycznych w HTML. Takie błędy mogą prowadzić do nieczytelnych i niepoprawnie zorganizowanych danych na stronie WWW co jest szczególnie problematyczne w przypadku stron które muszą być kompatybilne z różnymi urządzeniami i technologiami asystującymi. Poprawne stosowanie atrybutów rowspan i colspan jest fundamentalne dla tworzenia dostępnych i estetycznych układów tabelarycznych.

Pytanie 10

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

A. UPDATE faktury SET dataPlatnosci=CURTIME() WHERE id = 3;
B. UPDATE faktury SET dataPlatnosci=CURTIME() WHERE dataPlatnosci IS NOT NULL;
C. UPDATE faktury SET dataPlatnosci=CURDATE() WHERE dataplatnosci = '0000-00-00';
D. UPDATE faktury SET dataPlatnosci=CURDATE() WHERE dataPlatnosci IS NULL;
Odpowiedź, którą wybrałeś, jest jak najbardziej trafna. Kwerenda UPDATE faktury SET dataPlatnosci=CURDATE() WHERE dataPlatnosci IS NULL rzeczywiście aktualizuje pole dataPlatnosci w tabeli faktur, ale tylko wtedy, gdy jest ono puste. Super, że korzystasz z CURDATE(), bo to daje nam bieżącą datę. W SQL ważne jest, żeby nie tracić czasu na aktualizowanie wierszy, które już mają datę. Dobrze widzieć, że zastosowałeś IS NULL, bo to pozwala uniknąć kłopotów z porównywaniem dat i wydobywaniem takich wartości jak '0000-00-00', co na pewno by namieszało z interpretacją. Twoje podejście jest zgodne z tym, co powinno być w bazach danych – minimalizowanie zbędnych danych i dbanie o ich spójność. Z mojego doświadczenia, zawsze lepiej korzystać z funkcji datowych, bo to pozwala mieć pewność, że wprowadzane wartości są aktualne i pasują do reszty aplikacji.

Pytanie 11

Źródłem danych dla raportu może być

A. makropolecenie
B. inny raport
C. zapytanie INSERT INTO
D. tabela
Tabela jest podstawowym elementem struktury bazy danych, który służy jako źródło danych dla raportów. Tabele przechowują zorganizowane informacje w formie wierszy i kolumn, co umożliwia łatwy dostęp i analizę danych. Każda kolumna w tabeli reprezentuje atrybut, a każdy wiersz to pojedynczy rekord z danymi. Przykładowo, w tabeli zawierającej informacje o klientach, kolumny mogą obejmować imię, nazwisko, adres e-mail i numer telefonu. Dzięki standardom takim jak SQL (Structured Query Language), można łatwo wykonywać operacje na tych tabelach, takie jak selekcja, aktualizacja czy usuwanie danych. Tabele są fundamentalne w systemach zarządzania bazami danych (DBMS) i stanowią podstawowe źródło dla generowania raportów, które mogą być wykorzystywane w różnych kontekstach biznesowych. W raportach można agregować dane, obliczać różne wskaźniki oraz wizualizować wyniki, co czyni tabele nieocenionym elementem w analizie danych.

Pytanie 12

Deklarując var x="true"; w języku JavaScript, jakiego typu zmienną się tworzy?

A. Nieokreślonego (undefined)
B. Logicznego
C. Liczbowego
D. String (ciąg znaków)
Odpowiedzi wskazujące na inne typy danych, takie jak typ logiczny czy liczbowy, zawierają istotne nieporozumienia dotyczące sposobu, w jaki JavaScript zarządza danymi. Typ logiczny w tym kontekście oznaczałby, że zmienna mogłaby przyjmować tylko wartości 'true' lub 'false', co jest mylnym założeniem, ponieważ 'true' jest tutaj częścią tekstu, a nie wartością logiczną. Z kolei typ liczbowy byłby właściwy dla zmiennych takich jak 1, 2 czy 3, które reprezentują liczby całkowite lub zmiennoprzecinkowe. W przypadku zadeklarowanej zmiennej 'var x="true";', wartość, która jest przypisywana, jest w rzeczywistości ciągiem tekstowym, mimo że zawiera słowo kluczowe 'true'. Typ danych 'undefined' z kolei oznacza, że zmienna została zadeklarowana, ale nie przypisano jej żadnej wartości, co również nie odpowiada sytuacji przedstawionej w pytaniu. Zrozumienie typów danych w JavaScript jest kluczowe dla unikania błędów typowych, zwłaszcza w kontekście zmiennych, które mogą być używane w różnych operacjach. W praktyce, to zrozumienie typów pozwala programistom lepiej zarządzać danymi i pisać bardziej niezawodny kod. Warto również pamiętać, że JavaScript automatycznie konwertuje typy w wielu sytuacjach, co może prowadzić do niezamierzonych rezultatów, dlatego proszę zwracać szczególną uwagę na przypisania i operacje wykonywane na zmiennych.

Pytanie 13

Pole autor w tabeli ksiazka jest:

CREATE TABLE ksiazka (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
tytul VARCHAR(200),
autor SMALLINT UNSIGNED NOT NULL,
CONSTRAINT `dane` FOREIGN KEY (autor) REFERENCES autorzy(id)
);
A. kluczem obcym związanym z tabelą autorzy
B. polem wykorzystanym w relacji z tabelą dane
C. polem typu tekstowego zawierającym informacje o autorze
D. kluczem podstawowym tabeli ksiazka
Pole autor w tabeli ksiazka jest kluczem obcym, co oznacza, że wskazuje na inne pole w innej tabeli - w tym przypadku na pole id w tabeli autorzy. Klucze obce są podstawowym mechanizmem relacyjnych baz danych, który umożliwia tworzenie związków między różnymi tabelami. Dobre praktyki w projektowaniu baz danych sugerują używanie kluczy obcych do zapewnienia integralności referencyjnej, co oznacza, że każde odniesienie do innej tabeli musi wskazywać na istniejący rekord. Dzięki temu unika się problemów z danymi, takich jak tzw. „osierocone” rekordy, które odwołują się do nieistniejących danych. W praktyce, gdy dodajemy nową książkę do tabeli ksiazka, musimy mieć pewność, że istnieje odpowiedni autor w tabeli autorzy. Takie podejście podnosi jakość danych i pozwala na bardziej złożone zapytania SQL, które mogą łączyć informacje z różnych tabel w sposób spójny i logiki. Klucze obce są także kluczowe w kontekście operacji takich jak aktualizacja czy usuwanie danych, ponieważ mogą automatycznie zaktualizować lub usunąć powiązane rekordy, co zapewnia integralność bazy danych.

Pytanie 14

W przedstawionej regule CSS h1{color: blue} co oznacza h1?

A. klasę
B. deklarację
C. selektor
D. wartość
W regule CSS h1{color: blue} termin h1 odnosi się do selektora, który jest używany do wybierania elementów HTML, a w tym przypadku oznacza wszystkie nagłówki pierwszego poziomu. Selekcje w CSS są kluczowym elementem stylizacji stron internetowych, ponieważ pozwalają na precyzyjne określenie, które elementy mają być stylizowane. Selekcja h1 odnosi się do wszystkich elementów <h1> w dokumencie HTML, co oznacza, że wszystkie nagłówki pierwszego poziomu zostaną stylizowane zgodnie z podaną regułą. Wartością kolorystyki, czyli blue, jest przypisana do właściwości CSS 'color', co skutkuje zmianą koloru tekstu nagłówka na niebieski. Zgodnie z W3C, CSS (Cascading Style Sheets) pozwala na oddzielenie treści od prezentacji, co zwiększa elastyczność i ułatwia zarządzanie stylem strony. Przykładem praktycznym może być strona internetowa, gdzie wszystkie nagłówki pierwszego poziomu są wyróżnione kolorem niebieskim, co przyciąga uwagę użytkowników i poprawia czytelność. Selekcja jest zatem podstawowym narzędziem w stylizacji, umożliwiającym aplikację reguł CSS do określonych elementów HTML.

Pytanie 15

Jaką relację w projekcie bazy danych należy zdefiniować pomiędzy tabelami przedstawionymi na rysunku, zakładając, że każdy klient sklepu internetowego składa przynajmniej dwa zamówienia?

Ilustracja do pytania
A. 1:n, gdzie 1 jest po stronie Klienta, a wiele po stronie Zamówienia
B. 1:1
C. 1:n, gdzie 1 jest po stronie Zamówienia, a wiele po stronie Klienta
D. n:n
Relacja 1:n, gdzie 1 jest po stronie Klienta, a wiele po stronie Zamówienia, jest prawidłowa, ponieważ odzwierciedla rzeczywiste założenie, że każdy klient może złożyć wiele zamówień. W praktyce baza danych musi odwzorowywać te zależności, co pozwala na efektywne zarządzanie danymi. Każdy klient posiada unikalny identyfikator, zwykle klucz podstawowy, który nie może się powtarzać w tabeli Klient. Tabela Zamówienie posiada natomiast klucz obcy, który odnosi się do klucza podstawowego w tabeli Klient, umożliwiając przechowywanie wielu zamówień przypisanych do jednego klienta. Dzięki temu możemy łatwo wykonywać operacje takie jak wyszukiwanie wszystkich zamówień danego klienta czy śledzenie historii zakupów. Dobre praktyki projektowania baz danych podkreślają znaczenie poprawnego zdefiniowania relacji między tabelami, co zwiększa spójność danych i ułatwia ich późniejsze przetwarzanie. W systemach e-commerce taka struktura bazy danych jest niezbędna do obsługi klientów i śledzenia ich zamówień, co jest podstawą do analizy sprzedaży i tworzenia strategii marketingowych.

Pytanie 16

Który ze skrótów oznacza sieć bezprzewodową?

A. WAN
B. LAN
C. WLAN
D. MAN
WLAN (Wireless Local Area Network) to bezprzewodowa sieć lokalna - litera „W” (Wireless) wskazuje brak kabli, a łączność zapewnia technologia Wi-Fi (standardy IEEE 802.11). Pozostałe skróty opisują sieci według zasięgu, nie sposobu transmisji: LAN to sieć lokalna (np. w biurze), MAN obejmuje miasto, a WAN to sieć rozległa, jak internet. Dlatego sieć bezprzewodową oznacza skrót WLAN.

Pytanie 17

Które oprogramowanie jest typowe do obróbki grafiki WEKTOROWEJ?

A. Brasero
B. Audacity
C. Inkscape
D. Paint
Inkscape to darmowy edytor grafiki WEKTOROWEJ - tworzy obrazy opisane krzywymi i kształtami (format SVG), skalowalne bez utraty jakości. Dlatego do grafiki wektorowej służy Inkscape.

Pytanie 18

Którą relację w projekcie bazy danych należy ustalić między tabelami widocznymi na ilustracji zakładając, że każdy klient sklepu internetowego dokona przynajmniej dwóch zamówień?

Ilustracja do pytania
A. 1:n, gdzie 1 jest po stronie Klienta, a wiele po stronie Zamówienia
B. 1:1
C. n:n
D. 1:n, gdzie 1 jest po stronie Zamówienia, a wiele po stronie Klienta
Poprawnie wskazana relacja 1:n (jeden do wielu), gdzie „1” jest po stronie tabeli Klient, a „n” po stronie tabeli Zamówienie, dokładnie odzwierciedla opisany przypadek biznesowy: jeden klient sklepu internetowego może złożyć wiele zamówień, a każde zamówienie należy do jednego, konkretnego klienta. W praktyce projektowania relacyjnych baz danych oznacza to, że w tabeli Zamówienie umieszczamy klucz obcy (np. kolumnę id_klienta), który wskazuje na klucz główny w tabeli Klient (np. id_klienta jako PRIMARY KEY). To jest klasyczny przykład relacji nadrzędny–podrzędny (parent–child). Z mojego doświadczenia w systemach e‑commerce taka struktura jest standardem, bo pozwala łatwo wykonywać typowe kwerendy: wyszukiwanie wszystkich zamówień danego klienta, liczenie wartości zamówień na klienta, analizę historii zakupów. Dodatkowo założenie, że każdy klient dokona co najmniej dwóch zamówień, wpływa na tzw. krotność minimalną po stronie Zamówienia (min 2), ale nie zmienia samego typu relacji – nadal jest to 1:n. W modelu logicznym i fizycznym realizujemy to przez odpowiednie więzy integralności: klucz główny w tabeli Klient i klucz obcy w tabeli Zamówienie z ON DELETE RESTRICT lub CASCADE (w zależności od polityki biznesowej). Taka relacja ułatwia normalizację danych: dane klienta trzymamy w jednym miejscu, unikamy duplikacji w wielu zamówieniach, a w razie zmiany np. adresu e‑mail aktualizujemy tylko jeden rekord. W dobrze zaprojektowanych schematach (np. zgodnych z 3NF) dokładnie tak modeluje się powiązanie Klient–Zamówienie.

Pytanie 19

Jakim zapisem w języku PHP można określić komentarz, który rozciąga się na wiele linii?

A. //
B. <!-- -->
C. #
D. /*  */
W języku PHP komentarz wieloliniowy definiuje się za pomocą zapisu /* */. Taki komentarz może obejmować wiele linii tekstu, co czyni go niezwykle przydatnym do opisywania fragmentów kodu, które są zbyt obszerne, by umieścić je w pojedynczej linii. Używanie komentarzy wieloliniowych pozwala programistom na dodawanie szczegółowych wyjaśnień dotyczących funkcji, algorytmów czy też sposobu działania poszczególnych sekcji kodu. Dobrą praktyką jest stosowanie takich komentarzy, aby ułatwić innym programistom zrozumienie kodu lub przypomnienie sobie samego siebie, co dany fragment robi. Przykładowo:

/*
Funkcja oblicza sumę dwóch liczb
Parametr 1: pierwsza liczba
Parametr 2: druga liczba
Zwraca: suma obu liczb
*/

Ponadto, stosowanie komentarzy jest zgodne z zasadami programowania zorientowanego na zrozumiałość, które są kluczowe w projektach zespołowych oraz w długofalowym utrzymaniu kodu. Poprawne stosowanie komentarzy pomaga w dokumentowaniu kodu oraz w jego przyszłym rozwoju.

Pytanie 20

Jakie są etapy w odpowiedniej kolejności przy tworzeniu aplikacji?

A. Określenie wymagań, analiza oczekiwań klienta, programowanie, wdrożenie, testowanie
B. Analiza oczekiwań klienta, określenie wymagań, programowanie, wdrożenie, testowanie
C. Programowanie, analiza oczekiwań klienta, określenie wymagań, wdrożenie, testowanie
D. Analiza oczekiwań klienta, określenie wymagań, programowanie, testowanie, wdrożenie
Odpowiedź wskazująca na kolejność: analiza wymagań klienta, specyfikacja wymagań, tworzenie, testy, wdrażanie jest poprawna i odzwierciedla standardowy model cyklu życia oprogramowania (SDLC). Zaczynamy od analizy wymagań, co oznacza zrozumienie potrzeb klienta i zebranie informacji, które będą fundamentem dalszych prac. Następnie przechodzimy do specyfikacji wymagań, gdzie dokumentujemy te potrzeby w formie, która będzie zrozumiała dla zespołu developerskiego. Tworzenie aplikacji następuje po szczegółowym omówieniu i zaakceptowaniu wymagań, co minimalizuje ryzyko błędów. Testy są kluczowym etapem, który pozwala na weryfikację, czy stworzone rozwiązanie spełnia wymagania oraz działa zgodnie z założeniami. Ostateczne wdrożenie aplikacji do użytkowania powinno nastąpić po przeprowadzeniu wszystkich testów i uzyskaniu pozytywnych wyników. Przykład zastosowania tej metodologii można zaobserwować w projektach realizowanych w metodologii Agile, gdzie iteracje pozwalają na ciągłe dostosowywanie aplikacji do zmieniających się potrzeb klienta. Takie podejście zwiększa satysfakcję użytkowników i minimalizuje koszty związane z poprawkami.

Pytanie 21

W jakim celu tworzy się w tabeli klucz OBCY?

A. aby stworzyć formularz do wprowadzania danych
B. aby wiązać go z innymi kluczami obcymi tej samej tabeli
C. aby utworzyć relację (np. 1..n) z kluczem głównym innej tabeli
D. aby jednoznacznie identyfikować rekord w tabeli
Klucz OBCY tworzy się, aby ustanowić RELACJĘ między tabelami - wskazuje klucz główny innej tabeli (np. w relacji 1..n). Pilnuje też spójności powiązań. Dlatego klucz obcy służy do utworzenia relacji z kluczem głównym innej tabeli.

Pytanie 22

Aby ułatwić wprowadzanie oraz modyfikację danych w tabeli, konieczne jest zdefiniowanie

A. raportu
B. filtra
C. formularza
D. kwerendy SELECT
Formularz to narzędzie, które pozwala na łatwe i intuicyjne wprowadzanie oraz edytowanie danych w bazie danych. W przeciwieństwie do kwerend, które są używane głównie do selekcji danych, formularze zapewniają interfejs użytkownika, który ułatwia zbieranie danych od użytkowników. Dzięki formularzom można zaprojektować przyjazny dla użytkownika interfejs, który może zawierać różne elementy, takie jak pola tekstowe, listy rozwijane, przyciski radiowe i przyciski akcji. Praktycznym zastosowaniem formularzy jest wprowadzanie danych do systemów zarządzania treścią, takich jak bazy danych dla aplikacji webowych czy systemów CRM. Dobrą praktyką jest stosowanie walidacji danych w formularzach, aby upewnić się, że wprowadzane informacje są zgodne z wymaganym formatem i nie zawierają błędów. Ponadto formularze mogą być zintegrowane z procesami automatyzacji, co znacznie zwiększa efektywność wprowadzania danych i minimalizuje ryzyko wystąpienia błędów.

Pytanie 23

W ramce przedstawiono kod JavaScript z błędem logicznym. Program powinien wypisywać informację, czy liczby są sobie równe czy nie, lecz nie wykonuje tego. Wskaż odpowiedź, która dotyczy błędu.

var x = 5;
var y = 3;
if (x = y)     document.getElementById("demo").innerHTML = 'zmienne są równe';
else         document.getElementById("demo").innerHTML = 'zmienne się różnią';
A. Instrukcje wewnątrz sekcji if oraz else powinny być zamienione miejscami.
B. Nieprawidłowo zadeklarowano zmienne.
C. Przed klauzulą else nie powinno być średnika.
D. W klauzuli if występuje przypisanie zamiast porównania.
Gratulacje! Poprawnie zauważyłeś, że w klauzuli if występuje przypisanie zamiast porównania. W JavaScript, operatorem przypisania jest pojedynczy znak równości (=), natomiast operatorem porównania jest podwójny (==) lub potrójny znak równości (===). W przypadku prezentowanego kodu, zamiast porównać wartości zmiennych x i y, wartość zmiennej y jest przypisywana do zmiennej x, co prowadzi do błędu logicznego. Jest to typowy błąd, który często występuje, szczególnie u początkujących programistów. W praktyce, aby nie pomylić operatorów, warto zawsze umieszczać wartość stałą po lewej stronie operatora porównania - wtedy próba przypisania wartości stałej zwróci błąd kompilacji. Dodatkowo, niektóre narzędzia do analizy statycznej kodu, takie jak ESLint, mogą pomóc w wykrywaniu tego typu błędów.

Pytanie 24

Jaką kompetencję społeczną ma osoba, która potrafi wyrażać swoje zdanie i bronić swoich racji, nie naruszając przy tym granic własnych ani innych ludzi?

A. konformizm
B. akomodacja
C. empatia
D. asertywność
Asertywność to kompetencja społeczna polegająca na otwartym wyrażaniu własnego zdania i obronie swoich racji z poszanowaniem granic - zarówno własnych, jak i innych osób. To postawa równowagi: ani uległa, ani agresywna. Dlatego opisaną kompetencją jest asertywność.

Pytanie 25

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

A. MS ACCESS
B. mySQL
C. MS SQL
D. PostgreSQL
Polecenie pg_connect w języku PHP jest dedykowane do nawiązywania połączeń z bazami danych PostgreSQL, które są relacyjnymi bazami danych znanymi z dużej wydajności, elastyczności oraz wsparcia dla zaawansowanych funkcji, takich jak transakcje, procedury składowane czy różnorodne typy danych. Użycie pg_connect pozwala programistom na łatwe integrowanie aplikacji PHP z PostgreSQL, co jest kluczowe w przypadku aplikacji wymagających solidnego zarządzania danymi. Przykładowo, aby nawiązać połączenie z bazą danych, można użyć kodu: $conn = pg_connect("host=localhost dbname=mydb user=myuser password=mypassword");. Taki sposób połączenia umożliwia nie tylko dostęp do danych, ale też wykonanie zapytań SQL i zarządzanie wynikami. Dobrą praktyką jest zawsze zamykanie połączeń oraz obsługa potencjalnych błędów, co przyczynia się do stabilności aplikacji. Zgodnie z wytycznymi dotyczącymi bezpieczeństwa, szczególnie w kontekście aplikacji webowych, ważne jest również stosowanie technik zabezpieczeń, takich jak przygotowane zapytania, aby zapobiec atakom typu SQL injection.

Pytanie 26

Aby zapisać prostą animację na potrzeby strony internetowej, można skorzystać z formatu:

A. CDR
B. GIF
C. JPG
D. PNG
Do zapisania prostej animacji na stronę internetową nadaje się format GIF. Plik GIF może przechowywać wiele klatek wyświetlanych po kolei w pętli, więc tworzy krótką animację bez potrzeby stosowania wideo. Obsługuje też przezroczystość, choć ogranicza paletę do 256 kolorów. To dlatego proste, lekkie animacje (np. ikony, banery) zapisuje się właśnie jako GIF.

Pytanie 27

Aby przekształcić tekst "ala ma psa" na "ALA MA PSA", konieczne jest zastosowanie funkcji w PHP

A. strtolower('ala ma psa')
B. strtoupper('ala ma psa')
C. ucfirst('ala ma psa')
D. strstr('ala ma psa')
Funkcja strtoupper() w PHP jest naprawdę przydatna do zamiany wszystkich liter w danym ciągu znaków na wielkie litery. Na przykład, kiedy mamy tekst 'ala ma psa' i użyjemy strtoupper('ala ma psa'), to dostaniemy 'ALA MA PSA'. To bardzo fajny trik, zwłaszcza gdy musimy ujednolicić format tekstu, na przykład jak ktoś wprowadza dane w różny sposób. Moim zdaniem, to jest ważne, bo różnice w wielkości liter mogą zepsuć nasze porównania. Weźmy pod uwagę sytuację, gdy użytkownik wpisuje różne rzeczy i chcemy, żeby wszystko było w jednym formacie przed dalszym przetwarzaniem, np. w bazach danych. To dobra funkcja, bo działa z różnymi zestawami znaków, więc jest świetnym narzędziem w PHP, nie tylko w aplikacjach webowych, ale też przy przetwarzaniu tekstów.

Pytanie 28

Który zapis deklaracji zmiennej w JavaScript jest POPRAWNY?

A.
var 2nameVar = 10;
B.
let variableName = 10;
C.
var $name@ = 10;
D.
const var-name = 10;
Nazwa zmiennej w JavaScripcie może zawierać litery, cyfry, _ i $, ale NIE może zaczynać się od cyfry ani zawierać myślnika czy znaków specjalnych. Dlatego poprawny jest let variableName = 10; - nazwa zaczyna się literą i jest zapisana w stylu camelCase. Zapamiętaj: zaczynaj od litery (lub _/$), bez - i bez znaków specjalnych.

Pytanie 29

Za pomocą którego protokołu można bezpiecznie (z szyfrowaniem) przesłać pliki strony internetowej na serwer WWW?

A. IMAP
B. POP3
C. Telnet
D. SFTP
SFTP (SSH File Transfer Protocol) przesyła pliki w ramach sesji SSH, dlatego cała komunikacja - zarówno dane plików, jak i login oraz hasło - jest szyfrowana. To właśnie czyni go bezpiecznym sposobem na wgranie plików witryny (HTML, CSS, JavaScript, grafik) na serwer WWW: nawet w sieci publicznej nikt postronny nie odczyta przesyłanej zawartości ani danych logowania. SFTP działa na jednym połączeniu (domyślnie port 22) i pozwala nie tylko kopiować pliki, ale też tworzyć katalogi, zmieniać nazwy czy usuwać pliki na serwerze. Dlatego przy publikacji strony, gdy zależy nam na poufności transferu, wybieramy SFTP zamiast klasycznego, nieszyfrowanego FTP.

Pytanie 30

W bazie danych MYSQL znajduje się tabela z programami komputerowymi, która ma pola: nazwa, producent, rokWydania. Jak należy sformułować kwerendę SELECT, aby uzyskać wszystkie nazwy producentów bez powtórzeń?

A. SELECT producent FROM programy WHERE UNIQUE;
B. SELECT UNIQUE producent FROM programy;
C. SELECT DISTINCT producent FROM programy;
D. SELECT producent FROM programy WHERE producent NOT DUPLICATE;
Odpowiedź 'SELECT DISTINCT producent FROM programy;' jest w porządku. To dlatego, że kluczowe słowo DISTINCT działa tak, że zwraca tylko unikalne wartości z kolumny 'producent' w tabeli 'programy'. Jak są duże zbiory danych, to użycie DISTINCT naprawdę się przydaje, bo pozwala pozbyć się duplikatów i to później ułatwia analizę danych. Na przykład, kiedy w tabeli jest mnóstwo rekordów dla tego samego producenta, to DISTINCT zwróci tylko jeden wpis dla każdego z nich. Wiesz, to taka dobra praktyka w SQL, bo im mniej danych musisz przetwarzać, tym lepsza wydajność. I, co ciekawe, użycie DISTINCT nie obniża wydajności zapytania tak bardzo, jak niektórzy mogą myśleć, szczególnie w dobrze zindeksowanych tabelach. Warto to mieć na uwadze.

Pytanie 31

Określ rezultat działania podanego kodu PHP, jeśli zmienna tab jest tablicą.

$tab = explode(",","jelenie,sarny,dziki,lisy,borsuki"); echo $tab[1]." ".$tab[2];
A. dziki lisy
B. jelenie sarny
C. lisy borsuki
D. sarny dziki
Wynik działania tego kodu PHP to 'sarny dziki'. Dzieje się tak dzięki funkcji explode oraz indeksom tablicy. Funkcja explode dzieli tekst na kawałki według separatora, który w tym przypadku to przecinek. Więc, kiedy zastosujemy ją na ciągu 'jelenie,sarny,dziki,lisy,borsuki', dostaniemy tablicę, gdzie indeks 0 to 'jelenie', indeks 1 to 'sarny', indeks 2 to 'dziki', indeks 3 to 'lisy', a indeks 4 to 'borsuki'. Potem, polecenie echo wyświetla wartości z indeksów 1 i 2, które mają 'sarny' oraz 'dziki'. To całkiem praktyczne w programowaniu, zwłaszcza gdy przerabiamy i manipulujemy danymi tekstowymi. Dzięki explode łatwo dzielimy dane na mniejsze kawałki, co przydaje się w różnych sytuacjach, jak analiza danych czy robienie formularzy, a nawet w pracy z plikami CSV.

Pytanie 32

Jakie oprogramowanie służy do obróbki dźwięku?

A. Winamp
B. Audacity
C. Brasero
D. RealPlayer
Audacity jest wszechstronnym, darmowym programem typu open source, który służy do edycji dźwięku. Jego funkcjonalność obejmuje nagrywanie, edytowanie i przetwarzanie dźwięku w różnych formatach. Program ten jest często wykorzystywany przez muzyków, podcasterów oraz profesjonalistów zajmujących się dźwiękiem, co czyni go niezwykle popularnym w branży. Audacity obsługuje wiele efektów dźwiękowych, takich jak kompresja, reverb oraz equalizacja, co pozwala na zaawansowaną obróbkę nagrań. Dzięki intuicyjnemu interfejsowi użytkownika, użytkownicy mogą łatwo nawigować w programie oraz korzystać z funkcji takich jak wielościeżkowe nagrywanie i edytowanie. Warto również wspomnieć, że Audacity działa na różnych systemach operacyjnych, w tym Windows, macOS oraz Linux, co zapewnia dostępność dla szerszego kręgu użytkowników. Użytkownicy mogą również korzystać z dodatkowych wtyczek, które rozszerzają możliwości programu, co jest zgodne z najlepszymi praktykami w branży, gdzie elastyczność i rozszerzalność oprogramowania są kluczowe dla profesjonalnych zastosowań.

Pytanie 33

Deklaracja typu dokumentu HTML: <!DOCTYPE HTML> wskazuje, że kod został stworzony w wersji

A. 4
B. 6
C. 7
D. 5
Gdy widzisz deklarację <!DOCTYPE HTML>, to znaczy, że mówimy o wersji HTML5. To obecny standard, który wprowadza naprawdę sporo nowych funkcji w porównaniu do wcześniejszych wersji. Na przykład, HTML5 pozwala na osadzanie audio i wideo bez potrzeby dodatkowych wtyczek, co jest super wygodne. Mamy też fajne semantyczne elementy jak <article>, <section> czy <nav>, które sprawiają, że łatwiej zorganizować treści na stronie. Ważne jest, żeby zawsze na początku dokumentu umieszczać tę deklarację, bo to pozwala przeglądarkom na prawidłowe wyświetlanie strony. Dzięki temu unikamy problemów z interpretacją kodu, co z doświadczenia mówię, jest naprawdę istotne.

Pytanie 34

Dla którego akapitu zastosowano przedstawioną właściwość stylu CSS?

border-radius: 20%;

To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf

A

To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf

B

To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf

C

To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf, To jest paragraf

D
A. A.
B. D.
C. C.
D. B.
Dobra robota! Zgadłeś, że chodziło o akapit z tą właściwością CSS 'border-radius: 20%;'. Ta właściwość faktycznie zaokrągla rogi elementów, co wygląda super i sprawia, że strona jest bardziej przyjemna dla oka. Widzisz, akapit B ma te zaokrąglone rogi, a to dokładnie to, co daje nam ten styl CSS. W rzeczywistości, tylko B jest tak zrobiony na obrazku, więc wiesz, że tam zastosowano 'border-radius'. Ta wartość '20%;' mówi nam, jak mocno rogi mają być zaokrąglone. Takie rzeczy są ważne w CSS, żeby strony wyglądały estetycznie i nowocześnie.

Pytanie 35

Którym poleceniem wyświetlisz konfigurację serwera PHP (wersję PHP, system serwera, wartości zmiennych predefiniowanych)?

A.
print_r(ini_get_all());
B.
phpinfo();
C.
echo phpversion();
D.
phpcredits();
Pozostałe funkcje pokazują znacznie mniej. print_r(ini_get_all()) wypisze tylko ustawienia php.ini, bez danych o systemie. phpcredits() to lista autorów PHP. phpversion() zwraca sam numer wersji. Komplet informacji o serwerze daje phpinfo();.

Pytanie 36

Aby osiągnąć efekt przedstawiony na ilustracji, w kodzie HTML należy zastosować znacznik skrótu <abbr> z atrybutem

Ilustracja do pytania
A. dfn
B. name
C. alt
D. title
Znacznik <abbr> w HTML pełni rolę semantyczną, pomagając w oznaczaniu skrótów i akronimów. Atrybut alt jest stosowany w znacznikach <img> do opisywania obrazów, co jest istotne dla dostępności i SEO, ale nie ma związku ze znacznikami tekstowymi jak <abbr>. Alt informuje o treści obrazu, co jest kluczowe dla użytkowników niewidzących, lecz nie pełni funkcji rozwijania skrótów tekstowych. Atrybut dfn służy do definiowania terminów w tekście, zazwyczaj używany w połączeniu ze znacznikiem <dfn>, a nie <abbr>. Chociaż dfn dostarcza definicji, nie jest używany do rozwijania skrótów. Atrybut name nie jest związany z rozwijaniem tekstu ani z <abbr>. Jest on stosowany głównie w formularzach HTML do identyfikacji elementów, takich jak <input>, umożliwiając ich rozróżnienie. Mylenie tych atrybutów wynika często z braku zrozumienia ich specyficznych zastosowań w kontekście HTML i dostępności. Właściwe używanie atrybutów to klucz do tworzenia semantycznie poprawnych i dostępnych stron internetowych.

Pytanie 37

Aby wybrać z bazy danych rekordy spełniające określone kryteria, należy utworzyć:

A. raport
B. formularz
C. makro
D. kwerendę (zapytanie)
Kwerenda (zapytanie) to obiekt bazy danych, który wybiera rekordy spełniające zadane warunki - odpowiada zapytaniu SELECT ... WHERE w SQL. Można w niej wskazać kolumny, kryteria filtrowania i sortowanie, a wynik wykorzystać dalej w formularzu czy raporcie. Dlatego do wybrania danych wg kryteriów tworzy się kwerendę.

Pytanie 38

Na podstawie filmu wskaż, która cecha dodana do stylu CSS zamieni miejscami bloki aside i nav, pozostawiając w środku blok section?

A. nav { float: left; } aside { float: left; }
B. aside {float: left; }
C. nav { float: right; }
D. nav { float: right; } section { float: right; }
W tym zadaniu kluczowe jest zrozumienie, jak naprawdę działa float, a nie tylko samo skojarzenie, że „left to lewo, right to prawo”. Wiele osób myśli, że wystarczy ustawić jeden element na lewo, drugi na prawo i wszystko magicznie się poukłada. W praktyce przeglądarka trzyma się bardzo konkretnych reguł: najpierw liczy kolejność elementów w HTML, potem dopiero stosuje float i układa je możliwie jak najwyżej i jak najbliżej odpowiedniej krawędzi.

Jeśli nada się float tylko dla aside albo tylko dla nav, to zmienia się ich pozycja, ale układ trzech bloków nie spełni warunku z zadania: aside i nav nie zamienią się miejscami z pozostawieniem section w środku. Przykładowo, samo float: left na aside niczego nie „zamieni”, bo element i tak pojawia się jako pierwszy w kodzie, więc będzie u góry, tylko że „przyklejony” do lewej. Z kolei ustawienie nav na prawą stronę bez odpowiedniego floatowania section prowadzi do sytuacji, gdzie section nadal zachowuje się jak normalny blok, zwykle ląduje pod elementami pływającymi albo obok nich w sposób mało przewidywalny dla początkującego.

Częsty błąd myślowy polega też na tym, że ktoś próbuje wszystkim elementom dać float: left, licząc na to, że przeglądarka „ułoży je po swojemu”. Wtedy jednak wszystkie te bloki ustawiają się w jednym kierunku, w kolejności z HTML, więc nie ma mowy o świadomym „zamienianiu miejsc”. Brak zrozumienia, że float wyjmuje element z normalnego przepływu i wpływa na to, jak kolejne elementy zawijają się wokół niego, prowadzi właśnie do takich błędnych odpowiedzi. Z mojego doświadczenia lepiej jest najpierw narysować sobie prosty schemat: w jakiej kolejności idą znaczniki i które z nich mają pływać w prawo, a które zostać w naturalnym układzie. Dopiero wtedy dobiera się konkretne deklaracje CSS. Takie myślenie przydaje się nie tylko przy float, ale też przy nauce flexboxa czy grida, gdzie kolejność w DOM i własności układu też grają ogromną rolę.

Pytanie 39

Co zwróci w PHP empty($a), gdy $a ma wartość 0?

A.
0
B.
FALSE
C.
NULL
D.
TRUE
Funkcja empty() sprawdza, czy zmienna jest „pusta”, a w PHP za pustą uznaje się m.in. wartość 0, pusty napis, null i false. Skoro $a wynosi 0, empty($a) zwróci TRUE. Dlatego wynikiem jest TRUE.

Pytanie 40

Co oznacza integralność referencyjna w relacyjnych bazach danych?

A. klucz główny i obcy nie mogą być puste
B. klucz obcy musi równać się kluczowi głównemu powiązanej tabeli albo być NULL
C. klucz główny i obcy nie zawierają wartości NULL
D. każdemu kluczowi głównemu odpowiada dokładnie jeden klucz obcy
Pozostałe opisy są nieprecyzyjne. Klucz obcy MOŻE być pusty, więc warunki „nie mogą być puste / bez NULL” są błędne. Jednemu kluczowi głównemu może odpowiadać WIELE kluczy obcych (relacja 1..n), nie „dokładnie jeden”. Integralność referencyjna to: klucz obcy wskazuje istniejący klucz główny albo jest NULL.