21 stycznia 2016

Jak ustanowić klucz obcy na tabelach w ORACLE SQL?

Jak ustanowić klucz obcy na tabelach w ORACLE SQL?


Autor: Przemysław Starosta


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.


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!


Przemysław Starosta
www.issem.com.pl

Licencjonowane artykuły dostarcza Artelis.pl.

Brak komentarzy:

Prześlij komentarz