Im ersten Teil dieser Serie zu Daten in WordPress gab ich einen Überblick über die WordPress-Datenbanktabellen und welche Tabellen verwendet werden, um welche Art von Daten zu speichern. In diesem zweiten Teil werde ich beschreiben, wie WordPress die Beziehungen zwischen diesen Daten verwaltet.
Wie Sie sehen, verwendet WordPress drei Arten von Datenbeziehungen: Eins-zu-Eins, Eins-zu-Viele und Viele-zu-Viele. Ich werde mir jeden dieser Artikel ansehen und was er für Ihre WordPress-Site bedeutet.
Eine Eins-zu-Eins-Beziehung ist die einfachste Beziehung - es bedeutet einfach, dass ein Datensatz nur mit einem anderen Datensatz zusammenhängt. Daten wie diese werden normalerweise in einer Tabelle gespeichert (wenn auch nicht immer, wie wir später in diesem Tutorial sehen werden)..
Beispiele für Eins-zu-Eins-Beziehungen in WordPress sind:
Die Liste könnte fortgesetzt werden, aber der Hauptpunkt ist, dass alle zwei Datensätze, die in verschiedenen Feldern in einer Zeile einer Tabelle gespeichert sind, eine Eins-zu-Eins-Beziehung haben.
Eins-zu-Eins-Beziehungen sind jedoch die am wenigsten interessante Art von Datenbankbeziehungen. Kommen wir also zu einem Beziehungstyp, der von WordPress häufig verwendet wird - One-to-Many.
Eine oder viele Beziehungen sind in Datenbanken sehr häufig und machen eine Datenbank leistungsfähiger als eine "flache" Tabelle wie eine Kalkulationstabelle. Diese treten auf, wenn ein Datensatz eine Beziehung zu mehr als einem anderen Datensatz hat.
In WordPress werden die meisten Eins-zu-Viele-Beziehungen durch eine Verknüpfung zwischen zwei Datenbanktabellen erstellt, wobei eine eindeutige Kennung verwendet wird, um die beiden zu verbinden. So zum Beispiel die post_id
Der Datensatz wird für jeden Beitrag, der im gespeichert ist, eindeutig wp_posts
Tabelle, wird aber auch in der verwendet wp_kommentare
Tabelle, um zu ermitteln, in welchem Beitrag jeder Kommentar gepostet wurde. Dies bedeutet, dass jeder post_id
Der Wert erscheint nur einmal im wp_posts
kann aber mehrmals oder gar nicht in der Tabelle erscheinen wp_kommentare
Tabelle.
Einige andere Beispiele in WordPress sind:
Wieder geht die Liste weiter. Da dies ein wichtiges Thema in WordPress ist, werfen wir einen genaueren Blick auf die One-to-Many-Beziehungen.
Die Tabelle, die mit den meisten anderen Tabellen verbunden ist, ist die wp_posts
Tabelle und die meisten Beziehungen, die diese Verbindungen schaffen, sind Eins-zu-Viele-Beziehungen.
Wie Sie in der Abbildung unten sehen können, ist die wp_posts
Tabelle ist mit vier anderen Tabellen verknüpft:
Darüber hinaus können Posts auch eine Eins-zu-Viele-Beziehung zu anderen Posts in Form von Anhängen oder übergeordneten Seiten haben.
Sehen wir uns diese Zusammenhänge genauer an.
Wie oben erläutert, werden die Daten im gespeichert wp_posts
Tabelle kann eine Eins-zu-Viele-Beziehung zu anderen Daten in derselben Tabelle haben. Diese Beziehung ist jedoch nicht zwischen dem, was Sie als Posts meinen würden, sondern zwischen Posts und Anhängen oder Seiten und anderen Seiten. Bei Anhängen und Seiten handelt es sich schließlich um Post-Typen.
Ein Anhang, der im gespeichert ist wp_posts
Tabelle wird einen Eintrag in der post_parent
Feld, das die ID des Beitrags ist, an den der Anhang angehängt ist (mit Entschuldigung für die Wiederholung!). Dies ist eine Eins-zu-Viele-Beziehung, da jede Anlage nur ein übergeordnetes Element hat, während jeder Beitrag viele Anlagen enthalten kann. Dies gilt auch, wenn Sie den Media Manager zum Hinzufügen einer Anlage zu einem anderen Beitrag verwendet haben. Nur der Beitrag, zu dem er ursprünglich hinzugefügt wurde, wird in der Datenbank als übergeordneter Ordner gespeichert.
Posts können auch eine Eins-zu-Viele-Beziehung zu anderen Posts haben, wenn eine Seite als übergeordnetes Element einer anderen angegeben ist. Der Datensatz wird in der untergeordneten Seite gespeichert post_parent
Feld - wieder wird dies das sein post_id
der übergeordneten Seite. Dies ist eine Eins-zu-Viele-Beziehung, da übergeordnete Seiten viele untergeordnete Seiten haben können, untergeordnete Seiten jedoch nur eine übergeordnete Seite.
Wenn Sie über Beziehungen zwischen Posts wie diesem nachdenken, ist es wichtig zu wissen, dass Posts bei der Behandlung von WordPress-Daten nicht das sind, was Sie normalerweise als Posts bezeichnen. Dazu gehören Seiten, Anhänge und andere Beitragstypen, die alle im gespeichert sind wp_posts
Tabelle.
Post-Metadaten werden in einer eigenen Tabelle gespeichert wp_postmeta
. Diese Tabelle enthält nur vier Felder - für die post_id
, das meta_id
, der Schlüssel und der Wert. Einem Beitrag können viele Elemente von Beitrags-Metadaten zugeordnet sein, aber jeder Eintrags-Metadatensatz wird nur mit einem Beitrag verknüpft.
Kommentare haben auch eine eigene Tabelle, wp_kommentare
. Jeder Kommentar bezieht sich nur auf einen Beitrag, während für jeden Beitrag mehrere Kommentare gespeichert werden können. Wie bei allen anderen Tabellen, die mit verknüpft sind wp_posts
, das post_id
Feld wird für die Verknüpfung verwendet (in der comment_post_id
Feld in wp_kommentare
).
Das wp_kommentare
Die Tabelle enthält standardmäßig 15 Felder, um Daten über den Autor, die E-Mail-Adresse des Autors, den Kommentar selbst und den Genehmigungsstatus zu speichern. Es ist auch mit dem verbunden wp_users
Tabelle, wie wir im nächsten Abschnitt sehen werden.
Kommentare haben auch ihre eigenen Metadaten, die in einer anderen Tabelle gespeichert sind, zu der ich in Kürze komme.
Jeder Beitrag ist an der wp_users
Tisch über die Benutzeridentifikation
Datensatz, der im gespeichert ist post_author
Feld in wp_posts
. Dies ist eine Eins-zu-Viele-Beziehung, da jeder Beitrag nur einen Autor hat, aber jeder Benutzer kann Autor mehrerer Beiträge sein.
Die Beziehung zwischen Posts und Benutzern unterscheidet sich von derjenigen zwischen Posts und Kommentaren oder Metadaten, da es sich um einen Benutzer, mehrere Posts und nicht um mehrere Kommentare oder Meteordatensätze handelt. Deshalb ist das Benutzeridentifikation
Feld stellt den Link anstelle von bereit post_id
Feld.
Es gibt auch drei Beziehungen, die Eins-zu-Viele sind und keine Posts beinhalten. Bei zwei davon handelt es sich um Metadaten - die Beziehung zwischen Kommentaren und ihren Metadaten sowie Benutzern und deren Metadaten.
WordPress speichert zusätzliche Metadaten über Benutzer in der wp_usermeta
Tabelle. Dies wird im Allgemeinen für nicht standardmäßige Daten zu Benutzern verwendet, z. B. Metadaten zu Superadmins in einer Installation mit mehreren Standorten und Metadaten zu den von einem Benutzer ausgewählten Admin-Farben, wenn diese nicht standardmäßig verwendet werden.
Die meisten Daten zu Benutzern befinden sich im wp_users
Tabelle. Die beiden Tabellen sind über die Benutzeridentifikation
Mit diesem Feld und einem Benutzerdatensatz werden mehrere Metadatenelemente verknüpft, während jedes Metadatenelement nur für einen Benutzer gilt.
Auch hier werden die meisten Daten zu Kommentaren im gespeichert wp_kommentare
Tabelle zusammen mit dem Kommentar selbst, aber die wp_commentmeta
Tabelle dient zum Speichern zusätzlicher Metadaten, z. B. von Plugins wie Akismet erstellter Daten. Die Beziehung ist dieselbe wie zwischen Benutzern und Usermeta.
Die letzte Eins-zu-Viele-Beziehung besteht zwischen Kommentaren und Benutzern. Das wp_kommentare
Tabelle enthält die Benutzeridentifikation
Feld, in dem die Benutzer-ID gespeichert werden kann, wenn ein angemeldeter Benutzer einen Kommentar gepostet hat. Beachten Sie, dass dieses Feld nicht obligatorisch für Websites ist, auf denen Benutzer nicht angemeldet sein müssen, um einen Kommentar abgeben zu können.
Die letzte Art der Datenbankbeziehung ist die Eins-zu-Viele-Beziehung, bei der die vielen Verknüpfungen in beide Richtungen gehen. Dies wird in WordPress nur einmal für Taxonomiebegriffe verwendet (einschließlich Kategorien und Tags, da es sich lediglich um Taxonomien handelt). Einem Beitrag können viele Begriffe zugewiesen sein, und ein Begriff kann mehreren Beiträgen zugewiesen werden.
WordPress erstellt diese Beziehung auf dieselbe Weise wie jede andere Datenbank mit einer Manay-to-Many-Datenbank: mithilfe einer Zwischentabelle, die die beiden Tabellen mit den Schlüsseldaten verknüpft. Dies ist das wp_term_relationships
Tabelle, die die wp_posts
Tisch zum wp_term_taxonomy
Tabelle.
Hinweis: Diese Tabelle verknüpft auch die wp_links
Tisch zum wp_term_taxonomy
Tabelle, da sich Links ähnlich wie Posts verhalten - ich komme in Kürze zu Links.
Dies lässt sich am einfachsten erklären, wenn Sie zuerst die beiden entfernten Tabellen betrachten. Das wp_posts
Tabelle enthält Daten zu jedem Beitrag, während die wp_term_taxonomy
Die Tabelle enthält Daten zu jedem Begriff, einschließlich der Taxonomie, in der er sich befindet, und seiner ID.
So erstellen Sie eine Verknüpfung zwischen einem Begriff in der wp_term_taxonomy
Tisch und ein Beitrag in der wp_posts
Tabelle erstellt WordPress einen Datensatz in der wp_term_relationships
Tabelle, die die enthält post_id
und das term_id
(gespeichert als Objekt Identifikation
und term_taxonomy_id
jeweils in der wp_term_relationships
Tabelle). Dies bedeutet, dass die wp_term_relationships
Tabelle kann mehrere Datensätze für jeden Beitrag und mehrere Datensätze für jeden Begriff enthalten, wodurch die Viele-zu-Viele-Beziehung erstellt wird.
Das folgende Diagramm zeigt, wie das funktioniert:
Im obigen Beispiel haben die Beiträge die folgenden Bedingungen:Sie könnten es auch anders sehen - Begriff 3 bezieht sich beispielsweise auf die Positionen 1 und 4.
Es hört jedoch nicht auf. Es gibt einen vierten Tisch, den wp_terms
Tabelle. Dies enthält Daten zu jedem Begriff, nämlich Name, Slug und Beschreibung für jeden Begriff. Jeder Begriff hat nur einen Datensatz im wp_terms
Tabelle, also die Beziehung zwischen dem und dem wp_term_taxonomy
Tisch ist eigentlich eins zu eins. Theoretisch gibt es keinen Grund, warum diese Daten nicht in der Datenbank gespeichert werden können wp_term_taxonomy
Tisch, ist es aber nicht.
Links oder die Blogroll-Funktion ist eine Funktion von WordPress, die weit weniger bekannt ist als früher. Seit Version 3.5 sind Links standardmäßig im Admin deaktiviert. Sie haben jedoch einen eigenen Tisch: den wp_links
Tabelle.
Das ist dem sehr ähnlich wp_posts
Tabelle. Immerhin sind Links ein Inhaltstyp, der Posts sehr ähnlich ist, und haben die gleiche Viele-zu-Viele-Beziehung zu Taxonomie-Begriffen.
Wie wir gesehen haben, verwendet WordPress eine Vielzahl von Beziehungen, um Daten in 10 seiner 11 Datenbanktabellen zu verknüpfen. Der einzige Tisch, den ich hier nicht erwähnt habe, ist wp_options
, denn das ist nicht mit anderen Tabellen verknüpft, sondern speichert lediglich Daten über die Site und nicht den Inhalt. Ich werde das später in dieser Serie ausführlicher behandeln.
Durch das Verständnis der One-to-One-, One-to-Many- und Many-to-Many-Beziehungen in WordPress können Sie Wege finden, wie Sie Ihre Daten bearbeiten und benutzerdefinierte Abfragen in Ihrem Design und / oder Ihren Plugins schreiben können.
Im nächsten Teil dieser Serie werde ich die Inhaltstypen ausführlicher behandeln und die in der WordPress-Datenbank gespeicherten Inhaltstypen sowie die Ähnlichkeiten und Unterschiede zwischen ihnen untersuchen.