Forstå og jobbe med relasjoner mellom data i WordPress

I den første delen av denne serien på data i WordPress ga jeg en oversikt over WordPress database tabeller, og hvilke tabeller brukes til å lagre hva slags data. I denne andre delen skal jeg skissere hvordan WordPress styrer forholdet mellom disse dataene.

Som du ser, bruker WordPress tre typer datatilknytning - en-til-en, en til mange og mange til mange. Jeg ser på hver av disse og hva de betyr for ditt WordPress-nettsted.

En-til-en-relasjoner

Et ett-til-ett-forhold er det enkleste forholdet til alle - det betyr bare at en plate er relatert til bare en annen. Data som dette lagres vanligvis i ett bord (men ikke alltid, som vi senere vil se i denne opplæringen).

Eksempler på en-til-en-relasjoner i WordPress inkluderer:

  • post-ID og innleggsinnhold
  • post tittel og innlegg innhold
  • post-ID og post slug
  • kommentar ID og kommentar innhold
  • bruker-ID og brukernavn

Listen kunne fortsette, men hovedpoenget er at noen to poster som er lagret i forskjellige felter i en rad av et bord, har et ett til ett forhold.

En-til-en-relasjoner er imidlertid den minst interessante typen databaseforhold. Så uten videre, la oss gå videre til en relasjonstype som brukes mye av WordPress - en til mange.

En-til-mange relasjoner

Et til mange forhold er svært vanlige i databaser, og er det som gjør en database kraftigere enn et "flatt" bord, for eksempel et regneark. Disse forekommer når en plate har et forhold til mer enn en annen plate. 

I WordPress er de fleste en-til-mange relasjoner opprettet av en kobling mellom to databasetabeller, ved hjelp av en unik identifikator for å bli med i de to. Så for eksempel, POST_ID posten vil være unik for hvert innlegg lagret i wp_posts bord, men vil også bli brukt i wp_comments tabell for å identifisere hvilket innlegg hver kommentar ble postet til. Dette betyr at hver POST_ID verdien vil bare vises en gang i wp_posts bord, men kan vises flere ganger - eller ikke i det hele tatt - i wp_comments bord.

Noen andre eksempler i WordPress inkluderer:

  • innlegg og post metadata
  • innlegg og brukere
  • bruker og bruker metadata
  • taksonomier og taksonomi

Igjen fortsetter listen. Siden dette er et viktig tema i WordPress, kan vi se nærmere på de en-til-mange relasjonene.

En-til-mange relasjoner som involverer innlegg

Tabellen som er koblet til de fleste andre tabeller, er wp_posts bord, og de fleste forholdene disse forbindelsene oppretter, er en til mange relasjoner.

Som du kan se i diagrammet nedenfor, er wp_posts bordet er koblet til fire andre tabeller:

I tillegg til dette kan innlegg også ha et til mange forhold til andre innlegg, i form av vedlegg eller foreldresider.

La oss se nærmere på disse relasjonene.

Innlegg-til-innlegg

Som forklart ovenfor, data lagret i wp_posts Tabellen kan ha et til mange forhold til andre data i samme tabell; Dette forholdet er imidlertid ikke mellom det du vil tenke på som innlegg, men i stedet er det mellom innlegg og vedlegg eller sider og andre sider. Tross alt er vedlegg og sider posttyper.

Et vedlegg som er lagret i wp_posts bordet vil ha en post i post_parent feltet, som vil være ID for innlegget som vedlegget er vedlagt (med unnskyldninger for repetisjonen!). Dette er et til mange forhold fordi hvert vedlegg kun har en forelder, mens hvert innlegg kan ha mange vedlegg. Dette gjelder selv om du har brukt Media Manager til å legge til et vedlegg til et annet innlegg - bare innlegget som det ble opprinnelig lagt til, blir lagret i databasen som foreldre.

Innlegg kan også ha et til mange forhold til andre innlegg når en side er angitt som forelder til en annen. Posten er lagret mot barnesiden, i post_parent feltet - igjen vil dette være POST_ID av foreldresiden. Dette er en til mange forhold fordi foreldresider kan ha mange barnesider, men barnesider vil bare ha en foreldreside.

Når du tenker på forhold mellom innlegg som dette, er det viktig å huske at når du vurderer WordPress-datahåndtering, er innlegg ikke det du vanligvis refererer til som innlegg. De inkluderer sider, vedlegg og andre innleggstyper, som alle er lagret i wp_posts bord.

Post-til-post-metadata

Post-metadata lagres i sitt eget bord wp_postmeta. Denne tabellen inneholder bare fire felt - for POST_ID, de meta_id, nøkkelen og verdien. Ett innlegg kan ha mange elementer av postmetadata knyttet til det, men hver post-metadataoppføring vil bare være knyttet til ett innlegg.

Innlegg til kommentarer

Kommentarer har også eget bord, wp_comments. Hver kommentar vil bare forholde seg til ett innlegg mens hvert innlegg kan ha flere kommentarer lagret imot det. Som med alle de andre tabellene knyttet til wp_posts, de POST_ID feltet brukes til lenken (i comment_post_id feltet i wp_comments).

De wp_comments Tabellen har som standard 15 felt, for å lagre data om forfatteren, forfatterens e-postadresse, selve kommentaren og godkjenningsstatusen. Det er også knyttet til wp_users bord, som vi ser i neste avsnitt.

Kommentarer har også egne metadata, lagret i et annet bord, som jeg kommer til kort tid.

Innlegg-to-brukere

Hvert innlegg er knyttet til wp_users bord via bruker-ID post, som er lagret i post_author feltet i wp_posts. Dette er en til mange forhold fordi hvert innlegg har bare en forfatter, men hver bruker kan være forfatter av flere innlegg.

Forholdet mellom innlegg og brukere er forskjellig rom som mellom innlegg og kommentarer eller metadata fordi naturen er av en bruker, flere innlegg, ikke en post flere kommentarer eller mete data poster. Dette er grunnen til at bruker-ID feltet gir lenken i stedet for POST_ID felt.

En-til-mange relasjoner som ikke involverer innlegg

Det er også tre relasjoner som er en til mange og ikke involverer innlegg. To av disse involverer metadata - forholdet mellom kommentarer og deres metadata, og brukere og deres metadata.

Bruker-til-brukermetadata

WordPress lagrer ytterligere metadata om brukere i wp_usermeta bord. Dette brukes vanligvis til ikke-standarddata om brukere, for eksempel metadata om superadminer i en flersidet installasjon og metadata om adminfarger som en bruker har valgt hvis disse ikke er standard. 

De fleste dataene på brukerne vil være i wp_users bord. De to tabellene er koblet via bruker-ID feltet og en brukeroppføring vil ha flere elementer med metadata knyttet til det, mens hvert element med metadata kun gjelder for en bruker.

Comments-to-Comment Metadata

Igjen, de fleste data om kommentarer lagres i wp_comments bord sammen med selve kommentaren, men wp_commentmeta Tabellen brukes til å lagre ytterligere metadata, for eksempel data opprettet av plugins som Akismet. Forholdet er det samme som mellom brukere og usermeta.

Kommentarer til brukere

Det endelige til mange forholdet er mellom kommentarer og brukere. De wp_comments bordet inneholder bruker-ID feltet, som kan brukes til å lagre bruker-IDen når en innlogget bruker har lagt inn en kommentar. Merk at dette feltet ikke er obligatorisk for de nettstedene der brukerne ikke må logges inn for å kommentere.

Mange til mange relasjoner

Den endelige typen databaseforhold er det ene til mange forholdet, hvor den mange koblingen går begge veier. Dette brukes bare en gang i WordPress, for taksonomi betingelser (inkludert kategorier og koder som disse er bare taksonomier). Ett innlegg kan ha mange vilkår som er tildelt det, og ett begrep kan tilordnes flere innlegg.

WordPress oppretter dette forholdet på samme måte som enhver annen database med manag-til-mange-database: ved å bruke en midlertidig tabell som knytter de to tabellene sammen med nøkkeldataene. Dette er wp_term_relationships bord, som kobler til wp_posts bord til wp_term_taxonomy bord. 

Merk: Denne tabellen knytter også til wp_links bord til wp_term_taxonomy bord, som lenker oppfører seg på samme måte som innlegg - jeg kommer snart til koblinger.

Dette er lettest forklart ved å se først på de to yttertabellene. De wp_posts Tabellen inneholder data på hvert innlegg, mens wp_term_taxonomy Tabellen inneholder data på hvert begrep, inkludert taksonomien den er i og dens ID. 

For å opprette en kobling mellom et begrep i wp_term_taxonomy bord og et innlegg i wp_posts tabell, skaper WordPress en post i wp_term_relationships bord, som inkluderer POST_ID og term_id (lagret som object_id og term_taxonomy_id henholdsvis i wp_term_relationships bord). Dette betyr at wp_term_relationships Tabellen kan inneholde flere poster for hvert innlegg og flere poster for hvert begrep, og skaper det mange til mange forhold.

Diagrammet nedenfor viser hvordan dette fungerer:

I eksemplet ovenfor har innleggene følgende vilkår:
  • Innlegg 1 har vilkår 1 og 3
  • Innlegg 2 har term 2
  • Innlegg 3 har term 4
  • Innlegg 4 har vilkår 1 og 3

Du kan også se på den den andre veien - for eksempel gjelder term 3 for innlegg 1 og 4.

Men det stopper ikke der. Det er et fjerde bord, den wp_terms bord. Dette inneholder data om hvert begrep, nemlig navnet, sluggen og beskrivelsen for hvert begrep. Hvert sikt har bare en post i wp_terms bord, så forholdet mellom det og wp_term_taxonomy bordet er faktisk en-til-en. Teoretisk sett er det ingen grunn til at disse dataene ikke kunne holdes i wp_term_taxonomy bord, men det er det ikke.

En kommentar på linker

Lenker, eller blogrollen, er en funksjon av WordPress som er langt mindre fremtredende enn det en gang var. Faktisk, siden versjon 3.5 koblinger er slått av i administratoren som standard; De har imidlertid sitt eget bord: wp_links bord. 

Dette ligner veldig på wp_posts bord. Tross alt er koblinger en innholdstype som ligner på innlegg) og har det samme mange til mange forhold med taksonomi.

Sammendrag

Som vi har sett, bruker WordPress en rekke forhold for å koble data i 10 av sine 11 databasetabeller. Det eneste tabellen jeg ikke har nevnt her er wp_options, fordi det ikke er koblet til noen andre tabeller, da det bare lagrer data om nettstedet, heller enn om innhold. Jeg vil dekke det mer detaljert senere i denne serien.

Ved å forstå en-til-en, en til mange og mange til mange relasjoner i WordPress, kan det hjelpe deg med å identifisere måter å manipulere dataene dine og skrive tilpassede spørringer i temaet og / eller pluginene dine..

I neste del av denne serien vil jeg dekke innholdstypene mer detaljert, se på hvilke typer innhold som er lagret i WordPress-databasen og likhetene og forskjellene mellom dem.