Jak ustanowić referencje klucza obcego na tabelach w bazach ORACLE? Odpowiedź na to pytanie odnajdziesz w przystępnej formie w tym artykule, przygotowanym po analizie najczęstszych błędów w tej materii.

Data dodania: 2012-12-19

Wyświetleń: 5809

Przedrukowań: 0

Głosy dodatnie: 0

Głosy ujemne: 0

WIEDZA

0 Ocena

Licencja: Creative Commons

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!

Licencja: Creative Commons