La chiave esterna di una tabella non deve essere NECESSARIAMENTE parte di una chiave primaria anche se è quello il suo scopo.
Solitamente ti troverai in una chiave esterna gli stessi valori contenuti in una chiave primaria (attenzione, una chiave in una tabella può essere composta anche da + DI UN CAMPO, in questo caso si dice SUPERCHIAVE, è logico che una chiave esterna se è su una sol colonna deve aver valori univoci).
Quella riga che dici non capire fa proprio ciò che intuisci, facendo in modo che ci sia coerenza tra i valori delle due colonne di tabelle diverse.
Ovviamente una chiave esterna PUO' per definizione aver valori NULL cosa che una chiave primaria non può avere, questo serve a garantire la possibilità di fare una relazione in cui non E' NECESSARIO che ci siano sempre dei campi come corrispondenza.
Pensa ad un elenco di persone e ad un elenco di auto. Ci sono persone che hanno la loro auto e persone che non ce l'hanno. Poi possiamo anche immaginare che se c'è nella tabella auto una limousine non ci siano persone che la posseggono. In questo caso sono necessarie due chiavi esterne collegate alle chiavi primare delle due tabelle.
Se vuoi un consiglio però le chiavi esterne fatte a mano. Le vecchie versioni di mysql non le supportano e quindi a me non piace usarle in modo da garantirmi la portabilità del codice!![]()