Database
 sql >> Datenbank >  >> RDS >> Database

WordPress – Hinter den Kulissen, Teil 2

In Teil 1 dieser Serie habe ich gezeigt, wie man WordPress lokal installiert und wie man eine WordPress-Datenbank in Vertabelo importiert. In diesem Artikel sehen wir uns die Tabellen in der WordPress-Datenbank genauer an.

Ein kurzer Blick auf das WordPress-Datenbankmodell und das Dashboard

Im vorherigen Teil habe ich die WordPress-Datenbank in unser Online-Datenbankmodellierungstool importiert. Für den Datensatz ist die Struktur der Datenbank wie folgt:




Es gibt ein paar wichtige Fakten über das WordPress-Datenbankmodell, die Sie verstehen sollten, bevor wir beginnen:

  • Jede WordPress-Site verwendet genau dieselbe Datenbankstruktur. Es enthält 11 Tabellen und jede WordPress-Site verwendet sie im Hintergrund. Die meisten WordPress-Plugins verwenden die Datenbank auch ohne Änderungen am Datenbankmodell. Das Modell muss flexibel genug sein, um all die verschiedenen Plugins aufzunehmen. Natürlich können Plugin-Ersteller benutzerdefinierte Tabellen für bestimmte Plugins hinzufügen, wenn sich die Datenstruktur erheblich unterscheidet oder wenn ihr Plugin große Datenmengen speichert.
  • Der WordPress-Datenbank fehlen Fremdschlüsselbeschränkungen . Dies liegt daran, dass WordPress die MyISAM-Speicher-Engine verwendet, die keine Fremdschlüssel unterstützt. Tabellen umgehen dies, indem sie Attribute haben, die unverbundene „Fremdschlüssel“-ähnliche Werte speichern, sodass die Fremdschlüsseleinschränkung nicht von der Datenbank überprüft wird. Zum Beispiel post_author -Attribut im wp_posts table ist ein „Verweis“ auf das „ID“-Attribut in wp_users Tabelle.
  • Die meisten Tabellen verwenden einen einspaltigen Primärschlüssel. Sie heißen entweder einfach „ID“ (in der Datei wp_users und die wp_posts Tabelle) oder meta_id /umeta_id (in den Metatabellen:wp_postmeta , wp_commentmeta und wp_usermeta ) oder eine Kombination aus dem Tabellennamen und dem Suffix „_id“ (alle anderen Tabellen). Die einzige Ausnahme von diesen Regeln ist wp_term_relationships Tabelle, wobei der Primärschlüssel aus den beiden Attributen besteht:object_id und term_taxonomy_id . Attribute, die Primärschlüssel oder Teil eines Primärschlüssels sind, sind vom Typ bigint(20). Bei Primärschlüsseln mit nur einem Attribut ist die Eigenschaft „Auto-Increment“ ebenfalls auf „Yes“ gesetzt.

Beiträge und Seiten

Der Hauptgrund für die Verwendung von WordPress besteht darin, Inhalte zu erstellen, zu manipulieren und der Öffentlichkeit zu präsentieren. Zu diesem Zweck stellt uns WordPress zwei Inhaltstypen zur Verfügung:Seiten und Beiträge .

Seiten werden verwendet, um statische Inhalte anzuzeigen . Sie verwenden keine Tags oder Kategorien und sind nicht nach Datum aufgelistet. Außerdem erlauben sie keine Kommentare oder das Teilen in sozialen Medien. Seiten können Unterseiten haben. Über uns Seiten sind gute Beispiele für diesen Typ.

Andererseits Beiträge sind nach Datum aufgelistet und können mithilfe von Kategorien organisiert werden und Tags . Beiträge können dank ihrer chronologischen Reihenfolge in RSS-Feeds verwendet werden. Beiträge können keine „Subposts“ haben, aber Kommentare und Social Media Shares sind möglich. Posts sind im Wesentlichen Blog-Posts. Dies ist verständlich, da sich WordPress aus einer Blogging-Plattform entwickelt hat.

Die primäre Tabelle hinter Inhalten auf jeder WordPress-Seite heißt wp_posts :

