在SQL中尝试为表创建外键时出现错误。
在SQL中尝试为表创建外键时出现错误。
我正在创建一个屏幕表:
CREATE TABLE SCREEN( BRANCHID CHAR(2) NOT NULL, SCREENID CHAR(2) NOT NULL, SCREENCACPACITY NUMBER(3), CONSTRAINT SCREEN_PK PRIMARY KEY(BRANCHID, SCREENID), CONSTRAINT SCREEN_FK FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID));
但是当我创建一个会话表时:
CREATE TABLE SESSIONS( SESSIONID CHAR(4) NOT NULL, BRANCHID CHAR(2) NOT NULL, SCREENID CHAR(2) NOT NULL, MOVIEID CHAR(2) NOT NULL, SESSIONDATE DATE, SESSIONPRICE NUMBER(4,2), CONSTRAINT SESSIONS_PK PRIMARY KEY(SESSIONID), CONSTRAINT SESSIONS_FK1 FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID), CONSTRAINT SESSIONS_FK2 FOREIGN KEY(SCREENID) REFERENCES SCREEN(SCREENID), CONSTRAINT SESSIONS_FK3 FOREIGN KEY(MOVIEID) REFERENCES MOVIE(MOVIEID));
我收到了“此列列表没有匹配的唯一或主键”错误。我知道错误出在屏幕表上,因为我已经尝试了所有的外键,只有屏幕表给我带来了错误。所以,当我尝试运行完整的脚本时,它因为屏幕表而无法工作。
分行和电影屏幕已经创建,并且与屏幕表几乎相同。请帮帮我。
在这个问题中,出现了一个错误,当尝试在SQL中创建一个表的外键时。下面我们来分析一下出现这个问题的原因以及解决方法。
原因:
根据问题描述,我们可以看到在Session表中定义了一个外键,但是在父表Screen中没有定义相应的主键。这就是问题出现的原因。
解决方法:
为了解决这个问题,我们需要在Screen表中定义一个主键,以便可以在Session表中创建外键。你可以检查其他的表,看是否已经定义了主键约束。
下面是一个示例代码,用于在Screen表中创建一个主键:
ALTER TABLE Screen
ADD CONSTRAINT PK_Screen PRIMARY KEY (screen_id);
通过上述代码,我们在Screen表中创建了一个名为PK_Screen的主键约束,该约束使用screen_id字段作为主键。
完成上述操作后,您应该可以成功在Session表中创建外键了。请注意,如果您有其他相关的表,也需要类似地为它们创建主键。
希望以上内容能够帮助您解决这个问题!
问题出现的原因是在创建外键时,外键指向了不完整的主键。在这种情况下,表SCREEN的主键是(BRANCHID, SCREENID),但是SESSIONS_FK2外键只指向了SCREENID。
解决方法是创建一个包含两个列的外键。具体代码如下:
CONSTRAINT FK_SESSION_SCREEN FOREIGN KEY (BRANCHID, SCREENID) REFERENCES SCREEN(BRANCHID, SCREENID)
其他需要考虑的事项有:
1)如果你的目标是进行规范化,可能应该将branch和screen分开,为每个表设置单独的列作为主键。
2)给约束命名时要使用有意义的名称,这样你就能直接理解它们的功能。
这个方法似乎起作用了,谢谢。我会记住这些建议的,谢谢。