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