WordPress verwendet den wp_posts Tabelle zum Speichern von Seiten, Beiträgen und Anhängen. Wir können diese Tabelle als den Kern unserer Seite betrachten, den Ort, an dem die meisten Inhalte gespeichert sind. Es ist wichtig darauf hinzuweisen, dass Anhänge tatsächlich auf der Festplatte und der Datensatz in wp_posts Die Tabelle enthält weitere Informationen darüber (wer hat sie wann hochgeladen usw.).

Die Felder in wp_posts Tabelle sind:

  • post_author – ein Verweis auf wp_users Tabelle, die den Autor des Beitrags angibt.
  • post_date – Datum und Uhrzeit, wann der Datensatz in die Tabelle eingefügt wurde.
  • post_date_gmt – das GMT/UTC-Datum und die Zeit, zu der ein Datensatz in die Tabelle eingefügt wurde.
  • post_content – der eigentliche Inhalt des Beitrags.
  • post_title – der Titel des Beitrags.
  • post_excerpt – eine Zusammenfassung des Inhalts.
  • post_status – der aktuelle Beitragsstatus. WordPress verwendet 8 Standardstatus:„Veröffentlichen“, „Zukünftig“, „Entwurf“, „Ausstehend“, „Privat“, „Papierkorb“, „Auto-Entwurf“ und „Übernehmen“.
  • comment_status – Schaltet Kommentare für einen einzelnen Beitrag oder für eine ganze Seite ein und aus. Es gibt zwei mögliche Werte:„offen“ und „geschlossen“.
  • ping_status – identifiziert, ob ein Beitrag Pingbacks und Trackbacks zulässt. Wie comment_status , darf es nur die Werte „offen“ und „geschlossen“ enthalten.
  • post_password – das zum Anzeigen des Beitrags verwendete Passwort (optional).
  • post_name – die für Menschen lesbare URL eines post_title .
  • to_ping – eine Liste von URLs, an die WordPress Pingbacks senden soll, getrennt durch „\n“.
  • pinged – eine Liste von URLs, an die WordPress Pingbacks gesendet hat, getrennt durch „\n“.
  • post_modified – Datum und Uhrzeit der letzten Änderung eines Beitrags.
  • post_modified_gmt – das GMT/UTC-Datum für post_modified .
  • post_content_filtered – Wird von Plugins verwendet, um teure Post-Content-Transformationen zwischenzuspeichern.
  • post_parent – verweist auf den übergeordneten Beitrag.
  • guid – Global Unique Identifier für einen Beitrag; seine permanente URL.
  • menu_order – Wird für die Bestellung von Inhalten verwendet.
  • post_type – die Art der Aufzeichnung. Er kann die Werte „post“, „page“, „attachment“ oder benutzerdefinierte benutzerdefinierte Typen enthalten.
  • post_mime_type – der Typ der hochgeladenen Dateien, der nur für Beiträge mit post_type = attachment definiert ist . Es kann Werte wie „image“, „application/pdf“ und „application/msword“ enthalten.
  • comment_count – die Anzahl der Kommentare, Pingbacks und Trackbacks des Beitrags.

Hier ist eine Momentaufnahme der wp_posts Tabelle, nachdem ich die Seite „Über Nikola Tesla“ hinzugefügt habe:

Wenn wir uns die wp_posts Tabelle können wir einige Versionen unserer Seite sehen. Der Datensatz mit der ID = 1 hat post_status = publish , was bedeutet, dass der Beitrag für alle sichtbar ist. Der comment_status = closed und ping_status = closed gibt an, dass Kommentare und Pings für diesen Beitrag deaktiviert sind.

Alle zusätzlichen Informationen zu Beiträgen und Seiten werden im wp_postmeta Tabelle:

Die Spalten in dieser Tabelle lauten wie folgt:

  • meta_id – der Primärschlüssel der Tabelle.
  • post_id – ein Verweis auf wp_posts Tabelle.
  • meta_key – eine Beschreibung eines meta_value Attribut.
  • meta_value – der aktuell gespeicherte Wert.

Die wp_postmeta Tabelle enthält alle Informationen, die nicht in wp_posts Tabelle gespeichert. Es wird als Schlüssel-Wert-Paare gespeichert, eine Technik, die oft als Entität-Attribut-Wert bezeichnet wird (EAV). Die Tabelle kann von Plugins für benutzerdefinierte Anforderungen verwendet werden.

WordPress-Taxonomien

