'İbfk' MySQL'de ne anlama geliyor?


25

Phpmyadmin'de 'fotoğraflar' tablosu için yabancı anahtar kısıtlaması oluşturursam, daha sonra kısıtlamanın 'photos_ibfk_1' ve sonraki kısıtlamanın 'photos_ibfk_2', vb. Olarak adlandırıldığını görürüm. MySQL'deki DB kısıtlamaları için kongre. Bu doğru mu? IBFK neyi temsil eder?


5
ibfk = ib ( I nnoD B ) fk ( f oreign k ey) ... yabancı anahtarın innodb
WebGuy

Yanıtlar:


24

innodb yabancı anahtar. Bu sadece kısa el adlandırma kuralları. Asdfqwerty diyebilirsiniz ve adı hala işe yarar.


7

Yabancı anahtar isimleri herhangi bir şey olsa da, ilk olarak tablo ismini koyma kurallarına uymak gerçekten iyi bir uygulamadır.

Bunun en önemli nedeni, yabancı anahtar adlarının bir veritabanında benzersiz olması gerektiği (aksine, yalnızca her tabloda benzersiz olması gereken dizin adlarının sıralanması). Dolayısıyla, bu sözleşmeyi izleyerek, yabancı anahtar isimlerinin sadece her tabloda benzersiz olması gerekir.

Şahsen ben sözleşmeyi kullanıyorum [table_name]_fk_[field_name].

Yabancı anahtarlarınızı adlandırmak için, yalnızca yabancı anahtar yerine tablodaki kısıtlamayı açıkça belirtmeniz gerekir.

Basit yöntem (otomatik adlandırma, sonuçlanacaktır [table_name]_ibfk_[index]):

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

Açık yöntem (sonuçlanacaktır [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
Kısıtlama adları genel olarak tüm sunucuda benzersiz değildir - yalnızca veritabanına özgüdür. Aynı kısıtlayıcı adını, aynı sunucudaki iki farklı veritabanında yeniden kullanabilirsiniz.
Brandon,

@ Brandon: İyi yakalamak! Düzenleyeceğim. 👍
Marco Roy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.