Co oznacza „ibfk” w MySQL?

25

Jeśli utworzę ograniczenie klucza obcego dla tabeli „zdjęcia” w phpmyadmin, później zobaczę, że ograniczenie to nosi nazwę „photos_ibfk_1”, a następne ograniczenie nazywa się „photos_ibfk_2” itd. Z tego zebrałem, że [tablename] _ibfk_constraintIndex jest Konwencja dotycząca ograniczeń DB w MySQL. Czy to jest poprawne? Co oznacza skrót IBFK?

Peter Nore
źródło
5
ibfk = ib ( I nnoD B ) FK ( f oreign k ey) ... InnoDB klucza obcego
WebGuy

Odpowiedzi:

24

klucz obcy innodb. To tylko konwencja nazewnictwa krótkich dłoni. Możesz to nazwać asdfqwerty, a nazwa nadal będzie działać.

atxdba
źródło
7

Chociaż nazwy kluczy obcych mogą być dowolne, dobrą praktyką jest przestrzeganie konwencji umieszczania nazwy tabeli na pierwszym miejscu.

Najważniejszym powodem tego jest to, że nazwy kluczy obcych muszą być unikalne w bazie danych (w przeciwieństwie do nazw indeksów, które muszą być unikalne w obrębie każdej tabeli). Zgodnie z tą konwencją nazwy kluczy obcych muszą być unikalne w obrębie każdej tabeli.

Osobiście korzystam z konwencji [table_name]_fk_[field_name].

Aby nazwać swoje klucze obce, będziesz musiał jawnie przeliterować ograniczenie w tabeli, a nie tylko klucz obcy.

Prosta metoda (spowoduje automatyczne nazwanie [table_name]_ibfk_[index]):

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

Jawna metoda (spowoduje [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
źródło
1
Nazwy ograniczeń nie są globalnie unikalne na całym serwerze - tylko unikalne dla bazy danych. Możesz ponownie użyć tej samej nazwy ograniczenia w dwóch różnych bazach danych na tym samym serwerze.
Brandon
@Brandon: Dobry połów! Będę edytować. 👍
Marco Roy