Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych

Słowa kluczowe: CREATE TABLE w SQL Integralność referencyjna Klucz główny w SQL Klucz obcy w SQL Projektowanie relacyjnej bazy danych Relacja jeden do wielu Relacja wiele-do-wielu Tabela pośrednia w SQL

W bazie sklepu są tabele klienci (klucz główny id) i zamowienia (pola id, id_klienta, data). Aby nie dało się zapisać zamówienia z numerem klienta, którego nie ma w tabeli klienci, należy

A. zdefiniować pole id_klienta jako klucz obcy odwołujący się do pola id tabeli klienci
Dobrze. Klucz obcy odrzuci zamówienie z numerem klienta, którego nie ma w tabeli klienci.
B. nadać polu id_klienta atrybut UNIQUE
Źle. UNIQUE zabrania powtórzeń, a jeden klient może mieć wiele zamówień.
C. utworzyć indeks na polu data w tabeli zamowienia
Źle. Indeks na dacie przyspiesza wyszukiwanie, ale niczego nie ogranicza.
D. nadać polu id_klienta atrybut AUTO_INCREMENT
Źle. AUTO_INCREMENT nadaje kolejne numery i nie sprawdza istnienia klienta.

Poprawna jest odpowiedź o kluczu obcym. Klucz obcy wiąże kolumnę id_klienta z kluczem głównym tabeli klienci i włącza integralność referencyjną: serwer odrzuci każde wstawienie lub zmianę, po której zamówienie wskazywałoby nieistniejącego klienta. Zapis w MySQL: ALTER TABLE zamowienia ADD FOREIGN KEY (id_klienta) REFERENCES klienci(id);.

Do zapamiętania: klucz obcy stoi po stronie „wiele” relacji jeden do wielu, a jego wartości mogą się powtarzać - jeden klient ma wiele zamówień. W MySQL ograniczenia kluczy obcych działają w silniku InnoDB. Klauzule ON DELETE i ON UPDATE określają, co stanie się z zamówieniami po usunięciu lub zmianie klienta.

Każda z błędnych odpowiedzi zmienia coś w tabeli, ale żadna nie sprawdza, czy klient istnieje. Atrybut UNIQUE zabrania powtórzeń w kolumnie, więc w tym przypadku zaszkodziłby: klient mógłby złożyć tylko jedno zamówienie. Nadal można by też wpisać numer klienta, którego nie ma w bazie.

AUTO_INCREMENT sprawia, że serwer sam nadaje kolejne liczby przy dodawaniu wiersza. Stosuje się go w kluczu głównym, np. w polu id zamówień, a nie w polu wskazującym inną tabelę - kolejny numer zamówienia nie ma nic wspólnego z numerem klienta. Indeks na polu data przyspiesza wyszukiwanie i sortowanie zamówień po dacie, ale nie nakłada żadnego ograniczenia na id_klienta. Pilnowanie, by wartość w jednej tabeli miała odpowiednik w drugiej, to zawsze zadanie klucza obcego.

W phpMyAdmin klucz obcy ustawia się w widoku relacji tabeli.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.