KWALIFIKACJA INF3 - CZERWIEC 2020

PYTANIE NR 19.
Fragment kodu SQL oznacza, że klucz obcy

… FOREIGN KEY (imie) REFERENCES obiekty (imiona) …

A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Zapis FOREIGN KEY (imie) REFERENCES obiekty (imiona) definiuje klucz obcy w bieżącej tabeli na kolumnie imie. Wskazuje on, że wartości imie muszą istnieć w tabeli obiekty w kolumnie imiona, co wymusza spójność relacji między tabelami.
Dzięki temu nie da się wstawić rekordu z nieistniejącą referencją.

Pełne wyjaśnienie:

Fragment definicji FOREIGN KEY (imie) REFERENCES obiekty (imiona) opisuje zależność pomiędzy dwiema tabelami w relacyjnej bazie danych.

Najważniejsza zasada czytania tej składni jest taka:

  • lista po FOREIGN KEY (...) to kolumna (lub kolumny) w tabeli, w której zdefiniowano ograniczenie (czyli "kolumna lokalna");
  • po REFERENCES podaje się tabelę docelową oraz w nawiasie kolumnę docelową, do której następuje odwołanie.

Dlatego tutaj kolumna imie (lokalna) ma wartości, które muszą odpowiadać istniejącym wartościom w tabeli obiekty w kolumnie imiona. W praktyce oznacza to wymuszenie integralności referencyjnej: nie można zapisać wiersza z wartością, która nie istnieje po stronie tabeli referencjonowanej (chyba że dopuszczono NULL i wpisano NULL).

Dlaczego pozostałe odpowiedzi są błędne?

  • Stwierdzenie, że klucz obcy "znajduje się w tabeli obiekty" wynika z pomylenia miejsca referencji z miejscem definicji. Tabela po REFERENCES jest celem, ale samo ograniczenie FOREIGN KEY jest definiowane w tabeli, w której zapis występuje.
  • Teza, że jest to "referencja do samego siebie", byłaby prawdziwa tylko wtedy, gdyby REFERENCES wskazywało tę samą tabelę, co tabela definiująca klucz obcy (tzw. self-reference). W pokazanym fragmencie nie ma takiej informacji.
  • Sformułowanie, że klucz obcy jest "ustawiony na kolumnie obiekty" jest nieprecyzyjne: klucz obcy dotyczy kolumny (tu: imie), a "obiekty" jest nazwą tabeli, nie kolumny.

Wskazówka egzaminacyjna: gdy widzisz FOREIGN KEY (X) REFERENCES T (Y), czytaj to jako: "X w tej tabeli musi wskazywać na Y w tabeli T".

Dodatkowe pytania

Dodatkowe pytania (FAQ):
FOREIGN KEY to ograniczenie (constraint) wskazujące, że wartości w danej kolumnie muszą odpowiadać wartościom istniejącym w innej tabeli (zwykle w kolumnie klucza głównego lub unikalnej). Dzięki temu baza pilnuje spójności relacji między rekordami.
Czytaj to jako: kolumna A w tej tabeli odwołuje się do kolumny B w tabeli T. A jest kolumną lokalną (tam, gdzie definiujesz constraint), a T(B) to strona referencjonowana, która musi zawierać wskazywaną wartość.
Bo silnik bazy danych sprawdza przy INSERT/UPDATE, czy w tabeli referencjonowanej istnieje rekord z wartością wskazywaną przez FK. Jeśli nie istnieje, operacja jest odrzucana (błąd naruszenia FK). To zapobiega "osieroconym" danym.
Najczęściej tak, ale nie zawsze. Wiele baz danych pozwala, aby FK wskazywał także na kolumnę z ograniczeniem UNIQUE. Warunek jest taki, by wartości po stronie referencjonowanej były jednoznaczne, inaczej relacja byłaby niepoprawna.
Gdy modelujesz hierarchię w jednej tabeli, np. pracownik ma przełożonego też będącego pracownikiem. Wtedy kolumna typu przelozony_id może być FK do tej samej tabeli. To tzw. relacja samoodwołująca (self-referencing).
Najczęstsze są: mylenie kolumn lokalnych z docelowymi (zamiana stron), traktowanie nazwy tabeli jak nazwy kolumny oraz założenie, że FK "jest w tabeli referencjonowanej". Pomaga zasada: to, co w nawiasie po FOREIGN KEY, jest u źródła.
Zależy od definicji kolumny. Jeśli kolumna FK dopuszcza NULL (nie ma NOT NULL), to zwykle można wstawić NULL, bo nie jest to odwołanie do konkretnego rekordu. Jeśli jest NOT NULL, trzeba wskazać istniejącą wartość.
Kolumna lokalna i referencjonowana powinny mieć zgodne (kompatybilne) typy, bo silnik porównuje wartości między tabelami. Niezgodne typy utrudniają jednoznaczne sprawdzanie istnienia rekordu i mogą uniemożliwić utworzenie constraintu lub prowadzić do błędów.
To akcje kaskadowe, które określają, co ma się stać z rekordami zależnymi, gdy zmieni się lub usunie rekord nadrzędny. Przykłady to CASCADE, RESTRICT, SET NULL. W praktyce wpływa to na zachowanie aplikacji.
Zależy od silnika. Zwykle używa się widoków systemowych lub poleceń opisujących schemat (np. zapytania do informacji o constraintach). Na egzaminie warto pamiętać, że FK jest częścią definicji tabeli i można go odczytać z DDL.
info

Około 60% zdających odpowiada poprawnie na to pytanie. średnie

W praktyce zawodowej kluczowe jest to, że zapis FOREIGN KEY (imie) REFERENCES obiekty (imiona) definiuje klucz obcy w bieżącej tabeli na kolumnie imie.

Źródła:

  • PostgreSQL Documentation: CREATE TABLE — Foreign Key Constraints, https://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-FK (dostęp: 2026-03-01)
  • MySQL 8.0 Reference Manual: InnoDB and FOREIGN KEY Constraints, https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html (dostęp: 2026-03-01)
  • SQLite Documentation: Foreign Key Support, https://www.sqlite.org/foreignkeys.html (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja wybranego silnika bazy danych (MySQL/PostgreSQL) dotycząca FOREIGN KEY
  • Materiały o modelu relacyjnym i normalizacji (klucze, zależności, relacje)
  • Ćwiczenia z projektowania schematu: tabele, PK, FK, indeksy, kaskady

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego