sql >> Databáze >  >> RDS >> Database

Strana Vztah Vzor. Jak modelovat vztahy

Vztahy jsou všude:mezi lidmi, mezi organizacemi, mezi organizacemi a lidmi. Přemýšlejte o tom, že jste zaměstnancem společnosti, členem projektového týmu nebo dceřinou společností jiné společnosti. Existuje přímočarý způsob, jak přesně modelovat a řídit všechny tyto vztahy? Můžeme snadno odpovědět na otázku ‚Kdo ví kdo?‘

Rychlý přehled vztahů

Jak přesně byl tento základní model odvozen, bylo popsáno v mém předchozím článku Flexibilní a spravovatelné návrhy kusovníků (BOM).




V tomto modelu a v konvenčním návrhu kusovníku je 1st interactor bývá nadřazenou Party ve Relationship – zaměstnavatel spíše než zaměstnanec, vedoucí týmu spíše než člen týmu atd.

Takto mohou data vypadat (s rolí jednotlivých stran v závorkách):


1 účastník 2 interakce
Widget Co. Inc. (zaměstnavatel) Manažer 1 (zaměstnanec)
Widget Co. Inc. (zaměstnavatel) Manažer 2 (zaměstnanec)
Widget Co. Inc. (zaměstnavatel) Zaměstnanec 1 (zaměstnanec)
Widget Co. Inc. (zaměstnavatel) Zaměstnanec 2 (zaměstnanec)
Widget Co. Inc. (zaměstnavatel) Zaměstnanec 3 (zaměstnanec)
Widget Co. Inc. (zaměstnavatel) Zaměstnanec 4 (zaměstnanec)
Manažer 1 (zodpovědný za) Zaměstnanec 1 (hlásí se)
Manažer 1 (zodpovědný za) Zaměstnanec 2 (hlásí se)
Manažer 2 (zodpovědný za) Zaměstnanec 3 (hlásí se)
Manažer 2 (zodpovědný za) Zaměstnanec 4 (hlásí se)


Sofistikovanější model

Představte si, že chcete modelovat vývojový tým projektu, jako je tento:

Zdroj:https://www.edrawsoft.com/template-matrix -org-chart.php

Většina rolí v této týmové hierarchii je reálná – např. analytik požadavků se hlásí systémovému analytikovi. Jiný způsob, jak se na to dívat, je, že analytik požadavků spravuje analytika požadavků.

Vztahy mezi rolemi lze číst zleva doprava (LTR) nebo zprava doleva (RTL). Obvykle je nejlepší držet se jedné nebo druhé konvence – LTR nebo RTL – ale v praxi možná zjistíte, že existují výjimky.

Všimněte si také, že tento diagram ukazuje různé způsoby seskupování rolí. Některé role jsou skutečné, jak jsme diskutovali; jiné jsou logické – např. technická skupina, tréninková skupina, základní tým a podpůrný tým.

Můžeme říci, že tento diagram definuje strukturu týmu pomocí rolí potřebných k dokončení vývojového týmu projektu. To se liší od skutečné instance týmu, která by se skládala ze skutečných jmen lidí proti každé z rolí.

Potřebujeme tedy datový model, který je flexibilní a konfigurovatelný , jako je tento:




Žluté tabulky obsahují metadata a modré tabulky obsahují firemní údaje .

Nastavení základních metadat

Začneme vyplněním party_type stůl. Tato tabulka rozlišuje, zda je stranou osoba nebo organizace.

Než uděláme mnoho jiného, ​​musíme také definovat role v role_type tabulka metadat:


Hezké jméno Typ strany
HM Revenue and Customs (HMRC) Organizace
Internal Revenue Service (IRS) Organizace
Služba pasů Organizace
Stejné Organizace
Společnost s ručením omezeným Organizace
Společnost s ručením omezeným Organizace
Žadatel Osoba
Sebe Osoba
CTO Engineering Osoba
Projektový manažer Osoba
Projektový specialista Osoba
Systémový analytik Osoba
Analytik požadavků Osoba
Technický úředník Osoba
Správce systému Osoba
Senior Hardware Engineer Osoba
Hardwarový inženýr Osoba
Senior softwarový inženýr Osoba
Softwarový inženýr Osoba
Databázový inženýr Osoba
Technická podpora Osoba
QA Manager Osoba
Webový designér Osoba
Software QA Engineer Osoba
Projektová kancelář Osoba
Inženýr zabezpečení informací Osoba
Technické Organizace
Školení Organizace
Základní tým Organizace
Tým podpory Organizace


