sql >> Database >  >> RDS >> Database

WordPress – Achter de schermen, deel 2

In deel 1 van deze serie heb ik laten zien hoe je WordPress lokaal installeert en hoe je een WordPress-database importeert in Vertabelo. In dit artikel gaan we dieper in op de tabellen in de WordPress-database.

Een snelle blik op het WordPress-databasemodel en het dashboard

In het vorige deel heb ik de WordPress-database geïmporteerd in onze online tool voor databasemodellering. Voor de goede orde, de structuur van de database is als volgt:




Er zijn een aantal belangrijke feiten over het WordPress-databasemodel die u moet begrijpen voordat we beginnen:

  • Elke WordPress-site gebruikt exact dezelfde databasestructuur. Het bevat 11 tabellen en elke WordPress-site gebruikt ze op de achtergrond. De meeste WordPress-plug-ins gebruiken de database ook zonder wijzigingen in het databasemodel. Het model moet flexibel genoeg zijn om alle verschillende plug-ins te kunnen bevatten. Natuurlijk kunnen makers van plug-ins aangepaste tabellen toevoegen voor specifieke plug-ins als de gegevensstructuur aanzienlijk verschilt of als hun plug-in grote hoeveelheden gegevens opslaat.
  • De WordPress-database heeft geen beperkingen voor externe sleutels . Dit komt doordat WordPress de MyISAM-opslagengine gebruikt, die geen externe sleutels ondersteunt. Tabellen omzeilen dit door attributen te hebben die niet-verbonden "buitenlandse sleutel"-achtige waarden opslaan, zodat de externe sleutelbeperking niet door de database wordt gecontroleerd. Bijvoorbeeld de post_author attribuut in de wp_posts tabel is een “referentie” naar het “ID” attribuut in de wp_users tafel.
  • De meeste tabellen gebruiken een primaire sleutel met één kolom. Ze worden ofwel gewoon "ID" genoemd (in de wp_users en de wp_posts tabel), of meta_id /umeta_id (in de metatabellen:wp_postmeta , wp_commentmeta en wp_usermeta ), of een combinatie van de tabelnaam en het achtervoegsel "_id" (alle andere tabellen). De enige uitzondering op deze regels zijn de wp_term_relationships tabel, waar de primaire sleutel uit de twee attributen bestaat:object_id en term_taxonomy_id . Attributen die een primaire sleutel zijn of deel uitmaken van een primaire sleutel, zijn van het type bigint(20). Primaire sleutels met één kenmerk hebben ook de eigenschap auto-increment ingesteld op "Ja".

Berichten en pagina's

De belangrijkste reden om WordPress te gebruiken, is om inhoud te maken en te manipuleren en deze aan het publiek te presenteren. Daartoe biedt WordPress ons twee soorten inhoud:Pagina's en Berichten .

Pagina's worden gebruikt om statische inhoud weer te geven . Ze gebruiken geen tags of categorieën en worden niet op datum weergegeven. Ook staan ​​ze geen opmerkingen of delen op sociale media toe. Pagina's kunnen subpagina's hebben. Over ons pagina's zijn goede voorbeelden van dit type.

Aan de andere kant, Berichten zijn gerangschikt op datum en kunnen worden georganiseerd met behulp van categorieën en tags . Berichten kunnen dankzij hun chronologische volgorde worden gebruikt in RSS-feeds. Berichten kunnen geen "subposts" hebben, maar reacties en delen op sociale media zijn mogelijk. Berichten zijn in wezen blogberichten. Dit is begrijpelijk, aangezien WordPress is voortgekomen uit een blogplatform.

De primaire tabel achter de inhoud op een WordPress-pagina heet wp_posts :

