Zdaje sobie sprawę, że dla początkujących użytkowników SQL ORACLE tematyka relacji kluczy obcych pomiędzy tabelami może być przynajmniej niepokojąca :) Tymczasem trzeba naprawdę niewiele, aby opanować tę tematykę i swobodnie się w niej poruszać. Niniejszy króciutki poradnik z pewnością to ułatwi. A więc do dzieła. Krok po kroku
Tworzymy tabelę nr 1 – pracownicy1
create table PRACOWNICY1(id int PRIMARY KEY, imie varchar2(50), nazwisko varchar2(50), etat varchar2(50), pesel varchar2(11), placa number(6,2))
Tworzymy tabelę nr 2 – etaty1
CREATE TABLE etaty1(id int PRIMARY KEY, etat varchar2(50), max_placa number(6,2) )
Próbujemy utworzyć klucz obcy w tabeli pracownicy1 w taki sposób, by nie było możliwości dodania do niej rekordu z etatem, który nie występuje w tabeli etaty1
ALTER TABLE pracownicy1 add constraint obcy FOREIGN KEY(etat) REFERENCES etaty1(etat)
I kiszka…
Info:
Nie jest możliwe postawienie klucza obcego na kolumnie, ktorej wartości mogą się powtarzać!
Zatem, są trzy rozwiązania:
1. Albo kolumna etat w tabeli etaty1 stanie się kluczem głównym
2. Albo nadamy jej właściwość unique
3. Albo stworzymy tabelę buforową na id a nie na kolumnie etat
Rozwiązanie z Opcji 2 – najmniej inwazyjna w kod i wydaje się najbardziej optymalna
ALTER TABLE etaty1 ADD constraint unikalny_etat UNIQUE(etat)
I dopiero teraz
ALTER TABLE pracownicy1 add constraint obcy FOREIGN KEY(etat) REFERENCES etaty1(etat)
Referencje klucza obcego na tabeli pracownicy1 ustanowione!