Klucz obcy w PostgreSQL to grupa lub pole w tabeli, które jest używane do jednoznacznej identyfikacji wierszy z innej tabeli. Mówiąc ogólnie, klucz obcy w PostgreSQL jest definiowany jako pierwsza tabela odwołująca się do klucza podstawowego drugiej tabeli. Nazwa tabeli wskazuje, że tabela podrzędna zawiera klucz obcy, a inna tabela z odwołaniem do klucza obcego jest nazywana tabelą nadrzędną.
Składnia:
- Klucz podstawowy (Primary Key): Tworzymy klucz podstawowy w pierwszej kolumnie tabeli i podajemy odniesienie do tego klucza podstawowego w drugiej kolumnie tabeli, aby zaimplementować klucz obcy (Foreign Key) w PostgreSQL.
- Typ danych: Musimy zdefiniować typ danych kolumny. Jeśli wiersz kolumny, którą zamierzamy użyć jako Primary Key zawiera wartość liczbową, to dla kolumny , która będzie stanowić do niej referencję w innej tabeli również definiujemy danych typu integer.
- References: Odwołanie definiuje się jako tworzenie klucza podstawowego w pierwszej tabeli i odwoływanie się do tego klucza podstawowego w drugiej tabeli w celu jego implementacji, gdzie nazywany jest już kluczem obcym.
Jak działa klucz obcy w PostgreSQL
- Możemy powiedzieć, że klucz obcy jest rodzajem pewnego ograniczenia. Klucz obcy stwierdza, że wartość w kolumnie musi odpowiadać wartościom w innym wierszu, w innej tabeli.
- Klucz obcy w PostgreSQL zachowuje koncepcję integralności referencyjnej z dwiema powiązanymi tabelami.
- Ograniczenia klucza obcego w PostgreSQL powodują, że wartości w pierwszej kolumnie muszą pojawiać się lub występować razem z wartościami w drugiej kolumnie. Jeśli nie ma wartości w pierwszej tabeli, dostaniemy komunikat o błędzie (“ERROR: insert or update on table “table_name” violates foreign key constraint “table2 column_name fkey”) w momencie wstawiania nowego rekordu do drugiej tabeli..
Przykład 1. Utworzymy 2 tabele, klucz podstawowy i klucz obcy.
Tworzymy pierwszą tabelę klient1 i ustwiamy w niej klucz podstawowy na kolumnie klient_id:
Tworzymy drugą tabelę klient2 a w niej referencję do klucza podstawowego tabeli klient1:
Teraz możemy podejrzeć wprowadzone zmiany w PSQL, stosując polecenie \d kolejno na tabeli klient1 oraz klient2:
Przykład 2.Dodawanie nowych rekordów.
Zbadamy co stanie jeżeli będziemy chcieli wstawić tą samą wartość id w tabeli klient1 oraz klient2:
W przypadku wstawiania danych do pierwszej tabeli na wyjściu pełen sukces 🙂
Następnie wstawiamy dane do tabeli klient2:
Na wyściu otrzymujemy również:
Ale przy próbie dodania kolejnego rekordu w drugiej tabeli klient2:
Otrzymujemy błąd:
Podsumowując:
Ograniczenia klucza obcego określają, że wartości z pierwszej kolumny tabeli muszą występować razem z wartościami z drugiej kolumny tabeli. Jeśli wartości nie ma w pierwszej tabeli, w momencie wstawiania nowego rekordu do drugiej tabeli pojawi się komunikat o błędzie.Zapraszamy na szkolenia z zakresu PostgreSQLDokumentacja PostgreSQL.