Taxonomie ist ein schickes Wort, das sich im Grunde auf das Gruppieren von Dingen bezieht. WordPress hat ein paar eingebaute Taxonomien zum Gruppieren von Beiträgen. Zum Beispiel Kategorien und Tags sind eingebaute WordPress-Taxonomien. Sie können WordPress auch Ihre eigenen benutzerdefinierten Taxonomien hinzufügen.

Die Taxonomien und ihre Begriffe werden in Tabellen namens wp_terms , wp_term_taxonomy und wp_term_relationships .

Die wp_terms Tabelle speichert eine Liste von Begriffen, die zum Klassifizieren von Objekten auf Ihrer WordPress-Site verwendet werden:

Diese Tabelle enthält alle Tag- und Kategorienamen sowie Begriffe aus unseren benutzerdefinierten Taxonomien. Die Attribute lauten wie folgt:

  • term_id – der Primärschlüssel der Tabelle.
  • name – der Name des Begriffs.
  • slug – die URL von name .
  • term_group – verwendet, um Begriffe zusammenzufassen.

Hier sind die Inhalte der wp_terms Tabelle:

Die Zuordnung der Begriffe zu Taxonomien erfolgt mit Hilfe des wp_term_taxonomy Tabelle:

Die Attribute in der Tabelle sind:

  • term_taxonomy_id – der Primärschlüssel der Tabelle.
  • term_id – der Verweis auf die wp_terms Tabelle.
  • taxonomy – der Name der Taxonomie.
  • description – eine Beschreibung eines Begriffs in dieser bestimmten Taxonomie.
  • parent – ein Verweis auf den übergeordneten Begriff in den wp_terms Tabelle.
  • count – die Anzahl der Objekte in wp_posts Tabelle, die diesen Begriff in dieser Taxonomie verwenden.

Die wp_term_taxonomy Tabelle ermöglicht es uns, denselben Begriff in verschiedenen Taxonomien wiederzuverwenden. Beachten Sie, dass der Datensatz term_id = 1 ist hat taxonomy = category , während die anderen Datensätze taxonomy = post_tag haben .

Um Objekte zu verknüpfen, die in wp_posts und die wp_term_taxonomy Tabellen verwendet WordPress den wp_term_relationships Tabelle:

Beachten Sie, dass dies die einzige Tabelle im Modell ist, die einen Schlüssel hat, der aus mehr als einem Attribut besteht.

Die wp_term_relationships Tabelle hat die folgenden Attribute:

  • object_id – ein Verweis auf wp_posts Tabelle.
  • term_taxonomy_id – ein Verweis auf die wp_term_taxonomy Tabelle.
  • term_order – die Begriffsreihenfolge für ein bestimmtes Objekt.

Wir haben hier sechs Datensätze, die sechs Datensätze aus der wp_term_taxonomy Tabelle mit dem Beitrag (object_id = 6 ).

Kommentare und WordPress-Datenmodellierung

Wir haben es geschafft, einige Inhalte auf unserer WordPress-Seite zu platzieren. Das ist schön, aber in den meisten Fällen möchten wir Feedback aus der Öffentlichkeit erhalten. Und das ist die Rolle der Kommentarfunktion.

Um Kommentare zu Beiträgen anzuzeigen, können wir einfach „Kommentar hinterlassen“ verwenden oder auf „X Kommentar“ klicken (wobei X für die Anzahl der Kommentare zum Beitrag steht).

Unser erster Beitrag hat bereits einen Kommentar. Wenn wir darauf klicken, sehen wir, dass es sich um einen automatischen Kommentar handelt, der durch Pingback verursacht wird. Wir fügen diesem Post einen weiteren Kommentar hinzu:

Wir sehen jetzt zwei Kommentare zu unserem Beitrag, aber was steckt dahinter in der Datenbank?

Sie können anhand des Tabellennamens erraten, dass die Datei wp_comments Tabelle wird verwendet, um Kommentare auf unserer WordPress-Seite zu speichern:

Die Attribute sind größtenteils selbsterklärend, aber wir werden uns trotzdem einige genauer ansehen.

