KWALIFIKACJA INF3 - CZERWIEC 2018

PYTANIE NR 21.
Zdefiniowanie klucza obcego jest niezbędne do utworzenia
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Klucz obcy (FOREIGN KEY) wskazuje na klucz podstawowy w innej tabeli i wymusza integralność referencyjną. To właśnie on typowo realizuje powiązanie, w którym jeden rekord tabeli nadrzędnej może mieć wiele rekordów podrzędnych, czyli relację 1..n. Transakcja i klucz podstawowy nie wymagają definicji klucza obcego.

Pełne wyjaśnienie:

Klucz obcy (FOREIGN KEY) to ograniczenie, które łączy kolumnę (lub zestaw kolumn) w tabeli podrzędnej z kluczem podstawowym (lub innym kluczem unikalnym) w tabeli nadrzędnej. Jego główną rolą jest wymuszenie integralności referencyjnej, czyli zasady: nie można wstawić wartości odwołującej się do rekordu, który nie istnieje w tabeli nadrzędnej.

W praktyce klucz obcy jest podstawowym mechanizmem implementacji relacji 1..n: jeden rekord "po stronie 1" (np. klient) może być wskazywany przez wiele rekordów "po stronie n" (np. zamówienia). Tabela "zamówienia" zawiera wtedy kolumnę z identyfikatorem klienta jako klucz obcy.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • "transakcji" – transakcja to mechanizm kontroli spójności wykonywania operacji (COMMIT/ROLLBACK). Nie wymaga istnienia klucza obcego; można wykonywać transakcje w bazie bez jakichkolwiek relacji między tabelami.
  • "relacji 1..1" – relację 1..1 również da się zrealizować przy pomocy klucza obcego, ale zwykle trzeba dodać dodatkowy warunek (np. unikalność po stronie podrzędnej). Sam fakt "zdefiniowania klucza obcego" nie jest jedynym elementem odróżniającym 1..1 od 1..n, dlatego ta opcja nie jest najlepszą odpowiedzią w ujęciu egzaminacyjnym.
  • "klucza podstawowego" – klucz podstawowy (PRIMARY KEY) definiuje unikalność rekordu w tabeli. Do utworzenia klucza podstawowego nie potrzeba klucza obcego; to niezależne ograniczenie.

Wskazówka egzaminacyjna: gdy pytanie dotyczy "połączenia tabel" i "wskazywania na rekord w innej tabeli", najczęściej chodzi o klucz obcy i integralność referencyjną. Krotność 1..n rozpoznasz po tym, że wiele rekordów w jednej tabeli może wskazywać na jeden rekord w drugiej.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Klucz obcy to ograniczenie (FOREIGN KEY), które wymaga, aby wartość w kolumnie tabeli podrzędnej istniała jako klucz w tabeli nadrzędnej (np. PRIMARY KEY lub UNIQUE). Dzięki temu DBMS pilnuje spójności powiązań między tabelami i blokuje "osierocone" rekordy.
W relacji 1..n wiele wierszy tabeli podrzędnej może wskazywać na jeden wiersz tabeli nadrzędnej. Realizuje się to przez dodanie w tabeli podrzędnej kolumny z identyfikatorem rekordu nadrzędnego i ustawienie na niej FOREIGN KEY.
Tak, zwykle stosuje się FOREIGN KEY oraz dodatkowo wymusza unikalność po stronie tabeli podrzędnej (np. ograniczenie UNIQUE na kolumnie FK). Wtedy każdy rekord nadrzędny może być powiązany z najwyżej jednym rekordem podrzędnym.
Transakcja dotyczy sposobu wykonywania operacji (atomowość, zatwierdzanie i wycofywanie zmian), a nie struktury relacji między tabelami. Możesz wykonywać transakcje na jednej tabeli i bez żadnych FOREIGN KEY, a mechanizm transakcyjny nadal działa.
Integralność referencyjna chroni bazę przed niespójnymi danymi. Przykład: nie da się dodać zamówienia z identyfikatorem klienta, którego nie ma w tabeli klientów. To zmniejsza liczbę błędów aplikacji i ułatwia raportowanie oraz analizy.
Najczęstsze błędy to: brak indeksu na kolumnie FK (spadek wydajności), zły dobór typu danych (np. różne typy po obu stronach), niewłaściwe reguły usuwania/aktualizacji (CASCADE tam, gdzie grozi masowym skasowaniem danych) oraz nieprzemyślana krotność relacji.
Najczęściej robi się to w CREATE TABLE (podczas tworzenia tabeli) albo w ALTER TABLE (po utworzeniu). W składni pojawia się fragment FOREIGN KEY wskazujący kolumny oraz REFERENCES z tabelą i kolumną docelową.
ON DELETE CASCADE ma sens, gdy rekordy podrzędne nie mają znaczenia bez rekordu nadrzędnego (np. pozycje koszyka powiązane z koszykiem). Trzeba uważać, bo może usuwać wiele danych "łańcuchowo". Czasem lepsze jest RESTRICT/NO ACTION.
Na ERD relacja 1..n jest zwykle oznaczona "wronią stopką" po stronie "wiele" i pojedynczą kreską po stronie "jeden". Po zmapowaniu do tabel w relacyjnej bazie danych strona "wiele" dostaje klucz obcy wskazujący na stronę "jeden".
Ćwicz na przykładach: zaprojektuj 3–4 proste bazy (np. uczniowie–oceny, klienci–zamówienia), narysuj ERD i zapisz SQL z PRIMARY KEY oraz FOREIGN KEY. Testuj błędy integralności (próby wstawień/usunięć), bo to szybko utrwala sens klucza obcego.
info

Statystycznie 61% uczniów zna prawidłową odpowiedź. średnie

Specjaliści zwracają uwagę: "Klucz obcy (FOREIGN KEY) wskazuje na klucz podstawowy w innej tabeli i wymusza integralność referencyjną."

Źródła:

  • PostgreSQL Documentation: "CREATE TABLE" – sekcja "FOREIGN KEY Constraints" https://www.postgresql.org/docs/current/sql-createtable.html (dostęp: 2026-03-02)
  • MySQL 8.0 Reference Manual: "FOREIGN KEY Constraints" https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html (dostęp: 2026-03-02)
  • Microsoft Learn: "FOREIGN KEY constraints (Transact-SQL)" https://learn.microsoft.com/en-us/sql/relational-databases/tables/foreign-key-constraints (dostęp: 2026-03-02)

Materiały:

  • Dokumentacja DBMS: sekcja o FOREIGN KEY i referential integrity (PostgreSQL/MySQL/SQL Server)
  • Podręcznik do projektowania relacyjnych baz danych (normalizacja, relacje, klucze)
  • Ćwiczenia SQL: tworzenie tabel z PRIMARY KEY i FOREIGN KEY oraz testowanie naruszeń integralności

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego