MovableType7(MT7)のテーブル構造

# 前提

## MovableTypeって？

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

## MT7のver.について

7.α.0.2（2017/11/24 時点）

## 以前に書いた記事（MT4）

[MovableType4(MT4)で使われるMySQLテーブルと各カラムの説明](https://qiita.com/Hi_Noguchi/items/f205370277b428d4cbfd)
MT4にはあってMT7にはないテーブル、また、その逆パターンもあります。

## 「要調査」となっている項目

調査しないとなー、と思っているものです。それ以外の項目も含めて、この記事については、色々と分かり次第、随時更新して参ります。

## 内部で使用されているデータベース

MySQL です。
というわけで、この中身をざっくり見ていきます。


# mt

## 注
- データベース名が mt です
- 全 55 テーブル
- 個別の各テーブルは以下の通り

## mt_accesstoken
- 要調査
- accesstoken_session_id という id カラムがあるので、 mt_session に関連するらしい

## mt_asset
- asset （アイテム。画像とか）の管理
- asset_blog_id で、どのブログで使われるかを決める

## mt_asset_meta
- アイテム管理に関連するmeta系テーブル。 mt_author_meta の項を参照

mt_association
- 「ユーザーが特定のブログに対してどういうロールを持っているかなどの関連付けを管理するためのもの」（ @rryu さん曰く）

## mt_author
- ログインユーザ
- 良かった、ちゃんとパスワードが暗号化されている……（MT4では暗号化されていなかった）

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

## mt_author_summary
- 要調査

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

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

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

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

## mt_category_set
- 要調査
- category_set_blog_id で、どのブログで使われるかを決める

## mt_cd
- cd は content_data の略っぽい
- cd_blog_id で、どのブログで使われるかを決める
- cd_content_type_id で、どの Content Types で使われるかを決める
- cd_data にJSON形式で諸々の値が格納されている（ @rryu さん、コメントありがとうございました）
- cd_data は mediumblob 型。このカラムを認識しないクライアントソフトがあるようです

## mt_cd_meta
- content_data に関連するmeta系テーブル。 mt_author_meta の項を参照

## mt_cd_rev
- 要調査
- cd_rev_cd_id が、mt_cd の cd_id なので、mt_cd についての revision 管理？

## mt_cf
- Content Types の各フィールド定義情報と思われる
- cf は content_fields の略っぽい
- cf_blog_id で、どのブログで使われるかを決める
- cf_content_type_id で、どの Content Types で使われるかを決める
- cf_related_content_type_id ？　要調査

## mt_cf_idx
- mt_cd, mt_cf, mt_content_type とを結びつけるインデックス用のテーブルっぽい（ @rryu さん、コメントありがとうございました）
- cf_idx は content_field_index の略で間違いなさそう
- cf_idx_content_data_id ： mt_cd の id
- cf_idx_content_field_id ： mt_cf の id
- cf_idx_content_type_id ： mt_content_type の id

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

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

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

## mt_content_type
- Content Types の親
- content_type_blog_id で、どのブログで使われるかを決める
- 何でこれだけ略していないのか……

## mt_entry
- 記事管理
- 「ブログ記事」も「ウェブページ」も、全部このテーブル内で管理されている
- ディレクトリはここで管理されていないらしい……
- 各カラムについて（抜粋）
  - entry_id ：固有キー
  - entry_blog_id ：どのブログ内の記事か
  - entry_authored_on ：公開日時（datetime型）
  - 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 ：本文
- 他のカラムについてはこれから要調査

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

## mt_entry_rev
- 要調査
- entry_rev_entry_id が、mt_entry の entry_id なので、mt_entry についての revision 管理？

## mt_entry_summary
- 要調査
- entry_summary_vinteger_id は、何の id ？

## mt_failedlogin
- ログイン失敗してアカウントロックされた記録

## 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_filter
- 要調査
- filter_blog_id で、どのブログで使われるかを決める
- filter_author_id は、どのユーザーが作ったか？

## mt_formatted_text
- 要調査
- formatted_text_blog_id で、どのブログで使われるかを決める

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

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

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

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

## mt_objectcategoy
- 要調査
- objectcategory_blog_id, objectcategory_category_id, objectcategory_cf_id, objectcategory_object_id … というように id が4つあるので、何らかの中間テーブル？

## mt_objectscore
- トピックや記事のお気に入り登録機能 のためのもの（ @rryu さん曰く）

## mt_objecttag
- タグ管理

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

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

## mt_plugindata
- プラグイン管理

## mt_role
- 権限グループ

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

## mt_tag
- タグ管理
- こちらは古い。 mt_objecttag が新しい（ @rryu さん曰く）
- MT7なのにまだ残ってる？　後方互換のため？

## 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_template_rev
- 要調査
- template_rev_template_id が、mt_template の template_id なので、mt_template についての revision 管理？

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

## mt_touch
- 要調査
- touch_blog_id で、どのブログで使われるかを決める
- touch_object_type の値が、 author, page, template, folder, category

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

## mt_ts_error
- 主キー：ts_error_error_time（タイムスタンプ）

## mt_ts_exitstatus, mt_ts_funcmap, mt_ts_job
- 「TheSchwartzというジョブキューで使います。tools/run-periodic-tasks などで使用しています」（ @rryu さん曰く）
- デフォルトで存在しているんですね


# MT4～7におけるテーブルの差

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

## MT6（あるいはMT5）で追加されたテーブル
- mt_accesstoken
- mt_author_summary
- mt_entry_rev
- mt_entry_summary
- mt_failedlogin
- mt_filter
- mt_formatted_text
- mt_template_rev

## MT7で追加されたテーブル
- mt_cd
- mt_cd_meta
- mt_cd_rev
- mt_cf
- mt_cf_idx
- mt_content_types