DatabaseSpecification » 履歴 » バージョン 5

バージョン 4 (aoki yuji, 2016/05/01 15:01) → バージョン 5/9 (aoki yuji, 2016/05/01 15:05)

h1. データベース仕様

SQLiteにて下記のデータベースを定義し、PHPから利用します。

{{>toc}}

----

h2. WhiskyExaminationデータベース

h3. Questionテーブル

問題集に相当するテーブル。

| 列名 | 型 | 属性 | 説明 |
| id | 整数 | serial | 問題の識別子 |
| question | 文字列 | | 問題文 |
| correct | 文字列 | | 正解となる選択肢群。JSONの配列形式。ex) ["answer1", "answer2", "answer3"] |
| incorrect | 文字列 | | 不正解となる選択肢群。JSONの配列形式。ex) ["answer1", "answer2", "answer3"] |

h3. Accountテーブル

ユーザごとの認証情報を記録するテーブル。

| 列名 | 型 | 属性 | 説明 |
| sid | 整数 | serial | アカウントの内部的識別子。 |
| id | 文字列 | unique | アカウントの識別子。ユーザが指定する任意の文字列。ex. g0947424 |
| hash | 文字列 | | パスワードのハッシュ値。 |
| firstname | 文字列 | | ユーザの名前。ex. 太郎 |
| lastname | 文字列 | | ユーザの苗字。ex. 山田 |
| permission | 文字列 | | ユーザの権限種別。「normal」「admin」 |
| memo | 文字列 | | 備考欄 |

h3. *****テーブル

ユーザごとの学習状況/得意・苦手把握/etc... を記録するテーブル。

| 列名 | 型 | 属性 | 説明 |
| T.B.D. | | | |

---

h3. ユーザ数×問題数のレコードを持つテーブル(傾向管理)

| 列名 | 型 | 属性 | 説明 |
| シリアルID | 整数 | serial | システムが一意に払い出す値。ユーザと問題の総当たり数だけ生成される。 |
|
ユーザSID | 整数 | | ユーザの識別子 |
| 問題番号 | 整数 | | 問題の識別子 |
| 正当回数 | 整数 | | ユーザが問題を正答した回数 |
| 誤答回数 | 整数 | | ユーザが問題を誤答した回数 |
| ランク | 整数 | | ランクは問題抽出アルゴリズムに従い随時更新される |

h3.


問題が1回解答されたら1レコード生成するテーブル(履歴管理)

| 列名 | 型 | 属性 | 説明 |
| シリアルID | 整数 | serial | システムが一意に払い出す値。問題が1回解答されたら1つ値を払い出す。連番を想定。 |
| ユーザSID | 整数 | | ユーザの識別子 |
| 日付 | 文字列 | | 問題が解答された日付 |
| 問題番号 | 整数 | | 問題の識別子 |
| 正誤 | 整数 | | 正答の場合:1 誤答の場合:0 |

---

h3. 問題抽出アルゴリズムの考え方

| 列名 | 型 | 属性 | 説明 |
| ランク | 正答率(%) | 出題率(%) | 問題抽出個数(コ) |
| 5 | 100-81 | 10 | 1 |
| 4 | 80-61 | 30 | 3 |
| 3 | 60-41 | 50 | 5 |
| 2 | 40-21 | 70 | 7 |
| 1 | 20-0 | 90 | 9 |

→問題抽出個数に従い出題問題候補リストを生成する
 リストをシャッフルし1番最初の問題を取り出し出題する。

ユーザ数×問題数のレコードを持つテーブル(傾向管理)
ユーザSID
問題番号
正当回数
誤答回数
ランク

問題が1回解答されたら1レコード生成するテーブル(履歴管理)
シリアルID
ユーザSID
日付
問題番号
正誤