我有这个分配用于开始sql server以向这些表添加外键。最后一个ALTER TABLE
命令总是抛出错误
参考表中没有主键或候选键' 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>
答案 0 :(得分: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
。但这是你的问题。