Fremdschlüssel bieten referenzielle Integrität. Die Daten in einer Fremdschlüsselspalte werden validiert – der Wert kann nur einer sein, der bereits in der im Fremdschlüssel definierten Tabelle und Spalte vorhanden ist. Es ist sehr effektiv, "schlechte Daten" zu stoppen - jemand kann nicht eingeben, was er will - Zahlen, ASCII-Text usw. Es bedeutet, dass die Daten normalisiert werden - sich wiederholende Werte wurden identifiziert und in ihrer eigenen Tabelle isoliert, sodass es keine Bedenken mehr gibt über den Umgang mit Groß- und Kleinschreibung im Text ... und die Werte sind konsistent. Dies führt zum nächsten Teil – Fremdschlüssel werden verwendet, um Tabellen miteinander zu verbinden.
Ihre Abfrage nach den Projekten eines Benutzers würde nicht funktionieren - Sie verweisen auf eine Spalte von USERS
Tabelle, wenn in der Abfrage kein Verweis auf die Tabelle vorhanden ist und keine Unterabfrage verwendet wird, um diese Informationen abzurufen, bevor sie mit PROJECTS
verknüpft werden Tisch. Was Sie wirklich verwenden würden, ist:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'