Immagina di avere tre tabelle chiamate profiles
, profiles_skills
e skills
. È una relazione HABTM, in cui un profilo può avere molte competenze e un'abilità può appartenere a molti profili.Quando si aggiunge un vincolo di chiave esterna, quale direzione è la migliore pratica?
Ho bisogno di impostare un vincolo di chiave esterna tra queste tabelle. La mia domanda è, quale direzione dovrebbe essere la chiave straniera? Ad esempio, posso fare questo:
ALTER TABLE profiles_skills ADD FOREIGN KEY (skill_id) REFERENCES skills(id);
ALTER TABLE profiles_skills ADD FOREIGN KEY (profile_id) REFERENCES profiles(id);
O faccio a fare questo:
ALTER TABLE profiles ADD FOREIGN KEY (id) REFERENCES profiles_skills(profile_id);
ALTER TABLE skills ADD FOREIGN KEY (id) REFERENCES profiles_skills(skill_id);
Non ho mai seguito un convegno, faccio solo il mio modo di scrivere e non hanno ha avuto un problema Ma mi sono sempre chiesto nel profondo della mia mente se anche ciò conta davvero.
Le chiavi esterne devono essere sulla tabella "figlio", che nel tuo caso è 'profiles_skills'. E sì, conta. con gli FK nelle tabelle profili/abilità separate, la rimozione di un'abilità da un profilo eliminerebbe il profilo. –
È difficile immaginare un caso d'uso quando è impossibile avere un record nella tabella 'profiles' (e/o' skills') che NON ha una riga corrispondente nella tabella 'profiles_skills'. Ma questo è esattamente ciò che la tua seconda definizione impedisce. Pertanto, non è una questione di "buone pratiche" - il primo modo è l'unico modo. – raina77ow