Základní popis struktury databáze WooCommerce ⁽ᵘᵖᵈᵃᵗᵉ 2025⁾

Jak byl napsán tento článek:
Obsah článku

Pozor! Jakýkoliv neodborný zásah do databáze může mít fatální následky. Bez aktuální zálohy neprovádějte žádné úpravy!

Vystavujete se riziku, že poslední dostupná záloha na hostingu, která je obvykle vytvářena o půlnoci, nemusí obsahovat nejnovější obsah, objednávky ani jiná důležitá data. Mohli byste tak přijít o vše, co bylo změněno po poslední záloze!

WooCommerce využívá databázi WordPressu, přičemž všechny tabulky mají předponu (standardně „wp_“, lze však změnit). Databázová struktura zahrnuje jak standardní tabulky WordPressu (například posts, postmeta či comments), tak vlastní tabulky vytvořené pro potřeby e-shopu (např. pro správu objednávek, produktů, nastavení daní a dopravy). Tento článek poskytuje detailní přehled struktury, praktické příklady a doporučení, jak správně optimalizovat a udržovat databázi.

Všechny názvy databázových tabulek jsou uvedeny bez prefixu, standardně je to prefix wp_, to znamená, že tabulka se například nebude nazývat actionscheduler_actions, ale wp_actionscheduler_actions.

Hlavní tabulky a jejich popis

Níže uvedená tabulka shrnuje nejdůležitější tabulky použití WooCommerce:

actionscheduler_actions: Plánované úlohy, které se vykonávají pomocí Action Scheduler, obdobně jako WP_Cron.

actionscheduler_claims: Obsahuje informace o dávkách akcí, které čekají na zpracování.

actionscheduler_groups: Skupiny plánovaných úloh.

actionscheduler_logs: Logy a protokoly událostí z Action Scheduleru.

woocommerce_sessions: Ukládá data uživatelských relací – obsah nákupního košíku, dočasné informace o uživatelích.

woocommerce_api_keys: Klíče pro REST API komunikaci s WooCommerce.

woocommerce_attribute_taxonomies: Definuje vlastnosti (atributy) produktů.

woocommerce_downloadable_product_permissions: Přístupová práva ke stažitelným produktům.

woocommerce_order_items: Jednotlivé položky objednávek (produkty, poplatky, doprava).

woocommerce_order_itemmeta: Metadata položek objednávek, např. množství, cena nebo unikátní klíče.

woocommerce_tax_rates: Daňové sazby nastavené v administraci.

woocommerce_tax_rate_locations: Lokace – PSČ, města spojené s danými sazbami.

woocommerce_shipping_zones: Doručovací zóny definované v administraci WooCommerce.

woocommerce_shipping_zone_locations: Lokace přiřazené jednotlivým doručovacím zónám.

woocommerce_shipping_zone_methods: Metody doručení navázané na jednotlivé zóny.

woocommerce_payment_tokens: Ukládá platební tokeny, např. pro uložení informací o platebních kartách.

woocommerce_payment_tokenmeta: Metadata příslušná k platebním tokenům.

woocommerce_log: Interní logy a sledování událostí v WooCommerce.

wc_webhooks: Webhooky registrované v nastavení WooCommerce (např. pro upozornění externích aplikací).

wc_download_log: Protokol stažení ke stažitelným produktům.

wc_product_meta_lookup: Indexuje vlastnosti produktů pro rychlejší vyhledávání (filtrace, řazení podle ceny, dostupnosti apod.).

wc_tax_rate_classes: Definice daňových tříd, které mohou ovlivňovat výpočet daní.

wc_reserved_stock: Rezervace položek na skladě, aby se předešlo konfliktům při paralelních objednávkách.

Ukládání objednávek a produktů

Objednávky

Objednávky jsou uloženy jako vlastní typ příspěvku (shop_order) a rozděleny mezi několik tabulek:

posts: Základní informace o objednávce (ID, datum, stav).

postmeta: Detailní metadata, například celková cena, adresa zákazníka nebo uživatelské informace.

woocommerce_order_items & woocommerce_order_itemmeta: Položky objednávky a jejich doplňková metadata (informace o jednotlivých produktech, množství, cenu za jednotku apod.).

comments: Ukládají se poznámky nebo interní komentáře ke konkrétní objednávce.

Produkty

Produkty jsou rovněž typem příspěvku a jejich data jsou rozdělena následovně:

posts: Základní informace – název, popis, stav publikace.

