WordPressのデータベースを解析してみる
CMS(Contents Management System)の構築をやることになったので、パクるもとい設計の参考にするために、このブログでも使っている世界一有名といっていいCMS、WordPressのテーブル構成を解析してみようと思います。
テーブル設計が優れてるシステムはテーブル数が少ないので然もありなんですね。
FKとかの表記は間違ってるかも…。
ユーザーエージェントも拾ってくれます。
いわゆるSQLアンチパターンのEAV(Entity-Atribute-Value)設計になっています。
投稿は変更すると古いものは履歴となり新しいレコードが増えていく構成になってます。
wp_postsへのカスタムフィールドとしての役割を持ちます。
カテゴリもタグも一緒に格納しています。
wp_usersへのカスタムフィールドとしての役割を持ちます。
データ追っかけやすいんで。
アンチパターンだけど、システムの拡張に備えるには必要でしょう。
子のカテゴリとか親のカテゴリに対応するためかな…。
複雑そうなWordPressをこの数のテーブルでやりくりしてるのはすごいですよね。
余裕があればカラムの内容もおっかけてみようと思います。
でわ!
ちょいと
目次
WordPressのテーブル
驚くことにWordPressの主要テーブルは11個しかありません(別途プラグインを入れると増えます)。テーブル設計が優れてるシステムはテーブル数が少ないので然もありなんですね。
テーブル一覧
テーブル名 | 機能 |
wp_commentmeta | コメントのメタデータを管理 |
wp_comments | 投稿へのコメントを管理 |
wp_links | リンクを管理 |
wp_options | オプション設定 |
wp_postmeta | 投稿のメタデータ |
wp_posts | 投稿を管理 |
wp_terms | カテゴリ・タグ |
wp_term_relationships | 記事とカテゴリ・タグの関連付け |
wp_term_taxonomy | カテゴリ・タグの分類 |
wp_usermeta | 登録ユーザーメタ情報 |
wp_users | 登録ユーザー情報 |
ER図
SIer御用達、A5:SQL Mk-2で作りました。FKとかの表記は間違ってるかも…。
各テーブル説明
wp_commentmeta
イマイチ用途が謎。記事コメントを削除したときなどにレコードができるらしい。wp_comments
記事へのコメント内容を格納しています。ユーザーエージェントも拾ってくれます。
wp_links
リンクを管理するらしいが、今は使われてないっぽい。wp_options
WordPressそのものの設定や、ブログタイトルなんかを保存しています。いわゆるSQLアンチパターンのEAV(Entity-Atribute-Value)設計になっています。
wp_posts
投稿そのものを管理するテーブル。記事タイトルや記事内容のHTMLが入っています。投稿は変更すると古いものは履歴となり新しいレコードが増えていく構成になってます。
wp_postmeta
これもEAVテーブルですね。wp_postsへのカスタムフィールドとしての役割を持ちます。
wp_terms
記事に設定するカテゴリやタグの文言を管理します。カテゴリもタグも一緒に格納しています。
wp_term_relationships
投稿とカテゴリ・タグの紐づけを管理してます。wp_term_taxonomy
wp_termsのレコードがタグなのかカテゴリなのかを管理しています。wp_usermeta
EAVテーブル。wp_usersへのカスタムフィールドとしての役割を持ちます。
wp_users
Wordpresを操作できるユーザーを格納しています。まとめ
設計で参考になりそうなのは…。投稿を一つのテーブルで履歴管理している。
個人的には履歴テーブルを別に持つ方が好きです。データ追っかけやすいんで。
EAVテーブルで機能拡張に備える
予め予備のカラムをいっぱい持っとくよりはスマートですよね。アンチパターンだけど、システムの拡張に備えるには必要でしょう。
タグとカテゴリを同一テーブルで管理
別のテーブルにタグかカテゴリの情報を持たせることのメリットはなんでしょうね?子のカテゴリとか親のカテゴリに対応するためかな…。
ユーザーは1テーブルで管理
別にadminユーザーと分ける必要はないですよね。複雑そうなWordPressをこの数のテーブルでやりくりしてるのはすごいですよね。
余裕があればカラムの内容もおっかけてみようと思います。
でわ!
ディスカッション
コメント一覧
まだ、コメントがありません