我在使用外键将记录更新到 derby db 表时遇到问题。考虑下面的两个表 QUESTIONCHOICE 和 QUESTIONANSWER 。表 QUESTIONANSWER 中的记录是 QUESTIONCHOICE 的子集,并且具有外键约束,以确保 QUESTIONANSWER 表始终是 QUESTIONCHOICE的子集表。
现在我尝试使用下面的查询更新 QUESTIONCHOICE 表中的记录,并通过外键约束停止更新。
更新“USER”。“QUESTIONCHOICE”设置“CHOICE”='GET1',其中“QID”= 10001,“CHOICE”='GET';
表'QUESTIONCHOICE'上的UPDATE导致密钥(10001,GET)违反外键约束'QUESTIONANSWER_FK'。声明已经回滚。
我应该如何更新QUESTIONCHOICE表中的记录? 我可以删除QUESTIONANSWER表中的记录更新我在QUESTIONCHOICE表中的记录,然后在QUESTIONANSWER中插入记录。但它对我来说听起来不太好。
我也可以创建QUESTIONANSWER作为VIEW而不是TABLE,如果是这样,我将如何制作QUESTIONCHOICE表的子集?
请建议。
谢谢,
-Vijay Selvaraj
----------
CREATE TABLE USER.QUESTIONCHOICE(
QID INT NOT NULL,
Choice VARCHAR(100) NOT NULL,
CONSTRAINT QUESTIONCHOICE_PK PRIMARY KEY (QID, Choice),
CONSTRAINT QUESTIONCHOICE_FK FOREIGN KEY (QID)
REFERENCES user.questionbank (QuestionID)
);
----------
create table USER.QUESTIONANSWER(
QID INT NOT NULL,
Answer VARCHAR(100) NOT NULL,
CONSTRAINT QUESTIONANSWER_PK PRIMARY KEY (QID, Answer),
CONSTRAINT QUESTIONANSWER_FK FOREIGN KEY (QID, Answer)
REFERENCES USER.QUESTIONCHOICE (QID, Choice)
);
答案 0 :(得分:1)
为什么不在QUESTIONCHOICE表中添加额外的列以将行标记为答案行,这样,也可以通过在答案列上应用约束来创建视图。