Nepochybně jste si všimli, že každá role patří buď osobě, nebo organizaci. Pro představu toho, co je možné, jsem přidal několik externích organizací, se kterými má vztahy naše fiktivní společnost s ručením omezeným, ABC Software Inc.

Přidání metadat zaměstnání

Dalším úkolem je definovat platné dvojice rolí mezi prvním a druhým interaktorem. To zase definuje typy vztahů, které strany mohou mít. Začněme vyplňovat role_type_relationship tabulka metadat s rolemi zaměstnanců společnosti. Koneckonců nemůžeme vytvářet týmy, aniž bychom nejprve měli pracovníky:


1. typ role 2. typ role Směr popisu Popis Typ vztahu
Společnost s ručením omezeným CTO Engineering LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Projektový manažer LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Projektový specialista LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Systémový analytik LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Analytik požadavků LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Technický úředník LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Správce systému LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Hlavní hardwarový inženýr LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Hardwarový inženýr LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Senior softwarový inženýr LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Softwarový inženýr LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Databázový inženýr LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Technická podpora LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným QA Manager LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Webový designér LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Softwarový inženýr QA LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Projektová kancelář LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Inženýr zabezpečení informací LTR zaměstnává SKUTEČNÉ
Společnost s ručením omezeným Žadatel LTR vybere SKUTEČNÉ


Předpokládejme, že společnost ABC Software Inc. najme dva zaměstnance, Jane Smith a Alex Jones, pro následující role:


Vztah strany Vztah typu role
1. interaktor (organizace) 2. interaktor (osoba) 1. interaktor (role) 2. interaktor (role) Popis
ABC Software Inc. Jane Smith Společnost s ručením omezeným CTO Engineering zaměstnává
ABC Software Inc. Alex Jones Společnost s ručením omezeným Projektový manažer zaměstnává


Když uděláte krok zpět v čase, uvidíte, že tento vztah začal dříve, než byli najati Jane Smith a Alex Jones; museli se ucházet o práci ve společnosti ABC Software Inc. Vztah by vypadal takto:


Vztah strany Vztah typu role
1. interaktor (organizace) 2. interaktor (osoba) 1. interaktor (role) 2. interaktor (role) Popis
ABC Software Inc. Jane Smith Společnost s ručením omezeným Žadatel vybere
ABC Software Inc. Alex Jones Společnost s ručením omezeným Žadatel vybere


Začínáte vidět možnosti, které party vztah vzor podporuje?

Nemáme tabulku s názvem applicant a další tabulka s názvem employee , jak lze nalézt u jiných modelů. Pokud se nad tím zamyslíte, měli by mnoho stejných atributů – jméno, adresa, datum narození atd.; museli byste zkopírovat hodnoty z applicant na employee po úspěšném pronájmu. Ale byli zúčastnění lidé přeměněni z jedné věci na druhou? Samozřejmě že ne! Jsou to stále stejní lidé!

Ve skutečnosti změnil se pouze vztah mezi ABC Software Inc. a Jane Smith nebo Alex Jones. A to je přesně to, co modeluje vzor vztahu stran.

Pokračování:Metadata projektového týmu

Než budeme moci vytvořit party_relationship Abychom mohli definovat skutečnost, že Jane Smithová řídí Alexe Jonese, musíme definovat strukturu vývojového týmu projektu. Toto je jen otázka párování rodičovských a podřízených rolí, aby se vytvořila platná hierarchie:


