Relaties zijn overal:tussen mensen, tussen organisaties, tussen organisaties en mensen. Denk aan een werknemer zijn van een bedrijf, lid zijn van een projectteam of een dochteronderneming zijn van een ander bedrijf. Is er een eenvoudige manier om al deze relaties nauwkeurig te modelleren en te beheren? Kunnen we de vraag 'Wie weet wie?' gemakkelijk beantwoorden
Een snel overzicht van relaties
Hoe dit basismodel precies tot stand kwam, werd beschreven in mijn vorige artikel, Flexible and Manageable Bill of Materials (BOM) Designs.
In dit model en in conventioneel stuklijstontwerp, is de 1st interactor
is meestal de superieure Party
in de Relationship
– werkgever in plaats van werknemer, teamleider in plaats van teamlid, enz.
Dit is hoe de gegevens eruit kunnen zien (met de rol die elke partij tussen haakjes speelt):
1 interactie | 2 interactief |
---|---|
Widget Co. Inc. (werkgever) | Manager 1 (medewerker) |
Widget Co. Inc. (werkgever) | Manager 2 (medewerker) |
Widget Co. Inc. (werkgever) | Werknemer 1 (werknemer) |
Widget Co. Inc. (werkgever) | Werknemer 2 (werknemer) |
Widget Co. Inc. (werkgever) | Werknemer 3 (werknemer) |
Widget Co. Inc. (werkgever) | Werknemer 4 (werknemer) |
Manager 1 (verantwoordelijk voor) | Werknemer 1 (rapporteert aan) |
Manager 1 (verantwoordelijk voor) | Werknemer 2 (rapporteert aan) |
Manager 2 (verantwoordelijk voor) | Werknemer 3 (rapporteert aan) |
Manager 2 (verantwoordelijk voor) | Werknemer 4 (rapporteert aan) |
Een verfijnder model
Stel je voor dat je een projectontwikkelingsteam als volgt wilt modelleren:
Bron:https://www.edrawsoft.com/template-matrix -org-chart.php
De meeste rollen in deze teamhiërarchie zijn echt – b.v. de requirementsanalist rapporteert aan de systeemanalist. Een andere manier om ernaar te kijken is dat de systeemanalist de behoefteanalist aanstuurt.
Relaties tussen rollen kunnen van links naar rechts (LTR) of van rechts naar links (RTL) worden gelezen. Het is normaal gesproken het beste om je aan de ene of de andere conventie te houden - LTR of RTL - maar in de praktijk zul je merken dat er uitzonderingen zijn.
Merk ook op dat dit diagram verschillende manieren laat zien om rollen te groeperen. Sommige rollen zijn echt, zoals we hebben besproken; andere zijn logisch – b.v. de technische groep, de trainingsgroep, het kernteam en het ondersteuningsteam.
We kunnen zeggen dat dit diagram de teamstructuur definieert met behulp van de rollen die nodig zijn om het projectontwikkelingsteam te voltooien. Dit verschilt van een echt exemplaar van het team, dat zou bestaan uit de namen van echte mensen bij elk van de rollen.
We hebben dus een datamodel nodig dat flexibel en configureerbaar is , zoals deze:
De gele tabellen bevatten metadata , en de blauwe tabellen bevatten bedrijfsgegevens .
Instellen van metadata van de stichting
We beginnen met het invullen van de party_type
tafel. Deze tabel maakt onderscheid of een partij een persoon of een organisatie is.
Voordat we veel anders doen, moeten we ook rollen definiëren in de role_type
metadatatabel:
Mooie naam | Partijtype |
---|---|
HM Revenue and Customs (HMRC) | Organisatie |
Interne belastingdienst (IRS) | Organisatie |
Paspoortservice | Organisatie |
Hetzelfde | Organisatie |
Beperkte vennootschap | Organisatie |
Openbare naamloze vennootschap | Organisatie |
Aanvrager | Persoon |
Zelf | Persoon |
CTO Engineering | Persoon |
Projectmanager | Persoon |
Projectspecialist | Persoon |
Systeemanalist | Persoon |
Vereistenanalist | Persoon |
Technisch bediende | Persoon |
Systeembeheerder | Persoon |
Senior Hardware Engineer | Persoon |
Hardware-ingenieur | Persoon |
Senior Software Engineer | Persoon |
Software-ingenieur | Persoon |
Database-engineer | Persoon |
Technische ondersteuning | Persoon |
QA-manager | Persoon |
Web Designer | Persoon |
Software QA-ingenieur | Persoon |
Projectbureau | Persoon |
Informatiebeveiligingsingenieur | Persoon |
Technisch | Organisatie |
Training | Organisatie |
Kernteam | Organisatie |
Ondersteuningsteam | Organisatie |
U hebt ongetwijfeld opgemerkt dat elke rol toebehoort aan een persoon of een organisatie. Om een idee te geven van wat er mogelijk is, heb ik enkele externe organisaties toegevoegd waarmee onze fictieve naamloze vennootschap, ABC Software Inc, een relatie heeft.
Werkgelegenheidsmetadata toevoegen
De volgende taak is het definiëren van de geldige rolparen tussen de eerste en de tweede interactie. Dit definieert op zijn beurt de soorten relaties die partijen kunnen hebben. Laten we beginnen met het invullen van de role_type_relationship
metadatatabel met de werknemersrollen van het bedrijf. We kunnen tenslotte geen teams maken zonder eerst medewerkers te hebben:
Eerste roltype | 2e roltype | Beschrijving Richting | Beschrijving | Type relatie |
---|---|---|---|---|
Beperkte vennootschap | CTO Engineering | LTR | werkt | ECHT |
Beperkte vennootschap | Projectmanager | LTR | werkt | ECHT |
Beperkte vennootschap | Projectspecialist | LTR | werkt | ECHT |
Beperkte vennootschap | Systeemanalist | LTR | werkt | ECHT |
Beperkte vennootschap | Vereistanalist | LTR | werkt | ECHT |
Beperkte vennootschap | Technisch bediende | LTR | werkt | ECHT |
Beperkte vennootschap | Systeembeheerder | LTR | werkt | ECHT |
Beperkte vennootschap | Senior hardware-ingenieur | LTR | werkt | ECHT |
Beperkte vennootschap | Hardware-ingenieur | LTR | werkt | ECHT |
Beperkte vennootschap | Senior Software Engineer | LTR | werkt | ECHT |
Beperkte vennootschap | Software-ingenieur | LTR | werkt | ECHT |
Beperkte vennootschap | Database-engineer | LTR | werkt | ECHT |
Beperkte vennootschap | Technische ondersteuning | LTR | werkt | ECHT |
Beperkte vennootschap | QA-manager | LTR | werkt | ECHT |
Beperkte vennootschap | Webdesigner | LTR | werkt | ECHT |
Beperkte vennootschap | Software QA-ingenieur | LTR | werkt | ECHT |
Beperkte vennootschap | Projectbureau | LTR | werkt | ECHT |
Beperkte vennootschap | Ingenieur informatiebeveiliging | LTR | werkt | ECHT |
Beperkte vennootschap | Aanvrager | LTR | selecteert | ECHT |
Stel dat ABC Software Inc. twee medewerkers gaat aannemen, Jane Smith en Alex Jones, voor de volgende rollen:
Partijrelatie | Roltype-relatie | |||
---|---|---|---|---|
1e Interactor (Organisatie) | 2e Interactor (Persoon) | Eerste interactie (rol) | 2e interactie (rol) | Beschrijving |
ABC Software Inc. | Jane Smith | Beperkte vennootschap | CTO Engineering | werkt |
ABC Software Inc. | Alex Jones | Beperkte vennootschap | Projectmanager | werkt |
Als je een stap terug in de tijd doet, zou je zien dat deze relatie begon voordat Jane Smith en Alex Jones werden aangenomen; ze moesten solliciteren bij ABC Software Inc. De relatie zou er als volgt hebben uitgezien:
Partijrelatie | Roltype-relatie | |||
---|---|---|---|---|
1e Interactor (Organisatie) | 2e Interactor (Persoon) | Eerste interactie (rol) | 2e interactie (rol) | Beschrijving |
ABC Software Inc. | Jane Smith | Beperkte vennootschap | Aanvrager | selecteert |
ABC Software Inc. | Alex Jones | Beperkte vennootschap | Aanvrager | selecteert |
Begin je de mogelijkheden te zien dat het relatiepatroon van de partij ondersteunt?
We hebben geen tabel met de naam applicant
en een andere tabel genaamd employee
, zoals te vinden in andere modellen. Als je erover nadenkt, zouden ze veel van dezelfde kenmerken delen - naam, adres, geboortedatum, enz.; je zou de waarden moeten kopiëren van applicant
naar employee
bij succesvolle verhuur. Maar zijn de betrokkenen van het een in het ander getransformeerd? Natuurlijk niet! Het zijn nog steeds dezelfde mensen!
In feite is alleen de relatie veranderd tussen ABC Software Inc. en Jane Smith of Alex Jones. En dit is precies wat het patroon van partijrelaties modelleert.
Vervolg op:metadata projectteam
Voordat we een party_relationship
tabel om te definiëren dat Jane Smith Alex Jones aanstuurt, moeten we de structuur van het projectontwikkelingsteam definiëren. Dit is gewoon een kwestie van ouder- en kindrollen koppelen om een geldige hiërarchie te vormen:
Eerste roltype | 2e roltype | Beschrijving Richting | Beschrijving | Type relatie |
---|---|---|---|---|
Projectontwikkelingsteam | CTO Engineering | RTL | leads | ECHT |
CTO Engineering | Projectmanager | LTR | beheert | ECHT |
Projectmanager | Systeemanalist | LTR | beheert | ECHT |
Projectmanager | Systeembeheerder | LTR | beheert | ECHT |
Projectmanager | Projectspecialist | LTR | beheert | ECHT |
Projectmanager | Senior Software Engineer | LTR | beheert | ECHT |
Projectmanager | Technische ondersteuning | LTR | beheert | ECHT |
Projectmanager | Webdesigner | LTR | beheert | ECHT |
Projectmanager | Software QA-ingenieur | LTR | beheert | ECHT |
Projectmanager | Projectbureau | LTR | beheert | ECHT |
Projectmanager | Ingenieur informatiebeveiliging | LTR | beheert | ECHT |
Projectmanager | Database-engineer | LTR | beheert | ECHT |
Projectmanager | Technische ondersteuning | LTR | beheert | ECHT |
Projectmanager | QA-manager | LTR | beheert | ECHT |
Systeemanalist | Vereistanalist | LTR | beheert | ECHT |
Vereistenanalist | Technisch bediende | LTR | beheert | ECHT |
Systeembeheerder | Senior hardware-ingenieur | LTR | beheert | ECHT |
Senior Hardware Engineer | Hardware-ingenieur | LTR | beheert | ECHT |
Senior Software Engineer | Software-ingenieur | LTR | beheert | ECHT |
Voor alle bovenstaande rollen wordt de relatie van links naar rechts gelezen - b.v. de projectmanager stuurt de database engineer aan. Als alternatief kunt u de rechts-naar-links-indeling gebruiken (de database-engineer rapporteert aan de projectmanager) als dat uw voorkeursconventie is.
Ten slotte moeten we de relatie tussen onze twee nieuwe medewerkers definiëren:
Partijrelatie | Roltype-relatie | |||
---|---|---|---|---|
1e Interactor (Organisatie) | 2e Interactor (Persoon) | Eerste interactie (rol) | 2e interactie (rol) | Beschrijving |
Jane Smith | Alex Jones | CTO Engineering | Projectmanager | beheert |
Natuurlijk kunt u een willekeurig aantal teams hebben in de vorm van deze hiërarchie. In zekere zin is daarom party_relationship
is een instantie van role_type_relationship
. Dit is vergelijkbaar met de manier waarop een object een instantie is van een klasse in OO-programmering.
Inclusief logische metadata
Met verwijzing naar het projectontwikkelingsteamdiagram kunnen we ook de volgende logische relaties tussen rollen definiëren :
Eerste roltype | 2e roltype | Beschrijving Richting | Beschrijving | Type relatie |
---|---|---|---|---|
Kernteam | Projectspecialist | RTL | is lid van | LOGISCH |
Kernteam | Systeemanalist | RTL | is lid van | LOGISCH |
Kernteam | Vereistanalist | RTL | is lid van | LOGISCH |
Kernteam | Technisch bediende | RTL | is lid van | LOGISCH |
Kernteam | Systeembeheerder | RTL | is lid van | LOGISCH |
Kernteam | Senior hardware-ingenieur | RTL | is lid van | LOGISCH |
Kernteam | Hardware-ingenieur | RTL | is lid van | LOGISCH |
Kernteam | Senior Software Engineer | RTL | is lid van | LOGISCH |
Kernteam | Software-ingenieur | RTL | is lid van | LOGISCH |
Kernteam | Database-engineer | RTL | is lid van | LOGISCH |
Kernteam | Technische ondersteuning | RTL | is lid van | LOGISCH |
Kernteam | QA-manager | RTL | is lid van | LOGISCH |
Kernteam | Webdesigner | RTL | is lid van | LOGISCH |
Kernteam | Software QA-ingenieur | RTL | is lid van | LOGISCH |
Kernteam | Projectbureau | RTL | is lid van | LOGISCH |
Kernteam | Ingenieur informatiebeveiliging | RTL | is lid van | LOGISCH |
Ondersteuningsteam | Webdesigner | RTL | is lid van | LOGISCH |
Ondersteuningsteam | Software QA-ingenieur | RTL | is lid van | LOGISCH |
Ondersteuningsteam | Projectbureau | RTL | is lid van | LOGISCH |
Ondersteuningsteam | Ingenieur informatiebeveiliging | RTL | is lid van | LOGISCH |
Merk op dat party_relationship
is nooit een instantie van een logische role_type_relationship
. Dus wat heeft het voor zin om logische relaties te definiëren?
Welnu, dit kan waarschijnlijk het beste worden uitgelegd aan de hand van een voorbeeld. Stel je voor dat je een brief wilt sturen naar alle medewerkers die logischerwijs lid zijn van het supportteam. Om een mailinglijst te maken, zou u een query moeten schrijven die alle interactierollen van LOGICAL Support Team 2 retourneert die zijn samengevoegd met dezelfde REAL 2 interactorrollen, verbonden met party_relationship
, lid geworden van de 2 interactor party
. Dit zou u in staat stellen de namen en adressen van alle betrokkenen te verkrijgen.
Een speciaal geval
Je hebt misschien een aantal ongebruikelijke vermeldingen opgemerkt in de role_type
metadatatabel, namelijk:
Roltype | Partijtype |
---|---|
Zelf | Persoon |
Hetzelfde | Organisatie |
Dit zijn twee gevallen van een speciaal geval, dat optreedt wanneer een partij een reflexieve relatie met zichzelf heeft:
Eerste roltype | 2e roltype | Beschrijving Richting | Beschrijving | Type relatie |
---|---|---|---|---|
Zelf | Systeemanalist | LTR | werkzaam | ECHT |
Bijvoorbeeld, voor een zelfstandige systeemanalist, de 1 en 2 interactors in party_relationship
terugverwijzen naar dezelfde party
rij – d.w.z. beide vreemde-sleutelkolommen bevatten exact dezelfde party.ID
waarde.
Het belang van context
Stel je voor dat we een klein analyseteam hebben dat in feite wordt gevormd uit de tak tussen de projectmanager en de technisch bediende:
Eerste roltype | 2e roltype | Beschrijving Richting | Beschrijving | Type relatie |
---|---|---|---|---|
Klein Analytics-team | Projectmanager | RTL | leads | ECHT |
Projectmanager | Systeemanalist | LTR | beheert | ECHT |
Systeemanalist | Vereistanalist | LTR | beheert | ECHT |
Vereistenanalist | Technisch bediende | LTR | beheert | ECHT |
Elk van de relaties hier bestaat ook in de structuur van het projectontwikkelingsteam. Dus, hoe onderscheiden we de ene projectmanager → systeemanalistrelatie van de andere?
We gebruiken de optionele context externe sleutel tussen role_type_relationship
en role_type
. Voor het kleine analyseteam hebben we de context voor alle relaties ingesteld op 'klein analyseteam', het element op het hoogste niveau. En we doen hetzelfde voor de structuur van het projectontwikkelingsteam. Wanneer we de structuur doorkruisen, doen we dit alleen voor het type team waarin we geïnteresseerd zijn.
Partijrelatie stuklijstpatroon voor- en nadelen
Als je mijn andere artikelen over dit onderwerp hebt gelezen, heb je waarschijnlijk geraden dat ik een fan ben van het Bill of Materials-ontwerppatroon. Het is eenvoudig, maar zeer krachtig. Het voorbehoud is dat het op de juiste manier moet worden gebruikt en dat het moet worden aangepast zodat uw implementatie beheersbaar blijft.
In deze partijrelatie-implementatie van het stuklijstpatroon zorgen we ervoor dat onze relaties accuraat blijven door eerst de toelaatbare relaties te definiëren tussen de interactoren die in ons domein bestaan. Dit zou bijvoorbeeld voorkomen dat de Internal Revenue Service wordt "in dienst genomen" als webdesigner bij ABC Software Inc.
Welke mogelijkheden ontstaan er door relaties op deze manier te definiëren? Welnu, uw organisatie moet mogelijk weten voor welke andere organisaties uw huidige werknemers en contractanten hebben gewerkt. Dit helpt mogelijke belangenverstrengeling of zelfs fraude te voorkomen. Een voorbeeld hiervan is een toekennende organisatie. Het moet weten op welke scholen zijn beoordelaars eerder les hebben gegeven om ervoor te zorgen dat ze geen examenwerken van die scholen beoordelen. In een partijrelatiemodel is het gemakkelijk om die informatie op te vragen en te verkrijgen.
Aan de andere kant wil uw organisatie misschien dezelfde informatie opslaan omdat dit zakelijke kansen kan bieden. Het hangt gewoon af van uw domein.
Kortom, de inzichten die u kunt krijgen uit goed gestructureerde gegevens over partijrelaties kunnen van onschatbare waarde zijn.