Uživatelské nástroje

Nástroje pro tento web


lmexplore:relationships

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é.

Na obrázku vidíme relační schéma pro 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 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 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ů.

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.

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.

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:

Vytvoření dynamického databázového pohledu
Seznam databázových tabulek

Praktická ukázka: Demo Hotel: Propojení tabulek

lmexplore/relationships.txt · Poslední úprava: 2017/05/25 18:24 (upraveno mimo DokuWiki)