仕様書:DB仕様(テーブル構造)
各テーブルの定義を以下に示します。
はみ出した表は横スクロールできます
表がはみ出しているときは、横スクロールをして確認してください。
JSON型について
PostgreSQLには、JSON型が存在します。
この型は、JSONデータを格納するために使用され、JSONデータを関数を使って操作することができます。
比較的コストはかかりますが、柔軟なデータを持たせられるため本システムではSQL内でJSONをパースする機会が少ないデータ(INDEXを張っても、JSON型の操作はコストが高いため)を中心に、JSON型を使用しています。
lecture_master表
作成されている問題集のマスタデータ(問題集の設定や登録されている問題のリスト)を管理するテーブルです。
ふろんとえんどのデータを格納するためのlecture_raw_dataカラムが用意されており、フロントエンドはこのデータをそのままパースします。
| 列名 | PK | FK | カラム名 | 内容 | 型 | 制約 | 非NULL | デフォルト |
|---|---|---|---|---|---|---|---|---|
| lecture_id | ○ | lecture_id | 問題集ID | integer | ○ | |||
| lecture_visible | lecture_visible | 問題集表示 | boolean | ○ | ||||
| lecture_name | lecture_name | 問題集名 | varchar | ○ | ||||
| lecture_owner | lecture_owner | 問題集作成者 | varchar | ○ | ||||
| lecture_description | lecture_description | 問題集説明 | varchar | ○ | ||||
| lecture_date | lecture_date | 問題集作成日 | timestamp | ○ | ||||
| lecture_permit_practice | lecture_permit_practice | 練習許可 | boolean | ○ | ||||
| lecture_permit_exam | lecture_permit_exam | 模試許可 | boolean | ○ | ||||
| lecture_shuffle | lecture_shuffle | シャッフル | boolean | ○ | ||||
| lecture_ichimon | lecture_ichimon | 一問一答 | boolean | ○ | ||||
| lecture_raw_data | lecture_raw_data | 問題集生データ(フロントエンド利用用) | json | ○ |
problems表
問題マスタ表です。システムが利用する、全ての問題の情報(正答など)を格納します。
また、Geminiが回答したデータ(JSON形式)は、gemini_answerカラムに格納されます。
| 列名 | PK | FK | カラム名 | 内容 | 型 | 制約 | 非NULL | デフォルト |
|---|---|---|---|---|---|---|---|---|
| category | ○ | category | カテゴリ | integer | ○ | |||
| year | ○ | year | 年 | integer | ○ | |||
| month | ○ | month | 月 | integer | ○ | |||
| problem_number | ○ | problem_number | 問題番号 | integer | ○ | |||
| answer | answer | 正解 | integer | ○ | ||||
| problem_ocr | problem_ocr | 問題文(OCR) | varchar | ○ | ||||
| similar | similar | 類似問題 | json | ○ | ||||
| gemini_answer | gemini_answer | ジェミニ解答 | json | ○ |
reactions表
| 列名 | PK | FK | カラム名 | 内容 | 型 | 制約 | 非NULL | デフォルト |
|---|---|---|---|---|---|---|---|---|
| reaction_id | ○ | reaction_id | リアクションID | integer | ○ | |||
| user_id | ○ | user_id | ユーザID | varchar | ○ | |||
| timestamp | timestamp | タイムスタンプ | timestamp | ○ | ||||
| category | ○ | category | カテゴリ | integer | ○ | |||
| year | ○ | year | 年 | integer | ○ | |||
| month | ○ | month | 月 | integer | ○ | |||
| problem_number | ○ | problem_number | 問題番号 | integer | ○ | |||
| choose | choose | 選択肢 | integer | ○ | ||||
| lecture_id | ○ | lecture_id | 問題集ID | integer | ○ | |||
| attempt | attempt | アテンプト | integer | ○ | ||||
| teacher_name | teacher_name | 先生名 | varchar | ○ |
user_lectures表
| 列名 | PK | FK | カラム名 | 内容 | 型 | 制約 | 非NULL | デフォルト |
|---|---|---|---|---|---|---|---|---|
| user_id | ○ | ○ | user_id | ユーザID | varchar | ○ | ||
| lecture_id | ○ | ○ | lecture_id | 問題集ID | integer | ○ | ||
| attempt | ○ | attempt | アテンプト | integer | ○ | |||
| start_timestamp | start_timestamp | 開始タイムスタンプ | timestamp | ○ | ||||
| end_timestamp | end_timestamp | 終了タイムスタンプ | timestamp | ○ | ||||
| total | total | 合計点 | integer | ○ | ||||
| correct | correct | 正解数 | integer | ○ | ||||
| verify_code | verify_code | 検証コード | varchar | ○ |
users表
| 列名 | PK | FK | カラム名 | 内容 | 型 | 制約 | 非NULL | デフォルト |
|---|---|---|---|---|---|---|---|---|
| user_id | ○ | user_id | ユーザID | varchar | ○ | |||
| hashed_password | hashed_password | ハッシュ化パスワード | varchar | ○ | ||||
| is_teacher | is_teacher | 先生フラグ | boolean | ○ | ||||
| department | department | 学科 | varchar | ○ | ||||
| entrance_year | entrance_year | 入学年 | integer | ○ | ||||
| class_number | class_number | クラス番号 | integer | ○ | ||||
| last_name | last_name | 苗字 | varchar | ○ | ||||
| ai_growth | ai_growth | AI成長データ | json | ○ |