-- 用户表 CREATE TABLE users ( id TEXT PRIMARY KEY, name TEXT NOT NULL CHECK(length(name) >= 2 AND length(name) <= 20), phone TEXT UNIQUE NOT NULL CHECK(length(phone) = 11 AND phone LIKE '1%' AND substr(phone, 2, 1) BETWEEN '3' AND '9'), password TEXT NOT NULL DEFAULT '', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 创建用户表索引 CREATE INDEX idx_users_phone ON users(phone); CREATE INDEX idx_users_created_at ON users(created_at); -- 题目表 CREATE TABLE questions ( id TEXT PRIMARY KEY, content TEXT NOT NULL, type TEXT NOT NULL CHECK(type IN ('single', 'multiple', 'judgment', 'text')), options TEXT, -- JSON格式存储选项 answer TEXT NOT NULL, score INTEGER NOT NULL CHECK(score > 0), category TEXT NOT NULL DEFAULT '通用', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 创建题目表索引 CREATE INDEX idx_questions_type ON questions(type); CREATE INDEX idx_questions_score ON questions(score); CREATE INDEX idx_questions_category ON questions(category); -- 题目类别表 CREATE TABLE question_categories ( id TEXT PRIMARY KEY, name TEXT UNIQUE NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); INSERT OR IGNORE INTO question_categories (id, name) VALUES ('default', '通用'); -- 考试科目表 CREATE TABLE exam_subjects ( id TEXT PRIMARY KEY, name TEXT UNIQUE NOT NULL, type_ratios TEXT NOT NULL, category_ratios TEXT NOT NULL, total_score INTEGER NOT NULL, duration_minutes INTEGER NOT NULL DEFAULT 60, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 考试任务表 CREATE TABLE exam_tasks ( id TEXT PRIMARY KEY, name TEXT NOT NULL, subject_id TEXT NOT NULL, start_at DATETIME NOT NULL, end_at DATETIME NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (subject_id) REFERENCES exam_subjects(id) ); CREATE INDEX idx_exam_tasks_subject_id ON exam_tasks(subject_id); -- 考试任务参与用户表 CREATE TABLE exam_task_users ( id TEXT PRIMARY KEY, task_id TEXT NOT NULL, user_id TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE(task_id, user_id), FOREIGN KEY (task_id) REFERENCES exam_tasks(id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); CREATE INDEX idx_exam_task_users_task_id ON exam_task_users(task_id); CREATE INDEX idx_exam_task_users_user_id ON exam_task_users(user_id); -- 答题记录表 CREATE TABLE quiz_records ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL, subject_id TEXT, task_id TEXT, total_score INTEGER NOT NULL, correct_count INTEGER NOT NULL, total_count INTEGER NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (subject_id) REFERENCES exam_subjects(id), FOREIGN KEY (task_id) REFERENCES exam_tasks(id) ); -- 创建答题记录表索引 CREATE INDEX idx_quiz_records_user_id ON quiz_records(user_id); CREATE INDEX idx_quiz_records_created_at ON quiz_records(created_at); CREATE INDEX idx_quiz_records_subject_id ON quiz_records(subject_id); CREATE INDEX idx_quiz_records_task_id ON quiz_records(task_id); -- 答题答案表 CREATE TABLE quiz_answers ( id TEXT PRIMARY KEY, record_id TEXT NOT NULL, question_id TEXT NOT NULL, user_answer TEXT NOT NULL, score INTEGER NOT NULL, is_correct BOOLEAN NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (record_id) REFERENCES quiz_records(id), FOREIGN KEY (question_id) REFERENCES questions(id) ); -- 创建答题答案表索引 CREATE INDEX idx_quiz_answers_record_id ON quiz_answers(record_id); CREATE INDEX idx_quiz_answers_question_id ON quiz_answers(question_id); -- 系统配置表 CREATE TABLE system_configs ( id TEXT PRIMARY KEY, config_type TEXT UNIQUE NOT NULL, config_value TEXT NOT NULL, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 初始化抽题配置 INSERT INTO system_configs (id, config_type, config_value) VALUES ('1', 'quiz_config', '{"singleRatio":40,"multipleRatio":30,"judgmentRatio":20,"textRatio":10,"totalScore":100}'); -- 初始化管理员账号 INSERT INTO system_configs (id, config_type, config_value) VALUES ('2', 'admin_user', '{"username":"admin","password":"admin123"}');