我在更新记录到derby db表中使用外键时遇到问题。考虑下面的两个表QUESTIONCHOICE和QUESTIONANSWER。在表问题答案的记录是QUESTIONCHOICE的一个子集,有一个外键约束,以确保问题答案表始终QUESTIONCHOICE表的子集。表记录更新由外键约束停止
现在我正在尝试使用下面的查询更新QUESTIONCHOICE表中的一条记录,并通过外键约束来停止更新。
更新“USER”。“QUESTIONCHOICE”设置“CHOICE”='GET1',其中“QID”= 10001和“CHOICE”='GET';
表'QUESTIONCHOICE'上的更新导致密钥(10001,GET)的外键约束'QUESTIONANSWER_FK'的违规。该声明已被回滚。
我该如何更新QUESTIONCHOICE表中的记录? 我可以删除QUESTIONANSWER表中的记录,更新QUESTIONCHOICE表中的记录,然后在QUESTIONANSWER中插入记录。但对我来说这听起来不错。
也可以创建QUESTIONANSW作为一个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)
);
是的,即使我想到了这个想法。让我介绍一个专栏,简化表格设计。谢谢。 – 2011-02-11 13:11:48