Verstehen und Arbeiten mit Beziehungen zwischen Daten in WordPress

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.

Eins-zu-Eins-Beziehungen

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:

  • Post-ID und Post-Inhalt
  • Posttitel und Postinhalt
  • Post-ID und Post-Slug
  • Kommentar-ID und Kommentar-Inhalt
  • Benutzer-ID und Benutzername

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.

Eins-zu-Viele-Beziehungen

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:

  • Posten und Post-Metadaten
  • Beiträge und Benutzer
  • Benutzer und Benutzer-Metadaten
  • Taxonomien und Taxonomiebedingungen

Wieder geht die Liste weiter. Da dies ein wichtiges Thema in WordPress ist, werfen wir einen genaueren Blick auf die One-to-Many-Beziehungen.

Eins-zu-Viele-Beziehungen mit Beiträgen

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.

Posts-to-Posts

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-to-Post-Metadaten

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.

Beiträge zu Kommentaren

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.

Beiträge an Benutzer

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.

Eins-zu-Viele-Beziehungen, die keine Beiträge beinhalten

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.

Metadaten von Benutzern zu Benutzern

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.

Kommentar-zu-Kommentar-Metadaten

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.

Kommentare an Benutzer

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.

Viele-zu-Viele-Beziehungen

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:
  • Beitrag 1 hat die Begriffe 1 und 3
  • Beitrag 2 hat Begriff 2
  • post 3 hat term 4
  • Beitrag 4 hat die Begriffe 1 und 3

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.

Ein Hinweis zu Links

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.

Zusammenfassung

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.