Wofür steht 'ibfk' in MySQL?


25

Wenn ich in phpmyadmin eine Fremdschlüsseleinschränkung für die Tabelle 'photos' erstelle, sehe ich später, dass die Einschränkung 'photos_ibfk_1' heißt und die nächste Einschränkung 'photos_ibfk_2' usw. lautet die Konvention für DB-Einschränkungen in MySQL. Ist das richtig? Wofür steht IBFK?


5
ibfk = ib ( I nnoD B ) fk ( f oreign k ey) ... innodb Fremdschlüssel
WebGuy

Antworten:


24

Innodb Fremdschlüssel. Es ist nur eine kurze Namenskonvention. Man könnte es als pdfqwerty bezeichnen und der Name würde immer noch funktionieren.


7

Obwohl Fremdschlüsselnamen alles sein können, ist es eine gute Praxis, die Konvention zu befolgen, dass der Tabellenname an erster Stelle steht.

Der wichtigste Grund dafür ist, dass Fremdschlüsselnamen in einer Datenbank eindeutig sein müssen (im Gegensatz zu Indexnamen, die nur in jeder Tabelle eindeutig sein dürfen). Entsprechend dieser Konvention müssen Fremdschlüsselnamen nur in jeder Tabelle eindeutig sein.

Persönlich verwende ich die Konvention [table_name]_fk_[field_name].

Um Ihre Fremdschlüssel zu benennen, müssen Sie die Einschränkung für die Tabelle explizit formulieren und nicht nur den Fremdschlüssel.

Einfache Methode (automatische Benennung, ergibt [table_name]_ibfk_[index]):

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

Explizite Methode (führt zu [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
Einschränkungsnamen sind nicht global auf dem gesamten Server eindeutig, sondern nur für die Datenbank. Sie können denselben Einschränkungsnamen für zwei verschiedene Datenbanken auf demselben Server wiederverwenden.
Brandon

@ Brandon: Guter Fang! Ich werde bearbeiten. 👍
Marco Roy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.