KWALIFIKACJA INF3 - TEST WIEDZY NR 3

PYTANIE NR 32.
Co stanie się, jeśli spróbujesz usunąć tabelę, która jest używana jako klucz obcy w innej tabeli, bez wcześniejszego usunięcia tego klucza obcego?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Jeśli tabela jest wskazywana przez klucz obcy w innej tabeli, baza chroni integralność referencyjną i traktuje ją jako zależność.
Dlatego próba wykonania DROP TABLE bez wcześniejszego usunięcia/zmiany ograniczenia kończy się błędem i tabela nie zostaje usunięta w typowym (domyślnym) trybie.

Pełne wyjaśnienie:

Klucz obcy (foreign key) tworzy formalną zależność między tabelą podrzędną (z kolumną FK) a tabelą nadrzędną (referencjonowaną). Taka zależność jest elementem integralności referencyjnej: baza danych ma pilnować, aby odwołania w tabeli podrzędnej były spójne.

Gdy spróbujesz usunąć tabelę, która jest referencjonowana przez klucz obcy w innej tabeli, system bazy danych zwykle nie pozwoli na wykonanie operacji "w ciemno", ponieważ usunięcie tabeli nadrzędnej pozostawiłoby w schemacie (lub logicznie) zależny obiekt w stanie niespójnym. W praktyce skutkuje to tym, że polecenie usunięcia tabeli kończy się niepowodzeniem i pojawia się komunikat o istniejących zależnościach.

Odpowiedź "Operacja usunięcia tabeli zakończy się niepowodzeniem." oddaje to typowe, bezpieczne zachowanie: najpierw trzeba usunąć lub zmodyfikować klucz obcy (np. usunąć constraint w tabeli zależnej), a dopiero potem usuwać tabelę nadrzędną.

Pozostałe odpowiedzi są mylące, bo sugerują automatyczne "zachowanie" klucza obcego po usunięciu tabeli lub jego samoczynne usunięcie bez decyzji administratora. W rzeczywistości silniki baz danych rozdzielają operacje i wymagają jawnego działania na ograniczeniach. Również stwierdzenie o "uszkodzeniu danych" jest nieprecyzyjne: problemem jest naruszenie spójności i zależności schematu, a nie losowe psucie danych w innej tabeli.

Na egzaminie warto pamiętać: DDL (DROP/ALTER) jest kontrolowane przez zależności. Jeśli obiekt jest używany przez constraint, najpierw usuwa się zależność (constraint), a dopiero potem obiekt. W niektórych DBMS istnieją mechanizmy kaskadowe, ale muszą być użyte świadomie i celowo.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
To skrót myślowy: chodzi o sytuację, gdy inna tabela ma zdefiniowany klucz obcy, który referencjonuje tę tabelę (zwykle jej klucz główny lub unikalny). Taka relacja tworzy zależność i wymusza spójność danych.
Bo klucz obcy jest mechanizmem integralności referencyjnej. Usunięcie tabeli nadrzędnej mogłoby zostawić w tabeli zależnej odwołania do czegoś, co już nie istnieje. Silnik DB zwykle wymaga najpierw usunięcia zależności albo świadomego użycia operacji kaskadowej.
Najczęściej stosuje się ALTER TABLE na tabeli zależnej, aby usunąć ograniczenie (constraint) klucza obcego, a dopiero potem wykonuje się DROP TABLE na tabeli referencjonowanej. Dokładna składnia zależy od DBMS, ale logika kolejności jest stała.
W wielu systemach domyślne zachowanie to odmowa usunięcia z powodu zależności. Jednak część DBMS oferuje tryb kaskadowy (np. CASCADE), który może usuwać obiekty zależne. Na egzaminie trzeba zwracać uwagę, czy w treści zadania podano, że użyto CASCADE lub innej opcji.
CASCADE oznacza usuwanie obiektu razem z obiektami od niego zależnymi (np. ograniczeniami, widokami). To działanie jest "silne" i wymaga ostrożności, bo może skasować więcej elementów schematu niż planowano. Bez CASCADE typowe jest zachowanie ochronne (odmowa).
DELETE usuwa wiersze z tabeli i podlega regułom FK (np. ON DELETE RESTRICT/CASCADE). DROP TABLE usuwa całą tabelę jako obiekt schematu. To inny poziom operacji: w DROP kluczowe są zależności obiektów (constraints), a nie tylko dane.
Najczęściej są to komunikaty o tym, że tabela jest referencjonowana lub że istnieją obiekty zależne (np. constraint FOREIGN KEY). Warto nauczyć się rozpoznawać słowa kluczowe typu: referenced, depends on, foreign key constraint, ponieważ wskazują na problem zależności schematu.
Silniki baz danych nie powinny "psuć" danych losowo. Problem polega na tym, że bez kontrolowanego usunięcia zależności powstałaby niespójność (odwołania do nieistniejącej tabeli/klucza). Dlatego system zwykle blokuje operację, zamiast dopuścić do takiego stanu.
Typowo sprawdza się to w systemowych widokach/informacjach o schemacie (information_schema) albo w narzędziu administracyjnym (np. podgląd constraints). To dobra praktyka przed migracją: najpierw identyfikujesz zależności, potem planujesz kolejność zmian w DDL.
Najczęściej myli się automatyczne zachowania: zakłada się, że klucz obcy "zostanie" po usunięciu tabeli albo że DBMS sam go usunie. Drugim błędem jest ignorowanie opcji typu CASCADE/RESTRICT. Trzeci: mylenie usuwania danych (DELETE) z usuwaniem obiektu (DROP).
info

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

Źródła:

  • PostgreSQL Documentation: "DROP TABLE" (opis RESTRICT/CASCADE oraz zależności obiektów), https://www.postgresql.org/docs/current/sql-droptable.html - dostęp 2026-03-01
  • Microsoft Learn: "DROP TABLE (Transact-SQL)" (informacja o blokadzie usunięcia tabeli referencjonowanej przez FOREIGN KEY), https://learn.microsoft.com/en-us/sql/t-sql/statements/drop-table-transact-sql - dostęp 2026-03-01
  • MySQL 8.0 Reference Manual: "DROP TABLE Statement" (skutki DROP TABLE i zależności), https://dev.mysql.com/doc/refman/8.0/en/drop-table.html - dostęp 2026-03-01

Materiały:

  • Dokumentacja DBMS używanego na zajęciach (sekcja o DROP TABLE i foreign keys)
  • Materiały o normalizacji i relacjach tabel w bazach danych
  • Ćwiczenia z migracjami (np. sekwencja: DROP constraint → DROP table)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego