In het eerste deel van deze serie over gegevens in WordPress gaf ik een overzicht van de WordPress-databasetabellen en welke tabellen worden gebruikt om wat voor soort gegevens op te slaan. In dit tweede deel zal ik beschrijven hoe WordPress de relaties tussen die gegevens beheert.
Zoals u zult zien, gebruikt WordPress drie soorten gegevensrelaties: één-op-één, één-op-veel en veel-op-veel. Ik zal kijken naar elk van deze en wat ze betekenen voor uw WordPress-site.
Een één-op-één relatie is de eenvoudigste relatie van allemaal - het betekent simpelweg dat het ene record gerelateerd is aan het andere. Gegevens zoals deze worden over het algemeen in één tabel opgeslagen (hoewel niet altijd, zoals we verderop in deze tutorial zullen zien).
Voorbeelden van een-op-eenrelaties in WordPress zijn onder andere:
De lijst kan doorgaan, maar het belangrijkste punt is dat twee records die zijn opgeslagen in verschillende velden in één rij van een tabel een één-op-één relatie hebben.
Een-op-eenrelaties vormen echter de minst interessante vorm van een databaserelatie. Dus zonder verder oponthoud gaan we naar een relatietype dat veel wordt gebruikt door WordPress - one-to-many.
Een tot veel relaties zijn heel gebruikelijk in databases en maken een database krachtiger dan een 'platte' tabel zoals een spreadsheet. Dit gebeurt wanneer een record een relatie heeft met meer dan één ander record.
In WordPress worden de meeste relaties één-op-veel gemaakt door een koppeling tussen twee databasetabellen, waarbij een unieke ID wordt gebruikt om de twee samen te voegen. Dus bijvoorbeeld de post_id
record zal uniek zijn voor elke post die is opgeslagen in de wp_posts
tabel, maar zal ook worden gebruikt in de wp_comments
tabel om te bepalen naar welk bericht elke reactie is gepost. Dit betekent dat elk post_id
waarde verschijnt maar één keer in de wp_posts
tabel, maar kan meerdere keren voorkomen - of helemaal niet - in de wp_comments
tafel.
Enkele andere voorbeelden in WordPress zijn:
Nogmaals, de lijst gaat maar door. Omdat dit een belangrijk onderwerp is in WordPress, laten we eens kijken naar de één-op-veel relaties in meer detail.
De tabel die is verbonden met de meeste andere tabellen is de wp_posts
tabel en de meeste relaties die deze verbindingen maken, zijn een-op-veel relaties.
Zoals u in het onderstaande schema kunt zien, is de wp_posts
tabel is gekoppeld aan vier andere tabellen:
Daarnaast kunnen berichten ook een een-op-veel relatie hebben met andere berichten, in de vorm van bijlagen of bovenliggende pagina's.
Laten we deze relaties eens nader bekijken.
Zoals hierboven uitgelegd, gegevens opgeslagen in de wp_posts
tabel kan een één-op-veel relatie hebben met andere gegevens in dezelfde tabel; deze relatie staat echter niet tussen wat u zou denken als berichten, maar in plaats daarvan tussen berichten en bijlagen of pagina's en andere pagina's. Bijlagen en pagina's zijn immers berichttypen.
Een bijlage opgeslagen in de wp_posts
tabel zal een record hebben in de post_parent
veld, dat het ID is van het bericht waaraan de bijlage is gehecht (met excuses voor de herhaling!). Dit is een één-op-veel relatie omdat elke bijlage slechts één ouder heeft, terwijl elke post veel bijlagen kan hebben. Dit is ook van toepassing als je Media Manager hebt gebruikt om een bijlage aan een ander bericht toe te voegen - alleen het bericht waaraan het oorspronkelijk is toegevoegd, wordt als ouder in de database opgeslagen.
Berichten kunnen ook een één-op-veel relatie hebben met andere berichten wanneer de ene pagina wordt opgegeven als de bovenliggende pagina van een andere. Het record wordt opgeslagen tegen de onderliggende pagina in de post_parent
veld - opnieuw zal dit het zijn post_id
van de bovenliggende pagina. Dit is een één-op-veelrelatie omdat bovenliggende pagina's veel onderliggende pagina's kunnen hebben, maar onderliggende pagina's hebben slechts één bovenliggende pagina.
Wanneer u nadenkt over relaties tussen berichten zoals deze, is het belangrijk om te onthouden dat wanneer u de verwerking van WordPress-gegevens overweegt, posts niet zijn wat u normaal gesproken naar berichten verwijst. Ze omvatten pagina's, bijlagen en andere berichttypen, die allemaal zijn opgeslagen in de wp_posts
tafel.
Post-metagegevens worden opgeslagen in een eigen tabel wp_postmeta
. Deze tabel bevat slechts vier velden - voor de post_id
, de meta_id
, de sleutel en de waarde. In een bericht kunnen veel post-metagegevensitems zijn gekoppeld, maar elke postmetagegevensrecord is alleen aan één bericht gekoppeld.
Reacties hebben ook een eigen tabel, wp_comments
. Elke opmerking heeft betrekking op slechts één bericht, terwijl voor elk bericht meerdere opmerkingen kunnen worden opgeslagen. Zoals met alle andere gekoppelde tabellen wp_posts
, de post_id
veld wordt gebruikt voor de link (in de comment_post_id
veld in wp_comments
).
De wp_comments
tabel heeft standaard 15 velden, om gegevens over de auteur, het e-mailadres van de auteur, de opmerking zelf en de goedkeuringsstatus op te slaan. Het is ook gekoppeld aan de wp_users
tabel, zoals we in het volgende gedeelte zullen zien.
Reacties hebben ook hun eigen metadata, opgeslagen in een andere tabel, die ik binnenkort zal bespreken.
Elk bericht is gekoppeld aan de wp_users
tafel via de gebruikersnaam
record, dat is opgeslagen in de post_author
veld in wp_posts
. Dit is een één-op-veel-relatie omdat elk bericht maar één auteur heeft maar elke gebruiker de auteur van meerdere berichten kan zijn.
De relatie tussen berichten en gebruikers is anders dan die tussen berichten en opmerkingen of metagegevens, omdat deze van één gebruiker is, meerdere berichten, niet één die meerdere reacties of meteogegevensrecords plaatst. Dit is waarom het gebruikersnaam
veld geeft de link in plaats van de post_id
veld-.
Er zijn ook drie relaties die één-op-veel zijn en geen betrekking hebben op berichten. Twee daarvan hebben betrekking op metadata - de relatie tussen commentaren en hun metadata, en gebruikers en hun metadata.
WordPress slaat extra metadata op over gebruikers in de wp_usermeta
tafel. Dit wordt over het algemeen gebruikt voor niet-standaard gegevens over gebruikers, zoals metadata over superadmins in een installatie op meerdere locaties en metadata over de beheerkleuren die een gebruiker heeft geselecteerd als dit niet de standaardkleur is.
De meeste gegevens van gebruikers bevinden zich in de wp_users
tafel. De twee tabellen zijn gekoppeld via de gebruikersnaam
veld en één gebruikersrecord hebben meerdere items met metagegevens eraan gekoppeld, terwijl elk item metagegevens alleen op één gebruiker van toepassing is.
Nogmaals, de meeste gegevens over opmerkingen worden opgeslagen in de wp_comments
tabel samen met de opmerking zelf, maar de wp_commentmeta
tabel wordt gebruikt om extra metadata op te slaan, zoals gegevens die zijn gemaakt door plug-ins zoals Akismet. De relatie is hetzelfde als tussen gebruikers en usermeta.
De laatste een-op-veel-relatie is tussen opmerkingen en gebruikers. De wp_comments
tabel bevat de gebruikersnaam
veld, dat kan worden gebruikt om de gebruikers-ID op te slaan wanneer een ingelogde gebruiker een opmerking heeft gepost. Houd er rekening mee dat dit veld niet verplicht is voor die sites waar gebruikers niet hoeven te worden aangemeld voor commentaar.
De laatste soort databaserelatie is de één-op-veel-relatie, waarbij de vele koppelingen beide kanten op gaan. Dit wordt maar één keer gebruikt in WordPress, voor taxonomietermen (inclusief categorieën en tags omdat dit eenvoudigweg taxonomieën zijn). Aan een bericht kunnen veel termen zijn toegewezen en een term kan aan meerdere berichten worden toegewezen.
WordPress maakt deze relatie op dezelfde manier als elke andere database met manay-to-many-database: door een tussentabel te gebruiken die de twee tabellen verbindt met de kerngegevens. Dit is de wp_term_relationships
tabel, die de wp_posts
tafel voor de wp_term_taxonomy
tafel.
Opmerking: deze tabel koppelt ook de wp_links
tafel voor de wp_term_taxonomy
tabel, aangezien koppelingen zich op ongeveer dezelfde manier gedragen als berichten - ik kom binnenkort naar links.
Dit wordt het gemakkelijkst uitgelegd door eerst naar de twee afgelegen tafels te kijken. De wp_posts
tabel bevat gegevens over elk bericht, terwijl de wp_term_taxonomy
tabel bevat gegevens over elke term, inclusief de taxonomie en de ID.
Een koppeling maken tussen een term in de wp_term_taxonomy
tafel en een bericht in de wp_posts
tabel, WordPress maakt een record in de wp_term_relationships
tabel, waarin de post_id
en de term_id
(opgeslagen als object_id
en term_taxonomy_id
respectievelijk in de wp_term_relationships
tafel). Dit betekent dat de wp_term_relationships
tabel kan meerdere records voor elk bericht bevatten en meerdere records voor elke term, waardoor de veel-op-veel-relatie ontstaat.
Het onderstaande diagram laat zien hoe dit werkt:
In het bovenstaande voorbeeld hebben de berichten de volgende voorwaarden:Je kunt het ook op de andere manier bekijken. Term 3 heeft bijvoorbeeld betrekking op berichten 1 en 4.
Maar daar stopt het niet. Er is een vierde tafel, de wp_terms
tafel. Dit bevat gegevens over elke term, namelijk de naam, slak en beschrijving voor elke term. Elke term heeft slechts één record in de wp_terms
tabel, dus de relatie tussen die en de wp_term_taxonomy
tabel is eigenlijk één-op-één. Theoretisch gesproken is er geen reden waarom deze gegevens niet konden worden bewaard in de wp_term_taxonomy
tafel, maar dat is het niet.
Links, of de blogroll, is een kenmerk van WordPress dat veel minder prominent is dan het ooit was. In feite zijn links van versie 3.5 standaard uitgeschakeld in de admin; ze hebben echter hun eigen tabel: de wp_links
tafel.
Dit lijkt erg op de wp_posts
tafel. Verbindingen zijn immers een inhoudstype dat sterk lijkt op berichten) en hebben dezelfde veel-op-veel-relatie met taxonomietermen.
Zoals we hebben gezien, gebruikt WordPress verschillende relaties om gegevens te koppelen in 10 van de 11 databasetabellen. De enige tafel die ik hier niet heb genoemd, is wp_options
, omdat dat niet aan andere tabellen is gekoppeld, omdat het eenvoudig gegevens over de site opslaat, in plaats van over inhoud. Ik zal dat later in deze serie in meer detail bespreken.
Door de één-op-één, één-op-veel en veel-op-veel relaties in WordPress te begrijpen, kan dit u helpen manieren te vinden om uw gegevens te manipuleren en aangepaste query's in uw thema en / of plug-ins te schrijven.
In het volgende deel van deze serie zal ik inhoudstypen in meer detail behandelen, kijkend naar de soorten inhoud die zijn opgeslagen in de WordPress-database en de overeenkomsten en verschillen daartussen.