30 lines
1.7 KiB
SQL
30 lines
1.7 KiB
SQL
CREATE TABLE user_test_attempt (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
test_id INT NOT NULL REFERENCES test(id) ON DELETE CASCADE,
|
|
|
|
-- các part được chọn để luyện tập (có thể chọn 1 hoặc nhiều part)
|
|
selected_parts INT[], -- hoặc dùng junction table
|
|
|
|
-- thời gian
|
|
time_limit_minutes INT, -- user chọn từ dropdown (NULL = không giới hạn)
|
|
started_at TIMESTAMP,
|
|
submitted_at TIMESTAMP,
|
|
time_spent_seconds INT, -- thời gian thực tế đã dùng
|
|
|
|
-- kết quả
|
|
total_correct INT DEFAULT 0,
|
|
total_questions INT DEFAULT 0,
|
|
score DECIMAL(5,2), -- scaled score nếu full test
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE user_answer (
|
|
id SERIAL PRIMARY KEY,
|
|
attempt_id INT NOT NULL REFERENCES user_test_attempt(id) ON DELETE CASCADE,
|
|
question_id INT NOT NULL REFERENCES question(id),
|
|
selected_value CHAR(1), -- A / B / C / D (NULL nếu bỏ qua)
|
|
is_correct BOOLEAN,
|
|
UNIQUE (attempt_id, question_id)
|
|
); |