postmeta: Detailní nastavení produktu, jako cena, skladová dostupnost či vlastní atributy.

wc_product_meta_lookup: Optimalizovaný index pro rychlé vyhledávání a filtrování produktů dle jejich vlastností.

comments: Zde se ukládají recenze a hodnocení od zákazníků.

Entity Relationship Diagram (ERD)

Pro lepší pochopení vztahů mezi tabulkami je doporučeno vytvářet ER diagram. Například diagram znázorni, jak je tabulka posts propojená s postmeta, woocommerce_order_items a následně s woocommerce_order_itemmeta. Pro jeho vytvoření lze použít nástroje jako MySQL Workbench nebo online služby. Diagram pomůže:

  1. Vizualizovat vztahy mezi objednávkami, produkty a uživateli.
  2. Identifikovat klíčová propojení pro optimalizaci dotazů.
  3. Snadněji diagnostikovat případné nesrovnalosti v datech.

Optimalizace databáze WooCommerce

Optimalizace databáze je zásadní pro udržení vysokého výkonu vašeho e-shopu. WooCommerce spolu s WordPressem ukládá řadu nadbytečných dat – od revizí, přes transients, až po systémové logy a staré relace. Pro jejich odstranění doporučuji pravidelnou údržbu, kterou můžete provádět buď automaticky pomocí pluginů, nebo manuálně.

Doporučené pluginy a nástroje

  1. WP-Optimize
    Tento bezplatný plugin odstraní nepotřebná data, revize a spamové komentáře. Umožňuje také manuální čištění a automatickou optimalizaci tabulek, což výrazně zrychlí databázi.
  2. WP-Sweep
    Používá vestavěné WordPress funkce ke smazání nadbytečných revizí, metadat a dalších nepotřebných záznamů. Jeho výhodou je přehledný statistický výpis – snadno zjistíte, kolik dat bylo odstraněno.
  3. Advanced Database Cleaner
    Plugin nabízí čištění databáze (odstranění revizí, konceptů, odpadních komentářů) i možnost naplánovat automatickou údržbu. Před použitím doporučuji vždy provést kompletní zálohu databáze.
  4. Manuální optimalizace prostřednictvím phpMyAdmin
  5. actionscheduler _actions a _logs Nezapomeňe, že na webu mam snippet, diky němuž mužete automatický čistit nepotřebné záznamy v actionscheduler _actions a _logs. Článek zde s návodem.

High-Performance Order Storage (HPOS)

S nedávnými verzemi WooCommerce byl zaveden koncept High-Performance Order Storage (HPOS). HPOS přesouvá některá data objednávek do vlastních tabulek, čímž se odlehčuje tradiční struktura postů a postmeta. Výhody HPOS:

  • Zvýšení rychlosti při načítání objednávek.
  • Lepší škálovatelnost při velkém objemu dat.
  • Zjednodušená diagnostika a optimalizace databáze.

Doporučuji sledovat oficiální dokumentaci WooCommerce, neboť HPOS přináší změny, které mohou vyžadovat úpravy v custom řešeních.

Nejlepší postupy pro správu dat

Správná správa dat se nejen pozitivně odrazí na výkonnosti e-shopu, ale také výrazně usnadní diagnostiku a další rozvoj. Níže uvádím několik osvědčených přístupů spolu s doporučenými nástroji, které jsou zdarma dostupné:

Údržba a čištění:
Naplánujte si pravidelnou údržbu – například každých pár měsíců zkontrolujte stav a velikost tabulek, případně odstraňte staré a nepotřebné položky. Kombinace výše uvedených pluginů v režimu automatického čištění vám pomůže udržet databázi v optimálním stavu.

Pravidelné zálohování databáze:
Používejte plugin třeba UpdraftPlus k vytvoření pravidelných záloh. Automatizované zálohování zajistí, že v případě nepředvídané události můžete rychle obnovit původní stav. Pozor na kompletní zálohy webu včetně databáze. Většina hostingů zakazuje automatizované vlastní zálohování v rámci webového účtu. Zálohy proto provádějte na vzdálené úložiště, například Google Drive nebo OneDrive.

Zálohujte s rozvahou a ideálně vždy před aktualizací nebo zásadní změnou webu, abyste měli k dispozici poslední funkční zálohu. Tyto zálohy můžete dočasně uložit lokálně na hostingu nebo rovnou na vzdálené úložiště. Pokud je vše v pořádku, zálohu z hostingu smažte a deaktivujte zálohovací plugin.

