In MySQL, non è necessario assegnare un nome simbolico ai vincoli di chiave esterna. Se non viene fornito un nome, InnoDB crea automaticamente un nome univoco.
In ogni caso, questa è la convenzione che utilizzo:
fk_[referencing table name]_[referenced table name]_[referencing field name]
Esempio:
CREATE TABLE users(
user_id int,
name varchar(100)
);
CREATE TABLE messages(
message_id int,
user_id int
);
ALTER TABLE messages ADD CONSTRAINT fk_messages_users_user_id
FOREIGN KEY (user_id) REFERENCES users(user_id);
Cerco di mantenere gli stessi nomi di campo nei riferimenti e nelle tabelle referenziate, come in user_id
nell'esempio sopra. Quando ciò non è pratico, aggiungo anche il nome del campo di riferimento al nome della chiave esterna.
Questa convenzione di denominazione mi permette di "indovinare" il nome simbolico semplicemente osservando le definizioni delle tabelle, e in più garantisce anche nomi univoci.