Que signifie «ibfk» dans MySQL?

25

Si je crée une contrainte de clé étrangère pour la table 'photos' dans phpmyadmin, je vois plus tard que la contrainte est nommée 'photos_ibfk_1', et la contrainte suivante est appelée 'photos_ibfk_2', etc. la convention pour les contraintes de base de données dans MySQL. Est-ce correct? Que signifie IBFK?

Peter Nore
la source
5
ibfk = ib ( I nnoD B ) fk ( f oreign k ey) ... innodb foreign key
WebGuy

Réponses:

24

clé étrangère innodb. C'est juste une convention de dénomination courte. Vous pourriez l'appeler asdfqwerty et le nom fonctionnerait toujours.

atxdba
la source
7

Bien que les noms de clés étrangères puissent être n'importe quoi, c'est en fait une bonne pratique de suivre la convention de mettre le nom de la table en premier.

La raison la plus importante en est que les noms de clés étrangères doivent être uniques dans une base de données (contrairement aux noms d'index, qui ne doivent être uniques que dans chaque table). Ainsi, en suivant cette convention, les noms de clés étrangères doivent uniquement être uniques dans chaque table.

Personnellement, j'utilise la convention [table_name]_fk_[field_name].

Afin de nommer vos clés étrangères, vous devrez explicitement énoncer la contrainte sur la table, au lieu de simplement la clé étrangère.

Méthode simple (la dénomination automatique se traduira par [table_name]_ibfk_[index]):

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

Méthode explicite (entraînera [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
la source
1
Les noms de contrainte ne sont pas globalement uniques sur l'ensemble du serveur, mais uniquement sur la base de données. Vous pouvez réutiliser le même nom de contrainte sur deux bases de données différentes sur le même serveur.
Brandon
@Brandon: Bonne prise! Je vais éditer. 👍
Marco Roy