ORACLE FOREIGN KEY - klucz obcy

Głównie używamy do połączenia z PRIMARY KEY w innej tabeli, takie połączenie pomaga nam utrzymać integralność danych w bazie danych.

główna różnica w PRIMARY KEY i FOREIGN KEY jest taka że primary key musi mieć wartości unikalne i przez to zapewnia unikalność wierszy w tabeli natomiast foreign key nie musi mieć wartości unikalnych.

przykład który najlepiej zobrazuje primary key i foreign key to np.

mamy dwie tabele HANDLOWIEC i ZAMOWIENIA na tabeli HANDLOWIEC zakładamy na kolumnie ID_HAND primary key a na kolumnie ID_HAND w tabeli ZAMOWIENIA tworzymy foreign key i teraz wartości ID_HAND identyfikuje unikalnie handlowca natomiast w ta kolumna w tabeli ZAMOWIENIA identyfikuje wszystkie zamowienia które zostały podpisane przez danego handlowca

np. chcemy wyszukać wszystkie zamówienia handlowca o nazwisku Kowalski i imieniu Edward

do tego celu musimy połączyć dwie tabele: HANDLOWIEC i ZAMOWIENIA do połącznie oczywiście użyjemy kolumny ID_HAND
w wyniku takiego połączenia otrzymamy wszystkie zamowienia podpisane przez danego handlowca

......

Dostęp do całego artykułu tylko dla użytkowników zalogowanych!

stwórz swojego użytkownika: załóż nowe konto

{accesstext mode="level" level="registered" noaccess="obecnie masz status gościa"}


przykład 1
Tworzenie FOREIGN KEY w trakcie tworzenia tabeli
stworz tabele ZAMOWIENIA która ma następujące kolumny: ID_ZAM, ZAMOWIENIE, DATA_ZAMOW, ID_HAND (foreign key)

create table ZAMOWIENIA
(ID_ZAM INTEGER,
ZAMOWIENIE VARCHAR2(40),
DATA_ZAMOW DATE,
ID_HAND INTEGER references HANDLOWIEC(ID_HAND)
);


przykład 2
na utworzonej tabeli ZAMOWIENIA (stworzona bez klucza obcego) stworzyć klucz obcy ktory ma referencje do primary key ID_HAND w tabeli HANDLOWIEC

ALTER TABLE ZAMOWIENIA
ADD (CONSTRAINT fk_zamow) FOREIGN KEY (id_hand) REFERENCES HANDLOWIEC(ID_HAND);


przykład 3
wyświetl zestawienie wszystkich handlowców i ich zamówień z tabel HANDLOWIEC I ZAMOWIENIA

tabela HANDLOWIEC

ID_HAND IMIE NAZWISKO
---------- ------ ------------
1
2
3
4
5
irek
piotr
wiktor
krzys
vit
wozniak
krakowiak
pyzdra
kolodziej
zarazka



tabela ZAMOWIENIE

ID_ZAM
ZAMOWIENIE
DATA_ZAMOW
ID_HAND
-------- -------------- --------------- ----------
1
2
3
4
5
6
7
PERLY
KROWKI
ROWERY
SAMOCHODY
MOTOROWKI
TRAKTORY
PILKI
22/09/07
12/03/07
02/05/07
06/08/07
09/11/07
16/01/07
21/07/07
1
2
2
2
3
3
4



ZAPYTANIE:

select a.imie, a.nazwisko, b.zamowienie
from handlowiec a, zamowienie b
where a.id_hand=b.id_hand;

WYNIK:

 

 IMIE  NAZWISKO  ZAMOWIENIE
 ------  -------------  ----------------
irek
piotr
piotr
piotr
wiktor
wiktor
krzys
wozniak
krakowiak
krakowiak
krakowiak
pyzdra
pyzdra
kolodziej
PERLY
KROWKI
ROWERY
SAMOCHODY
MOTOROWKI
TRAKTORY
PILKI

 

 {/accesstext}