Les relations sont partout :entre les personnes, entre les organisations, entre les organisations et les personnes. Pensez à être un employé d'une entreprise, à être membre d'une équipe de projet ou à être une filiale d'une autre entreprise. Existe-t-il un moyen simple de modéliser et de gérer avec précision toutes ces relations ? Pouvons-nous facilement répondre à la question "Qui sait qui ?"
Un examen rapide des relations
La manière exacte dont ce modèle de base a été dérivé a été décrite dans mon article précédent, Conceptions de nomenclatures flexibles et gérables.
Dans ce modèle et dans la conception de nomenclature conventionnelle, le 1st interactor
a tendance à être le Party
dans la Relationship
– employeur plutôt qu'employé, chef d'équipe plutôt que membre d'équipe, etc.
Voici à quoi pourraient ressembler les données (avec le rôle joué par chaque partie entre parenthèses) :
1 interacteur | 2 interacteur |
---|---|
Widget Co. Inc. (employeur) | Manager 1 (employé) |
Widget Co. Inc. (employeur) | Manager 2 (employé) |
Widget Co. Inc. (employeur) | Employé 1 (employé) |
Widget Co. Inc. (employeur) | Employé 2 (employé) |
Widget Co. Inc. (employeur) | Employé 3 (employé) |
Widget Co. Inc. (employeur) | Employé 4 (employé) |
Manager 1 (responsable de) | Employé 1 (rapporte à) |
Manager 1 (responsable de) | Employé 2 (rapporte à) |
Manager 2 (responsable de) | Employé 3 (rapporte à) |
Manager 2 (responsable de) | Employé 4 (rapporte à) |
Un modèle plus sophistiqué
Imaginez que vous souhaitiez modéliser une équipe de développement de projet comme celle-ci :
Source :https://www.edrawsoft.com/template-matrix -organigramme.php
La plupart des rôles dans cette hiérarchie d'équipe sont réels - par ex. l'analyste des exigences rend compte à l'analyste du système. Une autre façon de voir les choses est que l'analyste système gère l'analyste des exigences.
Les relations entre les rôles peuvent être lues de gauche à droite (LTR) ou de droite à gauche (RTL). Il est normalement préférable de s'en tenir à une convention ou à l'autre - LTR ou RTL - mais dans la pratique, vous pouvez constater qu'il y a des exceptions à cela.
Notez également que ce diagramme montre différentes manières de regrouper les rôles. Certains rôles sont réels, comme nous en avons discuté; d'autres sont logiques - par ex. le groupe technique, le groupe de formation, l'équipe centrale et l'équipe d'assistance.
Nous pouvons dire que ce diagramme définit la structure de l'équipe en utilisant les rôles requis pour compléter l'équipe de développement du projet. Ceci est distinct d'une instance réelle de l'équipe, qui serait composée de noms de personnes réelles pour chacun des rôles.
Nous avons donc besoin d'un modèle de données flexible et configurable , comme celle-ci :
Les tableaux jaunes contiennent des métadonnées , et les tableaux bleus contiennent des données d'entreprise .
Configuration des métadonnées de base
Nous allons commencer par renseigner le party_type
table. Ce tableau différencie si une partie est une personne ou une organisation.
Avant de faire quoi que ce soit d'autre, nous devons également définir les rôles dans le role_type
table de métadonnées :
Joli nom | Type de groupe |
---|---|
Fiscalité et douanes du Royaume-Uni (HMRC) | Organisation |
Internal Revenue Service (IRS) | Organisation |
Service des passeports | Organisation |
Pareil | Organisation |
Société Anonyme | Organisation |
Société Anonyme | Organisation |
Candidat | Personne |
Moi | Personne |
Ingénierie CTO | Personne |
Chef de projet | Personne |
Spécialiste de projet | Personne |
Analyste système | Personne |
Analyste des exigences | Personne |
Commis technique | Personne |
Administrateur système | Personne |
Ingénieur matériel senior | Personne |
Ingénieur matériel | Personne |
Ingénieur logiciel senior | Personne |
Ingénieur logiciel | Personne |
Ingénieur base de données | Personne |
Assistance technique | Personne |
Responsable AQ | Personne |
Concepteur Web | Personne |
Ingénieur QA logiciel | Personne |
Bureau de projet | Personne |
Ingénieur en sécurité de l'information | Personne |
Technique | Organisation |
Formation | Organisation |
Équipe principale | Organisation |
Équipe d'assistance | Organisation |
Vous avez sans doute remarqué que chaque rôle appartient soit à une personne, soit à une organisation. Pour donner une idée de ce qui est possible, j'ai ajouté quelques organisations externes avec lesquelles notre société anonyme fictive, ABC Software Inc, entretient des relations.
Ajout de métadonnées sur l'emploi
La tâche suivante consiste à définir les paires de rôles valides entre le premier et le deuxième interacteurs. À son tour, cela définit les types de relations que les parties peuvent avoir. Commençons à remplir le role_type_relationship
table de métadonnées avec les rôles des employés de l'entreprise. Après tout, nous ne pouvons pas créer d'équipes sans avoir d'abord des travailleurs :
1er type de rôle | 2e type de rôle | Direction de la description | Description | Type de relation |
---|---|---|---|---|
Société Anonyme | Ingénierie CTO | LTR | emploie | RÉEL |
Société Anonyme | Chef de projet | LTR | emploie | RÉEL |
Société Anonyme | Spécialiste de projet | LTR | emploie | RÉEL |
Société Anonyme | Analyste système | LTR | emploie | RÉEL |
Société Anonyme | Analyste des exigences | LTR | emploie | RÉEL |
Société Anonyme | Commis technique | LTR | emploie | RÉEL |
Société Anonyme | Administrateur système | LTR | emploie | RÉEL |
Société Anonyme | Ingénieur matériel senior | LTR | emploie | RÉEL |
Société Anonyme | Ingénieur matériel | LTR | emploie | RÉEL |
Société Anonyme | Ingénieur logiciel senior | LTR | emploie | RÉEL |
Société Anonyme | Ingénieur logiciel | LTR | emploie | RÉEL |
Société Anonyme | Ingénieur de base de données | LTR | emploie | RÉEL |
Société Anonyme | Assistance technique | LTR | emploie | RÉEL |
Société Anonyme | Responsable AQ | LTR | emploie | RÉEL |
Société Anonyme | Concepteur Web | LTR | emploie | RÉEL |
Société Anonyme | Ingénieur QA logiciel | LTR | emploie | RÉEL |
Société Anonyme | Bureau de projet | LTR | emploie | RÉEL |
Société Anonyme | Ingénieur en sécurité de l'information | LTR | emploie | RÉEL |
Société Anonyme | Candidat | LTR | sélectionne | RÉEL |
Supposons qu'ABC Software Inc. embauche deux employés, Jane Smith et Alex Jones, pour les rôles suivants :
Relation de partie | Relation entre les types de rôles | |||
---|---|---|---|---|
1er Interacteur (Organisation) | 2ème Interacteur (Personne) | 1er Interacteur (Rôle) | 2ème Interacteur (Rôle) | Description |
ABC Software Inc. | Jane Smith | Société Anonyme | Ingénierie CTO | emploie |
ABC Software Inc. | Alex Jones | Société Anonyme | Chef de projet | emploie |
En remontant dans le temps, vous verriez que cette relation a commencé avant que Jane Smith et Alex Jones ne soient embauchés; ils devaient postuler pour des emplois chez ABC Software Inc. La relation aurait ressemblé à ceci :
Relation de partie | Relation entre les types de rôles | |||
---|---|---|---|---|
1er Interacteur (Organisation) | 2ème Interacteur (Personne) | 1er Interacteur (Rôle) | 2ème Interacteur (Rôle) | Description |
ABC Software Inc. | Jane Smith | Société Anonyme | Candidat | sélectionne |
ABC Software Inc. | Alex Jones | Société Anonyme | Candidat | sélectionne |
Commencez-vous à voir les possibilités que le modèle de relation de parti prend en charge ?
Nous n'avons pas de table appelée applicant
et une autre table appelée employee
, comme on peut le trouver dans d'autres modèles. Si vous y réfléchissez, ils partageraient bon nombre des mêmes attributs - nom, adresse, date de naissance, etc. vous devrez copier les valeurs de applicant
à employee
en cas d'embauche réussie. Mais les personnes impliquées ont-elles été transformées d'une chose à une autre ? Bien sûr que non! Ce sont toujours les mêmes !
En réalité, c'est seulement la relation qui a changé entre ABC Software Inc. et Jane Smith ou Alex Jones. Et c'est précisément ce que modélise le modèle de relation de parti.
Continuer :Métadonnées de l'équipe de projet
Avant de pouvoir créer une party_relationship
tableau pour définir le fait que Jane Smith gère Alex Jones, nous devons définir la structure de l'équipe de développement du projet. Il s'agit simplement d'associer les rôles parent et enfant pour former une hiérarchie valide :
1er type de rôle | 2e type de rôle | Direction de la description | Description | Type de relation |
---|---|---|---|---|
Équipe de développement de projet | Ingénierie CTO | RTL | prospects | RÉEL |
Ingénierie CTO | Chef de projet | LTR | gère | RÉEL |
Chef de projet | Analyste système | LTR | gère | RÉEL |
Chef de projet | Administrateur système | LTR | gère | RÉEL |
Chef de projet | Spécialiste de projet | LTR | gère | RÉEL |
Chef de projet | Ingénieur logiciel senior | LTR | gère | RÉEL |
Chef de projet | Assistance technique | LTR | gère | RÉEL |
Chef de projet | Concepteur Web | LTR | gère | RÉEL |
Chef de projet | Ingénieur QA logiciel | LTR | gère | RÉEL |
Chef de projet | Bureau de projet | LTR | gère | RÉEL |
Chef de projet | Ingénieur en sécurité de l'information | LTR | gère | RÉEL |
Chef de projet | Ingénieur de base de données | LTR | gère | RÉEL |
Chef de projet | Assistance technique | LTR | gère | RÉEL |
Chef de projet | Responsable AQ | LTR | gère | RÉEL |
Analyste système | Analyste des exigences | LTR | gère | RÉEL |
Analyste des exigences | Commis technique | LTR | gère | RÉEL |
Administrateur système | Ingénieur matériel senior | LTR | gère | RÉEL |
Ingénieur matériel senior | Ingénieur matériel | LTR | gère | RÉEL |
Ingénieur logiciel senior | Ingénieur logiciel | LTR | gère | RÉEL |
Pour tous les rôles ci-dessus, la relation est lue de gauche à droite – par ex. le chef de projet gère l'ingénieur base de données. Alternativement, vous pouvez adopter le format de droite à gauche (l'ingénieur de la base de données rend compte au chef de projet) si c'est votre convention préférée.
Enfin, nous devons définir la relation entre nos deux nouveaux employés :
Relation de partie | Relation entre les types de rôles | |||
---|---|---|---|---|
1er Interacteur (Organisation) | 2ème Interacteur (Personne) | 1er Interacteur (Rôle) | 2ème Interacteur (Rôle) | Description |
Jane Smith | Alex Jones | Ingénierie CTO | Chef de projet | gère |
Bien sûr, vous pouvez avoir n'importe quel nombre d'équipes sous la forme de cette hiérarchie. Dans un sens, donc, party_relationship
est une instance de role_type_relationship
. Ceci est similaire à la façon dont un objet est une instance d'une classe dans la programmation OO.
Y compris les métadonnées logiques
En référence au schéma de l'équipe de développement du projet, nous pouvons également définir les relations logiques entre les rôles suivantes :
1er type de rôle | 2e type de rôle | Direction de la description | Description | Type de relation |
---|---|---|---|---|
Équipe principale | Spécialiste de projet | RTL | est membre de | LOGIQUE |
Équipe principale | Analyste système | RTL | est membre de | LOGIQUE |
Équipe principale | Analyste des exigences | RTL | est membre de | LOGIQUE |
Équipe principale | Commis technique | RTL | est membre de | LOGIQUE |
Équipe principale | Administrateur système | RTL | est membre de | LOGIQUE |
Équipe principale | Ingénieur matériel senior | RTL | est membre de | LOGIQUE |
Équipe principale | Ingénieur matériel | RTL | est membre de | LOGIQUE |
Équipe principale | Ingénieur logiciel senior | RTL | est membre de | LOGIQUE |
Équipe principale | Ingénieur logiciel | RTL | est membre de | LOGIQUE |
Équipe principale | Ingénieur de base de données | RTL | est membre de | LOGIQUE |
Équipe principale | Assistance technique | RTL | est membre de | LOGIQUE |
Équipe principale | Responsable AQ | RTL | est membre de | LOGIQUE |
Équipe principale | Concepteur Web | RTL | est membre de | LOGIQUE |
Équipe principale | Ingénieur QA logiciel | RTL | est membre de | LOGIQUE |
Équipe principale | Bureau de projet | RTL | est membre de | LOGIQUE |
Équipe principale | Ingénieur en sécurité de l'information | RTL | est membre de | LOGIQUE |
Équipe d'assistance | Concepteur Web | RTL | est membre de | LOGIQUE |
Équipe d'assistance | Ingénieur QA logiciel | RTL | est membre de | LOGIQUE |
Équipe d'assistance | Bureau de projet | RTL | est membre de | LOGIQUE |
Équipe d'assistance | Ingénieur en sécurité de l'information | RTL | est membre de | LOGIQUE |
Notez que party_relationship
n'est jamais une instance d'une role_type_relationship
. Alors à quoi bon définir des relations logiques ?
Eh bien, cela s'explique probablement mieux par un exemple. Imaginez que vous vouliez envoyer une lettre à tous les employés qui sont logiquement membres de l'équipe de support. Pour créer une liste de diffusion, vous devez écrire une requête qui renvoie tous les rôles d'interacteur LOGICAL Support Team 2 joints aux mêmes rôles d'interacteur REAL 2, joints à party_relationship
, rejoint la party
. Cela vous permettrait d'obtenir les noms et adresses de toutes les personnes concernées.
Un cas particulier
Vous avez peut-être remarqué quelques entrées inhabituelles dans le role_type
table de métadonnées, à savoir :
Type de rôle | Type de groupe |
---|---|
Moi-même | Personne |
Pareil | Organisation |
Voici deux exemples d'un cas particulier, qui se produit lorsqu'une partie entretient une relation réflexive avec elle-même :
1er type de rôle | 2e type de rôle | Direction de la description | Description | Type de relation |
---|---|---|---|---|
Moi | Analyste système | LTR | employé | RÉEL |
Par exemple, pour un analyste système indépendant, les interacteurs 1 et 2 dans party_relationship
renvoyer à la même party
ligne - c'est-à-dire que les deux colonnes de clé étrangère contiennent exactement le même party.ID
valeur.
L'importance d'avoir du contexte
Imaginez que nous ayons une petite équipe d'analyse qui est essentiellement formée de la branche entre le chef de projet et le commis technique :
1er type de rôle | 2e type de rôle | Direction de la description | Description | Type de relation |
---|---|---|---|---|
Petite équipe d'analyse | Chef de projet | RTL | prospects | RÉEL |
Chef de projet | Analyste système | LTR | gère | RÉEL |
Analyste système | Analyste des exigences | LTR | gère | RÉEL |
Analyste des exigences | Commis technique | LTR | gère | RÉEL |
Chacune des relations ici existe également dans la structure de l'équipe de développement de projet. Alors, comment différencier une relation chef de projet → analyste système d'une autre ?
Nous utilisons le contexte facultatif clé étrangère entre role_type_relationship
et role_type
. Pour la petite équipe d'analyse, nous définissons le contexte de toutes les relations avec la « petite équipe d'analyse », l'élément de niveau supérieur. Et nous faisons le même genre de chose pour la structure de l'équipe de développement du projet. Lorsque nous parcourons la structure, nous le faisons uniquement pour le type d'équipe qui nous intéresse.
Avantages et inconvénients du modèle de nomenclature de relation de partie
Si vous avez lu mes autres articles sur le sujet, vous avez sans doute deviné que je suis fan du design pattern Bill of Materials. C'est simple, mais très puissant. La mise en garde est qu'il doit être utilisé de manière appropriée et qu'il doit être adapté afin que votre mise en œuvre reste gérable.
Dans cette implémentation de relation de partie du modèle BOM, nous nous assurons que nos relations restent exactes en définissant d'abord les relations autorisées entre les interacteurs qui existent dans notre domaine. Cela empêcherait, par exemple, l'Internal Revenue Service d'être "employé" en tant que concepteur Web chez ABC Software Inc.
Quelles possibilités découlent de la définition des relations de cette manière ? Eh bien, votre organisation peut avoir besoin de savoir pour quelles autres organisations vos employés et sous-traitants actuels ont travaillé. Cela permet d'éviter d'éventuels conflits d'intérêts ou même des fraudes. Un exemple de ceci est une organisation qui récompense. Il doit savoir dans quelles écoles ses évaluateurs ont déjà enseigné pour s'assurer qu'ils n'évaluent pas les copies d'examen de ces écoles. Dans un modèle de relation de partie, il est facile d'interroger et d'obtenir ces informations.
D'un autre côté, votre organisation peut vouloir stocker les mêmes informations car cela pourrait présenter des opportunités commerciales. Cela dépend simplement de votre domaine.
En bref, les informations que vous pouvez obtenir à partir de données bien structurées sur les relations avec les parties peuvent être inestimables.