2013-04-29 5 views
0

기본 키 또는 외래 키를 사용해야 할 때가 다소 혼란 스럽습니다. 두 개의 테이블이 있고 두 테이블 모두 다른 테이블의 기본 키인 열을 참조하는 열이 있습니다. 여기 는 그들은 : I는 다른 테이블에 열을 참조 TEH 두 열의 기본 키 합성을 한 첫 번째 테이블Oracle 외래 키 또는 기본 키

CREATE TABLE roles (
movie_id NUMBER(10,0) NOT NULL REFERENCES movies(movie_id), 
actor_id NUMBER(10,0) NOT NULL REFERENCES actors(actor_id), 
movie_description VARCHAR2(50), 
salary NUMBER(10), 
CONSTRAINT pk_roles PRIMARY KEY (movie_id, actor_id) 
); 

CREATE TABLE profits (
movie_id NUMBER(10,0) NOT NULL, 
gross_profit NUMBER(9) NOT NULL, 
net_profit NUMBER(9) NOT NULL, 
CONSTRAINT fk_profits FOREIGN KEY (movie_id) REFERENCES movies(movie_id) ON DELETE CASCADE 
); 

. 이러한 열은 각각의 테이블에서 기본 키가됩니다.

두 번째 테이블에서 다른 테이블에서 기본 키를 다시 참조하는 외래 키를 만들었습니다. 그러나 모범 사례는 무엇입니까? 첫 번째 테이블의 키는 다른 테이블의 기본 키를 참조하기 때문에 외래 키 여야합니까?

답변

1

기본 키 제약 조건과 고유 제약 조건은 중복 행을 방지합니다. 중복 된 행은 공간을 낭비 할뿐만 아니라 데이터베이스에서 의미있는 응답을 얻는 것을 어렵게 만듭니다.

외래 키 제약 조건은 값을 다른 테이블에있는 제약 조건으로 제한합니다. 외래 키 제약 조건의 대상은 일반적으로 기본 키이지만 고유 제약 조건이있는 모든 열 (들)이 될 수 있습니다.

모든 테이블에는 기본 키 제약 조건이 있어야합니다. 기본 키를 구성하는 열 (들)에 외래 키 제약 조건이 필요한 경우 외래 키 제약 조건도 추가하십시오.

"역할"테이블은 기본 키 제약 조건과 외래 키 제약 조건을 구현하는 한 괜찮습니다. 그러나 "이익"에는 기본 키가 필요합니다.

+0

외래 키 제약 조건은 기본 키 제약 조건에 추가되며 외래 열의 값으로 제한됩니다. 이것은 "역할"의 "... REFERENCES ..."구문을 없애고 거기에 외래 키를 만들지 않으므로? – Amoeba

+1

"역할"에 두 개의 외래 키 제약 조건이 생성됩니다. 'movie_id ... REFERENCES movies (movie_id)''에서, 해당 영화에서 연기 된 역할 배우에 대한 정보를 저장하기 전에 영화가 존재해야합니다. 'actor_id ... REFERENCES actors (actor_id)'에서 액터가 재생 된 영화에 대한 정보를 저장하기 전에 액터가 존재해야합니다. 외래 키 제약 조건은 완벽하게 의미가 있습니다. –

+0

위의 이익 테이블과 movie_id NUMBER (10,0) NOT NULL REFERENCES 영화 (movie_id)'와 'CONSTRAINT pk_profits PRIMARY KEY (movie_id)'와 같은 제약 조건의 차이점은 무엇입니까? – Amoeba