2016-10-02 128 views
0

我有此分配開始sql服務器將外鍵添加到這些表。最後ALTER TABLE命令總是拋出一個錯誤SQL Srver外鍵錯誤

有在引用表「TCases」匹配引用列的列表中沒有主或候選鍵...

,我真的想不通爲什麼它給這個錯誤。任何見解都會被讚賞。

CREATE TABLE TCourtRooms 
(  intCourtRoomID    INTEGER   NOT NULL 
     ,strCourtRoomNumber   VARCHAR(50)  NOT NULL 
     ,strJudgeLastName   VARCHAR(50)  NOT NULL 
     ,strJudgeFirstName   VARCHAR(50)  NOT NULL 
     ,CONSTRAINT TCourtDockets_PK PRIMARY KEY (intCourtRoomID) 
) 

CREATE TABLE TCases 
(  intCourtRoomID    INTEGER   NOT NULL 
     ,intCaseIndex    INTEGER   NOT NULL  
     ,strCaseNumber    VARCHAR(50)  NOT NULL 
     ,strDescription    VARCHAR(50)  NOT NULL 
     ,CONSTRAINT TCases_PK PRIMARY KEY (intCourtRoomID, intCaseIndex) 
) 

CREATE TABLE TPersons 
(  intCourtRoomID    INTEGER   NOT NULL 
     ,intCaseIndex    INTEGER   NOT NULL 
     ,intPersonIndex    INTEGER   NOT NULL 
     ,strLastName    VARCHAR(50)  NOT NULL 
     ,strFirstName    VARCHAR(50)  NOT NULL 
     ,strPersonRole    VARCHAR(50)  NOT NULL  --Options are plaintiff or defendant 
     ,CONSTRAINT TPlaintiffs_PK PRIMARY KEY (intCourtRoomID, intCaseIndex, intPersonIndex) 
) 


CREATE TABLE TLawyers 
(  intLawyerID    INTEGER   NOT NULL 
     ,intCaseIndex    INTEGER   NOT NULL 
     ,intPersonIndex    INTEGER   NOT NULL 
     ,strLastName    VARCHAR(50)  NOT NULL 
     ,strFirstName    VARCHAR(50)  NOT NULL 
     ,strLawyerRole    VARCHAR(50)  NOT NULL --plaintiff or defendant 
     ,CONSTRAINT TLawyers_PK PRIMARY KEY (intLawyerID, intCaseIndex, intPersonIndex) 
     ,CONSTRAINT TLawyers_intLawyerID_strLawyerRole_UN UNIQUE (intLawyerID, strLawyerRole) 
) 

問題3.2確定並創建外鍵

-- Child     Parent   Column(s) 
-- -----     ------   --------- 
-- TCases     TCourtRooms  intCourtRoomID 
-- TPersons     TCases   intCourtRoomID, intCaseIndex 
-- TLawyers     TCourtRooms 



ALTER TABLE TCases 
    ADD CONSTRAINT TCases_TCourtRooms_FK 
    FOREIGN KEY (intCourtRoomID) REFERENCES TCourtRooms (intCourtRoomID) 

ALTER TABLE TPersons 
    ADD CONSTRAINT TPersons_TCases_FK 
    FOREIGN KEY (intCourtRoomID, intCaseIndex) REFERENCES TCases (intCourtRoomID, intCaseIndex) 

ALTER TABLE TLawyers 
    ADD CONSTRAINT TLawyers_TCases_FK 
    FOREIGN KEY (intCaseIndex) REFERENCES TCases (intCaseIndex)</code> 

回答

2

這是TCases主鍵:

CONSTRAINT TCases_PK PRIMARY KEY (intCourtRoomID, intCaseIndex) 

這是一個複合主鍵,具有兩個部分。您需要包括在聲明中兩個鍵:

ALTER TABLE TLawyers 
    ADD CONSTRAINT TLawyers_TCases_FK 
    FOREIGN KEY (intCaseIndex) REFERENCES TCases (intCourtRoomId, intCaseIndex) 

但是,唉,你不能因爲現場TLawyers.intCourtRoomId不存在。我不知道你應該怎麼做:

  • 將該字段添加到TLawyers
  • 修復主鍵定義以僅引用一列。
  • 做點別的。

但這是你的問題。