Comprensione e utilizzo delle relazioni tra i dati in WordPress

Nella prima parte di questa serie sui dati in WordPress, ho fornito una panoramica delle tabelle del database di WordPress e quali tabelle sono utilizzate per memorizzare il tipo di dati. In questa seconda parte illustrerò come WordPress gestisce le relazioni tra i dati.

Come vedrai, WordPress utilizza tre tipi di relazioni dati: one-to-one, one-to-many e many-to-many. Vedrò ognuno di questi e cosa significano per il tuo sito WordPress.

Relazioni uno-a-uno

Una relazione uno-a-uno è la relazione più semplice di tutti - significa semplicemente che un record è correlato a un altro. Dati come questo sono generalmente memorizzati in una tabella (anche se non sempre, come vedremo più avanti in questo tutorial).

Esempi di relazioni one-to-one in WordPress includono:

  • inserisci ID e pubblica contenuti
  • Pubblica il titolo e pubblica il contenuto
  • post ID e post slug
  • commenta l'ID e commenta il contenuto
  • ID utente e nome utente

L'elenco potrebbe continuare, ma il punto principale è che tutti e due i record che sono memorizzati in campi diversi in una riga di una tabella hanno una relazione uno a uno.

Le relazioni uno-a-uno, tuttavia, sono il tipo meno interessante di relazione tra database. Quindi, senza ulteriori indugi, passiamo a un tipo di relazione usato molto da WordPress - uno-a-molti.

Relazioni uno-a-molti

Le relazioni da uno a molti sono molto comuni nei database e sono ciò che rende un database più potente di una tabella "piatta" come un foglio di calcolo. Questi si verificano quando un record ha una relazione con più di un altro record. 

In WordPress, la maggior parte delle relazioni uno-a-molti sono create da un collegamento tra due tabelle del database, utilizzando un identificativo univoco per unire le due. Quindi per esempio, il post_id il record sarà unico per ogni post memorizzato in wp_posts tavolo, ma sarà usato anche nel wp_comments tabella per identificare in quale post è stato pubblicato un commento. Questo significa che ciascuno post_id valore apparirà solo una volta nel wp_posts tabella ma potrebbe apparire più volte - o non del tutto - nel wp_comments tavolo.

Alcuni altri esempi in WordPress includono:

  • post e post metadati
  • post e utenti
  • utenti e metadati dell'utente
  • tassonomie e termini di tassonomia

Di nuovo, la lista continua. Poiché questo è un argomento importante in WordPress, diamo un'occhiata alle relazioni uno-a-molti in modo più dettagliato.

Relazioni uno-a-molti che coinvolgono messaggi

La tabella che è collegata alla maggior parte delle altre tabelle è la wp_posts tabella e la maggior parte delle relazioni create da queste connessioni sono relazioni uno-a-molti.

Come puoi vedere nello schema qui sotto, il wp_posts la tabella è collegata a quattro altre tabelle:

Oltre a questo, i post possono anche avere una relazione uno-a-molti con altri post, sotto forma di allegati o pagine padre.

Diamo un'occhiata a queste relazioni in modo più dettagliato.

Messaggi-To-messaggi

Come spiegato sopra, i dati memorizzati nel wp_posts tabella può avere una relazione uno-a-molti con altri dati nella stessa tabella; tuttavia, questa relazione non è tra ciò che si potrebbe pensare di post, ma invece tra post e allegati o pagine e altre pagine. Dopo tutto, gli allegati e le pagine sono tipi di post.

Un allegato memorizzato in wp_posts tavolo avrà un record nel post_parent campo, che sarà l'ID del post a cui è allegato l'allegato (con scuse per la ripetizione!). Questa è una relazione uno-a-molti perché ogni allegato avrà un solo genitore, mentre ogni post potrebbe avere molti allegati. Questo si applica anche se hai utilizzato Media Manager per aggiungere un allegato a un altro post - solo il post a cui è stato originariamente aggiunto verrà archiviato nel database come genitore.

I post possono anche avere una relazione uno-a-molti con altri post quando una pagina viene specificata come genitore di un'altra. Il record è archiviato sulla pagina figlio, nel file post_parent campo - di nuovo questo sarà il post_id della pagina madre. Questa è una relazione uno-a-molti perché le pagine padre possono avere molte pagine figlio ma le pagine figlio avranno una sola pagina madre.

Quando si pensa alle relazioni tra post come questo, è importante ricordare che quando si prende in considerazione la gestione dei dati di WordPress, i post non sono quelli che potreste normalmente riferire come post. Includono pagine, allegati e altri tipi di post, che sono tutti archiviati nel wp_posts tavolo.

Metadati Posts-to-Post

I metadati della posta sono memorizzati nella propria tabella wp_postmeta. Questa tabella include solo quattro campi: per post_id, il meta_id, la chiave e il valore. Un post può avere molti elementi di metadati post associati ad esso, ma ogni record di metadati post sarà collegato a un solo post.

Messaggi-to-Commenti

I commenti hanno anche il loro tavolo, wp_comments. Ogni commento riguarderà solo un post, mentre ogni post può contenere più commenti memorizzati. Come con tutte le altre tabelle collegate a wp_posts, il post_id campo viene utilizzato per il collegamento (nel file comment_post_id campo in wp_comments).

Il wp_comments tabella ha 15 campi per impostazione predefinita, per memorizzare i dati sull'autore, l'indirizzo email dell'autore, il commento stesso e il suo stato di approvazione. È anche collegato al wp_users tavolo, come vedremo nella prossima sezione.

I commenti hanno anche i loro metadati, memorizzati in un'altra tabella, che arriverò a breve.

Messaggi-to-utenti

Ogni post è collegato al wp_users tavolo tramite il ID utente registrare, che è memorizzato nel post_author campo in wp_posts. Questa è una relazione uno-a-molti perché ogni post ha un solo autore ma ogni utente può essere l'autore di più post.

La relazione tra post e utenti è diversa da quella tra post e commenti o metadati perché la sua natura è di un utente, più post, non un post più commenti o record di dati di mete. Questo è il motivo per cui il ID utente campo fornisce il link invece del post_id campo.

Relazioni uno-a-molti che non implicano messaggi

Ci sono anche tre relazioni che sono uno-a-molti e non implicano post. Due di questi riguardano i metadati: la relazione tra i commenti e i relativi metadati e gli utenti e i relativi metadati.

Metadati utente-utente

WordPress memorizza ulteriori metadati sugli utenti in wp_usermeta tavolo. Generalmente viene utilizzato per dati non standard sugli utenti, come i metadati relativi ai superadmin in un'installazione multisito e metadati relativi ai colori di amministrazione selezionati dall'utente se questi non sono predefiniti. 

La maggior parte dei dati sugli utenti sarà nel wp_users tavolo. Le due tabelle sono collegate tramite il ID utente campo e un record utente avranno più elementi di metadati ad esso associati, mentre ciascun elemento di metadati si applicherà solo a un utente.

Metadati commenti ai commenti

Ancora una volta, la maggior parte dei dati sui commenti è memorizzata nel wp_comments tavolo insieme al commento stesso, ma il wp_commentmeta tabella è usata per memorizzare metadati aggiuntivi come dati creati da plugin come Akismet. La relazione è la stessa di quella tra utenti e usermeta.

Commenti-to-utenti

La relazione finale uno-a-molti è tra commenti e utenti. Il wp_comments tabella include il ID utente campo, che può essere utilizzato per memorizzare l'ID utente quando un utente che ha effettuato l'accesso ha pubblicato un commento. Si noti che questo campo non è obbligatorio per quei siti in cui gli utenti non devono essere registrati per commentare.

Relazioni molti-a-molti

Il tipo finale di relazione con il database è la relazione uno-a-molti, in cui il collegamento molti va in entrambe le direzioni. Questo è usato solo una volta in WordPress, per i termini di tassonomia (incluse categorie e tag in quanto questi sono semplicemente tassonomie). Ad un post possono essere assegnati molti termini e un termine può essere assegnato a più post.

WordPress crea questa relazione nello stesso modo di qualsiasi altro database con database manay-to-many: utilizzando una tabella temporanea che collega le due tabelle con i dati chiave. Questo è il wp_term_relationships tabella, che collega il wp_posts tavolo al wp_term_taxonomy tavolo. 

Nota: questa tabella collega anche il wp_links tavolo al wp_term_taxonomy tabella, poiché i collegamenti si comportano più o meno allo stesso modo dei post: entro breve arriverò ai link.

Questo è più facilmente spiegato guardando prima le due tabelle esterne. Il wp_posts tabella contiene dati su ogni post, mentre il wp_term_taxonomy la tabella contiene dati su ciascun termine, inclusa la tassonomia in cui si trova e il suo ID. 

Per creare un collegamento tra un termine nel wp_term_taxonomy tavolo e un post nel wp_posts tabella, WordPress crea un record nel wp_term_relationships tabella, che include il post_id e il term_id (memorizzato come object_id e term_taxonomy_id rispettivamente nel wp_term_relationships tavolo). Ciò significa che il wp_term_relationships tabella può includere più record per ogni post e più record per ogni termine, creando la relazione molti-a-molti.

Lo schema seguente mostra come funziona:

Nell'esempio sopra, i post hanno i seguenti termini:
  • il post 1 ha i termini 1 e 3
  • il post 2 ha il termine 2
  • il post 3 ha il termine 4
  • il post 4 ha i termini 1 e 3

Puoi anche guardarlo dall'altra parte: per esempio, il termine 3 si riferisce ai post 1 e 4.

Comunque le cose non si fermano qui. C'è un quarto tavolo, il wp_terms tavolo. Questo contiene dati su ogni termine, vale a dire il nome, la lumaca e la descrizione per ogni termine. Ogni termine ha solo un record nel wp_terms tavolo, quindi la relazione tra questo e il wp_term_taxonomy il tavolo è in realtà uno a uno. In teoria, non c'è motivo per cui questi dati non possano essere trattenuti nel wp_term_taxonomy tavolo, ma non lo è.

Una nota sui collegamenti

I collegamenti, o il blogroll, sono una caratteristica di WordPress che è molto meno importante di una volta. Infatti, poiché i collegamenti della versione 3.5 sono stati disattivati ​​nell'amministratore per impostazione predefinita; tuttavia, hanno il loro tavolo: il wp_links tavolo. 

Questo è molto simile al wp_posts tavolo. Dopo tutto, i collegamenti sono un tipo di contenuto molto simile ai post) e hanno la stessa relazione molti-a-molti con termini di tassonomia.

Sommario

Come abbiamo visto, WordPress utilizza una varietà di relazioni per collegare i dati in 10 delle sue 11 tabelle del database. L'unico tavolo che non ho menzionato qui è wp_options, perché non è collegato ad altre tabelle, in quanto memorizza semplicemente i dati sul sito, piuttosto che sul contenuto. Ne parlerò più in dettaglio più avanti in questa serie.

Comprendendo le relazioni one-to-one, one-to-many e many-to-many in WordPress, è possibile identificare i modi per manipolare i dati e scrivere query personalizzate nel tema e / o nei plugin.

Nella parte successiva di questa serie, tratterò i tipi di contenuti in modo più dettagliato, esaminando i tipi di contenuto memorizzati nel database di WordPress e le somiglianze e le differenze tra loro.