2012-04-21 16 views
1

私は何時間も頭を掻き回してきました。別のテーブルにあるエンタテイメントからの外部キーの作成

私はbidauthIDの組み合わせがWorkSessionテーブルからAllocationテーブルに存在する制約を加える必要があり、4つのテーブルBookAuthorAllocationWorkSession

を持っています。

通常と同じように外部キーの制約を作成しようとしましたが、参照された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

こんにちはアレックス、あなたの探しているものは何ですか?外部キーのみがあなたの懸念事項であるか、割り当てテーブルを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) 
); 

外部キー制約は、一意のものをターゲットにする必要があります。 1つ以上の列でPRIMARY KEY制約またはUNIQUE制約のいずれかを使用してこれを行うことができます。上記のテーブル「割り当て」には、これらの制約のいずれもありません。

{bid、authid}がテーブル「割り当て」で一意の場合は、PRIMARY KEY (bid, authid)をそのテーブルに宣言できます。 REFERENCES allocation (bid, authid)という外部キーは、次に動作するはずです。

関連する問題