Udostępnij za pośrednictwem


Ograniczenia FOREIGN KEY

Klucz obcy (FK) jest kolumną lub połączeniem kolumn, która jest używana do ustanawiania i egzekwowania łącza między danymi w dwóch tabelach.Klucz obcy można utworzyć przez zdefiniowanie ograniczenia FOREIGN KEY podczas tworzenia lub modyfikowania tabeli.

W odwołaniu klucza obcego tworzone jest połączenie między dwoma tabelami, gdy do kolumny lub kolumn, które posiadają wartość klucza podstawowego dla jednej tabeli, odwołuje się kolumna lub kolumny w innej tabeli.Ta kolumna staje się kluczem obcym w drugiej tabeli.

Na przykład tabela Sales.SalesOrderHeader w bazie danych AdventureWorks2008R2 zawiera łącze do tabeli Sales.SalesPerson, ponieważ istnieje logiczna relacja między zamówieniami sprzedaży i sprzedawcami.Kolumna SalesPersonID w tabeli SalesOrderHeader pasuje do kolumny klucza podstawowego w tabeli SalesPerson.Kolumna SalesPersonID w tabeli SalesOrderHeader jest kluczem obcym tabeli SalesPerson.

SalesOrderHeader.SalesPersonID to klucz obcy.

Ograniczenie FOREIGN KEY nie musi być połączone tylko z ograniczeniem PRIMARY KEY w drugiej tabeli; może być również określone do odwoływania się do kolumn ograniczenia UNIQUE w innej tabeli.Ograniczenie FOREIGN KEY może zawierać wartości null; jednakże jeśli dowolna kolumna zbiorczego ograniczenia FOREIGN KEY zawiera wartości null, weryfikacji wszystkich wartości, które składają się na ograniczenie FOREIGN KEY, jest pomijana.Aby upewnić się, że wszystkie wartości zbiorczego ograniczenia FOREIGN KEY są zweryfikowane, należy określić opcję NOT NULL dla wszystkich uczestniczących kolumn.

Ostrzeżenie

Ograniczenie FOREIGN KEY może odwoływać się tylko do kolumn w tabelach w obrębie tej samej bazy danych lub w tej samej bazie danych.Nazywa się je tabelami samoodwołującymi.Rozważmy na przykład tabelę pracowników, która zawiera trzy kolumny: employee_number, employee_name i manager_employee_number.Ponieważ kierownik jest również pracownikiem, istnieje relacja klucza obcego z kolumny manager_employee_number do kolumny employee_number.

Integralność referencyjna

Chociaż głównym celem ograniczenia FOREIGN KEY jest kontrolowanie danych, które mogą być przechowywane w tabeli klucza obcego, kontroluje ono również zmiany danych w tabeli klucza podstawowego.Na przykład, jeśli zostanie usunięty wiersz dla sprzedawcy z tabeli Sales.SalesPerson, a identyfikator sprzedawcy jest używany dla zamówień sprzedaży w tabeli Sales.SalesOrderHeader, relacyjna integralność między dwiema tabelami zostanie przerwana. Zamówienia sprzedaży usuniętego sprzedawcy są osierocane w tabeli SalesOrderHeader bez łącza do danych w tabeli SalesPerson.

Ograniczenie FOREIGN KEY zapobiega tej sytuacji.Ograniczenie wymusza więzy integralności przez zagwarantowanie, że nie można wprowadzić zmian do danych w tabeli klucza podstawowego, jeśli te zmiany unieważniają łącze do danych w tabeli klucza obcego.Jeżeli podejmowana jest próba, aby usunąć wiersz w tabeli klucza podstawowego lub zmienić wartość klucza podstawowego, akcja zakończy się niepowodzeniem, gdy usunięta lub zmieniona wartości klucza podstawowego odpowiada wartości w FOREIGN KEY w innej tabeli.Aby pomyślnie zmienić lub usunąć wiersz w ograniczeniu FOREIGN KEY, musisz najpierw usunąć dane klucza obcego w tabeli klucza obcego lub zmienić dane klucza obcego w tabeli klucza obcego, które łączą klucz obcy z innymi danymi klucza podstawowego.

Indeksowanie ograniczeń FOREIGN KEY

Tworzenie indeksu klucza obcego jest często użyteczne z następujących powodów:

  • Zmiany ograniczeń PRIMARY KEY są sprawdzane za pomocą ograniczeń FOREIGN KEY w powiązanych tabelach.

  • Kolumny klucza obcego są często stosowane w kryteriach sprzężenia, gdy dane z tabel pokrewnych są połączone w zapytaniach przez dopasowanie kolumny lub kolumn w ograniczeniu FOREIGN KEY jednej tabeli do kolumny klucza podstawowego lub unikatowego albo kolumnami w drugiej tabeli.Indeks umożliwia programowi Aparat baz danych szybkie znalezienie powiązanych danych w tabeli klucza obcego.Jednakże tworzenie tego indeksu nie jest wymagane.Dane z dwóch tabel pokrewnych mogą być połączone, nawet jeśli nie są zdefiniowane ograniczenia PRIMARY KEY lub FOREIGN KEY między tabelami, ale relacja klucza obcego między dwoma tabelami wskazuje, że dwie tabele zostały tak zoptymalizowane, aby być łączone w zapytaniu, które używa kluczy jako jego kryteriów.Aby uzyskać więcej informacji o używaniu ograniczeń FOREIGN KEY ze sprzężeniami, zobacz Dołącz podstawy i Typy kwerend i indeksów.

Liczba ograniczeń FOREIGN KEY w tabeli

W programie SQL Server nie ma wstępnie zdefiniowanego limitu liczby ograniczeń FOREIGN KEY, które może zawierać tabela (odwołujących się do innych tabel), ani liczby ograniczeń FOREIGN KEY będących własnością innych tabel, które odwołują się do określonej tabeli.Niemniej rzeczywista liczba ograniczeń FOREIGN KEY jest ograniczona przez konfigurację sprzętu oraz projekt bazy danych i aplikacji.Zaleca się, aby tabela zawierała nie więcej niż 253 ograniczenia FOREIGN KEY i aby odwoływało się do niej nie więcej niż 253 ograniczenia FOREIGN KEY.Projektując bazę danych i aplikację, należy wziąć pod uwagę koszt wymuszania ograniczeń FOREIGN KEY.