sql >> データベース >  >> RDS >> Database

WordPress –舞台裏、パート2

    このシリーズのパート1では、WordPressをローカルにインストールする方法と、WordPressデータベースをVertabeloにインポートする方法を示しました。この記事では、WordPressデータベースのテーブルを詳しく見ていきます。

    WordPressデータベースモデルとダッシュボードの概要

    前のパートでは、WordPressデータベースをオンラインデータベースモデリングツールにインポートしました。記録として、データベースの構造は次のとおりです。




    始める前に理解しておくべきWordPressデータベースモデルに関する重要な事実がいくつかあります:

    • 各WordPressサイトは、まったく同じデータベース構造を使用しています。 11のテーブルが含まれており、すべてのWordPressサイトがバックグラウンドでそれらを使用しています。ほとんどのWordPressプラグインも、データベースモデルを変更せずにデータベースを使用します。モデルは、すべての異なるプラグインに対応するのに十分な柔軟性を備えている必要があります。もちろん、プラグインの作成者は、データ構造が大幅に異なる場合、またはプラグインに大量のデータが格納されている場合に、特定のプラグインのカスタムテーブルを追加できます。
    • WordPressデータベースは外部キーの制約がありません 。これは、WordPressが外部キーをサポートしていないMyISAMストレージエンジンを使用しているためです。テーブルは、接続されていない「外部キー」のような値を格納する属性を持つことでこれを回避します。そのため、外部キーの制約はデータベースによってチェックされません。たとえば、 post_author wp_postsの属性 テーブルは、 wp_usersの「ID」属性への「参照」です。 テーブル。
    • ほとんどのテーブルは単一列の主キーを使用します。これらは、単に「ID」( wp_users 内)という名前が付けられています。 およびwp_posts 表)、または meta_id / umeta_id (メタテーブル内: wp_postmeta wp_commentmeta およびwp_usermeta )、またはテーブル名とサフィックス「_id」(他のすべてのテーブル)の組み合わせ。これらのルールの唯一の例外は、 wp_term_relationshipsです。 テーブル。主キーは次の2つの属性で構成されます。object_id およびterm_taxonomy_id 。主キーまたは主キーの一部である属性は、bigint(20)タイプです。単一属性の主キーでも、auto-incrementプロパティが「Yes」に設定されています。

    投稿とページ

    WordPressを使用する主な理由は、コンテンツを作成および操作して一般に公開することです。そのために、WordPressは2つのコンテンツタイプを提供します:ページ および投稿

    ページ 静的コンテンツを表示するために使用されます 。タグやカテゴリを使用せず、日付順にリストされていません。また、コメントやソーシャルメディアの共有も許可されていません。ページはサブページを持つことができます。 会社概要 ページはこのタイプの良い例です。

    一方、投稿 日付別に一覧表示され、カテゴリを使用して整理できます およびタグ 。投稿は時系列のおかげでRSSフィードで使用できます。投稿に「サブ投稿」を含めることはできませんが、コメントやソーシャルメディアの共有は可能です。投稿は基本的にブログ投稿です。 WordPressはブログプラットフォームから進化したので、これは理解できます。

    WordPressページのコンテンツの背後にある主要なテーブルはwp_postsと呼ばれます

    WordPressはwp_postsを使用します ページ、投稿、添付ファイルを保存するテーブル。このテーブルは、ほとんどのコンテンツが保存されているページのコアと見なすことができます。添付ファイルは実際にはディスクに保存され、レコードは wp_postsに保存されることを指摘することが重要です。 テーブルには、それに関する詳細情報(誰がいつアップロードしたかなど)が保持されます。

    wp_postsのフィールド 表は次のとおりです:

    • post_author wp_usersへの参照 表、投稿の作成者を示します。
    • post_date –レコードがテーブルに挿入された日時。
    • post_date_gmt –レコードがテーブルに挿入されたGMT/UTCの日時。
    • post_content –投稿の実際の内容。
    • post_title –投稿のタイトル。
    • post_excerpt –コンテンツの概要。
    • post_status –現在の投稿ステータス。 WordPressは、「公開」、「将来」、「ドラフト」、「保留中」、「プライベート」、「ゴミ箱」、「自動ドラフト」、「継承」の8つのデフォルトステータスを使用します。
    • comment_status –単一の投稿またはページ全体でコメントのオンとオフを切り替えます。 「開く」と「閉じる」の2つの可能な値があります。
    • ping_status –投稿でピンバックとトラックバックが許可されているかどうかを識別します。 comment_statusのように 、「open」と「closed」の値のみを含めることができます。
    • post_password –投稿の表示に使用されるパスワード(オプション)。
    • post_name post_titleの人間が読めるURL 。
    • to_ping –「\n」で区切られたWordPressがpingbackを送信する必要があるURLのリスト。
    • pinged –WordPressがpingbackを送信したURLのリスト。「\n」で区切られています。
    • post_modified –投稿が変更された最新の日時。
    • post_modified_gmt post_modifiedのGMT/UTC日付 。
    • post_content_filtered –プラグインが高価なポストコンテンツ変換をキャッシュするために使用します。
    • post_parent –親の投稿を参照します。
    • guid –投稿のグローバル一意識別子。その永続的なURL。
    • menu_order –コンテンツの注文に使用されます。
    • post_type –レコードのタイプ。 「post」、「page」、「attachment」、またはユーザー定義のカスタムタイプの値を含めることができます。
    • post_mime_type post_type =attachmentの投稿に対してのみ定義されたアップロードファイルのタイプ 。 「image」、「application / pdf」、「application/msword」などの値を含めることができます。
    • comment_count –投稿のコメント、ピングバック、トラックバックの数。

    これがwp_postsのスナップショットです 「ニコラ・テスラについて」ページを追加した後の表:

    wp_postsを見ると 表を見ると、ページのいくつかのバージョンが表示されています。 ID =1のレコード post_status =publishがあります 、投稿がすべての人に表示されることを意味します。 comment_status =closed およびping_status=closed この投稿ではコメントとpingが無効になっていることを示します。

    投稿やページに関する追加情報は、 wp_postmetaに保存されます。 テーブル:

    この表の列は次のとおりです。

    • meta_id –テーブルの主キー。
    • post_id wp_postsへの参照 テーブル。
    • meta_key meta_valueの説明 属性。
    • meta_value –保存されている実際の値。

    wp_postmeta テーブルは、 wp_postsに保存できないすべての情報が含まれる場所です テーブルが保存されます。これは、キーと値のペアとして保存されます。これは、 entity-attribute-valueと呼ばれることが多い手法です。 (EAV)。このテーブルは、カスタムニーズのプラグインで使用できます。

    WordPressの分類法

    分類法 基本的に物事をグループ化することを指す派手な言葉です。 WordPressには、投稿をグループ化するための組み込みの分類法がいくつかあります。たとえば、カテゴリ およびタグ 組み込みのWordPress分類法です。独自のカスタム分類法をWordPressに追加することもできます。

    分類法とその用語は、 wp_termsというテーブルに保持されます。 wp_term_taxonomy 、および wp_term_relationships

    wp_terms 表には、WordPressサイトでオブジェクトを分類するために使用される用語のリストが格納されています:

    このテーブルには、すべてのタグ名とカテゴリ名、およびカスタム分類法の用語が含まれています。属性は次のとおりです。

    • term_id –テーブルの主キー。
    • 名前 –用語の名前。
    • スラッグ nameのURL 。
    • term_group –用語をグループ化するために使用されます。

    サンプルサイトのwp_termsの内容は次のとおりです。 テーブル:

    用語は、 wp_term_taxonomyを使用して分類に割り当てられます テーブル:

    表の属性は次のとおりです。

    • term_taxonomy_id –テーブルの主キー。
    • term_id wp_termsへの参照 テーブル。
    • 分類法 –分類名。
    • 説明 –その特定の分類法における用語の説明。
    • wp_termsの親用語への参照 テーブル。
    • カウント wp_posts内のオブジェクトの数 この分類法でこの用語を使用する表。

    wp_term_taxonomy 表を使用すると、異なる分類法で同じ用語を再利用できます。 term_id =1のレコードに注意してください taxonomy =categoryがあります 、他のレコードには taxonomy =post_tagがあります 。

    wp_postsに保存されたオブジェクトを関連付けるため およびwp_term_taxonomy テーブルでは、WordPressは wp_term_relationshipsを使用します テーブル:

    これは、複数の属性で構成されるキーを持つモデル内の唯一のテーブルであることに注意してください。

    wp_term_relationships テーブルには次の属性があります:

    • object_id wp_postsへの参照 テーブル。
    • term_taxonomy_id wp_term_taxonomyへの参照 テーブル。
    • term_order –特定のオブジェクトの用語の順序。

    ここには、 wp_term_taxonomyの6つのレコードを接続する6つのレコードがあります。 投稿のあるテーブル( object_id =6

    コメントとWordPressデータモデリング

    WordPressページにコンテンツを配置することができました。それは素晴らしいことですが、ほとんどの場合、一般の人々からフィードバックを得たいと思っています。それがコメント機能の役割です。

    投稿へのコメントを表示するには、[コメントを残す]を使用するか、[Xコメント]をクリックします(Xは投稿のコメント数を表します)。

    私たちの最初の投稿にはすでに1つのコメントがあります。クリックすると、ピングバックによる自動コメントであることがわかります。その投稿にもう1つコメントを追加します:

    現在、投稿に対する2つのコメントが表示されていますが、データベース内のすべての背後にあるものは何ですか?

    テーブル名から、 wp_comments テーブルは、WordPressページにコメントを保存するために使用されます:

    属性はほとんど自明ですが、それでもいくつかを詳しく見ていきます。

    comment_post_ID wp_postsへの参照です テーブル;コメントを受け取った投稿を示します。最初のコメントについては、それが実際にピングバックであり、「作成者」が別の投稿であることがわかります。 2番目のコメントでは、私が著者であることがわかります。 comment_agentにも注意してください コメントの投稿に使用されるシステムとコンピューターに関する基本的な情報が含まれています。

    モデル内の3つのメタテーブルすべての背後にある主なアイデアは、プライマリテーブルに保存したくないデータを保存することです。 wp_commentmeta wp_commentsに関連しています wp_postmetaと同じ方法でテーブルを作成します テーブルはwp_postsに関連しています テーブル。

    WordPressユーザーを見る

    私たちのページがオンラインになった後、誰でもそれを見ることができます。 WordPressユーザーは、許可状況に応じて、当サイトとそのコンテンツを変更できるユーザーです。

    次に、 wp_usersを確認します。 およびwp_usermeta MySQLデータベースのテーブル。

    予想どおり、 wp_users 上記の表には、WordPressサイトに登録されているすべてのユーザーの基本データが格納されています。 user_passに注意してください は暗号化されており、NewUserには user_activation_keyがあります edrkusicのフィールドが空のときに属性が入力されました。

    wp_usersにリストされている属性 表は、WordPressサイトの wp_usermetaで期待されるものです。 テーブルは、特定のプロジェクトに固有の値を格納するために使用されます:

    たとえば、 umeta_id =25のレコードに注目してください。 値「いくつかの経歴情報」が含まれています 、NewUserの編集中にダッシュボードに入力したのと同じテキスト。 user_id そのレコードの属性には値2があります 、 wp_usersのNewUserのIDに対応します テーブル。明らかに、 user_id wp_usersへの参照です テーブル。

    WordPressのリンクとオプション

    wp_linksの背後にある考え方 表は他のサイトへのリンクを保存するためのものです:

    他のサイトへのリンクを持つことは、ブログ時代の初めに非常に人気がありました。今日では、それはますます使用されていません。 WordPressバージョン3.5以降、リンク管理は管理インターフェースからも削除されました。それでも、このテーブルは古いバージョンとの互換性を提供するために保持されています。

    wp_options テーブルには、WordPressのインストール、サイト構成、テーマ、プラグイン、ウィジェットに関するデータが格納されています。

    また、一時的にキャッシュされたデータを保存するためにも使用されます。 wp_usermeta にあるように、EAVロジックもこのテーブルにあります。 wp_postmeta およびwp_commentmeta 。属性option_name 属性option_valueがキーの役割を果たし、 対応する値です。表の他の2つの属性は、主キー属性 option_idです。 およびautoload 、オプションがデータベースから自動的にロードされるかどうかを制御します。

    WordPressのデータベースモデルの評価

    WordPressの背後にあるデータベースモデルは、いくつかの優れたデータベース設計ルールと規則に従っていません。特定の目的のためにデータベースを設計するとき、必要なすべての機能を事前に知っていれば、それらのすべてのルールに従うことができます。しかし、WordPressは誰もが思いつく可能性のあるすべてのものをカバーする必要があるため、外部キーを犠牲にしてEAVを使用することは行わなければならないことです。 ID属性にすべてのテーブルで同じ名前を付け、「外部キー」でも同じようにします。たとえば、 post_authorは使用しません wp_posts テーブルですが、 users_idを使い続けます 。これ以外に、WordPressデータベースがその目的にとって本当に素晴らしいモデルであることに同意する必要があります。

    どう思いますか?コメントセクションでお知らせください。


    1. 複数のインデックスと複数列のインデックス

    2. 来週のMicrosoftMVPサミット中にTwitterでフォローしてください

    3. 警告:mysqli_connect():(HY000 / 1045):ユーザー'username' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

    4. エラー:複数の戻り値を持つクエリのTypedQueryを作成できません