2004年04月30日

MovableType のデータベーススキーマ

MovableType のデータベースがどういう構造になっているか、少し覗いてみた。
データ構造を理解することで、普段何気なく使っているMTの理解を深めることができた。
データ構造を決めるスキーマは、mt の cgi が含まれているディレクトリにある schemas ディレクトリにある。例えば、MySQL用の文法で書かれた定義が、mysql.dump ファイルにある。
MovableTypeは次の15個のテーブルから構成されていた。

mt_author
ユーザアカウント情報を入れるテーブルである。ユーザごとに1タプルある。ユーザは、author_idかauthor_nameの両方で一意に識別される。

mt_blog
ブログの設定を入れるテーブルである。ブログごとに1タプルある。ブログはblog_idで一意に識別される。

mt_category
カテゴリ情報を入れるテーブルである。カテゴリごとに1タプルある。カテゴリはcategory_idで一意に識別される。カテゴリは必ず1つのブログに属している。

mt_comment
コメント情報を入れるテーブルである。コメントごとに1タプルある。コメントはcomment_idで一意に識別される。コメントは必ず1つのブログと1つのエントリに属している。

mt_entry
エントリ情報を入れるテーブルである。エントリごとに1タプルある。エントリはentry_idで一意に識別される。エントリは必ず1つのブログと1つのユーザに属している。この記事もこのテーブルの1タプルとしてデータベースに格納されている。

mt_ipbanlist
アクセス拒否をする対象となるIPアドレス情報を入れるテーブルである。拒否アドレスごとに1タプルある。拒否アドレスはipbanlist_idで一意に識別される。拒否アドレスは必ず1つのブログに属している。

mt_log
システム全体のログ情報を入れるテーブルである。ログごとに1タプルある。ログはlog_idで一意に識別される。ログイン処理の結果はこのテーブルに保存される。また古いものは削除される。

mt_notification
通知に関する情報を入れるテーブルである。通知先ごとに1タプルある。通知はnotification_idで一意に識別される。通知は必ず1つのブログに属している。

mt_permission
ユーザとブログの権限(許可)に関する情報を入れるテーブルである。ユーザとブログの組み合わせごとに1タプルある。権限はpermission_idで一意に識別される。権限は必ず1つのユーザと1つのブログに属している。

mt_placement
エントリとカテゴリの対応(配置)に関する情報を入れるテーブルである。エントリとブログとカテゴリの組み合わせごとに1タプルある。配置はplacement_idで一意に識別される。配置は必ず1つのエントリと1つのブログと1つのカテゴリに属している。エントリが複数のカテゴリに属せるようにするため、その対応を示すテーブルとして使われている。mt_entryテーブルにもcategory_idを入れるカラムがあるが、こちらは実際には使われていない。

mt_plugindata
プラグインに関する情報を入れるテーブル。plugindata_idで一意に識別される。

mt_template
テンプレートに関する情報を入れるテーブル。テンプレートごとに1タプルある。テンプレートはtemplate_idで一意に識別される。テンプレートは必ず1つのブログに属し、1つの名前を持つ。テンプレートの内容は、template_textというカラムにある。

mt_templatemap
テンプレートの利用に関する情報を入れるテーブル。テンプレートマップごとに1タプルある。
テンプレートマップはtemplatemap_idで一意に識別される。テンプレートマップは必ず1つのブログと1つのテンプレートに属する。テンプレートがどんなURLで公開されるかは、templatemap_file_template というカラムにある。

mt_trackback
トラックパックの受け口に関する情報を入れるテーブル。トラックバックごとに1タプルある。トラックバックはtrackback_idで一意に識別される。トラックバックは必ず1つのブログと1つのエントリと1つのカテゴリに属する。mt-tb.cgi/${trackback_id} がトラックバックを受け付けるURLになる。

mt_tbping
受けたトラックバックの内容に関する情報を入れるテーブル。受けたトラックバックごとに1タプルある。受けたトラックバックはtbping_idで一意に識別される。受けたトラックバックは必ず1つのブログと1つのトラックバックに属する。

以上のデータ構造を元に、Webでデータ交換を行うPerlで書かれたCGIがMovableTypeである。