Jak uvidíte, WordPress používá tři typy vztahů mezi daty (tzv. kardinalitu vztahů) – 1:1, 1:n a n:m. Postupně se podíváme na každý z nich a zjistíme, co znamenají pro WordPress.
Tento článek je součástí série osmi částí:
- Úvod
- Vztahy mezi daty
- Typy dat
- Uživatelská data
- Metadata
- Taxonomie, rubriky, štítky a položky
- Tabulka Options
- WordPress Multisite data
Vztah 1:1
Vztah 1:1 je nejjednodušší vztah ze všech. 1:1 používáme, pokud záznamu odpovídá právě jeden záznam v jiné databázové tabulce a naopak. Takovýto vztah je používán pouze ojediněle, protože většinou není pádný důvod, proč takovéto záznamy neumístit do jedné databázové tabulky. Příklady vztahu 1:1 u WordPressu:
- ID příspěvku a obsah příspěvku
- nadpis příspěvku a obsah příspěvku
- ID příspěvku a post slug („hezká“ URL adresa příspěvku)
- ID komentáře a obsah komentáře
- ID uživatele a uživatelské jméno
Tento seznam by mohl pokračovat, ale hlavní pointou je, že dva záznamy uložené v rozdílných polích jedné řádky tabulky, mají vztah 1:1.
Vtah 1:n
Vztahy 1:n jsou u databází velmi časté a jsou tím, co činí databázi lepším, než běžné „placaté“ tabulky Excelu. 1:N přiřazuje jednomu záznamu více záznamů z jiné tabulky. Ve WordPressu je většina 1:n vztahů vytvořena propojením mezi dvěma databázovými tabulkami, které používají unikátní identifikaci pro jejich spojení. Například záznam post-id bude unikátní pro každý příspěvek uložený v tabulce wp_post,ale také bude použit v tabulce wp_comments, aby identifikoval, který komentář byl vložen u daného příspěvku. To znamená, že každé post_id se zobrazí jednou v tabulce wp_posts, ale také několikrát (nebo vůbec) v tabulce wp_comments. Některé další příklady, které najdete ve WordPress databázi:
- příspěvky a metadata příspěvků
- příspěvky a uživatelé
- uživatelé a metadata uživatelů
- taxonomie a položky
Vztah 1:n týkající se příspěvků
Tabulka, která je spojena s dalšími tabulkami je wp_posts a většina propojení je provedena vztahem 1:n. Jak můžete vidět na obrázku níže, tabulka wp_posts je propojena se čtyřmi dalšími tabulkami:
Vztah příspěvku ku příspěvku (příspěvky:příspěvky)
Jak jsme si již vysvětlili výše, data uložena v tabulce wp-posts mohou mít vztah 1:n s dalšími daty ve stejné tabulce. Nicméně, tento vztah není mezi tím, co byste nazvali vztahem příspěvek k příspěvku, ale namísto toho je to vztah mezi příspěvky a jejich přílohami nebo stránkami. Nakonec přílohy a stránky jsou pouze typy příspěvku.
Přílohy uložené v tabulce wp_posts budou mít záznam v poli post_parent. Toto pole bude ID příspěvku, ke kterému budou připojeny přílohy. Tomuto vztahu se říká 1:n, protože každá příloha bude mít pouze jednoho „rodiče“ (příspěvek), ale příspěvek může mít více příloh. To platí i v případě, že jste použili Media Manager pro přidání přílohy k dalšímu příspěvku – pouze příspěvek, u kterého to bylo původně uloženo bude uložen v databázi jako „rodič“.
Příspěvky mohou mít také vztah 1:n s dalšími příspěvky, a to v případě, že je jedna stránka specifikována jako nadřazená. Záznam je uložen u podřízené stránky v poli post_parent a bude to post_id nadřazené stránky. Toto je vztah 1:n, protože nadřazená stránka může mít více stránek podřízených, ale podřízená stránka má pouze jednu nadřazenou.
Když přemýšlíte nad vztahy mezi příspěvky, je důležité pamatovat na to, že příspěvky nejsou „jen příspěvky“. Ve WordPress databázi jsou příspěvky také stránky, přílohy a další typy příspěvků, které se ukládají do tabulky wp_posts.
Vztah příspěvku ku metadatům příspěvku (příspěvek:metadata příspěvku)
Metadata příspěvku jsou uložena ve své vlastní tabulce wp_postmeta. Tato tabulka obsahuje pouze čtyři pole – post_id, meta_id,klíč a hodnotu. Jeden příspěvek může mít mnoho položek metadat s ním spojených, ale každá metadata příspěvku budou propojena jen s jedním příspěvkem.
Vztah příspěvku ku komentářům (příspěvek:komentáře)
Komentáře mají také vlastní tabulku wp_comments. Každý komentář náleží pouze k jednomu příspěvku, ale příspěvek může mít více komentářů. Stejně jako u všech ostatních tabulek spojených s wp_posts, se pole post_id používá pro propojení (do tabulky wp_comments a pole comment_post_id).
Tabulka wp_comments má v základu 15 polí. Ukládají se zde informace o autorovi, jeho emailové adrese, komentáři samotném a jeho stavu (status). A jak si ukážeme dále, je také propojen s tabulkou wp_users.
Komentáře mají také vlastní metadata, která se ukládají v další tabulce, ale k tomu se ještě dostaneme.
Vztah příspěvků k uživatelům (příspěvky:uživatelé)
Každý příspěvek je spojen s tabulkou wp_users pomocí záznamu user_id, který je uložen v poli post_author v tabulce wp_posts. Tomuto vztahu se říká 1:n, protože jeden příspěvek může mít pouze jednoho autora, ale autor může vytvořit více příspěvků.
Tento vtah mezi příspěvky a uživateli se liší od vztahu mezi příspěvky a komentáři nebo metadaty. Je to z toho důvodu, protože je přirozené, že jeden uživatel = více příspěvků, ne jeden příspěvek = více komentářů nebo metadat. Z tohoto důvodu je propojení provedeno přes pole user_id a ne post_id.
Vztah 1:n bez příspěvků
Jsou zde další tři vztahy 1:n, ale netýkají se příspěvků. Dva z nich obsahují metadata – vztah mezi komentáři a jejich metadaty, a uživateli a jejich metadaty.
Vztah uživatelů k metadatům uživatelů (uživatelé:metadata uživatelů)
WordPress ukládá další metadata o uživatelích do tabulky wp_usermetadata. Obvykle se to používá pro nestandardní data o uživatelích, jako například metadata o super-administrátorech u multisite a metadata o barvě administrace daného administrátora (pouze pokud se nejedná o výchozí nastavení) atd.
Většina dat uživatelů je uložena v tabulce wp_users. Tyto dvě tabulky jsou spolu propojeny pomocí pole user_id a jeden uživatel má přiřazených více metadat. Nicméně metadata se vztahují pouze k jednomu uživateli.
Vztah komentářů k metadatům komentářů (komentáře:metadata komentářů)
Většina dat o komentářích je uložena v tabulce wp_comments, společně i se samotným komentářem. Nicméně tabulka wp_comentmeta je použita k uložení dodatečných metadat, jako například data vytvořená pluginy jako Akismet. Vztah je stejný jako mezi uživateli a metadaty uživatelů.
Vztah komentářů k uživatelům (komentáře:uživatelé)
Poslední vztah 1:n je vzah mezi komentáři a uživateli. Tabulka wp_comments zahrnuje pole user_id, které může být využito k uložení ID uživatele (pokud je uživatel při vložení komentáře přihlášený). Nicméně toto pole nemusí být u některých stránek povinné, záleží na nastavení komentářů u WordPressu.
Vztah n:m
Posledním vztahem v databázi je vztah n:m. Tento vztah je u WordPressu použit pouze jednou, a to u taxonomie (rubriky, štítky…). Jeden příspěvek může mít přiřazených několik položek a tyto položky mohou být přiřazeny k více příspěvkům.
WordPress tento vztah vytváří podobně jako další databáze, kde je použit vztah n:m, a to pomocí propojující tabulky. Tato tabulka se nazývá wp_term_relationships a je spojena s tabulkami wp:posts a wp_term_taxonomy.
Poznámka: Tato tabulka je také propojuje tabulku wp_links s tabulkou wp_term_taxonomy, protože odkazy se chovají v podstatě stejně jako příspěvky. Ale k tomu se ještě dostaneme.
Toto se nejlépe vysvětlí pohledem na dvě oddělené tabulky. Tabulka wp_posts obsahuje data ke každému příspěvku, zatímco tabulka wp_term_taxonomy obsahuje data ke každé položce, včetně taxonomie, ve které je a její ID.
Vytvořením propojení mezi položkou v tabulce wp_term_taxonomy a příspěvkem v tabulce wp_posts, WordPress vytváří záznam v tabulce wp_term_relationships, který obsahuje post_id a term_id (uloženo jako object_id a term_taxonomy_id). To znamená, že tabulka wp_term_relationships může obsahovat několik záznamů o každém příspěvku a několik záznamů o každé položce. Takto se v databázi vytváří vztah n:m.
Diagram níže ukazuje, jak to vše vypadá v praxi:
V obrázku výše můžete vidět vztahy mezi příspěvky a položky:
- příspěvek 1 má přiřazenou položku 1 a 3
- příspěvek 2 má přiřazenou položku 2
- příspěvek 3 má přiřazenou položku 4
- příspěvek 4 má přiřazenou položku 1 a 3
Zároveň se na to ale můžete podívat z druhé strany, položka 3 má přiřazený příspěvek 1 a 4.
Nicméně to není konec. Je zde ještě čtvrtá tabulka – wp_terms. Ta obsahuje data o každé položce, její jméno, „hezkou“ URL adresu a popisek. Každá položka má pouze jeden záznam v tabulce wp_terms, takže vztah mezi mí a tabulkou wp_term_taxonomy je vlastně 1:1. Teoreticky není žádný důvod, proč by tato data nemohla být v tabulce wp_term_taxonomy, ale není tomu tak.
Poznámka k odkazům
Odkazy nebo seznamy odkazů ve WordPressu již nejsou tak prominentní jako kdysi byly. Faktem je, že od verze 3.5 byly odkazy v administraci vypnuty, nicméně stále mají svou vlastní tabulku wp_links.
Tato tabulka je velmi podobná tabulce wp_posts. Nakonec, odkazy jsou typy obsahu a jsou příspěvkům velmi podobné. Také mají stejný n:m vztah s taxonomií a položkami.
Shrnutí
Jak jste si mohli přečíst, WordPress používá mnoho druhů vztahů mezi daty a propojuje tak 10 z 11 databázových tabulek. Pochopením vztahů 1:1, 1:n a n:m u WordPressu vám pomůže s manipulací dat a psaním vlastních dotazů v šabloně/pluginu.