2009-08-24 10 views
7

Czy można ustawić unikalne ograniczenie jako klucz obcy w innej tabeli? Jeśli tak, w jaki sposób zadeklarowałbyś to?Czy można ustawić unikalne ograniczenie jako klucz obcy w innej tabeli?

Jak byś postąpił przy przypisywaniu klucza kandydującego? Czy to możliwe?

Przykład: Mam tabeli produktu, który składa się z:

prod_id, prod_name, prod_price, QOH 

gdzie chcę usługą PROD_NAME podłączenia się do tabeli despatch:

desp_id, prod_name, shelfLoc, quantity 

Co Myślałam, że może muszę Aby utworzyć wyjątkowe ograniczenie, które będzie wyglądać tak:

ALTER TABLE product 
ADD CONSTRAINT prod_nameID_uc 
UNIQUE (prod_id,prod_name) 

Zastanawiam się, czy możliwe jest odwołanie się do unikalnego klucza jako klucza obcego w tabeli wysyłki. Muszę mieć prod_name zamiast prod_id w tabeli wysyłki, aby informacje były bardziej znaczące dla użytkownika podczas czytania, zamiast widzieć numer identyfikacyjny. Używam iSQL plus na oracle.

+0

Czy możesz podać przykład tego, co masz na myśli? Masz kolumnę w 'tableB', która musi być zarówno' UNIQUE' i być 'FOREIGN KEY' na' tableA'? Ponadto, jakiego silnika bazy danych używasz? – VoteyDisciple

Odpowiedz

2

Jest to zależne od DBMS. W systemach DBMS, które znam, unikalne ograniczenie i ograniczenie klucza obcego są oddzielnymi względami, możesz mieć oba i oba działają normalnie, gdy są połączone.

6

Jest całkiem możliwe, aby odwoływać się UNIQUE w FOREIGN KEY Oracle:

SQL> create table products (
    2  prod_id number not null 
    3  , prod_name varchar2 (30) not null 
    4  , constraint prod_pk primary key (prod_id) 
    5  , constraint prod_uk unique (prod_name) 
    6  ) 
    7/

Table created. 

SQL> create table despatch (
    2  desp_id number not null 
    3  , prod_name 
    4  , constraint desp_pk primary key (desp_id) 
    5  , constraint desp_prod_pk foreign key (prod_name) 
    6   references products (prod_name) 
    7  ) 
    8/

Table created. 

SQL> 

Jest jednak złą praktyką. Głównym powodem używania klucza podstawowego wraz z kluczem unikatowym jest zapewnienie klucza syntetycznego do użycia w kluczach obcych. Byłem tobą, martwiłbym się, że twoi nauczyciele dają ci assignment riddled with bad practice.

+0

Och, uwierz mi, całkowicie się zgadzam. Nawet nie nauczyli nas połowy rzeczy, których oczekują od nas w ramach zadania. Luźny. – taksIV

Powiązane problemy