Monitoring výkonu:
Plugin Query Monitor sleduje pomalé SQL dotazy, chybné volání a další problémové kousky kódu. Tento nástroj vám pomůže rychle odhalit úzká místa a optimalizovat konkrétní dotazy.

Bezpečnostní opatření:
Při přímé manipulaci s databází vždy používejte funkci $wpdb->prepare() ke správnému ošetření vstupních dat. Dále doporučuji pravidelně kontrolovat oprávnění databázových uživatelů a omezit přístup pouze na autorizované IP adresy.

Příklady užitečných SQL dotazů

1. Výpis objednávek za poslední měsíc:

Dotaz spojuje tabulky wp_posts (kde jsou uloženy objednávky jako typ příspěvku shop_order) a wp_postmeta (kde jsou uloženy doplňující data, jako celková cena objednávky). Důraz je kladen na práci s indexovanými sloupci (např. post_datemeta_key):

SELECT p.ID, p.post_date, pm.meta_value AS total
FROM wp_posts AS p
JOIN wp_postmeta AS pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
  AND p.post_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
  AND pm.meta_key = '_order_total';
SQL

2. Rychlé vyhledání produktů podle ceny:

Tento dotaz vyhledává produkty v určité cenové relaci, kde se cena ukládá v wp_postmeta. Použití funkce CAST() zajistí správné porovnání číselné hodnoty:

SELECT p.ID, p.post_title, meta.meta_value AS price
FROM wp_posts AS p
JOIN wp_postmeta AS meta ON p.ID = meta.post_id
WHERE p.post_type = 'product'
  AND meta.meta_key = '_price'
  AND CAST(meta.meta_value AS DECIMAL(10,2)) BETWEEN 100 AND 500;
SQL

3. Seznam položek objednávky se získáním detailů:

Pro získání komplexního přehledu o položkách objednávky je třeba spojit tabulky woocommerce_order_itemswoocommerce_order_itemmeta:

SELECT oi.order_item_id, oi.order_item_name, oim.meta_key, oim.meta_value
FROM wp_woocommerce_order_items AS oi
JOIN wp_woocommerce_order_itemmeta AS oim ON oi.order_item_id = oim.order_item_id
WHERE oi.order_id = 1234;
SQL

Tyto dotazy lze dále optimalizovat pomocí příslušných indexů a přizpůsobit konkrétním potřebám.

Diagnostika a řešení problémů s databází

Při správě WooCommerce databáze se můžete setkat s následujícími problémy:

  1. Pomalé načítání: Zkontrolujte indexy, optimalizujte dotazy a odstraňte nepotřebná data. Nástroje jako Query Monitor vám pomohou identifikovat úzká místa.
  2. Chybějící data: Například nesprávně propojené záznamy mezi posts a postmeta mohou způsobit chyby při načítání objednávek či produktů. Proveďte validaci integrity dat.
  3. Přetížení databáze: Při masivních objemech dat zvažte rozdělení databáze, použití HPOS a pravidelné archivování starých dat.

Doporučení pro psaní SQL dotazů

  1. Specifikujte pouze potřebné sloupce:
    Vyhýbejte se využívání SELECT * – vždy uveďte jen ty sloupce, které skutečně potřebujete, což významně snižuje zátěž serveru.
  2. Používejte připravené dotazy:
    Při vyvolávání SQL dotazů z PHP využijte $wpdb->prepare(), abyste ochránili aplikaci před SQL injection útoky.
  3. Optimalizujte dotazy indexováním:
    Ujistěte se, že sloupce používané ve WHERE klauzulích mají odpovídající indexy. Například u filtrů dle data či jiné často dotazované sloupce, jako je post_date nebo meta_key.
  4. Testujte a monitorujte výkon:
    Nástroj Query Monitor vám pomuže zjistit, které dotazy jsou příliš pomalé a díky této informaci máte skvělý základ pro optimalizaci.

Bezpečnostní doporučení

Bezpečnost databáze by měla být vždy prioritou:

  1. Pravidelné zálohování: Před jakýmikoli zásahy nebo optimalizacemi vždy proveďte zálohu celé databáze.
  2. Bezpečný přístup: Ujistěte se, že přístup k databázi je omezen pouze na autorizované uživatele a používejte silná hesla.
  3. Ochrana proti SQL injection: Při psaní vlastních dotazů používejte připravené dotazy a sanitizaci vstupů.
  4. Aktualizace a monitoring: Sledujte bezpečnostní aktualizace WordPressu a WooCommerce a pravidelně monitorujte přístupové logy.