ERD 다이어그램

테이블 DDL
- 문제 테이블 (questions):
CREATE TABLE quizzes (
quiz_id INT PRIMARY KEY AUTO_INCREMENT,
category_id INT NOT NULL,
question_text TEXT NOT NULL,
difficulty VARCHAR(10) NOT NULL,
reference_url VARCHAR(255),
attempt_count INT DEFAULT 0,
correct_count INT DEFAULT 0,
blank_sentence TEXT,
FOREIGN KEY (category_id) REFERENCES categories(category_id)
);
- 정답 테이블 (answers, alternative_answers):
- 문제
- 정답이 여러 개일 수 있고, 각 정답마다 여러 개의 대안 답이 있을 수 있음.
- 그래서 테이블을 어떻게 구성해야 할지 고민함
- 해결
- 테이블 분리하여 정규화된 형태로 데이터 저장하는 방식
- answers, alternative_answers 테이블로 문제에 대한 정답 테이블을 따로 설계
CREATE TABLE answers (
answer_id INT PRIMARY KEY AUTO_INCREMENT,
quiz_id INT,
answer_text TEXT,
FOREIGN KEY (quiz_id) REFERENCES quizzes(quiz_id)
);
CREATE TABLE alternative_answers (
alternative_id INT PRIMARY KEY AUTO_INCREMENT,
answer_id INT,
alternative_text TEXT,
FOREIGN KEY (answer_id) REFERENCES answers(answer_id)
);
- 문제 풀이 테이블 (submissions):
CREATE TABLE submissions (
submission_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
quiz_id INT,
submission_date DATETIME,
correct BOOLEAN,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (quiz_id) REFERENCES quizzes(quiz_id)
);
- 사용자 테이블 (users):
CREATE TABLE users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
password_hashed VARCHAR(255) NOT NULL,
registration_date DATE NOT NULL
);
CREATE TABLE role (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL UNIQUE,
description VARCHAR(100),
PRIMARY KEY (id)
);
CREATE TABLE user_role (
user_id INT NOT NULL,
role_id BIGINT NOT NULL,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (role_id) REFERENCES role(id)
);
- 문제 카테고리 테이블 (categories):