2012-08-01 47 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

相关问题