2009-08-24 2 views
7

고유 한 제약 조건을 다른 테이블의 외래 키로 설정할 수 있습니까? 예인 경우 신고 방법에 대해 어떻게 생각하십니까?고유 한 제약 조건을 다른 테이블의 외래 키로 설정할 수 있습니까?

어떻게 후보 키를 할당 하시겠습니까? 가능합니까?

예 : 나는 구성된 제품 테이블이 :

나는 PROD_NAME가 신속 테이블에 연결할
prod_id, prod_name, prod_price, QOH 

:

desp_id, prod_name, shelfLoc, quantity 

내가 생각하는 것이 내가해야 할 수도 있습니다 다음과 같은 고유 제한을 작성하십시오.

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

내가 궁금해하는 점은, 고유 키를 발송 테이블의 외래 키로 참조 할 수 있는지 여부입니다. despatch 테이블에 prod_id이 아닌 prod_name이 있어야만 ID 번호를 보는 대신 정보를 읽는 사용자가 더 의미있는 정보를 얻을 수 있습니다. oracle에서 iSQL plus를 사용하고 있습니다.

+0

무슨 뜻인지 예를 들려 줄 수 있습니까? 'tableB'에'UNIQUE'이고'tableA'에'FOREIGN KEY' 컬럼이 있어야합니다. 또한 어떤 데이터베이스 엔진을 사용하고 있습니까? – VoteyDisciple

답변

2

이것은 반드시 DBMS에 의존합니다. 필자가 익숙한 DBMS에서는 고유 제한 조건과 외래 키 제약 조건이 별도의 고려 사항이므로 두 가지 모두 가질 수 있으며 결합시 정상적으로 작동합니다.

6

은 오라클 FOREIGN KEY에 UNIQUE 제약 조건을 참조 할 수 있도록 완벽하게 가능하다 :

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> 

그것은 그러나 나쁜 방법입니다. 고유 키와 함께 기본 키를 사용하는 주요 이유는 외래 키에 사용할 가상 키를 제공하기 위해서입니다. 나는 너의 교사가 너에게 assignment riddled with bad practice을 줄 것을 걱정할 것이다.

+0

오, 나를 믿어, 나는 완전히 동의한다. 그들은 우리가 과제에서 수행 할 것으로 기대하는 것의 절반을 우리에게 가르쳐조차하지 못했습니다. 느슨하게. – taksIV

관련 문제