Klucze obce zapewniają integralność referencyjną. Dane w kolumnie klucza obcego są weryfikowane — wartością może być tylko taka, która już istnieje w tabeli i kolumnie zdefiniowanej w kluczu obcym. Jest bardzo skuteczny w zatrzymywaniu „złych danych” — ktoś nie może wprowadzić czegokolwiek chce — liczb, tekstu ASCII itp. Oznacza to, że dane są znormalizowane — powtarzające się wartości zostały zidentyfikowane i izolowane do własnej tabeli, więc nie ma już obaw o radzeniu sobie z rozróżnianiem wielkości liter w tekście... a wartości są spójne. Prowadzi to do następnej części — klucze obce służą do łączenia tabel.
Twoje zapytanie dotyczące projektów użytkownika nie zadziałałoby — odwołujesz się do kolumny z USERS
tabeli, gdy w zapytaniu nie ma odniesienia do tabeli i nie ma podzapytania, które służy do uzyskania tej informacji przed połączeniem jej z PROJECTS
stół. To, czego naprawdę użyjesz, to:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'