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?


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.


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]`);

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.