¿Qué significa 'ibfk' en MySQL?

25

Si creo una restricción de clave foránea para la tabla 'fotos' en phpmyadmin, luego veo que la restricción se llama 'photos_ibfk_1', y la siguiente restricción se llama 'photos_ibfk_2', etc. De esto he deducido que [tablename] _ibfk_constraintIndex es la convención para restricciones de DB en MySQL. ¿Es esto correcto? ¿Qué significa IBFK?

Peter Nore
fuente
55
ibfk = ib ( I nnoD B ) fk ( f oreign k ey) ... innodb
external

Respuestas:

24

Innodb clave extranjera. Es solo una breve convención de nombres de manos. Podría llamarlo asdfqwerty y el nombre seguiría funcionando.

atxdba
fuente
7

Aunque los nombres de claves externas pueden ser cualquier cosa, en realidad es una buena práctica seguir la convención de poner primero el nombre de la tabla.

La razón más importante para esto es que los nombres de claves externas deben ser únicos dentro de una base de datos (al contrario de los nombres de índice, que solo deben ser únicos dentro de cada tabla). Por lo tanto, siguiendo esta convención, los nombres de clave externa solo tienen que ser únicos dentro de cada tabla.

Personalmente, uso la convención [table_name]_fk_[field_name].

Para nombrar sus claves foráneas, deberá deletrear explícitamente la restricción en la tabla, en lugar de solo la clave foránea.

Método simple (la denominación automática dará como resultado [table_name]_ibfk_[index]):

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

Método explícito (resultará en [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]`);
Marco Roy
fuente
1
Los nombres de restricción no son globalmente únicos en todo el servidor, solo únicos en la base de datos. Puede reutilizar el mismo nombre de restricción en dos bases de datos diferentes en el mismo servidor.
Brandon
@ Brandon: ¡Buena captura! Lo editaré 👍
Marco Roy