Entender y trabajar con relaciones entre datos en WordPress

En la primera parte de esta serie sobre datos en WordPress, proporcioné una descripción general de las tablas de la base de datos de WordPress y las tablas que se utilizan para almacenar qué tipo de datos. En esta segunda parte, describiré cómo WordPress gestiona las relaciones entre esos datos..

Como verá, WordPress utiliza tres tipos de relación de datos: uno a uno, uno a muchos y muchos a muchos. Veré cada uno de estos y lo que significan para su sitio de WordPress.

Relaciones Uno a Uno

Una relación uno a uno es la relación más simple de todas: simplemente significa que un registro está relacionado solo con otro. Los datos como este generalmente se almacenan en una tabla (aunque no siempre, como veremos más adelante en este tutorial).

Los ejemplos de relaciones uno a uno en WordPress incluyen:

  • publicar ID y publicar contenido
  • publicar título y publicar contenido
  • post ID y post slug
  • ID de comentario y contenido del comentario
  • ID de usuario y nombre de usuario

La lista podría continuar, pero el punto principal es que cualquiera de los dos registros que se almacenan en diferentes campos en una fila de una tabla tienen una relación de uno a uno.

Sin embargo, las relaciones individuales son el tipo menos interesante de relación de base de datos. Así que sin más preámbulos, pasemos a un tipo de relación que WordPress usa mucho - uno a muchos.

Relaciones uno a muchos

La relación de uno a muchos es muy común en las bases de datos, y es lo que hace que una base de datos sea más poderosa que una tabla "plana", como una hoja de cálculo. Esto ocurre cuando un registro tiene una relación con más de otro registro. 

En WordPress, la mayoría de las relaciones uno a varios se crean mediante un enlace entre dos tablas de base de datos, utilizando un identificador único para unir las dos. Así, por ejemplo, la ID del mensaje registro será único para cada puesto almacenado en el wp_posts mesa, pero también se utilizará en el wp_comments tabla para identificar en qué publicación se envió cada comentario. Esto significa que cada ID del mensaje El valor aparecerá solo una vez en el wp_posts mesa, pero podría aparecer varias veces (o no aparecer) en la wp_comments mesa.

Algunos otros ejemplos en WordPress incluyen:

  • mensajes y metadatos de mensajes
  • mensajes y usuarios
  • usuarios y metadatos de usuario
  • Taxonomías y términos de taxonomía.

Una vez más, la lista continúa. Como este es un tema importante en WordPress, echemos un vistazo a las relaciones de uno a muchos con más detalle..

Relaciones uno a muchos que involucran publicaciones

La tabla que está conectada a la mayoría de las otras tablas es la wp_posts tabla, y la mayoría de las relaciones que crean estas conexiones son relaciones de uno a muchos.

Como se puede ver en el siguiente diagrama, el wp_posts tabla está vinculada a otras cuatro tablas:

Además de esto, las publicaciones también pueden tener una relación de uno a muchos con otras publicaciones, en forma de archivos adjuntos o páginas principales.

Echemos un vistazo a estas relaciones con más detalle..

Publicaciones a publicaciones

Como se explicó anteriormente, los datos almacenados en el wp_posts la tabla puede tener una relación de uno a varios con otros datos en la misma tabla; sin embargo, esta relación no es entre lo que usted pensaría como publicaciones, sino que se da entre publicaciones y archivos adjuntos o páginas y otras páginas. Después de todo, los archivos adjuntos y las páginas son tipos de mensajes..

Un archivo adjunto almacenado en el wp_posts mesa tendrá un registro en el post_parente campo, que será el ID de la publicación a la que se adjunta el archivo adjunto (con disculpas por la repetición). Esta es una relación de uno a muchos porque cada archivo adjunto solo tendrá un padre, mientras que cada publicación podría tener muchos archivos adjuntos. Esto se aplicará incluso si ha utilizado el Administrador de medios para agregar un archivo adjunto a otra publicación: solo la publicación a la que se agregó originalmente se almacenará en la base de datos como su principal..

