WordPressデータベース構造に僕はファーストコンタクトした

WordPressのデータベース構造を初めて確認してみたので記録しておきます。

ちなみに自分の知識レベルは以下のような状況です。

  • WordPressをブログユーザとしてしか使用した事がない
  • 業務でもWordPressでの開発案件も経験がない

先ず、先日ローカルに構築したWordPress開発環境を引っ張り出して中身を見てみたいと思います。↓環境

WordPressをローカル開発環境内にVirtualBoxとVagrantを使用して構築する手順まとめ(windows・mac)

スポンサーリンク

WordPressのテーブル確認

mysqlでテーブル一覧を見てみました。

mysql> show tables;
+-----------------------------+
| Tables |
+-----------------------------+
| wp2_commentmeta |
| wp2_comments |
| wp2_links |
| wp2_options |
| wp2_postmeta |
| wp2_posts |
| wp2_term_relationships |
| wp2_term_taxonomy |
| wp2_terms |
| wp2_usermeta |
| wp2_users |
+-----------------------------+
11 rows in set (0.00 sec)

11個しかないんですね。

なんかイメージでは、もっともっと量産されまくって訳わからないカオスな事になっているような気がしていたのですが、見通しやすそうな気がしてきました。

上から順に1つずつテーブルを解析してみたいと思います。

コメントメタテーブル

mysql> desc wp2_commentmeta;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| meta_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| comment_id | bigint(20) unsigned | NO | MUL | 0 | |
| meta_key | varchar(255) | YES | MUL | NULL | |
| meta_value | longtext | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.04 sec)

記事に対するコメントのメタデータが入っているようです。

実際に中身を見ると、コメントのメタデータと思われるものが入っていました。

コメントテーブル

mysql> desc wp2_comments;
+----------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+---------------------+------+-----+---------------------+----------------+
| comment_ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| comment_post_ID | bigint(20) unsigned | NO | MUL | 0 | |
| comment_author | tinytext | NO | | NULL | |
| comment_author_email | varchar(100) | NO | MUL | | |
| comment_author_url | varchar(200) | NO | | | |
| comment_author_IP | varchar(100) | NO | | | |
| comment_date | datetime | NO | | 0000-00-00 00:00:00 | |
| comment_date_gmt | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| comment_content | text | NO | | NULL | |
| comment_karma | int(11) | NO | | 0 | |
| comment_approved | varchar(20) | NO | MUL | 1 | |
| comment_agent | varchar(255) | NO | | | |
| comment_type | varchar(20) | NO | | | |
| comment_parent | bigint(20) unsigned | NO | MUL | 0 | |
| user_id | bigint(20) unsigned | NO | | 0 | |
+----------------------+---------------------+------+-----+---------------------+----------------+
15 rows in set (0.00 sec)

記事に対するコメントデータが入っているようです。

実際に中身を見ると、確かにコメントデータ(名前、URL、コメント、日付など)が入っていました。

リンクテーブル

mysql> desc wp2_links;
+------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------------------+----------------+
| link_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| link_url | varchar(255) | NO | | | |
| link_name | varchar(255) | NO | | | |
| link_image | varchar(255) | NO | | | |
| link_target | varchar(25) | NO | | | |
| link_description | varchar(255) | NO | | | |
| link_visible | varchar(20) | NO | MUL | Y | |
| link_owner | bigint(20) unsigned | NO | | 1 | |
| link_rating | int(11) | NO | | 0 | |
| link_updated | datetime | NO | | 0000-00-00 00:00:00 | |
| link_rel | varchar(255) | NO | | | |
| link_notes | mediumtext | NO | | NULL | |
| link_rss | varchar(255) | NO | | | |
+------------------+---------------------+------+-----+---------------------+----------------+
13 rows in set (0.00 sec)

リンクデータを管理出来るテーブルだったようですが、現在初期設定では使用しないテーブルのようです。Link Managerというプラグインを入れると使用出来るようです。

実際に中身を見ると、自分のテーブルは何も設定していないので空っぽでした。

オプションテーブル

mysql> desc wp2_options;
+--------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+----------------+
| option_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| option_name | varchar(64) | NO | UNI | | |
| option_value | longtext | NO | | NULL | |
| autoload | varchar(20) | NO | | yes | |
+--------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

いろんな情報が入っているテーブルのようです。

実際に中身を見ると、めちゃくちゃな事になっていまして件数もそれなりにあります。プラグインの設定情報も入っているとの事で、確かに自分の投稿の文字などではなく、設定データのようです。

ポスト(投稿)メタテーブル

mysql> desc wp2_postmeta;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| meta_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| post_id | bigint(20) unsigned | NO | MUL | 0 | |
| meta_key | varchar(255) | YES | MUL | NULL | |
| meta_value | longtext | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

ポスト(投稿)のメタデータのようです。

実際に中身を見ると、相当の件数があり、自分の投稿のメタデータと思われるもの、良く分からないもの色々入っていました。

ポスト(投稿)テーブル

