Cosa significa "ibfk" in MySQL?


25

Se creo un vincolo di chiave esterna per la tabella 'foto' in phpmyadmin, in seguito vedo che il vincolo si chiama 'photos_ibfk_1', e il vincolo successivo si chiama 'photos_ibfk_2', ecc. Da questo ho raccolto che [tablename] _ibfk_constraintIndex è la convenzione per i vincoli DB in MySQL. È corretto? Cosa significa IBFK?


5
ibfk = ib ( I nnoD B ) fk ( f oreign k ey) ... chiave esterna
innodb

Risposte:


24

chiave esterna innodb. È solo una convenzione di denominazione a breve termine. Potresti chiamarlo asdfqwerty e il nome continuerebbe a funzionare.


7

Sebbene i nomi di chiavi esterne possano essere qualsiasi cosa, in realtà è una buona pratica seguire la convenzione di mettere il nome della tabella al primo posto.

Il motivo più importante di ciò è che i nomi delle chiavi esterne devono essere univoci all'interno di un database (al contrario dei nomi degli indici, che devono essere univoci solo all'interno di ciascuna tabella). Pertanto, seguendo questa convenzione, i nomi delle chiavi esterne devono essere univoci all'interno di ciascuna tabella.

Personalmente, uso la convenzione [table_name]_fk_[field_name].

Per assegnare un nome alle chiavi esterne, è necessario specificare esplicitamente il vincolo sulla tabella, anziché solo la chiave esterna.

Metodo semplice (denominazione automatica, si tradurrà in [table_name]_ibfk_[index]):

ALTER TABLE `[table_name]`
  ADD FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

Metodo esplicito (si tradurrà in [table_name]_fk_[field_name]):

ALTER TABLE `[table_name]`
  ADD CONSTRAINT `[table_name]_fk_[field_name]`
    FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

1
I nomi dei vincoli non sono univoci a livello globale sull'intero server - solo univoci per il database. È possibile riutilizzare lo stesso nome di vincolo su due database diversi sullo stesso server.
Brandon,

@Brandon: buona cattura! Lo modificherò. 👍
Marco Roy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.