Die comment_post_ID ist ein Verweis auf wp_posts Tisch; es zeigt an, welcher Beitrag Kommentare erhalten hat. Für den ersten Kommentar können wir sehen, dass es sich tatsächlich um einen Pingback handelte und dass der „Autor“ ein anderer Beitrag ist. Für den zweiten Kommentar können wir sehen, dass ich der Autor bin. Beachten Sie auch den comment_agent enthält einige grundlegende Informationen über das System und den Computer, die zum Posten eines Kommentars verwendet werden.

Die Hauptidee hinter allen drei Metatabellen im Modell besteht darin, Daten zu speichern, die wir nicht in unserer Primärtabelle speichern möchten. Die wp_commentmeta bezieht sich auf wp_comments Tabelle auf die gleiche Weise wie die wp_postmeta Tabelle bezieht sich auf die wp_posts Tabelle.

WordPress-Benutzer sehen

Nachdem unsere Seite online ist, kann sie jeder sehen. WordPress-Benutzer sind diejenigen, die gemäß ihrem Berechtigungsstatus Änderungen an unserer Website und ihren Inhalten vornehmen können.

Jetzt schauen wir uns die wp_users und die wp_usermeta Tabellen in der MySQL-Datenbank.

Wie erwartet, die wp_users Die oben gezeigte Tabelle speichert grundlegende Daten für alle Benutzer, die auf unserer WordPress-Seite registriert sind. Beachten Sie, dass der user_pass verschlüsselt ist und dass NewUser den user_activation_key hat Attribut gefüllt, während edrkusic dieses Feld leer hat.

While-Attribute, die in wp_users Tabelle sind das, was wir auf jeder WordPress-Seite erwarten würden, die wp_usermeta Tabelle wird verwendet, um Werte zu speichern, die für ein bestimmtes Projekt spezifisch sein könnten:

Beachten Sie beispielsweise, dass der Datensatz mit umeta_id = 25 enthält den Wert "einige biografische Informationen" , derselbe Text, den wir beim Bearbeiten von NewUser in das Dashboard eingegeben haben. Die user_id Attribut in diesem Datensatz hat Wert 2 , was der NewUser-ID in wp_users Tisch. Offensichtlich die user_id ist ein Verweis auf wp_users Tabelle.

Links und Optionen in WordPress

Die Idee hinter den wp_links Tabelle soll Links zu anderen Seiten speichern:

Links zu anderen Seiten zu haben, war zu Beginn der Blogging-Ära sehr beliebt; heutzutage wird es immer weniger verwendet. Ab der WordPress-Version 3.5 wurde die Linkverwaltung sogar aus der Admin-Oberfläche entfernt. Dennoch wird diese Tabelle beibehalten, um die Kompatibilität mit älteren Versionen zu gewährleisten.

Die wp_options Tabelle speichert Daten über WordPress-Installation, Seitenkonfiguration, Design, Plugins und Widgets:

Es wird auch verwendet, um temporäre zwischengespeicherte Daten zu speichern. Die EAV-Logik ist auch in dieser Tabelle vorhanden, ebenso wie in wp_usermeta , wp_postmeta und wp_commentmeta . Das Attribut option_name spielt die Rolle des Schlüssels, während das Attribut option_value ist der entsprechende Wert. Die anderen beiden Attribute in der Tabelle sind das Primärschlüsselattribut option_id und autoload , die steuert, ob eine Option automatisch aus der Datenbank geladen wird.

Evaluieren des Datenbankmodells von WordPress

Das Datenbankmodell hinter WordPress folgt nicht mehreren guten Regeln und Konventionen für das Datenbankdesign. Wenn wir eine Datenbank für einen bestimmten Zweck entwerfen und alle gewünschten Funktionalitäten im Voraus kennen, können wir all diese Regeln befolgen. Aber WordPress muss alles abdecken, was irgendjemand im Sinn haben könnte, also ist das Opfern von Fremdschlüsseln und die Verwendung von EAV etwas, das getan werden muss. Ich würde das ID-Attribut in allen Tabellen gleich benennen und dasselbe mit den „Fremdschlüsseln“ tun. Zum Beispiel würde ich post_author nicht verwenden in den wp_posts Tabelle, aber ich würde bei users_id bleiben . Abgesehen davon muss ich zustimmen, dass die WordPress-Datenbank wirklich ein großartiges Modell für ihren Zweck ist.

Was denkst du? Lassen Sie es uns im Kommentarbereich wissen.