在SQL中尝试为表创建外键时出现错误。

10 浏览
0 Comments

在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));

我收到了“此列列表没有匹配的唯一或主键”错误。我知道错误出在屏幕表上,因为我已经尝试了所有的外键,只有屏幕表给我带来了错误。所以,当我尝试运行完整的脚本时,它因为屏幕表而无法工作。

分行和电影屏幕已经创建,并且与屏幕表几乎相同。请帮帮我。

0
0 Comments

在创建外键时出现错误的原因是SCREENID不是UNIQUE或PRIMARY KEY,因此无法将其作为FOREIGN KEY。解决方法是将SCREENID设为表SCREEN的PRIMARY KEY。“我做了”,这是一个由BRANCHID组成的复合键,不知道是否符合你的要求。

0
0 Comments

在这个问题中,出现了一个错误,当尝试在SQL中创建一个表的外键时。下面我们来分析一下出现这个问题的原因以及解决方法。

原因:

根据问题描述,我们可以看到在Session表中定义了一个外键,但是在父表Screen中没有定义相应的主键。这就是问题出现的原因。

解决方法:

为了解决这个问题,我们需要在Screen表中定义一个主键,以便可以在Session表中创建外键。你可以检查其他的表,看是否已经定义了主键约束。

下面是一个示例代码,用于在Screen表中创建一个主键:

ALTER TABLE Screen

ADD CONSTRAINT PK_Screen PRIMARY KEY (screen_id);

通过上述代码,我们在Screen表中创建了一个名为PK_Screen的主键约束,该约束使用screen_id字段作为主键。

完成上述操作后,您应该可以成功在Session表中创建外键了。请注意,如果您有其他相关的表,也需要类似地为它们创建主键。

希望以上内容能够帮助您解决这个问题!

0
0 Comments

问题出现的原因是在创建外键时,外键指向了不完整的主键。在这种情况下,表SCREEN的主键是(BRANCHID, SCREENID),但是SESSIONS_FK2外键只指向了SCREENID。

解决方法是创建一个包含两个列的外键。具体代码如下:

CONSTRAINT FK_SESSION_SCREEN FOREIGN KEY (BRANCHID, SCREENID) REFERENCES SCREEN(BRANCHID, SCREENID)

其他需要考虑的事项有:

1)如果你的目标是进行规范化,可能应该将branch和screen分开,为每个表设置单独的列作为主键。

2)给约束命名时要使用有意义的名称,这样你就能直接理解它们的功能。

这个方法似乎起作用了,谢谢。我会记住这些建议的,谢谢。

0