1. typ role 2. typ role Směr popisu Popis Typ vztahu
Tým vývoje projektu CTO Engineering RTL vedou SKUTEČNÉ
CTO Engineering Projektový manažer LTR spravuje SKUTEČNÉ
Projektový manažer Systémový analytik LTR spravuje SKUTEČNÉ
Projektový manažer Správce systému LTR spravuje SKUTEČNÉ
Projektový manažer Projektový specialista LTR spravuje SKUTEČNÉ
Projektový manažer Senior softwarový inženýr LTR spravuje SKUTEČNÉ
Projektový manažer Technická podpora LTR spravuje SKUTEČNÉ
Projektový manažer Webový designér LTR spravuje SKUTEČNÉ
Projektový manažer Softwarový inženýr QA LTR spravuje SKUTEČNÉ
Projektový manažer Projektová kancelář LTR spravuje SKUTEČNÉ
Projektový manažer Inženýr zabezpečení informací LTR spravuje SKUTEČNÉ
Projektový manažer Databázový inženýr LTR spravuje SKUTEČNÉ
Projektový manažer Technická podpora LTR spravuje SKUTEČNÉ
Projektový manažer QA Manager LTR spravuje SKUTEČNÉ
Systémový analytik Analytik požadavků LTR spravuje SKUTEČNÉ
Analytik požadavků Technický úředník LTR spravuje SKUTEČNÉ
Správce systému Hlavní hardwarový inženýr LTR spravuje SKUTEČNÉ
Senior Hardware Engineer Hardwarový inženýr LTR spravuje SKUTEČNÉ
Senior softwarový inženýr Softwarový inženýr LTR spravuje SKUTEČNÉ


U všech výše uvedených rolí se vztah čte zleva doprava – např. projektový manažer řídí databázového inženýra. Případně můžete použít formát zprava doleva (databázový inženýr je podřízen projektovému manažerovi), pokud je to vaše preferovaná konvence.

Nakonec musíme definovat vztah mezi našimi dvěma novými zaměstnanci:


Vztah strany Vztah typu role
1. interaktor (organizace) 2. interaktor (osoba) 1. interaktor (role) 2. interaktor (role) Popis
Jane Smith Alex Jones CTO Engineering Projektový manažer spravuje


Samozřejmě můžete mít libovolný počet týmů ve tvaru této hierarchie. V jistém smyslu tedy party_relationship je instancí role_type_relationship . To je podobné způsobu, jakým je objekt instancí třídy v OO programování.

Včetně logických metadat

S odkazem na diagram vývojového týmu projektu můžeme také definovat následující logické vztahy mezi rolemi :


1. typ role 2. typ role Směr popisu Popis Typ vztahu
Základní tým Projektový specialista RTL je členem LOGICKÉ
Základní tým Systémový analytik RTL je členem LOGICKÉ
Základní tým Analytik požadavků RTL je členem LOGICKÉ
Základní tým Technický úředník RTL je členem LOGICKÉ
Základní tým Správce systému RTL je členem LOGICKÉ
Základní tým Hlavní hardwarový inženýr RTL je členem LOGICKÉ
Základní tým Hardwarový inženýr RTL je členem LOGICKÉ
Základní tým Senior softwarový inženýr RTL je členem LOGICKÉ
Základní tým Softwarový inženýr RTL je členem LOGICKÉ
Základní tým Databázový inženýr RTL je členem LOGICKÉ
Základní tým Technická podpora RTL je členem LOGICKÉ
Základní tým QA Manager RTL je členem LOGICKÉ
Základní tým Webový designér RTL je členem LOGICKÉ
Základní tým Softwarový inženýr QA RTL je členem LOGICKÉ
Základní tým Projektová kancelář RTL je členem LOGICKÉ
Základní tým Inženýr zabezpečení informací RTL je členem LOGICKÉ
Tým podpory Webový designér RTL je členem LOGICKÉ
Tým podpory Softwarový inženýr QA RTL je členem LOGICKÉ
Tým podpory Projektová kancelář RTL je členem LOGICKÉ
Tým podpory Inženýr zabezpečení informací RTL je členem LOGICKÉ


Všimněte si, že party_relationship nikdy není instance logického role_type_relationship . Jaký má tedy smysl definovat logické vztahy?

