2012-04-21 4 views
1

나는 몇 시간 동안 내 머리를 긁적 거리다.별도의 테이블에있는 entites에서 외래 키 만들기

나는 내가 bidauthID의 조합이 WorkSession 테이블에서 Allocation 테이블에 존재하는 제약 조건을 만들 필요가 네 개의 테이블

Book, Author, AllocationWorkSession 있습니다.

은 당신이 일반적으로하는 것처럼 외래 키 제약 조건을 만들려고하지만, 참조 된 ID를 이미 모두 외래 키이기 때문에 작동하지 않습니다와 나는 할당 테이블의 식별자로 새 키를 만들 수 없습니다

CREATE TABLE Book(
bid NUMBER(4), 
title VARCHAR2(30) NOT NULL, 
SellingPrice NUMBER(6,2), 
PRIMARY KEY (bid), 
CONSTRAINT EM_SellingPrice CHECK(SellingPrice >= 0) 
); 

CREATE TABLE Author(
authID NUMBER(4), 
fName VARCHAR2(30), 
sName VARCHAR2(30), 
PRIMARY KEY(authID), 
CONSTRAINT EM_Name UNIQUE (fName,SName) 
); 

CREATE TABLE Allocation(
bid NUMBER(4), 
authID NUMBER(4), 
payRate NUMBER(6,2), 
CONSTRAINT AL_PayRate CHECK(payRate >= 1 AND payRate < 80), 
FOREIGN KEY(bid) REFERENCES Book(bid), 
FOREIGN KEY(authID) REFERENCES Author(authID) 
); 

CREATE TABLE WorkSession(
bid NUMBER(4), 
authID NUMBER(4), 
WorkYear NUMBER(4), 
WorkWeek NUMBER(2), 
WorkHours NUMBER(4,2), 
CONSTRAINT WY_Range CHECK(WorkYear > 2010 AND WorkYear < 2014), 
CONSTRAINT WW_Range CHECK(WorkWeek >= 1 AND WorkWeek <= 52), 
CONSTRAINT WH_Range CHECK(WorkHours >= 0.5 AND WorkHours <100), 
CONSTRAINT FK_Check FOREIGN KEY(bid, AuthID) REFERENCES Allocation(bid, AuthID), 
PRIMARY KEY(workYear, WorkWeek) 
); 
+0

안녕하세요. Alex, 정확히 무엇을 찾으십니까? 외래 키만 관심사이거나 WorkSession으로 할당 테이블을 바인딩하고 싶습니다. 외래 키와 외래 키와의 관계를 만들 수없는 것보다 하나 더 –

+0

그래서 마침내 알아 냈습니다. 문제는, 결국 내가 그 테이블의 기본 키를 찾을 수없는 오류 주위에있어 그 테이블에 대한 기본 키로 할당에 외래 키를 할당. 이 도움이 되었기를 바랍니다. – Ardenexal

+0

'할당 '의 기본 키는 무엇입니까? –

답변

3
CREATE TABLE Allocation(
bid NUMBER(4), 
authID NUMBER(4), 
payRate NUMBER(6,2), 
CONSTRAINT AL_PayRate CHECK(payRate >= 1 AND payRate < 80), 
FOREIGN KEY(bid) REFERENCES Book(bid), 
FOREIGN KEY(authID) REFERENCES Author(authID) 
); 

외래 키 제약 조건은 고유 한 것을 대상으로해야합니다. 하나 이상의 열에 대해 PRIMARY KEY 제약 조건 또는 UNIQUE 제약 조건을 사용하여이를 수행 할 수 있습니다. 위의 테이블 "할당"에는 이러한 제약 조건 중 하나가 없습니다. {입찰, 권한 ID가} 테이블 "할당"에 고유 한 경우

, 당신은 그 테이블에 PRIMARY KEY (bid, authid)을 선언 할 수 있습니다. 그러면 REFERENCES allocation (bid, authid) 외래 키가 작동합니다.