我有两张桌子如下所述。关键是我的问题有'n'选择。我已设计在第二个表上使用复合键,而不是为主键添加一列。通过这种方法,我有两个问题。
这是表格设计的好方法吗?我的意思是TABLE QUESTIONCHOICE有复合键而不是主键。
如何使用注释在QUESTIONBANK和QUESTIONCHOICE表之间进行Hibernate中的一对多映射?
任何要点和建议都会有很大的帮助。
谢谢,
-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 :(得分:0)
让我回答你问题的前半部分......
- 这是表格设计的好方法吗?我的意思是TABLE QUESTIONCHOICE有复合键而不是主键。
醇>
这不是一个或两个命题。您的密钥恰好是 复合和主要。
您的设计是否有效取决于CHOICE
的相同值是否应该存在多个QUESTIONCHOICE
行(连接到不同的问题):
CHOICE
成为一把钥匙。是否还要添加代理键是一个平衡问题,这里有some criteria来帮助您做出决定。