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?


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ć.


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]`);

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.