Jak spravovat vztahy v databázi

S dobře strukturovanou databází MySQL lze využít vztahy mezi tabulkami a plně tak využít potenciál PHPCG.


Vztahy mezi jednotlivými tabulkami v databázi MySQL musí odrážet logickou strukturu dat.

Proto je důležité porozumět různým druhům vztahů.

Generátor PHP CRUD dokáže analyzovat vaši databázi a porozumět všem typům vztahů, přímým i nepřímým.

Jakmile budou vztahy správně vytvořeny, budete moci zobrazit všechna potřebná data v datových tabulkách panelu správce Bootstrap.


Zde si vysvětlíme různé druhy vztahů MySQL.

Chcete-li se dozvědět, jak nastavit vztahy v databázi, navštivte stránku Jak sestavit databázi pomocí nástroje MySQL Workbench.


Různé druhy vztahů v databázi MySQL

Uvažujme databázi obsahující produkty, zákazníky a jejich objednávky.

Každá objednávka patří zákazníkovi a může obsahovat jeden nebo více zakoupených produktů. Stejný produkt může být zakoupen několika různými zákazníky nebo stejným zákazníkem v několika objednávkách.

Takto vypadá naše Databáze šema:

MySQL database shema example with direct and indirect relationships
Příklad databáze MySQL shema s přímými a nepřímými vztahy

Přímé a nepřímé vztahy

Přímé vztahy (interní vztahy)one-to-one, one-to-many

Přímý vztah mezi dvěma tabulkami A a B je vztah, kdy je tabulka A přímo spojena s tabulkou B cizím klíčem, ať už povinným, nebo nepovinným. Tento druh vztahu může být one-to-one nebo one-to-many.

V našem příkladu je pole orders.customers_id v přímém vztahu k poli customers.id.
Pole orders.customers_id je cizí klíč.

Tento vztah umožňuje přiřadit každou objednávku k zákazníkovi.

Pomocí generátoru PHP CRUD nám umožní zobrazit jméno zákazníka každé objednávky v seznamu objednávek.
Na kartě Sestavit seznam generátoru CRUD uvidíte vztah zobrazený tímto způsobem: CRUD Generator direct relationship

Nepřímé vztahy (externí vztahy)mnoho k mnoha

Nepřímý vztah slouží k propojení několika záznamů v tabulce A s několika záznamy v tabulce B. K tomuto účelu používáme mezitabulku, která se obvykle skládá ze dvou cizích klíčů, z nichž každý umožňuje identifikovat záznamy v tabulkách A a B. Tento vztah je vztahem typu mnoho k mnoha.

V našem příkladu je mezitabulkou tabulka products_orders. Ta nám umožňuje přiřadit objednané výrobky k objednávkám.
Tabulky products_orders.products_id a products_orders.orders_id jsou cizí klíče.

Pomocí generátoru PHP CRUD umožní zobrazit všechny produkty každé objednávky ve vnořené tabulce v seznamu objednávek.

Generátor také umožňuje vybrat pole produktů, která chcete zobrazit, a zda uživatelé panelu správce mohou přidávat/upravovat/mazat produkty přímo ze seznamu objednávek READ.

Pomocí generátoru PHP CRUD nám umožní zobrazit jméno zákazníka každé objednávky v seznamu objednávek.
Na kartě Sestavit seznam generátoru CRUD uvidíte vztah zobrazený tímto způsobem:

PHP CRUD Generator indirect relationship

Identifikační a neidentifikační vztahy

Identifikace vztahů

Identifikující vztah lze definovat, když jsou dvě tabulky spojeny stejným identifikátorem. Jinými slovy, záznamy v druhé tabulce jsou inherentními prvky nebo charakteristikami první tabulky.

Například: kniha se skládá z kapitol. Každá kapitola je součástí jedinečné identifikované knihy. V tomto případě bude cizí klíč chapters.books_id uveden jako druhý primární klíč tabulky chapters.

Tento typ vztahu se dnes používá jen velmi zřídka. Místo toho se obvykle používá nepřímý vztah, který je obecnější a méně omezující.

Neidentifikovatelné vztahy

Neidentifikující vztah je vztah, ve kterém jsou dvě tabulky spojeny společnou příslušností nebo atributy nebo začleněním.

Například: každá objednávka patří zákazníkovi; každá objednávka obsahuje jeden nebo více produktů.

Hlavní stránka výukového programu PHP CRUD