Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è una convenzione di denominazione corretta per gli FK MySQL?

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.