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
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.