2012-08-01 56 views
0

我有兩個表,如下所述。關鍵是我的問題有'n'選擇。我設計了在第二個表上有組合鍵,而不是爲主鍵添加一個列。用這種方法我有兩個問題。帶複合鍵的一對多註解映射

  1. 這是表設計中的一個好方法嗎?我的意思是TABLE QUESTIONCHOICE具有複合鍵而不是主鍵。

  2. 如何在Hibernate中使用註釋在QUESTIONBANK和QUESTIONCHOICE表之間進行一對多映射?

任何問題和建議都會有很大的幫助。

感謝,

-Vijay Selvaraj

CREATE TABLE QUESTIONBANK(
    QUESTIONID INT NOT NULL AUTO_INCREMENT(10001, 1), 
    QUESTION VARCHAR(200) NOT NULL, 
    TOPIC VARCHAR(20) NOT NULL, 
    SUBTOPIC VARCHAR(20) NOT NULL, 
    COMPLEXITY SMALLINT NOT NULL DEFAULT 1, 
    QUESTIONTYPE SMALLINT NOT NULL, 
    VERSION INT NOT NULL DEFAULT 0, 
    CONSTRAINT QUESTIONBANK_PK PRIMARY KEY (QUESTIONID) 
); 

CREATE TABLE QUESTIONCHOICE(
    QID INT NOT NULL, 
    CHOICE VARCHAR(100) NOT NULL, 
    CORRECT_CHOICE BOOLEAN, 
    VERSION INT NOT NULL DEFAULT 0, 
    CONSTRAINT QUESTIONCHOICE_PK PRIMARY KEY (QID, Choice), 
    CONSTRAINT QUESTIONCHOICE_FK FOREIGN KEY (QID) REFERENCES QUESTIONBANK (QUESTIONID) 
); 

回答

0

我來回答你的問題上半年...

  1. 這在表設計一個好方法?我的意思是TABLE QUESTIONCHOICE具有複合鍵而不是主鍵。

這不是一個二者或命題。你有一個密鑰恰好是複合和主要都

無論您的設計是否有效取決於的CHOICE一個相同的值是否應該能夠在多個存在QUESTIONCHOICE行(連接到不同的問題):

  • 如果是的話,你的設計是正確的。
  • 如果沒有,這是不正確的,你應該使CHOICE一個關鍵。

是否也添加代理鍵是一個平衡的問題,這裏有some criteria來幫助您做出決定。

+0

謝謝你的回覆回答我的第一個問題。而第二部分的實施很棘手:) – 2012-08-02 12:02:47