it-swarm-eu.dev

Co znamená 'ibfk' v MySQL?

Pokud vytvořím omezení cizího klíče pro tabulku 'photos' ve phpmyadminu, později uvidím, že omezení je pojmenováno 'photos_ibfk_1' a další omezení je nazýváno 'photos_ibfk_2' atd. Z toho jsem zjistil, že [tablename] _ibfk_constraintIndex je konvence pro omezení DB v MySQL. Je to správně? Co znamená IBFK?

26
Peter Nore

innodb cizí klíč. Je to jen krátká konvence pojmenování rukou. Dalo by se to nazvat asdfqwerty a jméno by stále fungovalo.

25
atxdba

Ačkoli názvy cizích klíčů mohou být cokoli, ve skutečnosti je dobrým zvykem řídit se konvencí uvádění názvu tabulky jako první.

Nejdůležitějším důvodem je to, že názvy cizích klíčů musí být jedinečné v databázi (na rozdíl od indexových názvů, které musí být jedinečné pouze v rámci každá tabulka). Podle této konvence tedy musí být názvy cizích klíčů v každé tabulce jedinečné.

Osobně používám konvenci [table_name]_fk_[field_name].

Chcete-li pojmenovat své cizí klíče, budete muset explicitně upřesnit omezení v tabulce, nikoli pouze cizí klíč.

Jednoduchá metoda (automatické pojmenování) povede k [table_name]_ibfk_[index]):

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

Explicitní metoda (bude mít za následek [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]`);
7
Marco Roy