2009-08-24 9 views
7

È possibile impostare un vincolo univoco come chiave esterna in un'altra tabella? Se sì, come andresti a dichiararlo?È possibile impostare un vincolo univoco come chiave esterna in un'altra tabella?

Come si va sull'assegnazione di una chiave candidata? È possibile?

Esempio: Ho una tabella prodotto che si compone di:

prod_id, prod_name, prod_price, QOH 

dove voglio PROD_NAME di collegamento con la tabella di spedizione:

desp_id, prod_name, shelfLoc, quantity 

Quello che stavo pensando è che posso avere bisogno per creare un vincolo univoco simile al seguente:

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

Quello che mi chiedo è, se è possibile fare riferimento a una chiave univoca come chiave esterna nella tabella di spedizione. Devo avere prod_name anziché prod_id nella tabella di spedizione in modo che l'informazione sia più significativa per l'utente quando la legge, piuttosto che vedere un numero di identificazione. Sto usando iSQL plus su oracle.

+0

Puoi fare un esempio di cosa intendi? Hai una colonna in 'tableB' che deve essere sia' UNIQUE' che essere un 'FOREIGN KEY' in' tableA'? Inoltre, quale motore di database stai usando? – VoteyDisciple

risposta

2

Questo è necessariamente DBMS dipendente. Nei DBMS a me familiari, il vincolo univoco e il vincolo di chiave esterna sono considerazioni separate, è possibile averli entrambi e entrambi agiscono normalmente quando combinati.

6

È perfettamente possibile fare riferimento a un vincolo UNIQUE in una chiave esterna 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> 

Si è tuttavia cattiva pratica. Il motivo principale per l'utilizzo di una chiave primaria insieme a una chiave univoca consiste nel fornire una chiave sintetica per l'utilizzo in chiavi esterne. Fossi in te sarei preoccupato che i tuoi insegnanti ti stiano dando uno assignment riddled with bad practice.

+0

Oh credimi, sono totalmente d'accordo. Non ci hanno nemmeno insegnato la metà delle cose che si aspettano che noi eseguiamo all'interno del compito. Slack. – taksIV

Problemi correlati