WordPress gebruikt de wp_posts tabel om pagina's, berichten en bijlagen op te slaan. We kunnen deze tabel zien als de kern van onze pagina, de plaats waar de meeste inhoud is opgeslagen. Het is belangrijk om erop te wijzen dat bijlagen daadwerkelijk op schijf worden opgeslagen en dat het record in de wp_posts tabel houdt er meer informatie over bij (wie heeft het geüpload en wanneer, enz.).

De velden in de wp_posts tafel zijn:

  • post_author – een verwijzing naar de wp_users tabel, die de auteur van het bericht aangeeft.
  • post_date – de datum en tijd waarop het record in de tabel is ingevoegd.
  • post_date_gmt – de GMT/UTC-datum en -tijd waarop een record in de tabel is ingevoegd.
  • post_content – de daadwerkelijke inhoud van het bericht.
  • post_title – de titel van het bericht.
  • post_excerpt – een samenvatting van de inhoud.
  • post_status – de huidige poststatus. WordPress gebruikt 8 standaardstatussen:"Publiceren", "Toekomst", "Concept", "In behandeling", "Privé", "Prullenbak", "Automatisch opstellen" en "Overnemen".
  • comment_status - schakelt opmerkingen in en uit op een enkele post of op een hele pagina. Er zijn twee mogelijke waarden:"open" en "gesloten".
  • ping_status - geeft aan of een bericht pingbacks en trackbacks toestaat. Like comment_status , het kan alleen de waarden "open" en "gesloten" bevatten.
  • post_password – het wachtwoord dat wordt gebruikt om het bericht te bekijken (optioneel).
  • post_name – de voor mensen leesbare url van een post_title .
  • to_ping – een lijst met URL's waarnaar WordPress pingbacks moet sturen, gescheiden door "\n".
  • pinged – een lijst met URL's waarnaar WordPress pingbacks heeft gestuurd, gescheiden door "\n".
  • post_modified – de meest recente datum en tijd waarop een bericht is gewijzigd.
  • post_modified_gmt – de GMT/UTC-datum voor post_modified .
  • post_content_filtered – gebruikt door plug-ins om dure transformaties van post-inhoud in de cache op te slaan.
  • post_parent – verwijst naar de bovenliggende post.
  • guid – Global Unique Identifier voor een post; zijn permanente URL.
  • menu_order - gebruikt voor het bestellen van inhoud.
  • post_type – het type record. Het kan de waarden "post", "page", "attachment" of door de gebruiker gedefinieerde aangepaste typen bevatten.
  • post_mime_type – het type geüploade bestanden dat alleen is gedefinieerd voor berichten met post_type = attachment . Het kan waarden bevatten zoals "image", "application/pdf" en "application/msword".
  • comment_count – het aantal reacties, pingbacks en trackbacks van het bericht.

Hier is een momentopname van de wp_posts tabel nadat ik de pagina "Over Nikola Tesla" heb toegevoegd:

Als we kijken naar de wp_posts tabel, kunnen we een paar versies van onze pagina zien. Het record met de ID = 1 heeft post_status = publish , wat betekent dat het bericht voor iedereen zichtbaar is. De comment_status = closed en ping_status = closed geeft aan dat opmerkingen en pings zijn uitgeschakeld voor dit bericht.

Alle aanvullende informatie over berichten en pagina's wordt bewaard in de wp_postmeta tafel:

De kolommen in deze tabel zijn als volgt:

  • meta_id – de primaire sleutel van de tabel.
  • post_id – een verwijzing naar de wp_posts tafel.
  • meta_key – een beschrijving van een meta_value attribuut.
  • meta_value – de werkelijk opgeslagen waarde.

De wp_postmeta tabel is waar alle informatie die niet kan worden opgeslagen in de wp_posts tafel is opgeslagen. Het wordt opgeslagen als sleutel-waardeparen, een techniek die vaak entity-attribute-value wordt genoemd (EV). De tabel kan worden gebruikt door plug-ins voor aangepaste behoeften.

WordPress-taxonomieën

Taxonomie is een mooi woord dat in feite verwijst naar het samenvoegen van dingen. WordPress heeft een aantal ingebouwde taxonomieën voor het groeperen van berichten. Bijvoorbeeld categorieën en tags zijn ingebouwde WordPress-taxonomieën. U kunt ook uw eigen aangepaste taxonomieën toevoegen aan WordPress.

De taxonomieën en hun termen worden bewaard in tabellen met de naam wp_terms , wp_term_taxonomy , en wp_term_relationships .

De wp_terms tabel slaat een lijst op met termen die worden gebruikt om objecten op uw WordPress-site te classificeren:

Deze tabel bevat alle tag- en categorienamen, evenals termen uit onze aangepaste taxonomieën. De attributen zijn als volgt:

  • term_id – de primaire sleutel van de tabel.
  • name – de naam van de term.
  • slug – de URL van name .
  • term_group – gebruikt om termen te groeperen.

Hier is de inhoud van de wp_terms tafel:

De termen worden toegewezen aan taxonomieën met behulp van de wp_term_taxonomy tafel:

De attributen in de tabel zijn:

  • term_taxonomy_id – de primaire sleutel van de tabel.
  • term_id – de verwijzing naar de wp_terms tafel.
  • taxonomy – de taxonomienaam.
  • description – een beschrijving van een term in die specifieke taxonomie.
  • parent – een verwijzing naar de bovenliggende term in de wp_terms tafel.
  • count – het aantal objecten in de wp_posts tabel die deze term in deze taxonomie gebruiken.

De wp_term_taxonomy tabel stelt ons in staat om dezelfde term te hergebruiken in verschillende taxonomieën. Merk op dat de record waar term_id = 1 heeft taxonomy = category , terwijl de andere records taxonomy = post_tag . hebben .

Om objecten te relateren die zijn opgeslagen in de wp_posts en de wp_term_taxonomy tabellen, gebruikt WordPress de wp_term_relationships tafel:

Merk op dat dit de enige tabel in het model is met een sleutel die uit meer dan één attribuut bestaat.

De wp_term_relationships tabel heeft de volgende kenmerken:

  • object_id – een verwijzing naar de wp_posts tafel.
  • term_taxonomy_id – een verwijzing naar de wp_term_taxonomy tafel.
  • term_order – de term bestelling voor een specifiek object.

We hebben hier zes records die zes records verbinden uit de wp_term_taxonomy tabel met de post (object_id = 6 ).

Opmerkingen en WordPress-gegevensmodellering

We zijn erin geslaagd om wat inhoud op onze WordPress-pagina te plaatsen. Dat is leuk, maar in de meeste gevallen willen we feedback krijgen van het publiek. En dat is de rol van de commentaarfunctie.

Om reacties op posts te bekijken, kunnen we simpelweg "Laat een reactie achter" gebruiken of klikken op "X Comment" (waarbij X staat voor het aantal reacties op de post).

Onze eerste post heeft al één opmerking. Wanneer we erop klikken, zien we dat het een automatische opmerking is die wordt veroorzaakt door pingback. We voegen nog een opmerking toe aan dat bericht:

We zien nu twee opmerkingen voor onze post, maar wat zit er allemaal achter in de database?

Aan de tabelnaam kun je raden dat de wp_comments tabel wordt gebruikt om opmerkingen op onze WordPress-pagina op te slaan:

De kenmerken spreken meestal voor zich, maar we zullen er toch een aantal nader bekijken.

De comment_post_ID is een verwijzing naar de wp_posts tafel; het geeft aan welke post reacties heeft ontvangen. Voor de eerste opmerking kunnen we zien dat het eigenlijk een pingback was en dat de "auteur" een ander bericht is. Voor de tweede opmerking kunnen we zien dat ik de auteur ben. Let ook op de comment_agent bevat wat basisinformatie over het systeem en de computer die zijn gebruikt om een ​​opmerking te plaatsen.