Las publicaciones también pueden tener una relación de uno a varios con otras publicaciones cuando una página se especifica como la principal de otra. El registro se almacena contra la página secundaria, en el post_parente campo - de nuevo este será el ID del mensaje de la página principal. Esta es una relación de uno a varios porque las páginas principales pueden tener muchas páginas secundarias, pero las páginas secundarias solo tendrán una página principal.

Al pensar en las relaciones entre publicaciones como esta, es importante recordar que al considerar el manejo de datos de WordPress, las publicaciones no son lo que normalmente se denomina publicaciones. Incluyen páginas, archivos adjuntos y otros tipos de publicaciones, todos los cuales se almacenan en el wp_posts mesa.

Metadatos Post-to-Post

Publicar metadatos se almacena en su propia tabla wp_postmeta. Esta tabla solo incluye cuatro campos - para el ID del mensaje, la meta_id, La clave y el valor. Una publicación puede tener muchos elementos de metadatos de publicación asociados, pero cada registro de metadatos de la publicación solo se vinculará a una publicación..

Post-a-Comentarios

Los comentarios también tienen su propia mesa., wp_comments. Cada comentario se relacionará con solo una publicación, mientras que cada publicación puede tener múltiples comentarios almacenados en su contra. Al igual que con todas las otras tablas vinculadas a wp_posts, la ID del mensaje campo se utiliza para el enlace (en el comentario_post_id campo en wp_comments).

los wp_comments La tabla tiene 15 campos por defecto, para almacenar datos sobre el autor, la dirección de correo electrónico del autor, el comentario en sí y su estado de aprobación. También está vinculado a la wp_users Tabla, como veremos en la siguiente sección..

Los comentarios también tienen sus propios metadatos, almacenados en otra tabla, a la que llegaré en breve..

Mensajes a usuarios

Cada publicación se adjunta a la wp_users mesa a través de la user_id registro, que se almacena en el post_autor campo en wp_posts. Esta es una relación de uno a varios porque cada publicación tiene un solo autor, pero cada usuario puede ser el autor de varias publicaciones..

La relación entre las publicaciones y los usuarios es una rom diferente a la de las publicaciones y los comentarios o metadatos, ya que su naturaleza es de un usuario, varias publicaciones, no una publicación de múltiples comentarios o registros de datos mete. Es por esto que la user_id campo proporciona el enlace en lugar de la ID del mensaje campo.

Relaciones uno a muchos que no involucran publicaciones

También hay tres relaciones que son de uno a muchos y no involucran publicaciones. Dos de estos involucran metadatos: la relación entre los comentarios y sus metadatos, y los usuarios y sus metadatos..

Metadatos de usuario a usuario

WordPress almacena metadatos adicionales sobre los usuarios en el wp_usermeta mesa. Generalmente se usa para datos no estándar sobre usuarios, como metadatos sobre superadmins en una instalación multisitio y metadatos sobre los colores de administrador que un usuario ha seleccionado si estos no son los predeterminados.. 

La mayoría de los datos de los usuarios estarán en el wp_users mesa. Las dos tablas están vinculadas a través de la user_id El campo y un registro de usuario tendrán varios elementos de metadatos asociados, mientras que cada elemento de metadatos solo se aplicará a un usuario..

Metadatos de comentarios a comentarios

Una vez más, la mayoría de los datos sobre los comentarios se almacenan en el wp_comments tabla junto con el comentario en sí, pero el wp_commentmeta La tabla se utiliza para almacenar metadatos adicionales, como los datos creados por complementos como Akismet. La relación es la misma que entre usuarios y usermeta..

Comentarios a los usuarios

La relación final de uno a muchos es entre comentarios y usuarios. los wp_comments tabla incluye el user_id campo, que se puede usar para almacenar la ID de usuario cuando un usuario que ha iniciado sesión ha publicado un comentario. Tenga en cuenta que este campo no es obligatorio para aquellos sitios donde los usuarios no tienen que iniciar sesión para comentar.

