[[PSSdev/データベース仕様書]]

#contents

* データベース情報 [#h44485fb]

** version [#n1ad2878]

データベースのバージョン情報

| version | subversion |
|DB のバージョン番号|DB のサブバージョン番号|

:DB のバージョン|"7"〜
:DB のサブバージョン番号|"1"〜

 CREATE TABLE version (
   version INTEGER NOT NULL,
   subversion INTEGER NOT NULL
 )

| version | subversion | 備考 |
| 7 | 1 | 初期リリース |
| 7 | 2 | memory_rate テーブル追加 |


----

* 問題集データベース [#i3617f5e]

|''テーブル名''|''内容''|''PRIMARY KEY への NULL autoimcrement 挿入''|
|question|問題とその内容|○|
|element_info|問題集IDやフォルダIDと、問題集名、作成日、更新日、その他の情報|○|
|folder|問題集やフォルダとそれが含まれているフォルダの対応表|×|
|section|問題集と問題|×|

** question [#fe4034d5]

問題データ

|qid|question|answer|hint|description|wavfilename|pronounce|mode|ctime|utime|ext1|ext2|ext3|ext4|ext5|
|問題ID|問題文|正解文|ヒント|説明文|WAV ファイル|発音記号|学習可能モード|作成時刻|更新時刻|予約項目1(URL)|予約項目2|予約項目3|予約項目4|予約項目5|

:mode|「学習可能モード」がフラグとして格納される。LSB が mode=0 である

 CREATE TABLE question (
   qid INTEGER PRIMARY KEY,
   question TEXT NOT NULL,
   answer TEXT NOT NULL,
   hint TEXT NOT NULL,
   description TEXT NOT NULL,
   wavfilename TEXT NOT NULL,
   pronounce TEXT NOT NULL,
   mode INTEGER NOT NULL,
   ctime INTEGER NOT NULL,
   utime INTEGER NOT NULL,
   ext1 TEXT NOT NULL,
   ext2 TEXT NOT NULL,
   ext3 TEXT NOT NULL,
   ext4 TEXT NOT NULL,
   ext5 TEXT NOT NULL
 )

 CREATE INDEX question_answer ON question( answer )

- Ver.8.1 以降では、ext1 は URL として使用。



** element_info [#v34b881a]

フォルダ、問題集、バインダーの情報

|id|type|name|author|writer|description|ctime|utime|ext1|ext2|
|問題集ID、フォルダID、バインダーID|フォルダ(0)or問題集(1)orバインダー(2)の区別|名前|著作権者|作成者|説明文|作成日|更新日|予約項目1|予約項目2|

 CREATE TABLE element_info (
   eid INTEGER PRIMARY KEY,
   type INTEGER NOT NULL,
   name TEXT NOT NULL,
   author TEXT NOT NULL,
   writer TEXT NOT NULL,
   description TEXT NOT NULL,
   ctime INTEGER NOT NULL,
   utime INTEGER NOT NULL,
   ext1 TEXT NOT NULL,
   ext2 TEXT NOT NULL
 )

** folder [#he48822f]

フォルダ構成

| eid | fid |
|問題集IDまたはフォルダID|id が含まれる先のフォルダ(親フォルダ)|

 CREATE TABLE folder (
   eid INTEGER PRIMARY KEY NOT NULL REFERENCES element_info(eid),
   fid INTEGER NOT NULL REFERENCES element_info(eid)
 )

ルートフォルダの fid には 0 を用いる。

** section [#f9a5b50c]

問題集

| sid | qid |
|問題集ID|問題ID|

 CREATE TABLE section (
   sid INTEGER NOT NULL REFERENCES element_info(eid),
   qid INTEGER NOT NULL REFERENCES question(qid),
   UNIQUE( sid, qid )
 )

----

* 履歴データベース [#qff815fb]

|''テーブル名''|''内容''|''PRIMARY KEY への NULL autoimcrement 挿入''|
|user_info|各ユーザの情報|○|
|log_id|ユーザと問題集、モードの組に与えられる履歴ID|○|
|question_log|各ユーザの各問題に対する履歴情報|×|
|looped_questions|各ユーザの各問題集における今回のループで学習済み問題群|×|
|section_log|各ユーザの各問題集に対する履歴情報|×|
|daily_log|ある一回の学習に関する情報|○|
|daily_question_log|ある一回の学習で学習した問題の履歴|×|

** user_info [#ye3621a2]

各ユーザの情報

| uid | name |
|ユーザID|名前|

 CREATE TABLE user_info (
   uid INTEGER PRIMARY KEY,
   name TEXT NOT NULL UNIQUE
 )

** log_id [#l413f742]

ユーザと問題集、モードの組に与えられる履歴ID

| lid | uid | eid | mid |
|履歴ID|ユーザID|問題集ID|モードID|

 CREATE TABLE log_id (
   lid INTEGER PRIMARY KEY REFERENCES log_id(lid),
   uid INTEGER NOT NULL,
   eid INTEGER NOT NULL,
   mid INTEGER NOT NULL,
   UNIQUE( uid, eid, mid )
 )


** question_log [#nccaf4a2]

各ユーザの各問題に対する履歴情報

|qid|uid|mid|nc1|ni1|nc2|ni2|nc1pm|ni1pm|nc2pm|ni2pm|LastStudyTime|LastMistakeTimeOnFirstReply|ReplySec|ext1|ext2|
| 問題ID | ユーザID | モードID | 正解数 | 不正解数 | 正解数(再回答) | 不正解数(再回答) | 正解数の調整値 | 不正解数の調整値 | 正解数(再回答)の調整値 | 不正解数(再回答)の調整値 | 最終学習日時 | 最終不正解日時 | 学習時間 | 予約項目1 | 予約項目2 |

 CREATE TABLE question_log (
   qid INTEGER NOT NULL REFERENCES question(qid),
   uid INTEGER NOT NULL REFERENCES user_info(uid),
   mid INTEGER NOT NULL,
   nc1 INTEGER NOT NULL,
   ni1 INTEGER NOT NULL,
   nc2 INTEGER NOT NULL,
   ni2 INTEGER NOT NULL,
   nc1pm INTEGER NOT NULL,
   ni1pm INTEGER NOT NULL,
   nc2pm INTEGER NOT NULL,
   ni2pm INTEGER NOT NULL,
   LastStudyTime INTEGER NOT NULL,
   LastMistakeTimeOnFirstReply INTEGER NOT NULL,
   ReplySec INTEGER NOT NULL,
   ext1 TEXT NOT NULL,
   ext2 TEXT NOT NULL,
   PRIMARY KEY(qid,uid,mid)
 )

** looped_questions [#d36ee021]

各ユーザの各問題集における今回のループで学習済み問題群

| lid | qid |
|履歴ID|問題ID|

 CREATE TABLE looped_questions (
   lid INTEGER NOT NULL REFERENCES log_id(lid),
   qid INTEGER NOT NULL REFERENCES question(id)
 )

** element_log [#he1eb57e]

各ユーザの各問題集に対する履歴情報

|lid|FirstReplyDate|nRun|TotalReplySec|TotalStrokes|nAccomplish|ext1|ext2|
|履歴ID|初回学習時刻|学習回数|総学習時間|総ストローク数|達成回数|予約項目1|予約項目2|

 CREATE TABLE element_log (
   lid INTEGER PRIMARY KEY NOT NULL REFERENCES log_id(lid),
   FirstReplyDate INTEGER NOT NULL,
   nRun INTEGER NOT NULL,
   TotalReplySec INTEGER NOT NULL,
   TotalStrokes INTEGER NOT NULL,
   nAccomplish INTEGER NOT NULL,
   ext1 TEXT NOT NULL,
   ext2 TEXT NOT NULL
 )


** daily_log [#u893bcf5]

ある一回の学習に関する情報

|did|lid|StartTime|EndTime|Strokes|ext1|ext2|
|デイリーID|履歴ID|開始時刻|終了時刻|ストローク数|予約項目1|予約項目2|

 CREATE TABLE daily_log (
   did INTEGER PRIMARY KEY,
   lid INTEGER NOT NULL REFERENCES log_id(lid),
   StartTime INTEGER NOT NULL,
   EndTime INTEGER NOT NULL,
   Strokes INTEGER NOT NULL,
   ext1 TEXT NOT NULL,
   ext2 TEXT NOT NULL
 )

** daily_question_log [#qeb89ca2]

ある一回の学習で学習した問題の履歴

 CREATE TABLE daily_question_log (
   did INTEGER NOT NULL REFERENCES daily_log(did),
   qid INTEGER NOT NULL REFERENCES question(id),
   nc1 INTEGER NOT NULL,
   ni1 INTEGER NOT NULL,
   nc2 INTEGER NOT NULL,
   ni2 INTEGER NOT NULL,
   ReplySec INTEGER NOT NULL,
   ext1 TEXT NOT NULL,
   ext2 TEXT NOT NULL,
   PRIMARY KEY( did, qid )
 )

* Ver.7.1 追加テーブル [#tccbbc9c]

** memory_rate [#haa54a4f]

忘却度管理テーブル

 CREATE TABLE memory_rate (
   qid INTEGER NOT NULL REFERENCES question(qid),
   uid INTEGER NOT NULL REFERENCES user_info(uid),
   rate INTEGER NOT NULL,
   level INTEGER NOT NULL,
   l1_time INTEGER NOT NULL,
   l2_time INTEGER NOT NULL,
   l3_time INTEGER NOT NULL,
   l4_time INTEGER NOT NULL,
   l5_time INTEGER NOT NULL,
   l6_time INTEGER NOT NULL,
   l7_time INTEGER NOT NULL,
   l8_time INTEGER NOT NULL,
   l9_time INTEGER NOT NULL,
   l10_time INTEGER NOT NULL,
   PRIMARY KEY( qid, uid )
 )

: rate |レベルが level になったときのレート.
: level |現在のレベル
: l1_time 〜 l10_time| level1〜level10 の各レベルになったときの時刻.~
level よりも少ない level の time が 0 の場合は,そのレベルをスキップしたことを表す.~
0 の場合はそのレベルに達していない.


* Ver.8.2 追加テーブル [#tccbbc9c]

** section_trash [#haa54a4f]

問題のゴミ箱

*** スキーマ [#w481c984]

| sid | qid | delete_date |
|元の問題集ID|問題ID|削除日時|

 CREATE TABLE section_trash (
   sid INTEGER NOT NULL REFERENCES section(sid),
   qid INTEGER NOT NULL REFERENCES question(qid),
   delete_date INTEGER NOT NULL,
   UNIQUE( sid, qid )
 )

*** 解説 [#mf360ead]

「問題のゴミ箱」の実装用テーブル。

ある問題集 sid にある、問題 qid を削除した場合、section sid からは qid が削除され、このテーブル(section_trash) に [sid,qid,delete_date] が追加される。


* Ver.8.3 追加テーブル [#b493f5a7]

** user_property [#oc51ffb6]

ユーザの追加情報

*** スキーマ [#w481c984]

| uid | sl_folder | sl_section | option_filename | mid | ext1 | ext2 | ext3 | ext4 | ext5 | 
| uid | sl_folder | sl_section | option_filename | mid | ext1 | ext2 | ext3 | ext4 | ext5 |
|ユーザID|スマート学習用フォルダID|スマート学習リストの問題集ID|オプションファイルのファイル名|デフォルトの学習モード|予備データ1|予備データ2|予備データ3|予備データ4|予備データ5|

 CREATE TABLE user_property (
   uid INTEGER PRIMARY KEY REFERENCES user_info(uid),
   sl_folder INTEGER NOT NULL REFERENCES element_info(eid),
   sl_section INTEGER NOT NULL REFERENCES element_info(eid),
   option_filename TEXT NOT NULL,
   mid INTEGER NOT NULL,
   ext1 TEXT NOT NULL,
   ext2 TEXT NOT NULL,
   ext3 TEXT NOT NULL,
   ext4 TEXT NOT NULL,
   ext5 TEXT NOT NULL
 )

*** 項目 [#kbfbf48c]

:uid |ユーザID

:sl_folder |このユーザのスマート学習用フォルダ

:sl_section |このユーザのスマート学習用問題集ID

:option_filename |このユーザに切り替えたときに適用されるオプションファイル名。~
オプションファイル格納フォルダからの相対パス名とする。~
通常はファイル名(例:default.ini)のみ。~
切り替え先なしの場合は、""とする。

:mid |デフォルトの学習モードID。~
このユーザに切り替えたときにこの学習モードに変更する。~
「切り替えない」場合の値は、-1 とする。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS