У першій статті циклу «Дані в WordPress» я привела оглядові відомості про використання реляційних баз даних у WordPress: які таблиці використовуються, і які вони зберігають. У цій статті я детальніше розповім про те, як WordPress керує відносинами між таблицями.
Відповідно до теорії реляційних баз даних, WordPress використовує три види відносин: «один до одного», «один до багатьох» і «багато до багатьох». Я покажу кожен вид відносини на прикладі його використання в реальному WordPress-сайті.
Один до одного
Відношення «один до одного» – найпростіший вид відносин. Він означає, що дане поле відповідає якому-небудь іншому єдиного поля. Зазвичай дані, що співвідносяться таким чином, зберігаються в одній таблиці (хоча бувають і винятки, про які ми поговоримо пізніше).
Приклади зв’язків «один до одного»:
- ідентифікатор публікації і вміст поста;
- заголовок і текст публікації;
- ідентифікатор публікації і його слаг;
- ідентифікатор коментаря та вміст коментаря;
- ідентифікатор користувача і його ім’я…
Цей список можна продовжувати і далі, але суть цих прикладів, я думаю, вже зрозуміла: відношення будь-яких даних, що знаходяться в різних полях одного рядка таблиці, що є відношенням «один до одного».
Відношення «один до одного» – найменш цікавий вид відносин даних, тому давайте розглянемо такий тип відносин, який інтенсивно використовується в архітектурі даних WordPress – «один до багатьох».
Один до багатьох
Відношення «один до багатьох» дуже часто використовується в реальних базах даних. Зрештою, це саме те, що робить RDBMS корисніше, ніж «плоскі» електронні таблиці. Таке ставлення виникає, коли одного запису відповідає кілька інших.
В базі даних WordPress відносини «один до багатьох» реалізуються у вигляді зв’язку між двома таблицями з використанням спеціального унікального ідентифікатора.
Наприклад, поле post_id є унікальним ідентифікатором публікації в таблиці wp_posts, але воно також використовується в таблиці wp_comments, щоб визначити, до якої публікації відносяться коментарі.
Це означає, що якщо дане значення поля post_id зустрічається в wp_posts тільки одного разу, то в wp_comments воно може зустрітися кілька разів або не зустрітися взагалі.
Інші приклади відношення «один-до-багатьом» в WordPress:
- публікація і метадані публікації;
- публікація і користувач;
- користувач та метадані користувача;
- таксономія і терм таксономії…
… і так далі. Оскільки відносини «один до багатьох» дуже важливі для функціонування сайту, розглянемо їх трохи докладніше.
Відношення «один до багатьох», що включають публікації
Таблиця wp_posts пов’язана з найбільшою кількістю інших таблиць, і більшість цих зв’язків є відносинами типу «один до багатьох».
На діаграмі, наведеній нижче, ви можете бачити, що таблиця wp_posts безпосередньо пов’язана з чотирма іншими таблицями:

