Cizí klíče poskytují referenční integritu. Data ve sloupci cizího klíče jsou ověřena – hodnota může být pouze ta, která již existuje v tabulce a sloupci definovaném v cizím klíči. Je to velmi účinné při zastavení "špatných dat" - někdo nemůže zadat, co chce - čísla, ASCII text atd. Znamená to, že data jsou normalizována - opakující se hodnoty byly identifikovány a izolovány do vlastní tabulky, takže už nemusíte dělat starosti o řešení rozlišování malých a velkých písmen v textu... a hodnoty jsou konzistentní. To vede k další části - cizí klíče jsou to, co používáte ke spojení tabulek.
Váš dotaz na projekty uživatele by nefungoval – odkazujete na sloupec z USERS
tabulka, když v dotazu není žádný odkaz na tabulku a není použit žádný poddotaz k získání těchto informací před jejich propojením s PROJECTS
stůl. Co byste opravdu použili, je:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'