Uživatelské nástroje

Nástroje pro tento web


lmexplore:relationships

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

lmexplore:relationships [2017/05/25 18:24] (aktuální)
Řádek 1: Řádek 1:
 +====== Vztahy mezi tabulkami ======
 +
 +Vztahy mezi tabulkami (angl. //​relationships//​) jsou v relačních databázích realizovány pomocí primárních a cizích klíčů. Vždy určíme sloupce v první a ve druhé tabulce, jejichž hodnoty musí být shodné. ​
 +
 +{{ :​lmdata:​hotel2015.db.png?​direct&​600 |}}
 +
 +Na obrázku vidíme relační schéma pro [[:​lmdata:​hotel2015|data Hotel]]. Tabulka **Hotel** je na dvě další tabulky propojena pomocí hodnoty ve sloupci **PPobytOd** (den začátku pobytu). Druhé dvě tabulky pak obsahují záznamy pro každý den sledovaného období. ​
 +
 +===== Určení typu vztahu mezi tabulkami =====
 +
 +Oba vztahy jsou typu **1:n** (resp. **n:1**) – pro jeden záznam v tabulce **Hotel** je vždy právě jeden záznam v tabulce **Meteo** a právě jeden záznam v tabulce **Smenarna**. Pro jeden záznam v tabulkách **Meteo** a **Smenarna** však může existovat více záznamů v tabulce **Hotel**, protože v jeden den mohlo přijet více hostů.
 +
 +**Pozor!** Pokud je mezi tabulkami vztah **m:n**, není obvykle možné vytvořit nad nimi [[:​lmexplore:​tableview|databázový pohled]]. Proto ani nezadáváme vztah mezi tabulkami a hodnoty z druhé ​ tabulky musíme nejprve nějakým způsobem seskupit (agregovat). To můžeme udělat buď už v databázi, nebo použijeme [[:​lmexplore:​columnquery|odvozenou hodnotu vypočtenou vnořeným SQL dotazem]].
 +
 +===== Přidání vztahu mezi tabulkami =====
 +
 +Postupně zadáváme relace pro všechny vztahy typu **1:n** (případně **1:1**) mezi tabulkami v analyzovaných datech.
 +
 +V menu ''​Data Introduction''​ vybereme položku ''​Relationships''​ a objeví se dialogové okno se seznamem již nadefinovaných vztahů.
 +
 +{{ :​lmexplore:​relationshipdlg.hotel-meteo.png?​direct&​300 |}} 
 +
 +Pomocí tlačítka ''​Add''​ přidáváme vztah nový. Vybereme obě tabulky, mezi kterými chceme vztah vytvořit. ​
 +
 +==== Zadání vazební podmínky pomocí rovnosti sloupců =====
 +
 +Po stisku tlačítka ''​Ok''​ se objeví dialogové okno vztahu mezi dvěma tabulkami, ve kterém opět pomocí tlačítka ''​Add''​ zadáme jednu (nebo více) vazebních podmínek. Obvykle jde o výběr dvojice sloupců (první z první tabulky, druhý z druhé tabulky), jejichž hodnoty se mají rovnat. ​
 +
 +{{ :​lmexplore:​relationshipcolumnlinkdlg.hotel-meteo.png?​direct&​500 |}} 
 +
 +V systému LISp-Miner je momentálně možné definovat pouze "​vnitřní spojení"​ tabulek (angl. //inner join//​). ​
 +
 +==== Zadání vazební podmínky pomocí výrazu =====
 +
 +Někdy může být potřeba vazební podmínku definovat pomocí výrazu. Příkladem je situace, kdy v databázovém sloupci typu ''​Datum/​Čas''​ je vyplněna jak složka datumu, tak času. Chceme-li definovat vztah n:1 s tabulkou obsahující informace k jednotlivým dnům, tak vazební podmínka v podobě např. **PPobytOd = MDatum** nebude fungovat správně, protože se budou ignorovat hosté, kteří měli vyplněný i čas příjezdu. Hodnotu ve sloupci **PPobytOd** je nejprve třeba převést pouze na datum. V případě použití //Accessu// jako databáze pro uložení dat použijeme funkci **Int** a podmínka bude vypadat **Int(PPobytOd) = MDatum**.
 +
 +{{ :​lmexplore:​relationshipcolumnlinkdlg.hotel-meteo.expression.png?​direct&​500 |}} 
 +
 +Způsob zadání v LISp-Mineru vidíme na obrázku.
 +
 +**Pozor!** Nevkládejte funkci **Int** tam, kde není nezbytně nutná. I když by bylo možné zapsat podmínku i jako **Int(PPobytOd) = Int(MDatum)**,​ tak dojde k výraznému zpomalení vytváření odvozeného pohledu v Accessu.
 +
 +-----
 +
 +**Související témata:**
 +
 +{{:​lmbase:​seealso.png?​nolink&​32|}} [[:​lmexplore:​tableview|Vytvoření dynamického databázového pohledu]]\\
 +{{:​lmbase:​seealso.png?​nolink&​32|}} [[:​lmexplore:​tables|Seznam databázových tabulek]]\\
 +
 +{{:​lmdemo:​example.png?​nolink&​32|}} Praktická ukázka: [[:​lmdemo:​hotel2015:​tableview|Demo Hotel: Propojení tabulek]]
  
lmexplore/relationships.txt · Poslední úprava: 2017/05/25 18:24 (upraveno mimo DokuWiki)