Při tvorbě konceptuálního schématu jsme se příliš nezabývali tím, jak bude schéma realizováno v databázi. Nyní se podíváme, jak tuto transformaci provést.
Máme navržené konceptuální schéma v E-R-A diagramu.
Zápisy entitních a vztahových typů jsou v požadované normální formě, většinou je požadována třetí normální forma.
Máme určeny kardinality všech vztahů
Máme provedenu analýzu povinného výskytu klíčových entit ve všech vztazích.
Žádný atribut žádné relace nesmí obsahovat hodnotu NULL. (Podrobněji viz v literatuře).
Za těchto podmínek můžeme provést transformaci, která bude z mnoha hledisek optimální. V případě nutnosti je možné tento návrh upravovat tak, aby lépe vyhovoval některým požadavkům (např. snadnější formulaci nejčastějších dotazů apod.).
Ukažme si transformaci na příkladech.
NC programy jsou v podniku v následujícím vztahu s výkresy (tvoří množinu IO) :
Konceptuální schéma v E-R modelu bude vypadat takto:
E: VÝKRES(Č_Výkresu, DETAIL, MATERIAL, … )
NC_PROGRAM(Č_NC, AUTOR, …)
Tuto situaci modeluje vztah 1 : 1 VYUŽÍVÁ na obr. .
Reprezentace vztahu bude záviset na tom, zda členství ve vztahu je povinné nebo nepovinné.
Stanovíme doplňkové integritní omezení:
V tomto případě můžeme atributy obou entitních typů (ET) zařadit do jedné relace. Atributy, vážící se k atributu NC_PROGRAM, mohou být považovány za další atributy ET VÝKRES a můžeme je k tomuto schématu “přilepit”. Tomuto kroku se říká slévání schémat entitní a vztahové relace.
Stanovíme doplňkové integritní omezení:
Každý NC program má přidělen výkres, nabízí se tedy přidat do schématu NC_PROGRAM další atribut, a to klíč Č_Výkresu (primární klíč entitního typu VÝKRES).
VÝKRES(Č_Výkresu, DÍL, …)
NC_PROGRAM(Č_NC, AUTOR, …, Č_Výkresu)
Klíč Č_Výkresu, přidaný do schématu NC_PROGRAM, vyjadřuje logické spojení konkrétního NC programu na jeho výkres.
! Č_Výkresu je kandidátním klíčem !
Stanovíme doplňkové integritní omezení:
Vztah Využívá nemůžeme zobrazit ani přidáním klíče schématu VÝKRES k schématu NC_PROGRAM a naopak. V obou případech bychom museli připustit hodnoty NULL.
Pozn.: V SQL je toto řešení možné.
Řešením je vytvoření vztahové relace, do níž vložíme atributy, odpovídající identifikačním klíčům těch entitních typů, které se vztahu zúčastní. Oba jsou kandidáty na primární klíč. Primárním klíčem se stane ten atribut, z jehož hlediska převážně informace sledujeme (evidence výkresů x evidence NC programů).
VÝKRES(Č_Výkresu, DETAIL, …)
NC_PROGRAM(Č_NC, AUTOR, …)
VYUŽÍVÁ(Č_Výkresu, Č_NC, …)
Poznámka: I vztah může mít atributy.V předcházejících případech se tyto atributy umístí tam, kde jsou oba klíče Č_Výkresu a Č_NC.
Mají-li oba ET ve vztahu nepovinné členství, definujeme tři tabulky. Pro každý ET jednu, třetí pro typ vztahu. Ta bude obsahovat klíče obou předchozích, jako cizí klíče. Primárním klíčem bude libovolný z nich. Do tabulky vztahu přidáme vhodné atributy.
Má-li jeden člen vztahu členství nepovinné (druhý je existenčně závislý na prvním), definujeme dvě schémata relací (tabulky). Existenční závislost druhého typu na prvním vyjádříme tak, že k jeho schématu přidáme atributy, odpovídající identifikačnímu klíči nezávislého entitního typu. Libovolný z těchto klíčů může být pak primární. Také atributy vztahu budou v závislém entitním typu.
Mají-li oba členy členství ve vztahu povinné, můžeme vytvořit schéma jediné, které vznikne spojením z původních dvou. Primárním klíčem bude libovolný klíč spojených entitních typů. Atributy vztahu budou také v tomto jediném schématu.
Základní množina integritních omezení :
Na jednom stroji je možno vyrábět více výrobků.
Konkrétní výrobek je možné vyrábět jen na jednom konkrétním stroji.
Uvažme vztah STROJ - VÝROBEK.
Výskytový diagram vztahu STROJ - VÝROBEK je na obr..
Entitní typ VÝROBEK je determinantem entitního typu STROJ. Opačně to neplatí.
Typ členství ve vztahu u ET, který není determinantem druhého typu (STROJ) není podstatný.
Jestliže je předepsáno povinné členství ve vztahu pro entitní typ VÝROBEK (databáze se týká pouze výrobků momentálně vyráběných), nejjednodušší reprezentace vztahu VYRÁBÍ bude taková, že se přidá atribut Č_STROJE ke schématu VÝROBEK. Každá n-tice odpovídající relace potom bude popisovat jeden výrobek včetně informace, na kterém stroji je vyráběn.
Konceptuální schéma:
E: VÝROBEK(Č_SOUČÁSTI, …)
STROJ(Č_STROJE, TYP_STROJE, …)
Odpovídající část relačního schématu databáze:
VÝROBEK(Č_SOUČÁSTI, …, Č_STROJE)
STROJ(Č_STROJE, TYP_STROJE, …)
Výrobku nemusí být přiřazen výrobní stroj (výrobky vyráběné v kooperaci, nakupované). V tomto případě již není možné jen tak přidat ČÍSLO_STROJE ve schématu VÝROBEK, aniž bychom připustili hodnotu NULL. Řešením je trojice schémat relací.
Odpovídající část relačního schématu databáze:
VÝROBEK(Č_SOUČÁSTI, … )
STROJ(Č_STROJE, TYP_STROJE, …)
SE_VYRÁBÍ_NA(Č_SOUČÁSTI, Č_STROJE, …)
Má-li determinant vztahu povinnou účast ve vztahu, definujeme dvě schémata (pro každý entitní typ). Ke schématu determinantu přidáme atributy, odpovídající identifikačnímu klíči druhého entitního typu. Primárním klíčem je klíč determinantu.
Má-li determinant vztahu nepovinnou účast ve vztahu, definujeme tři schémata (pro každý ET jedno, třetí bude vztahové a bude obsahovat atributy, mezi nimiž budou identifikační klíče obou ET. Primárním klíčem je klíč determinantu.
Bez ohledu na typ členství ve vztahu definujeme tři schémata, jedno pro každý entitní typ, třetí vztahové, bude obsahovat primární klíče z obou entitních typů a další (vztahové) atributy. Primárním klíčem schématu bude dvojice příslušných primárních klíčů.