2011-02-11 51 views
0

我在更新记录到derby db表中使用外键时遇到问题。考虑下面的两个表QUESTIONCHOICEQUESTIONANSWER。在表问题答案的记录是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) 
); 

回答

1

你为什么不添加额外的列到QUESTIONCHOICE表某一行标记为答案行,这样一来,视图还可以通过创建在答案列上应用约束。

+0

是的,即使我想到了这个想法。让我介绍一个专栏,简化表格设计。谢谢。 – 2011-02-11 13:11:48