データベース仕様

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


WhiskyExaminationデータベース

Questionテーブル

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

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

Accountテーブル

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

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

Trendテーブル

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

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

Historyテーブル

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

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

問題抽出アルゴリズム

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

列名 属性 説明
ランク 正答率(%) 出題率(%) 問題抽出個数(コ)
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