Крім того, публікації можуть бути зв’язані відношеннями «один-до-багатьох» з іншими публікаціями у формі батьківських-дочірніх зв’язків або як вкладення.
Розглянемо ці відносини ще ближче.
Відносини «публікація-публікація»
Як я вже говорила, записи, що зберігаються в таблиці wp_posts, можуть співвідноситися по типу «один до багатьох» з іншими записами цієї ж таблиці. Це, однак, стосунки між тим, що ми звикли називати посадами, а між публікацією та вкладеннями або між різними сторінками. Вкладення і сторінки відносяться до того самого типу даних, що і пости.
Вкладення, що зберігається в таблиці wp_posts, має поле post_parent, в якому зберігається ідентифікатор публікації, в яку вкладено це вкладення. (Вибачте за тавтологію).
Це типовий приклад зв’язків «один до багатьох», тому що вкладення може бути вкладено тільки в один пост, в той час як пост може мати скільки завгодно вкладень.
Це стосується і того випадку, коли ви використовуєте медіа-менеджер, щоб додати медиафайл до публікації: поле post_parent буде посилатися на той пост, на який цей файл був вкладений вперше.
Ті ж відносини виникають між публікаціями, що представляють собою сторінки сайту. У цьому випадку в полі post_parent даної сторінки так само зберігається post_id тієї сторінки, яка на неї посилається.
Це теж типовий випадок зв’язків «один до багатьох», так як одна сторінка може мати скільки завгодно дочірніх сторінок, але сторінка верхнього рівня для даної сторінки може бути тільки одна.
Говорячи про відносини між публікаціями, важливо пам’ятати, що публікація – це не тільки те, що виглядає для відвідувача сайту як публікація. Публікаціями є також сторінки, вкладення та інші типи даних, що зберігаються в таблиці wp_posts.
«Публікація-метадані публікації»
Метадані публікацій зберігаються в спеціальній таблиці wp_postmeta. Ця таблиця має всього 4 колонки: ідентифікатор публікації (post_id), ідентифікатор елемента метаданих (meta_id), ключ і значення.
Публікація може мати будь-яку кількість метаданих, але кожен елемент метаданих може ставитися тільки до однієї публікації.
«Публікація-коментарі»
Коментарі також зберігаються в окремій таблиці під назвою wp_comments. Кожен коментар відноситься до певного посаді, в той час як пост може мати будь-яку кількість коментарів. Таблиця коментарів має поле, яке містить ідентифікатор публікації. Це поле називається comment_post_id і пов’язане з полем post_id таблиці wp_posts.
Таблиця коментарів досить широка: вона має за умовчанням 15 полів і зберігає дані про автора коментаря, спосіб зв’язку з ним, текст коментаря і статус схвалення коментаря автором посту. Також записи в таблиці коментарів можуть бути пов’язані з записами в таблиці користувачів – wp_users. Ми ще згадаємо про це в наступній частині нашої статті.
Коментарі також мають свої метадані, що зберігаються в окремій таблиці, і про них ми також незабаром поговоримо.
«Публікації-користувач»
Кожна публікація прив’язана до таблиці wp_users допомогою поля post_author в таблиці wp_posts. Це відношення типу «один до багатьох»: у публікації може бути тільки один автор, а от користувач може бути автором будь-якого числа публікацій.
Відношення «публікації-користувач» відрізняється від відносин, що зв’язують публікації з метаданими або коментарями. Тому для зв’язку використовуються різні поля: user_id замість post_id в попередніх випадках.
Відношення «один до багатьох», що не включають публікації
Є також три важливих зв’язку, організовані за принципом «один до багатьох», але не стосуються таблиці публікацій. Дві з них мають відношення до метаданих.
«Користувач-метадані користувача»
WordPress зберігає додаткові дані (дані про дані, або метадані), що стосуються користувачів у таблиці wp_usermeta. Там зберігається, наприклад, інформація про супер адміністраторах в мультисайтовых інсталяціях WordPress, про інтерфейсу колірному оформленні і т. д.
Основою збереження даних про користувачів є таблиця wp_users. Дві таблиці, зв’язані між собою полями user_id. З користувачем може бути асоційоване скільки завгодно рядків у таблиці метаданих, в той час як кожен елемент метаданих належить тільки одному користувачеві.
«Коментар-метадані коментаря»
Повторюся: багато інформації щодо коментарів зберігаються в одній таблиці – wp_comments. Але є також і метадані, які зберігаються окремо в таблиці wp_commentmeta. В ній, наприклад, зберігає свої дані популярний антиспам плагін Akismet. Відношення між таблицями таке ж, що і в попередньому прикладі.
«Коментарі-користувач»
Останнє, про що ми хочемо тут поговорити – відношення між коментарями і користувачами. Таблиця wp_comments має поле user_id, яке зберігає ідентифікатор користувача в тому випадку, якщо коментар залишив користувач, авторизовавшийся на сайті через систему безпеки WordPress.
Врахуйте, що це поле не є обов’язковим, так як на сайтах може використовуватися анонімне коментування або інші механізми авторизації.
Відношення «багато до багатьох»
Цей тип відносин являє собою варіант зв’язків «один до багатьох», коли зв’язок може бути повернена в обидві сторони. Таке ставлення використовується в WordPress лише один раз, для роботи таксономії (категорії і теги також є термами таксономії). Одна публікація може мати кілька термів, так само як і один терм може бути використаний в декількох публікаціях.
Як і багато інші програми, WordPress реалізує дане відношення через додаткову внутрішню таблицю, що зв’язує ключовим полем дві інші таблиці. Ця внутрішня таблиця називається wp_term_relationships, і вона пов’язує таблицю wp_posts з таблицею wp_term_taxonomy.
(Також ця таблиця використовується для зв’язку wp_links з wp_term_taxonomy, так як в цьому плані посилання ведуть себе так само, як пости. Про посилання буде розказано трохи пізніше).
Відношення «багато до багатьох» простіше всього зрозуміти, поглянувши на структуру таблиць, про які ми говоримо. Таблиця wp_posts зберігає публікації, а wp_term_taxonomy – окремі терми, включаючи ідентифікатор терма та інформацію про те, в якій довідник він входить.
Щоб пов’язати ці таблиці, WordPress створює запис в таблиці wp_term_relationships. Ця запис містить два посилання: id поста (post_id) в поле object_id і ідентифікатор терма (term_id) в поле term_taxonomy_id.
Таблиця може містити безліч записів, що відносяться до однієї публікації, і безліч записів, що відносяться до одного терму, отже, вона реалізує відношення «багато до багатьох».
Наступна діаграма наочно показує описаний механізм:

Зміст прикладу наступне:
- пост 1 містить терми 1 і 3;
- пост 2 містить терм 2;
- пост 3 містить терм 4;
- пост 4 містить терми 1 і 3.
Зрозуміло, ці відносини можна описувати і у зворотному порядку, наприклад: терм 3 відноситься до постам 1 і 4, і т. д.
Але співвідношення між даними на цьому не кінчаються. Є і четверта таблиця, wp_terms. Вона містить такі відомості про термах, як ім’я, слаг і опис. Кожному терму відповідає лише одна запис в wp_terms, так що таблиці wp_term_taxonomy і wp_terms співвідносяться як «один до одного».
Теоретично, немає причин тримати всі ці дані в різних таблицях, але на практиці на проектування бази даних впливають також міркування швидкодії.
Зауваження про посилання
«Посилання» (блозі) – функція WordPress, яка зараз далеко не так затребувана, як раніше. Фактично, починаючи з версії WordPress 3.5, ця функція відключена за замовчуванням. Тим не менш, окрема таблиця посилань, wp_links, ще присутній в базі даних WordPress.
Таблиця посилань схожа на таблицю посад wp_posts, що цілком природно, так як пости і посилання – контент одного порядку. Посилання мають ті ж відносини «багато до багатьох» з термами таксономії.
Висновки
Як ви могли переконатися, WordPress використовує різні типи відносин між даними в 10 з 11 таблиць своєї бази даних. Одинадцята таблиця – wp_options – досі не була згадана мною, оскільки дані в ній не пов’язані ні з якими іншими. Ця таблиця зберігає дані про сайт, а не його вміст. В інший раз ви дізнаєтеся про неї більше.
Розуміння співвідношень між даними в WordPress допоможе вам ефективно використовувати базу даних і створювати власні запити до неї при розробці тем і плагінів.
В наступних статтях цієї серії я розповім докладніше про типи контенту, що зберігається в базі даних WordPress, про загальних рисах і відмінностях між ними.
Переклад статті «Understanding and Working with Relationships Between Data in WordPress» був підготовлений дружною командою проекту Сайтостроение від А до Я.
![[:uk-ua]AT&T використовує технологію відеоігор для покращення покриття мережі[:] [:ru-ru]AT&T использует технологии видеоигр для улучшения покрытия сети[:] [:en]AT&T Uses Video Game Technology to Enhance Phone Coverage[:] [:pl]AT&T wykorzystuje technologię gier wideo do poprawy zasięgu sieci[:] [:cs]AT&T využívá technologii videoher ke zlepšení pokrytí sítě[:] [:es]AT&T utiliza tecnología de videojuegos para mejorar la cobertura telefónica[:] [:fr]AT&T utilise la technologie du jeu vidéo pour améliorer la couverture téléphonique[:] [:de]AT&T nutzt Videospieltechnologie, um die Telefonabdeckung zu verbessern[:] [:pt]AT&T usa tecnologia de videogame para aumentar a cobertura telefônica[:] [:it]AT&T utilizza la tecnologia dei videogiochi per migliorare la copertura telefonica[:] [:nl]AT&T gebruikt videogametechnologie om de telefoondekking te verbeteren[:] [:id]AT&T Menggunakan Teknologi Video Game untuk Meningkatkan Jangkauan Telepon[:]](https://estdomain.com.ua/wp-content/uploads/2025/11/0d0b3f71-f8e5-484b-b5a8-fd9fb3e97a5c-218x150.jpg)
![[:uk-ua]UFO 50: колекція з 50 ретро-ігор з’являється на Switch 2[:] [:ru-ru]UFO 50: Коллекция из 50 Ретро-Игр Появилась на Switch 2[:] [:en]UFO 50: A Collection of 50 Retro Games Lands on Switch 2[:] [:pl]UFO 50: Kolekcja 50 gier retro pojawia się na Switchu 2[:] [:cs]UFO 50: Kolekce 50 retro her se objeví na Switch 2[:] [:es]UFO 50: una colección de 50 juegos retro llega a Switch 2[:] [:fr]UFO 50 : Une collection de 50 jeux rétro débarque sur Switch 2[:] [:de]UFO 50: Eine Sammlung von 50 Retro-Spielen erscheint auf Switch 2[:] [:pt]UFO 50: uma coleção de 50 jogos retrô chega ao Switch 2[:] [:it]UFO 50: una raccolta di 50 giochi retrò sbarca su Switch 2[:] [:nl]UFO 50: een verzameling van 50 retrogames belandt op Switch 2[:] [:id]UFO 50: Koleksi 50 Game Retro Mendarat di Switch 2[:]](https://estdomain.com.ua/wp-content/uploads/2025/11/9cdf85fb-119c-4afd-beb0-64c31cef0a32-218x150.jpg)
![[:uk-ua]Програма Повідомлення на iPhone: прихований математичний інструмент і інструмент перетворення одиниць[:] [:ru-ru]Приложение «Сообщения» на iPhone: скрытый математический инструмент и средство преобразования единиц измерения[:] [:en]Your iPhone Messages App: A Secret Math and Conversion Tool[:] [:pl]Aplikacja Wiadomości na iPhonie: ukryte narzędzie matematyczne i narzędzie do konwersji jednostek[:] [:cs]Aplikace Zprávy na iPhone: Skrytý matematický nástroj a nástroj pro převod jednotek[:] [:es]La aplicación de mensajes de tu iPhone: una herramienta secreta de conversión y matemáticas[:] [:fr]Votre application de messages iPhone : un outil secret de mathématiques et de conversion[:] [:de]Ihre iPhone-Nachrichten-App: Ein geheimes Mathematik- und Konvertierungstool[:] [:pt]Seu aplicativo de mensagens para iPhone: uma ferramenta secreta de matemática e conversão[:] [:it]L’app Messaggi del tuo iPhone: uno strumento segreto di matematica e conversione[:] [:nl]Je iPhone-berichtenapp: een geheime wiskunde- en conversietool[:] [:id]Aplikasi Pesan iPhone Anda: Rahasia Matematika dan Alat Konversi[:]](https://estdomain.com.ua/wp-content/uploads/2025/11/9bd66581-f539-4a49-8ad4-a5eab212015a-218x150.jpg)
![[:uk-ua]Як дивитися ігри NFL Week 8 з будь-якого місця за допомогою VPN[:] [:ru-ru]Как смотреть игры NFL Week 8 из любой точки, используя VPN[:] [:en]How to Watch NFL Week 8 Games From Anywhere Using a VPN[:] [:pl]Jak oglądać mecze NFL Tydzień 8 z dowolnego miejsca za pomocą VPN[:] [:cs]Jak sledovat hry NFL Week 8 odkudkoli pomocí VPN[:] [:es]Cómo ver los juegos de la Semana 8 de la NFL desde cualquier lugar usando una VPN[:] [:fr]Comment regarder les matchs de la semaine 8 de la NFL depuis n’importe où à l’aide d’un VPN[:] [:de]So können Sie NFL-Spiele der 8. Woche von überall aus über ein VPN ansehen[:] [:pt]Como assistir aos jogos da semana 8 da NFL de qualquer lugar usando uma VPN[:] [:it]Come guardare le partite della settimana 8 della NFL da qualsiasi luogo utilizzando una VPN[:] [:nl]Hoe je NFL Week 8-games overal kunt bekijken met behulp van een VPN[:] [:id]Cara Menonton Pertandingan NFL Minggu 8 Dari Mana Saja Menggunakan VPN[:]](https://estdomain.com.ua/wp-content/uploads/2025/11/6316771c-91c6-4411-adab-9f5b1af6c57c-218x150.jpg)
![[:uk-ua]Як вирішити дратівливі проблеми з автоматичною яскравістю iPhone[:] [:ru-ru]Как исправить раздражающие проблемы с автоматической яркостью iPhone[:] [:en]How to Fix Your iPhone’s Auto-Brightness Annoyances[:] [:pl]Jak naprawić irytujące problemy z automatyczną jasnością iPhone’a[:] [:cs]Jak opravit nepříjemné problémy s automatickým jasem iPhone[:] [:es]Cómo solucionar las molestias del brillo automático de tu iPhone[:] [:fr]Comment résoudre les problèmes de luminosité automatique de votre iPhone[:] [:de]So beheben Sie die Probleme mit der automatischen Helligkeit Ihres iPhones[:] [:pt]Como corrigir os incômodos do brilho automático do seu iPhone[:] [:it]Come risolvere i problemi legati alla luminosità automatica del tuo iPhone[:] [:nl]Hoe u de automatische helderheidsirritaties van uw iPhone kunt oplossen[:] [:id]Cara Memperbaiki Gangguan Kecerahan Otomatis iPhone Anda[:]](https://estdomain.com.ua/wp-content/uploads/2025/11/348bbe66-65cb-4263-94d1-ad03e8c39b4a-218x150.jpg)