Het belangrijkste idee achter alle drie de metatabellen in het model is om gegevens op te slaan die we niet in onze primaire tabel willen opslaan. De wp_commentmeta is gerelateerd aan de wp_comments tabel op dezelfde manier als de wp_postmeta tabel is gerelateerd aan de wp_posts tafel.

WordPress-gebruikers zien

Nadat onze pagina online is, kan iedereen hem zien. WordPress-gebruikers zijn degenen die, op basis van hun toestemmingsstatus, wijzigingen kunnen aanbrengen in onze site en de inhoud ervan.

Nu zullen we een kijkje nemen in de wp_users en de wp_usermeta tabellen in de MySQL-database.

Zoals verwacht, de wp_users bovenstaande tabel bevat basisgegevens voor alle gebruikers die zijn geregistreerd op onze WordPress-site. Merk op dat de user_pass is gecodeerd en dat NewUser de user_activation_key . heeft attribuut gevuld terwijl edrkusic dat veld leeg heeft.

While-kenmerken vermeld in de wp_users tabel zijn wat we zouden verwachten in elke WordPress-site, de wp_usermeta tabel wordt gebruikt om waarden op te slaan die specifiek kunnen zijn voor een bepaald project:

Merk bijvoorbeeld op dat de record met umeta_id = 25 bevat de waarde “sommige biografische info” , dezelfde tekst die we in het dashboard hebben getypt tijdens het bewerken van NewUser. De user_id attribuut in die record heeft waarde 2 , wat overeenkomt met de NewUser's ID in de wp_users tafel. Het is duidelijk dat de user_id is een verwijzing naar de wp_users tafel.

Links en opties in WordPress

Het idee achter de wp_links tabel is om links naar andere sites op te slaan:

Het hebben van links naar andere sites was erg populair in het begin van het blogtijdperk; tegenwoordig wordt het steeds minder gebruikt. Vanaf WordPress versie 3.5 werd linkbeheer zelfs verwijderd uit de admin-interface. Toch wordt deze tabel bewaard om compatibiliteit met oudere versies te bieden.

De wp_options tabel slaat gegevens op over WordPress-installatie, siteconfiguratie, thema, plug-ins en widgets:

Het wordt ook gebruikt om tijdelijke gegevens in de cache op te slaan. De EAV-logica is ook aanwezig in deze tabel, net als in wp_usermeta , wp_postmeta en wp_commentmeta . Het attribuut option_name speelt de rol van de sleutel, terwijl het attribuut option_value is de overeenkomstige waarde. De andere twee attributen in de tabel zijn het primaire sleutelattribuut option_id en autoload , die bepaalt of een optie automatisch uit de database wordt geladen.

Het databasemodel van WordPress evalueren

Het databasemodel achter WordPress volgt verschillende goede regels en conventies voor databaseontwerp niet. Wanneer we een database ontwerpen voor een specifiek doel, waarbij we vooraf alle gewenste functionaliteiten kennen, kunnen we al die regels volgen. Maar WordPress moet alles dekken wat iedereen in gedachten zou kunnen hebben, dus het opofferen van externe sleutels en het gebruik van EAV is iets dat moet worden gedaan. Ik zou het ID-kenmerk in alle tabellen hetzelfde noemen en hetzelfde doen met de "buitenlandse sleutels". Ik zou bijvoorbeeld post_author . niet gebruiken in de wp_posts tabel, maar ik blijf bij users_id . Afgezien hiervan moet ik het ermee eens zijn dat de WordPress-database echt een geweldig model is voor zijn doel.

Wat denk je? Laat het ons weten in het opmerkingengedeelte.


  1. Prestaties van SUBSTR op CLOB

  2. Configureer SQL Server Always ON-beschikbaarheidsgroepen tussen twee synchrone replica's. Deel 2

  3. localhost versus 127.0.0.1 in mysql_connect()

  4. Hoe te ontsnappen aan één citaat, speciale tekens in MySQL