Relaciones de muchos a muchos

El tipo final de relación de base de datos es la relación de uno a muchos, donde el enlace muchos va en ambos sentidos. Esto solo se usa una vez en WordPress, para términos de taxonomía (incluidas categorías y etiquetas, ya que son simplemente taxonomías). Una publicación puede tener muchos términos asignados y un término puede asignarse a varias publicaciones.

WordPress crea esta relación de la misma manera que cualquier otra base de datos con una base de datos de muchos a la vez: mediante el uso de una tabla provisional que vincula las dos tablas con los datos clave. Este es el wp_term_relationships mesa, que une el wp_posts mesa al wp_term_taxonomy mesa. 

Nota: esta tabla también vincula el wp_links mesa al wp_term_taxonomy La tabla, ya que los enlaces se comportan de la misma manera que las publicaciones, en breve iré a los enlaces..

Esto se explica más fácilmente mirando primero las dos tablas exteriores. los wp_posts La tabla contiene datos de cada publicación, mientras que wp_term_taxonomy la tabla contiene datos sobre cada término, incluida la taxonomía en la que se encuentra y su ID. 

Para crear un enlace entre un término en el wp_term_taxonomy mesa y un post en el wp_posts mesa, WordPress crea un registro en el wp_term_relationships mesa, que incluye el ID del mensaje y el term_id (almacenado como object_id y term_taxonomy_id respectivamente en el wp_term_relationships mesa). Esto significa que el wp_term_relationships La tabla puede incluir varios registros para cada publicación y varios registros para cada término, creando la relación de muchos a muchos.

El siguiente diagrama muestra cómo funciona esto:

En el ejemplo anterior, las publicaciones tienen los siguientes términos:
  • puesto 1 tiene términos 1 y 3
  • puesto 2 tiene término 2
  • puesto 3 tiene término 4
  • puesto 4 tiene términos 1 y 3

También puede verlo de otra manera, por ejemplo, el término 3 se relaciona con las publicaciones 1 y 4.

Sin embargo las cosas no se detienen ahí. Hay una cuarta mesa, la wp_terms mesa. Esto contiene datos sobre cada término, a saber, el nombre, el slug y la descripción de cada término. Cada término tiene un solo registro en el wp_terms tabla, por lo que la relación entre eso y la wp_term_taxonomy mesa es en realidad uno a uno Hablando teóricamente, no hay razón para que estos datos no puedan mantenerse en el wp_term_taxonomy mesa, pero no es.

Una nota sobre los enlaces

Los enlaces, o el blogroll, es una característica de WordPress que es mucho menos prominente de lo que era antes. De hecho, ya que los enlaces de la versión 3.5 se han desactivado en el administrador de forma predeterminada; Sin embargo, sí tienen su propia mesa: la wp_links mesa. 

Esto es muy similar al wp_posts mesa. Después de todo, los enlaces son un tipo de contenido muy similar al de las publicaciones) y tienen la misma relación de muchos a muchos con los términos de taxonomía.

Resumen

Como hemos visto, WordPress utiliza una variedad de relaciones para vincular datos en 10 de sus 11 tablas de base de datos. La única mesa que no he mencionado aquí es wp_options, porque eso no está vinculado a ninguna otra tabla, ya que simplemente almacena datos sobre el sitio, en lugar de sobre el contenido. Cubriré eso con más detalle más adelante en esta serie..

Al comprender las relaciones de uno a uno, de uno a muchos y de muchos a muchos en WordPress, esto puede ayudarlo a identificar formas de manipular sus datos y escribir consultas personalizadas en su tema y / o complementos..

En la siguiente parte de esta serie, cubriré los tipos de contenido con más detalle, observando los tipos de contenido almacenados en la base de datos de WordPress y las similitudes y diferencias entre ellos..