使用复合键进行一对多注释映射

时间:2012-08-01 10:32:43

标签: database-design annotations hibernate-mapping

我有两张桌子如下所述。关键是我的问题有'n'选择。我已设计在第二个表上使用复合键,而不是为主键添加一列。通过这种方法,我有两个问题。

  1. 这是表格设计的好方法吗?我的意思是TABLE QUESTIONCHOICE有复合键而不是主键。

  2. 如何使用注释在QUESTIONBANK和QUESTIONCHOICE表之间进行Hibernate中的一对多映射?

  3. 任何要点和建议都会有很大的帮助。

    谢谢,

    -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)
    );
    

1 个答案:

答案 0 :(得分:0)

让我回答你问题的前半部分......

  
      
  1. 这是表格设计的好方法吗?我的意思是TABLE QUESTIONCHOICE有复合键而不是主键。
  2.   

这不是一个或两个命题。您的密钥恰好是 复合和主要。

您的设计是否有效取决于CHOICE的相同值是否应该存在多个QUESTIONCHOICE行(连接到不同的问题):

  • 如果是,您的设计是正确的。
  • 如果不是,那就不正确了,你应该只使CHOICE成为一把钥匙。

是否还要添加代理键是一个平衡问题,这里有some criteria来帮助您做出决定。