データベース

「データベース」は、様々なデータを整理された状態で格納しておく場所や仕組みのことです。

WordPressでは、投稿データやユーザーデータ、コメントデータ、設定データなどを「MySQL」というデータベースで管理しています。

それぞれのデータは「テーブル」という縦列(列)と横列(行)のある表として保管されます。(Excelのシートのようなものです)

WordPressのデータベース構造 (開発者向け)

WordPressのデータベース構造は「データベース構造 - WordPress Codex 日本語版」「Database Description « WordPress Codex」に記載されています。公式情報として詳細に記載されておりわかりづらい部分がありますが、大雑把に、重要データ以外を省いた最低限の構造としてとらえると下記のようになります。

データ同士を繋ぐ線は関連を示しており、例えば「1人のユーザーが複数の投稿データを投稿している(紐付いている)」「1つの投稿に複数のコメントが紐付いている」のような意味があります。

※ 投稿には図に記載のある通り、通常の投稿、固定ページ、カスタム投稿、添付ファイル情報(実際のファイル以外の情報)、リビジョン(投稿の変更履歴)がすべて格納されています。
※ コメントは内部的にはログインユーザー以外が投稿したコメントはユーザーIDが0のユーザーが投稿したコメントとして扱われています。
※ 「ターム」はカテゴリーやタグといった分類(タクソノミー)内の1区分で、「カテゴリー」などに登録した「読書」「映画」「音楽」「その他」などがタームの1データにあたります。(後述)

メタ情報

それぞれのデータには「メタ情報」と呼ばれる基本データとは別のサブデータを保管する部分があります。このテーブルは「wp_postmeta」「wp_usermeta」のように「基本データ名 + meta」という名前になっていて、WordPress 4.6時点では4つあります。(タームのメタ情報用の wp_termmeta はWordPress 4.2で追加されました)

※ 図に記載してあるとおり、wp_postmeta にはカスタムフィールドが保管されています。

基本データ + メタ情報、という構造になっているため、独自情報などを追加するなどのカスタマイズがとてもしやすくなっているのがWordPressの特長のひとつです。

とても技術的な補足: この方式は有名な技術書「SQLアンチパターン」で避けるべきものとして紹介されている、「Entity Attribute Value」(EAV)パターンそのものです。ただ、WordPressのデータベース構造がこの形になっていなければ「投稿にカスタムフィールドを追加したい」「ユーザー情報に独自情報を追加したい」と思っても実現するのがかなり面倒になっていたと思います…

ターム

最後はタームです。前述したとおり、タームはカテゴリーやタグといった分類(タクソノミー)内の1区分で、「カテゴリー」などに登録した「読書」「映画」「音楽」「その他」などがタームの1データにあたります。

1つの投稿に複数のターム(カテゴリーなどの区分)を設定できる、また逆に1つのタームは複数の投稿に紐付けられる、というのが2つのテーブルだけでは実現できない(最低もう1つ連携テーブルが必要)こともあり、投稿とタームを繋ぐ間には2つのテーブルがあります。1つはタームがどのタクソノミーに所属しているかを保持する「wp_term_taxonomy」、もう1つは投稿にどのタームを設定されているかの情報を保持する「wp_term_relationshops」です。

wp_term_taxonomyは1つのタームに対して複数のデータができることはほとんど無いと思いますので、2つは1つのテーブルとしてとらえたほうがよいかもしれません。

WordPressのテーブルの一覧 (開発者向け)

WordPressのテーブルは下記のとおりです。

No. テーブル名 保管しているデータ
1 wp_posts 投稿データ
2 wp_postmeta 投稿のメタ情報 (カスタムフィールドなど)
3 wp_terms ターム
4 wp_termmeta タームのメタ情報
5 wp_term_taxonomy タームがどのタクソノミーに所属しているかの情報 / タームの説明 / ターム同士の親子関係
6 wp_term_relationships 投稿にどのタームが設定されているかの情報
7 wp_comments コメントデータ
8 wp_commentmeta コメントのメタ情報
9 wp_users ユーザーデータ
10 wp_usermeta ユーザーのメタ情報
11 wp_options 各種設定情報 (サイトタイトルなど)
12 wp_links 外部リンクデータ

※ wp_linksはもともとWordPressの昔のバージョンにあったリンク集を作る機能で利用されていたテーブルですが、現在は標準機能として提供されていないため標準では使用されていません。

WordPressのテーブル同士の関連列 (開発者向け)

WordPressのテーブルの関連列は下記のとおりです。(自力でSQLを作成して各テーブルをJOINする場合などに参考になる早見表です)

No. 主テーブル名 主列名 関連テーブル名 関連列名
1 wp_posts ID wp_postmeta post_id
wp_comments post_id
wp_term_relationships object_id
2 wp_terms term_id wp_term_taxonomy term_id
3 wp_term_taxonomy term_taxonomy_id wp_term_relationships term_taxonomy_id
4 wp_comments comment_ID wp_commentmeta comment_id
5 wp_users user_id wp_usermeta user_id
wp_comments user_id

 

 

用語集: 索引
ABCDE
FGHIJ
KLMNO
PQRST
UVWXY
Z