【问题标题】:one to many annotation mapping with composite key具有复合键的一对多注释映射
【发布时间】:2012-08-01 10:32:42
【问题描述】:

我有两张表,如下所述。关键是我的问题有“n”个选择。我设计在第二个表上使用复合键,而不是多列一列作为主键。使用这种方法,我有两个问题。

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

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

任何观点和建议都会有很大帮助。

谢谢,

-维杰·塞尔瓦拉杰

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

【问题讨论】:

    标签: database-design annotations hibernate-mapping


    【解决方案1】:

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

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

    这不是一个非此即彼的命题。您有一个键,它恰好是复合键和主键。

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

    • 如果是,那么您的设计是正确的。
    • 如果否,则不正确,您应该单独将 CHOICE 设为键。

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

    【讨论】:

    • 感谢您的回复回答了我的第一个问题。实现的第二部分很棘手:)
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2015-08-20
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多