2010-08-08 12 views
33

Zastanawiam się,Dlaczego warto używać ograniczeń klucza obcego w MySQL?

Jaka będzie moja motywacja do używania ograniczenia jako klucza obcego w MySQL, ponieważ jestem pewien, że mogę rządzić dodanymi typami?

Czy to poprawia wydajność?

+2

podobne pytanie zostało wysłuchane, zobacz http://stackoverflow.com/questions/1876013/ jest wiele dyskusji: D –

Odpowiedz

59

Wymuś referential integrity. Te ograniczenia gwarantują, że wiersz w tabeli order_details z polem o numerze order_id nigdy nie będzie miał wartości order_id, która nie istnieje w tabeli .

Klucze obce nie muszą mieć działającej relacyjnej bazy danych (w rzeczywistości silnik MySQL's default storage nie obsługuje FK), ale są one bezwzględnie konieczne, aby uniknąć zerwanych relacji i osieroconych wierszy (tj. Integralności referencyjnej). Zdolność do egzekwowania integralności referencyjnej na poziomie bazy danych jest wymagana do tego, aby stała.

Jeśli chodzi o twoje obawy dotyczące wydajności, generalnie są to koszty związane z wydajnością, ale prawdopodobnie będą one znikome. Sugeruję wprowadzenie wszystkich ograniczeń związanych z kluczem obcym i tylko eksperymentowanie bez nich, jeśli masz rzeczywiste problemy z wydajnością, których nie możesz rozwiązać w inny sposób.

+2

Czy istnieją jakieś dobre powody, dla których NIE należy używać ograniczeń klucza obcego? Pracowałem na różnych frameworkach php i nigdy nie potrzebowałem ich używać. Mam wrażenie, że aplikacja powinna być tym, który zajmuje się sierotami i im zapobiega. Czy ktoś może mnie oświecić? –

+3

@ AngelS.Moreno: To trochę jak pytanie "Czy jest jakikolwiek powód, aby nie używać śmieciarza?". Tylko w tym przypadku nie osiągniesz wydajności, zarządzając tego rodzaju śmieciami. Wręcz przeciwnie. Wydanie wszystkich zapytań koniecznych do zachowania spójności między relacjami FK jest nie tylko wyjątkowo podatne na błędy, ale jest również niezwykle nieefektywne. – thesaint

+7

Jedynym dobrym powodem, aby nie używać FK, jest sytuacja, gdy nie potrzebujesz spójności. – thesaint

Powiązane problemy