O que 'ibfk' representa no MySQL?

25

Se eu criar uma restrição de chave estrangeira para a tabela 'photos' no phpmyadmin, mais tarde vejo que a restrição é denominada 'photos_ibfk_1' e a próxima restrição é chamada 'photos_ibfk_2', etc. A partir disso, reuni que a convenção para restrições de banco de dados no MySQL. Isso está correto? IBFK de quê?

Peter Nore
fonte
5
ibfk = ib ( I nnoD B ) fk ( f oreign k ey) ... chave estrangeira do innodb
WebGuy

Respostas:

24

chave estrangeira innodb. É apenas uma convenção de nomes curtos. Você poderia chamá-lo de asdfqwerty e o nome ainda funcionaria.

atxdba
fonte
7

Embora os nomes das chaves estrangeiras possam ser qualquer coisa, é realmente uma boa prática seguir a convenção de colocar o nome da tabela em primeiro lugar.

A razão mais importante para isso é que os nomes de chaves estrangeiras devem ser exclusivos em um banco de dados (ao contrário dos nomes de índice, que devem ser únicos em cada tabela). Portanto, seguindo esta convenção, os nomes de chaves estrangeiras precisam ser exclusivos em cada tabela.

Pessoalmente, uso a convenção [table_name]_fk_[field_name].

Para nomear suas chaves estrangeiras, você precisará explicitamente explicitar a restrição na tabela, em vez de apenas a chave estrangeira.

Método simples (nomeação automática, resultará em [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á em [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
fonte
11
Os nomes de restrições não são globalmente exclusivos em todo o servidor - apenas exclusivos no banco de dados. Você pode reutilizar o mesmo nome de restrição em dois bancos de dados diferentes no mesmo servidor.
Brandon
@Brandon: Boa captura! Eu vou editar. Roy
Marco Roy