wordpressのDBを確認してみた

database

以前、dockerでwordpressを設定したので、a5m2でDBの中を覗いてみた。

中見てみると、11個のテーブルしかないし……
ものすごいシンプルです。

wp_postsを中心に他のテーブルがkey-value storeに近い形で関連付けられてます。

テーブル一覧

テーブル               説明
wp_posts 中心になるテーブルで、投稿データや、固定ページが保存されてます。
それだけではなく、メディア(画像データなど)も保存されてます。
画像ひとつひとつで1レコード出来てるし、保存毎に履歴データも出来てるし、
データ量大丈夫なの?
wp_postmeta wp_postのメタデータが保存されてます。
カスタムフィールドとかもここに保存されるようです。
そのうちカスタムフィールドも作ってみよう。
wp_comments テーブル名の通りコメントが保存されます。
wp_commentmeta コメントのメタ情報が保存されます。
コメントのメタ情報ってなんじゃ。って調べてみたところ、WP ULikeプラグイン(コメントにいいね!をつける)のようにコメントに情報を付随するときに使用するテーブルです。
wp_links codexによるとv3.4時点で非推奨になっていますが、
Link Managerプラグインで有効になるようです。
Link Managerを使うとサイドバーにリンクを設定できます。
普通じゃね?なぜ非推奨?
wp_options wordpress全体の設定情報を保存するテーブル。
管理画面で設定した情報とか。
wp_terms 分類の名称を保存するテーブル。
wp_term_relationships wp_post、wp_link、wp_term_taxonomyなどの関連付けをするテーブル。
wp_term_taxonomy 分類の階層データを保存するテーブル
wp_users ユーザーの情報が保存されるテーブル。ログインID、パスワード、メールアドレスなどなどが保存されています。
wp_usermeta ユーザーのメタ情報を保存するテーブル。ファーストネームなど詳細データが保存されています。

これってEVA(エンティティアトリビュートバリュー)じゃないんだろうか

EVAとはRDBでKVSを実装しているもので有名なアンチパターンです。
詳しい説明はQiita様にお任せするとして
ダメだと言われてもwordpressの拡張性を考えたらこれしかないって感じですよね。
EVAはデータ取得するのがすごく面倒くさい作りになっているので、拡張テーブルとか作るときには注意が必要だと思います。