Apa artinya 'ibfk' di MySQL?

25

Jika saya membuat batasan kunci asing untuk tabel 'foto' di phpmyadmin, saya kemudian melihat bahwa batasan tersebut bernama 'photos_ibfk_1', dan batasan berikutnya disebut 'photos_ibfk_2', dll. Dari sini saya telah mengumpulkan bahwa [tablename] _ibfk_constraintIndex adalah konvensi untuk kendala DB di MySQL. Apakah ini benar? Untuk apa IBFK berdiri?

Peter Nore
sumber
5
ibfk = ib ( Saya tidak tahu B ) fk ( f oreign k ey) ... innodb foreign key
WebGuy

Jawaban:

24

kunci asing innodb. Itu hanya konvensi penamaan tangan pendek. Anda bisa menyebutnya asdfqwerty dan namanya masih berfungsi.

atxdba
sumber
7

Meskipun nama kunci asing dapat berupa apa saja, sebenarnya merupakan praktik yang baik untuk mengikuti kebiasaan meletakkan nama tabel terlebih dahulu.

Alasan paling penting untuk ini adalah bahwa nama kunci asing harus unik dalam database (berlawanan dengan nama indeks, yang hanya harus unik dalam setiap tabel). Jadi, dengan mengikuti konvensi ini, nama kunci asing hanya harus unik dalam setiap tabel.

Secara pribadi, saya menggunakan konvensi [table_name]_fk_[field_name].

Untuk memberi nama kunci asing Anda, Anda harus secara eksplisit menjabarkan batasan pada tabel, bukan hanya kunci asing.

Metode sederhana (penamaan otomatis, akan menghasilkan [table_name]_ibfk_[index]):

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

Metode eksplisit (akan menghasilkan [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
sumber
1
Nama kendala tidak secara global unik di seluruh server - hanya unik untuk basis data. Anda bisa menggunakan kembali nama kendala yang sama pada dua database berbeda di server yang sama.
Brandon
@ Brandon: Tangkapan bagus! Saya akan mengedit. 👍
Marco Roy