我正在为在线多项选择考试开发一个演示应用程序。 当然,每个问题都有多种选择。在问题屏幕上,候选人将选择其中一个选项,提交该选项并将导航到下一个问题。
我已经制定了以下表格结构。
CREATE TABLE users (
username VARCHAR(45) NOT NULL ,
password VARCHAR(45) NOT NULL ,
enabled TINYINT NOT NULL DEFAULT 1 ,
);
CREATE TABLE questions (
id int(10) NOT NULL auto_increment
question varchar(800) NOT NULL,
right_option int(10) NOT NULL references options(id)
);
CREATE TABLE options (
id int(10) NOT NULL auto_increment,
question_id int(10) NOT NULL references questions(id),
option varchar(150) NOT NULL,
);
CREATE TABLE exam_details (
id int(10) NOT NULL,
username varchar(45) NOT NULL references users(username),
date_of_exam date,
exam_result varchar(10) NOT NULL, -- PASS/FAIL
exam_score int(10) NOT NULL, -- e.g. 40
no_of_questions int(10) NOT NULL -- total no. of questions in the test
);
CREATE TABLE user_answers (
id int(10) NOT NULL,
username varchar(45) NOT NULL references users(username),
question_id int(10) NOT NULL references questions(id),
answer int(10) NOT NULL references options(id)
);
数据库将是MySql。但请忽略语法,因为我只是想传达这个想法。请建议是否有更好的方法。
只是补充一点,我将使用spring&在服务器端休眠。
答案 0 :(得分:3)
一旦你清理了一点,最大的一个是user_answers.username
(它被去标准化),尝试这样的事情:
CREATE TABLE users (
id int(10) auto_increment primary key,
username VARCHAR(45) NOT NULL ,
password VARCHAR(45) NOT NULL ,
enabled TINYINT NOT NULL DEFAULT 1
);
CREATE TABLE questions (
id int(10) auto_increment primary key,
question varchar(800) NOT NULL,
right_option int(10) NOT NULL references options(id)
);
CREATE TABLE options (
id int(10) auto_increment primary key,
question_id int(10) NOT NULL references questions(id),
`option` varchar(150) NOT NULL
);
CREATE TABLE exam_details (
id int(10) auto_increment primary key,
username varchar(45) NOT NULL references users(username),
date_of_exam date not null,
exam_result varchar(10) NOT NULL, -- PASS/FAIL
exam_score int(10) NOT NULL, -- e.g. 40
no_of_questions int(10) NOT NULL -- total no. of questions in the test
);
CREATE TABLE user_answers (
id int(10) auto_increment primary key,
userId int(10) NOT NULL references users(id),
question_id int(10) NOT NULL references questions(id),
answer int(10) NOT NULL references options(id)
);
然后,立即跳出来的唯一问题是user_answers.answer可以技术上保存为不同问题的答案。
最大的外卖就是永远不要使用答案表中的用户名。不能有多个同名的真实用户(大问题)。此外,如果用户名是拼写错误,则会在用户表中的一个位置更改。数据的完整性。加入这样的身份。
注意:auto_increment必须是主键,并且主键永远不能为NULL,因此在其旁边键入NOT NULL是多余的。只是说。
答案 1 :(得分:2)
我最近需要编写一个完全由数据库驱动且可由客户更改的问卷系统。
我最终将可能的答案存储为数据库中的JSON对象,然后根据问题ID存储给出的答案,但这会增加一些复杂程度。
如果每个问题都是多项选择答案,那么您的方法将是一种合乎逻辑的方法