mysql> desc wp2_posts;
+-----------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------------------+----------------+
| ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| post_author | bigint(20) unsigned | NO | MUL | 0 | |
| post_date | datetime | NO | | 0000-00-00 00:00:00 | |
| post_date_gmt | datetime | NO | | 0000-00-00 00:00:00 | |
| post_content | longtext | NO | | NULL | |
| post_title | text | NO | | NULL | |
| post_excerpt | text | NO | | NULL | |
| post_status | varchar(20) | NO | | publish | |
| comment_status | varchar(20) | NO | | open | |
| ping_status | varchar(20) | NO | | open | |
| post_password | varchar(20) | NO | | | |
| post_name | varchar(200) | NO | MUL | | |
| to_ping | text | NO | | NULL | |
| pinged | text | NO | | NULL | |
| post_modified | datetime | NO | | 0000-00-00 00:00:00 | |
| post_modified_gmt | datetime | NO | | 0000-00-00 00:00:00 | |
| post_content_filtered | longtext | NO | | NULL | |
| post_parent | bigint(20) unsigned | NO | MUL | 0 | |
| guid | varchar(255) | NO | | | |
| menu_order | int(11) | NO | | 0 | |
| post_type | varchar(20) | NO | MUL | post | |
| post_mime_type | varchar(100) | NO | | | |
| comment_count | bigint(20) | NO | | 0 | |
+-----------------------+---------------------+------+-----+---------------------+----------------+
23 rows in set (0.00 sec)

ポスト(投稿)データです。明らかに。

実際に中身を見ると、自分がこれまで投稿した内容が入っていました。また、同じ記事が何件もあり、もしかすると、保存する都度にここへINSERTされていっているのではと思いました。こまめに保存していますので、ちょっと気を付けた方が良いのかなと考えさせられました。わかり次第追記します。

と書きつつ無意識に「。」でctrl + s ・・・。

タームテーブル

mysql> desc wp2_terms;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| term_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(200) | NO | MUL | | |
| slug | varchar(200) | NO | MUL | | |
| term_group | bigint(10) | NO | | 0 | |
+------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

カテゴリ・タグの語句を管理するテーブルのようです。

実際に中身を見ると、カテゴリ・タグのURLを決めているマスタのようです。カテゴリは「スラッグ」で別名にそういうのが定義されていました。例えばこのブログだと「書籍」カテゴリは「book」というURLです。それを定義しています。

タームリレーション(関連)テーブル

mysql> desc wp2_term_relationships;
+------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------+-------+
| object_id | bigint(20) unsigned | NO | PRI | 0 | |
| term_taxonomy_id | bigint(20) unsigned | NO | PRI | 0 | |
| term_order | int(11) | NO | | 0 | |
+------------------+---------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

ターム分類テーブルとオブジェクト(ポスト・リンク)の紐づけらしいです。

実際に中身を見ると、オブジェクトとターム分類IDの関連づけだけのデータでした。

ターム分類テーブル

mysql> desc wp2_term_taxonomy;
+------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------+----------------+
| term_taxonomy_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| term_id | bigint(20) unsigned | NO | MUL | 0 | |
| taxonomy | varchar(32) | NO | MUL | | |
| description | longtext | NO | | NULL | |
| parent | bigint(20) unsigned | NO | | 0 | |
| count | bigint(20) | NO | | 0 | |
+------------------+---------------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)

リンクの分類上の語句データを格納らしいです。

実際に中身を見ると、タームIDと「category」などと入っていて、用途がわからないデータでした。わかり次第別途追記します。

ユーザテーブル

mysql> desc wp2_users; 
+---------------------+---------------------+------+-----+---------------------+----------------
| Field | Type | Null | Key | Default | Extra 
+---------------------+---------------------+------+-----+---------------------+----------------
| ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment 
| user_login | varchar(60) | NO | MUL | | 
| user_pass | varchar(64) | NO | | | 
| user_nicename | varchar(50) | NO | MUL | | 
| user_email | varchar(100) | NO | | | 
| user_url | varchar(100) | NO | | | 
| user_registered | datetime | NO | | 0000-00-00 00:00:00 | 
| user_activation_key | varchar(60) | NO | | | 
| user_status | int(11) | NO | | 0 | 
| display_name | varchar(250) | NO | | | 
+---------------------+---------------------+------+-----+---------------------+----------------
10 rows in set (0.00 sec)

WordPressに登録されたユーザテーブルです。

実際に中身を見ると、初期設定時に登録したユーザデータが入っていました。

終わり。中身を見て、

ターム分類が何が入っているのか良くわからなかったものの、たいしたデータは入っていないような感じです。まだそれほどプラグインなどを入れていないからだと思うのですが。

とりあえず、データベースの中身を見るというファーストコンタクトは果たせました。

今後、データベースのカラム拡張などが出来るのか、どこまでやって良いのかなど、調べていきたいと思います。完

今回参考にさせていただいたサイト様

こういうサイト様があったのですね。べネ過ぎる。

データベース関連図もありました。

https://wpdocs.osdn.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0