2011-02-11 52 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