ここまでの流れを踏まえると、
トリガーが「ユーザがアップロードした問題PNG」 で、
そこから
- OCR
- 構造化
- 胆抽出
- 類題10問生成
- 解答ステップ生成
- 納得チェック(ユーザ操作)
という一連の処理を OS 的に責務分離したまま保存できる MySQL スキーマ が必要になる。
あなたの思想に合わせて、
“意味レイヤーを混ぜない”
“責務を明確に分離する”
“後から深掘りできるようにする”
という条件で、最適なスキーマを設計してみるね。
🧱 あなたの学習OSに最適化した MySQL スキーマ
🧩 1. problems(ユーザが投げた元の問題PNG)
これはトリガーなので最上位。
CREATE TABLE problems (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
image_path VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL
);
🧩 2. problem_ocr(OCR結果:画像→テキスト)
責務:視覚→言語化
※意味推論はしない
CREATE TABLE problem_ocr (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
problem_id BIGINT NOT NULL,
ocr_text TEXT NOT NULL,
created_at DATETIME NOT NULL
);
🧩 3. problem_structure(構造化:テキスト→構造)
責務:意味の抽象化
※胆抽出の前段階
CREATE TABLE problem_structure (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
problem_id BIGINT NOT NULL,
domain VARCHAR(50), -- 例:微分、積分、確率
type VARCHAR(50), -- 例:計算、証明、文章題
expression TEXT, -- 数式(LaTeXなど)
metadata JSON, -- 変数、条件、範囲など
created_at DATETIME NOT NULL
);
🧩 4. problem_core(胆:core intent)
責務:問題の本質的操作を抽出
※類題生成の核になる
CREATE TABLE problem_core (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
problem_id BIGINT NOT NULL,
core_intent VARCHAR(255), -- 例:合成関数の微分、置換積分
key_operations JSON, -- 必要な操作のリスト
typical_mistakes JSON, -- よくある誤り
created_at DATETIME NOT NULL
);
🧩 5. generated_problems(類題10問)
責務:胆から問題を生成
※解答はまだ生成しない
CREATE TABLE generated_problems (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
problem_id BIGINT NOT NULL, -- 元問題
core_id BIGINT NOT NULL, -- 胆
generated_index INT NOT NULL, -- 1〜10
text TEXT NOT NULL, -- 類題の本文
created_at DATETIME NOT NULL
);
🧩 6. generated_solutions(類題10問の解答)
責務:問題→解答ステップ
※ステップは別テーブルで管理
CREATE TABLE generated_solutions (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
generated_problem_id BIGINT NOT NULL,
full_solution TEXT, -- 完成版の解答
created_at DATETIME NOT NULL
);
🧩 7. solution_steps(解答ステップ:納得チェックの単位)
責務:学習の最小単位
※ここが「納得チェック」の対象
CREATE TABLE solution_steps (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
solution_id BIGINT NOT NULL,
step_index INT NOT NULL, -- 1,2,3...
step_text TEXT NOT NULL, -- ステップの説明
created_at DATETIME NOT NULL
);
🧩 8. user_progress(納得チェック)
責務:ユーザの“納得”を保存
※AIが判定しない、ユーザ主体
CREATE TABLE user_progress (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
step_id BIGINT NOT NULL,
is_understood BOOLEAN NOT NULL, -- チェックボックス
updated_at DATETIME NOT NULL
);
🎯 あなたの思想に完全に沿ったスキーマになっている理由
✔ 1. レイヤーが混ざっていない
- 画像
- OCR
- 構造化
- 胆
- 類題
- 解答
- ステップ
- 納得チェック
すべて別テーブル。
責務が完全に分離されている。
✔ 2. “納得”が中心
理解度ではなく 納得度 を保存する構造。
✔ 3. 深掘りが自然にできる
チェックがつかなかったステップだけを抽出すれば
そのまま深掘り対象になる。
✔ 4. 受験数学に最適
- 広く浅く(10問)
- 弱点特定(チェック)
- 深掘り(質問 or 追加例題)
受験の王道動線をそのままDBに落とし込んでいる。
🌱 あなたへ
次はどれを一緒に設計するのがしっくり来る?
- API のエンドポイント設計
- 胆(core intent)の語彙体系
- 深掘りモードの UI
- ステップ生成のプロンプト設計
- 10問生成のアルゴリズム
どこからでも進められるよ。