MovableType4(MT4)で使われるMySQLテーブルと各カラムの説明

今さらのMovableType4(MT4)ですが……
どうしても調査せざるを得なくなったので、得た知見を記録しておきます。

どうしても調査せざるを得なくなった理由については別記事にて。
[Qiita - MovableType4(MT4)でウェブページを同一MT内の別ブログに移す](http://qiita.com/Hi_Noguchi/items/a8431a0f012606b0a88e)


# 前提
## MovableTypeって？
数多くある静的CMSのうちの一つです。
[公式サイト](https://www.sixapart.jp/movabletype/)

## 内部で使用されているデータベース
MySQLです。
というわけで、この中身をざっくり見ていきます。


# MT4の各テーブル毎のメモ
## mt_asset
* 画像とかの素材＝アイテムを管理するテーブル

## mt_asset_meta
* 画像とかに設定されるパラメータが入ってくる
* 例： image_width 60 みたいな
* asset_meta_asset_id というカラムがあって、ここに、mt_assetのidが入る
* このテーブルの固有キーが格納されるカラムは存在しない

## mt_association
* 「ユーザーが特定のブログに対してどういうロールを持っているかなどの関連付けを管理するためのもの」

※コメントで @rryu さんから教えていただきました。

## mt_author
* ログインユーザ
* パスワードが暗号化もされずに文字列格納されている……

## mt_author_meta
* 「meta系のテーブルはMT::Authorなどのクラスのカラム定義で型がstring metaのようになっているものの保存に使われます。その他にカスタムフィールドの値の保存などに使われます」

※コメントで @rryu さんから教えていただきました。

## mt_blog
* ブログ管理
* 「ブログ記事」ではない

## mt_blog_meta
* ブログ管理に関連するmeta系テーブル。 mt_author_meta の項を参照。

## mt_category
* ブログ記事とかウェブページとかに設定できる「カテゴリ」管理
* category_blog_id で、どのブログで使われるかを決める

## mt_category_meta
* カテゴリ管理に関連するmeta系テーブル。 mt_author_meta の項を参照。

## mt_comment
* コメント管理
* comment_blog_id と comment_entry_id とで、どれへのコメントかが決まる

## mt_comment_meta
* コメント管理に関連するmeta系テーブル。 mt_author_meta の項を参照。

## mt_config
* MT全体の設定
* 1レコード1カラム内に、改行区切りで大量の設定が書かれている

## mt_entry
* 記事管理
* 「ブログ記事」も「ウェブページ」も、全部このテーブル内で管理されている
* ディレクトリはここで管理されていないらしい……
* 各カラムについて
  * entry_id ：固有キー
  * entry_blog_id ：どのブログ内の記事か
  * entry_authored_on :公開日時（デイトタイム型）
  * entry_atom_id ：固有キーとか色々合成されているフィールド
      * 入力される書式例 ： tag:hoge.com,2017:/blog_name//99.123456
      * 上記例の 2017 にあたる数字は、このレコードの entry_authored_on の year 部分である
      * 上記例の 99 にあたる数字は、このレコードの entry_blog_id である
      * 上記例の 123456 にあたる数字は、このレコードの entry_id である
  * entry_basename ：ファイル名
  * entry_class ：entry または page
      * entry ：ブログ記事
      * page ：ウェブページ
  * entry_title ：タイトル
  * entry_text ：本文
  * entry_excerpt ：要約文？
  * entry_category_id ：カテゴリっぽいけれど実は使われていない。罠。酷い。

## mt_entry_meta
* 記事管理に関連するmeta系テーブル。 mt_author_meta の項を参照。

## mt_field
* カスタムフィールドのフィールド定義
* field_blog_id で、どのブログで使われるかを決める
* field_obj_type で、「ブログ記事」「ウェブページ」などのどこに表示されるか決まる

## mt_fileinfo
* 静的ページのファイル名・保存先ディレクトリなどの管理
* 各カラムについて
  * fileinfo_id ：固有キー
  * fileinfo_archive_type ：よくわからない……
      * 値の例 ：index, Page, Individual, Monthly
  * fileinfo_entry_id ：mt_entryとの外部キー
  * fileinfo_file_path ：サーバ内の絶対path
  * fileinfo_url ：ドメイン以下のファイルpath
  * fileinfo_template_id ：mt_templateとの外部キー
  * fileinfo_templatemap_id ：mt_templatemapとの外部キー

## mt_ipbanlist
* アクセス禁止IPの管理とか

## mt_log
* MTのシステムログ記録用
* かなり巨大に膨れあがるので、後生大事にとっておく必要もなさそう

## mt_notification
* アドレス帳に登録されているメールアドレスに、MTの更新記録などを送信するための管理用
* 内輪向けサイトなら使われることがあるのかな……

## mt_objectasset
* 記事とアイテムとを紐づけるための中間テーブル

## mt_objectscore
* [トピックや記事のお気に入り登録機能](https://www.movabletype.jp/documentation/community/favorites.html) のためのもの

※コメントで @rryu さんから教えていただきました。

## mt_objecttag
* タグ管理
* mt_tag は古い。こちらは新しい。

※コメントで @rryu さんから教えていただきました。

## mt_permission
* mt_author(ユーザ)の権限管理

## mt_placement
* カテゴリと記事とを紐付けるための中間テーブル

## mt_plugindata
* プラグイン管理

## mt_role
* 権限グループ

## mt_session
* セッションデータ
* 定期的に掃除して良いと思われる

## mt_tag
* タグ管理
* こちらは古い。 mt_objecttag が新しい。

※コメントで @rryu さんから教えていただきました。

## mt_tbping
* トラックバック管理

## mt_tbping_meta
* トラックバック管理に関連するmeta系テーブル。 mt_author_meta の項を参照。

## mt_template
* テンプレート管理
* 各カラムについて
  * template_id ：固有キー
  * template_blog_id ：どのブログか
  * template_identifier ： NULL許可という謎のフィールド
  * template_name ：管理画面上で表示される名称
  * template_outfile ：静的ファイルとして出力される場合のファイル名
  * template_text :本文
  * templatetype
      * 値の例 ：index, archive, comment_preview, comment_response, dynamic_error, individual, popup_image, search_results, widget, widgetset...

## mt_template_meta
* テンプレート管理に関連するmeta系テーブル。 mt_author_meta の項を参照。

## mt_templatemap
* テンプレートが静的ファイルに出力される際の形式マスタ的な
* templatemap_archive_type
  * 値の例 ：Category, Individual, Page, Yearly, Monthly...

## mt_touch
* 設定変更をおこなったブログや時間の管理
* これ要るのか……？？

## mt_trackback
* これもトラックバック管理

## mt_ts_exitstatus,  mt_ts_funcmap, mt_ts_job
* 「TheSchwartzというジョブキューで使います。tools/run-periodic-tasks などで使用しています。」
 
※コメントで @rryu さんから教えていただきました。

* つまり、プラグインで作成されたテーブル？ということで、MT4内にデフォルトで存在しているわけではなさそうですね。


# オマケ：MT4 と MT6 との差異
MT6については、以前、別件でザーッと見たことがあるので、その時に知ったことです。

## 概要
* 大枠の変化は無い
* MT6にしか無いテーブルがいくつかある(後述)
* それにともなって、キーとなるidカラムが有ったり無かったり
* つまり、一部テーブル間のリレーションには変更があって、それが大きな影響に繋がり、単純なMT4→MT6インポートでは済まない原因になっている

## MT4にしか無いテーブル
* というのは無い

## MT6にしか無いテーブル
* mt_accesstoken
* mt_author_summary
* mt_entry_rev
* mt_entry_summary
* mt_failedlogin
* mt_filter
* mt_formatted_text
* mt_template_rev

今回、これらについては注記しない。