No, to se asi nejlépe vysvětluje na příkladu. Představte si, že byste chtěli poslat dopis všem zaměstnancům, kteří jsou logicky členy podpůrného týmu. Chcete-li vytvořit seznam adresátů, napsali byste dotaz, který vrátí všechny role interakce LOGICAL Support Team 2 spojené se stejnými rolemi REAL 2, připojené k party_relationship , připojil se ke 2 party . To vám umožní získat jména a adresy všech zúčastněných.

Zvláštní případ

Možná jste si všimli několika neobvyklých položek v role_type tabulka metadat, konkrétně:


Typ role Typ strany
Osoba
Stejné Organizace


Toto jsou dva případy zvláštního případu, ke kterému dochází, když má strana k sobě reflexivní vztah:


1. typ role 2. typ role Směr popisu Popis Typ vztahu
Sebe Systémový analytik LTR zaměstnán SKUTEČNÉ


Například pro samostatně výdělečně činného systémového analytika jsou interaktory 1 a 2 v party_relationship odkažte se zpět na stejnou party řádek – tj. oba sloupce cizího klíče obsahují přesně stejné party.ID hodnotu.

Jak je důležité mít kontext

Představte si, že máme malý analytický tým, který se v podstatě skládá z větve mezi projektovým manažerem a technickým úředníkem:


1. typ role 2. typ role Směr popisu Popis Typ vztahu
Malý tým Analytics Projektový manažer RTL vedou SKUTEČNÉ
Projektový manažer Systémový analytik LTR spravuje SKUTEČNÉ
Systémový analytik Analytik požadavků LTR spravuje SKUTEČNÉ
Analytik požadavků Technický úředník LTR spravuje SKUTEČNÉ


Každý ze vztahů zde existuje i ve struktuře projektového vývojového týmu. Jak tedy odlišíme vztah jednoho projektového manažera → systémového analytika od druhého?

Používáme volitelný kontext cizí klíč mezi role_type_relationship a role_type . Pro malý analytický tým jsme nastavili kontext všech vztahů na „malý analytický tým“, prvek nejvyšší úrovně. A totéž děláme pro strukturu týmu pro vývoj projektu. Když procházíme strukturou, děláme to pouze pro typ týmu, který nás zajímá.

Výhody a nevýhody vzoru kusovníku vztahu strany

Pokud jste četli mé další články na toto téma, pravděpodobně jste uhodli, že jsem fanouškem návrhového vzoru Bill of Materials. Je to jednoduché, ale velmi silné. Upozornění je, že musí být používán správně a musí být přizpůsoben tak, aby vaše implementace zůstala zvládnutelná.

V této implementaci vzoru kusovníku vztahů mezi stranami zajišťujeme, aby naše vztahy zůstaly přesné tím, že nejprve definujeme přípustné vztahy mezi interaktory, které existují v naší doméně. To by například zabránilo tomu, aby Internal Revenue Service byla „zaměstnána“ jako webdesignér ve společnosti ABC Software Inc.

Jaké možnosti vyplývají z definování vztahů tímto způsobem? Vaše organizace možná potřebuje vědět, pro jaké jiné organizace vaši současní zaměstnanci a dodavatelé pracovali. To pomáhá předcházet možným střetům zájmů nebo dokonce podvodům. Příkladem toho je udělující organizace. Potřebuje vědět, na kterých školách jeho hodnotitelé dříve učili, aby zajistili, že nebudou hodnotit písemné zkoušky z těchto škol. V modelu vztahu mezi stranami je snadné dotazovat se a získat tyto informace.

Na druhou stranu může vaše organizace chtít uchovávat stejné informace, protože by mohly představovat obchodní příležitosti. Záleží jen na vaší doméně.

Stručně řečeno, poznatky, které můžete získat z dobře strukturovaných dat o vztazích mezi stranami, mohou být neocenitelné.


  1. Jak porovnat data na serveru SQL Server

  2. Konfigurace upozornění na e-mail databáze v MS SQL Server

  3. Jak se mohu vyhnout příliš dlouhým chybám s nezpracovanými proměnnými délkami v SQL Developer?

  4. SQLiteDiskIOException:kód chyby 10:chyba I/O disku se znovu naladí na ICS a Samsung Nexus na DROP TABLE