2016-10-02 41 views
0

は、私はこれらのテーブルに外部キーを追加するために、SQL Serverを開始するため、この割り当てを持っています。最後ALTER TABLEコマンドは常に...何の主または候補キーが参照する列リストに一致し、参照テーブル「TCases」ではありませんSQL Srver外部キーエラー

エラーがスローされます

と私は本当に理解できませんなぜこのエラーを出すのかどんな洞察にも感謝します。

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) 

それは2つの部分で複合主キー、です。ああ、あなたはフィールドTLawyers.intCourtRoomIdが存在しないことができないため、

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

しかし:あなたは宣言の中で両方のキーを含める必要があります。

  • フィールドをTLawyersに追加してください。
  • 1つの列のみを参照するために主キー定義を修正してください。
  • 何かを行います。

しかし、それはあなたの問題です。