Article: AN0001874Updated: 21.07.2018
Model v ObjectGears lze chápat jako samostatnou aplikaci.
Níže je uveden postup tvorby modelu z pohledu vztahů mezi třídami, které představují základní datový rámec modelu/aplikace. Pro využití dalších rysů ObjectGears (Master-Detail relace, Pravidla, Skripty, Workflow atd.) prosím prostudujte kapitoly věnované nastavení těchto rysů. Bezpečnostní aspekty tvorby nového modelu/aplikace či funkce jsou rozebrány zde.
Vztahy mezi třídami řešíme pomocí odkazů na jiné třídy a pomocí dědičnosti.
Odkaz na jinou třídu může být typu 0 nebo 1 záznam (de facto sloupec, který je cizím klíčem v entitně-relačním modelu) nebo typu 0 až N záznamů (obdoba asociační třídy). Třídy lze propojit také prostřednictvím jiné třídy (skutečná asociační třída popř. s dalšími sloupci popisujícími relaci, kterou zprostředkovává).
Pomocí cizích klíčů se však obtížně implementují podkategorie – situace, kdy objekty mají řadu společných vlastností, které je vhodné sdružit ve zvláštní třídě a pak zvláštní vlastnosti dle typu (kategorie) objektu. Příkladem jsou dopravní prostředky, které se dále dělí na auta, letadla, lodě, které mají vlastní sadu atributů. Podkategorie jsou v ObjectGears implementovány pomocí dědičnosti. Všechny objekty, ať už jde o auta, letadla nebo lodě, mají několik atributů definovaných ve společném předkovi – třídě Dopravní prostředky. Ostatní atributy jsou specifické pro daný typ a jsou uvedeny ve zvláštních třídách Auta, Lodě a Letadla dědících ze třídy Dopravní prostředky.
Výhodou použití podkategorií je také to, že se v jiných třídách můžeme odkázat, jak na jeden z konkrétních typů (auta, letadla nebo lodě), tak také na všechny zároveň (dopravní prostředky). V prvním případě pak v odkazovaném sloupci vybíráme z aut nebo z letadel nebo z lodí. Ve druhém případě vybíráme ze seznamu všech dopravních prostředků bez ohledu na jeho typ.
Dědičnost a společného předka tříd využijeme také, pokud neznáme všechny možné vztahy mezi objekty nebo jsou vztahy příliš rozmanité a komplexní. Definici závislosti mezi třídami pak řešíme na úrovni společného předka. Příkladem je IT konfigurační databáze obsahující jednotlivé komponenty hardware, servery, aplikace a jejich komponenty, databáze, dokumentaci atd. Pro tyto třídy lze vytvořit entitně-relační model různé komplexity. Pro zachycení všech možných vztahů (jakékoli třídy s jinou třídou) však zavedeme samoreferenci na třídě Configuration item, která je předkem všech ostatních tříd.
Entitně-relační model – pro zachycení vztahů jsou použity cizí klíče.
Implementace podkategorií – třídy nemají definované vztahy mezi sebou, ale dědí vlastnosti ze svého předka (Configuration item), na němž jsou vztahy definovány samoreferencí. (V uvedeném příkladu je použit Configuration item, jak je pojímán rámcem ITIL.)
Předek třídy může mít také svého předka. V našem případě je vhodné třídy Microsoft Active directory (uživatele, počítače a skupiny) sdružit společným předkem – třídou MS Active Directory Objects. Až tato třída je potomkem třídy Configuration item. Výhodou je, že se ve vlastnosti Members třídy MS AD Groups, můžeme odkazovat na všechny typy objektů, které mohou být členy MS AD skupiny.
Oba uvedené přístupy pro zachycení vztahů mezi třídami (odkazy na třídy formou sloupců typu číselníková hodnota a dědění z třídy, která se odkazuje sama na sebe) lze samozřejmě kombinovat.
Toto řešení umožňuje explicitně definovat všechny časté relace strukturovaným způsobem (odkazy mezi třídami) a zároveň mít možnost zachytit méně časté nebo při návrhu modelu nepředpokládané vztahy pomocí samoreference společného předka tříd, tak jak je popisováno ve frameworku ITIL.
Výše uvedené příklady umožní v ObjectGears dosáhnout vysoké datové integrity a současně zachytit i relace, s kterými se v běžném statické entitně-relačním modelu nemusí při jeho návrhu počítat. Pokud ale nechceme v některých případech vytvářet model s mnoha třídami a využívat dědičnost tříd, ale naopak chceme využít výhody uložení dat v jedné třídě můžeme použít vlastnost násobné sloupce, které se nastavují v detailu třídy.