Las relaciones están en todas partes:entre personas, entre organizaciones, entre organizaciones y personas. Piense en ser un empleado de una empresa, ser miembro de un equipo de proyecto o ser una subsidiaria de otra empresa. ¿Existe una forma sencilla de modelar y gestionar con precisión todas estas relaciones? ¿Podemos responder fácilmente a la pregunta '¿Quién conoce a quién?'
Una revisión rápida de las relaciones
Exactamente cómo se derivó este modelo básico se describió en mi artículo anterior, Diseños de listas de materiales (BOM) flexibles y manejables.
En este modelo y en el diseño de BOM convencional, el 1st interactor
tiende a ser el Party
en la Relationship
– empleador en lugar de empleado, líder de equipo en lugar de miembro del equipo, etc.
Así es como se verían los datos (con el papel que juega cada parte entre paréntesis):
1 interactuador | 2 interactuadores |
---|---|
Widget Co. Inc. (empleador) | Gerente 1 (empleado) |
Widget Co. Inc. (empleador) | Gerente 2 (empleado) |
Widget Co. Inc. (empleador) | Empleado 1 (empleado) |
Widget Co. Inc. (empleador) | Empleado 2 (empleado) |
Widget Co. Inc. (empleador) | Empleado 3 (empleado) |
Widget Co. Inc. (empleador) | Empleado 4 (empleado) |
Gerente 1 (responsable de) | Empleado 1 (informa a) |
Gerente 1 (responsable de) | Empleado 2 (informa a) |
Gerente 2 (responsable de) | Empleado 3 (informa a) |
Gerente 2 (responsable de) | Empleado 4 (informa a) |
Un modelo más sofisticado
Imagine que desea modelar un equipo de desarrollo de proyectos como el siguiente:
Fuente:https://www.edrawsoft.com/template-matrix -organigrama.php
La mayoría de los roles en esta jerarquía de equipo son reales, p. el analista de requisitos informa al analista de sistemas. Otra forma de verlo es que el analista de sistemas administra al analista de requisitos.
Las relaciones entre roles se pueden leer de izquierda a derecha (LTR) o de derecha a izquierda (RTL). Normalmente, es mejor ceñirse a una convención u otra, LTR o RTL, pero en la práctica es posible que haya excepciones a esto.
Además, observe que este diagrama muestra diferentes formas de agrupar roles. Algunos roles son reales, como hemos discutido; otros son lógicos, p. el grupo técnico, el grupo de formación, el equipo central y el equipo de apoyo.
Podemos decir que este diagrama define la estructura del equipo utilizando los roles necesarios para completar el equipo de desarrollo del proyecto. Esto es distinto de una instancia real del equipo, que estaría formado por nombres de personas reales en cada uno de los roles.
Por eso necesitamos un modelo de datos que sea flexible y configurable , como este:
Las tablas amarillas contienen metadatos y las tablas azules contienen datos comerciales .
Configuración de metadatos básicos
Comenzaremos completando el party_type
mesa. Esta tabla diferencia si un partido es una persona o una organización.
Antes de hacer mucho más, también necesitamos definir roles en el role_type
tabla de metadatos:
Nombre Bonito | Tipo de fiesta |
---|---|
Impuestos y Aduanas de Su Majestad (HMRC) | Organización |
Servicio de Impuestos Internos (IRS) | Organización |
Servicio de pasaporte | Organización |
Igual | Organización |
Sociedad Limitada | Organización |
Sociedad anónima | Organización |
Solicitante | Persona |
Yo mismo | Persona |
Ingeniería CTO | Persona |
Gerente de Proyecto | Persona |
Especialista en Proyectos | Persona |
Analista de sistemas | Persona |
Analista de requisitos | Persona |
Representante técnico | Persona |
Administrador del sistema | Persona |
Ingeniero de hardware sénior | Persona |
Ingeniero de hardware | Persona |
Ingeniero de software sénior | Persona |
Ingeniero de software | Persona |
Ingeniero de base de datos | Persona |
Soporte técnico | Persona |
Gerente de control de calidad | Persona |
Diseñador Web | Persona |
Ingeniero de control de calidad de software | Persona |
Oficina de Proyectos | Persona |
Ingeniero de Seguridad de la Información | Persona |
Técnico | Organización |
Entrenamiento | Organización |
Equipo central | Organización |
Equipo de apoyo | Organización |
Sin duda habrá notado que cada rol pertenece a una persona o a una organización. Para dar una idea de lo que es posible, he agregado algunas organizaciones externas con las que nuestra sociedad limitada ficticia, ABC Software Inc, tiene relaciones.
Adición de metadatos de empleo
La siguiente tarea es definir los pares de roles válidos entre el primer y el segundo interactor. A su vez, esto define los tipos de relaciones que pueden tener las partes. Comencemos a completar la role_type_relationship
tabla de metadatos con los roles de los empleados de la empresa. Después de todo, no podemos crear equipos sin tener trabajadores primero:
1er tipo de rol | Segundo tipo de rol | Descripción Dirección | Descripción | Tipo de relación |
---|---|---|---|---|
Sociedad Limitada | Ingeniería CTO | LTR | emplea | REAL |
Sociedad Limitada | Gerente de Proyecto | LTR | emplea | REAL |
Sociedad Limitada | Especialista en proyectos | LTR | emplea | REAL |
Sociedad Limitada | Analista de sistemas | LTR | emplea | REAL |
Sociedad Limitada | Analista de requisitos | LTR | emplea | REAL |
Sociedad Limitada | Representante técnico | LTR | emplea | REAL |
Sociedad Limitada | Administrador del sistema | LTR | emplea | REAL |
Sociedad Limitada | Ingeniero de hardware sénior | LTR | emplea | REAL |
Sociedad Limitada | Ingeniero de hardware | LTR | emplea | REAL |
Sociedad Limitada | Ingeniero de software sénior | LTR | emplea | REAL |
Sociedad Limitada | Ingeniero de software | LTR | emplea | REAL |
Sociedad Limitada | Ingeniero de base de datos | LTR | emplea | REAL |
Sociedad Limitada | Soporte técnico | LTR | emplea | REAL |
Sociedad Limitada | Gerente de control de calidad | LTR | emplea | REAL |
Sociedad Limitada | Diseñador Web | LTR | emplea | REAL |
Sociedad Limitada | Ingeniero de control de calidad de software | LTR | emplea | REAL |
Sociedad Limitada | Oficina de Proyectos | LTR | emplea | REAL |
Sociedad Limitada | Ingeniero de Seguridad de la Información | LTR | emplea | REAL |
Sociedad Limitada | Solicitante | LTR | selecciona | REAL |
Suponga que ABC Software Inc. va a contratar a dos empleados, Jane Smith y Alex Jones, para los siguientes roles:
Relación entre partidos | Relación de tipo de rol | |||
---|---|---|---|---|
1er Interactor (Organización) | Segundo interactuante (Persona) | Primer interactuador (función) | Segundo interactuante (rol) | Descripción |
ABC Software Inc. | Jane Smith | Sociedad Limitada | Ingeniería CTO | emplea |
ABC Software Inc. | Alex Jones | Sociedad Limitada | Gerente de Proyecto | emplea |
Dando un paso atrás en el tiempo, vería que esta relación comenzó antes de que se contratara a Jane Smith y Alex Jones; tenían que solicitar puestos de trabajo en ABC Software Inc. La relación se habría visto así:
Relación entre partidos | Relación de tipo de rol | |||
---|---|---|---|---|
1er Interactor (Organización) | Segundo interactuante (Persona) | Primer interactuador (función) | Segundo interactuante (rol) | Descripción |
ABC Software Inc. | Jane Smith | Sociedad Limitada | Solicitante | selecciona |
ABC Software Inc. | Alex Jones | Sociedad Limitada | Solicitante | selecciona |
¿Empiezas a ver las posibilidades que el patrón de relación entre partidos apoyos?
No tenemos una tabla llamada applicant
y otra tabla llamada employee
, como puede encontrarse en otros modelos. Si lo piensa, compartirían muchos de los mismos atributos:nombre, dirección, fecha de nacimiento, etc.; tendrías que copiar los valores de applicant
a employee
al contratar con éxito. Pero, ¿las personas involucradas se han transformado de una cosa a otra? ¡Por supuesto no! ¡Siguen siendo las mismas personas!
De hecho, solo la relación ha cambiado entre ABC Software Inc. y Jane Smith o Alex Jones. Y esto es precisamente lo que modela el patrón de relaciones partidistas.
Continuación:metadatos del equipo del proyecto
Antes de que podamos crear una party_relationship
Para definir el hecho de que Jane Smith administra a Alex Jones, debemos definir la estructura del equipo de desarrollo del proyecto. Esta es solo una cuestión de emparejar los roles principal y secundario para formar una jerarquía válida:
1er tipo de rol | Segundo tipo de rol | Descripción Dirección | Descripción | Tipo de relación |
---|---|---|---|---|
Equipo de desarrollo de proyectos | Ingeniería CTO | RTL | clientes potenciales | REAL |
Ingeniería CTO | Gerente de Proyecto | LTR | gestiona | REAL |
Gerente de Proyecto | Analista de sistemas | LTR | gestiona | REAL |
Gerente de Proyecto | Administrador del sistema | LTR | gestiona | REAL |
Gerente de Proyecto | Especialista en proyectos | LTR | gestiona | REAL |
Gerente de Proyecto | Ingeniero de software sénior | LTR | gestiona | REAL |
Gerente de Proyecto | Soporte técnico | LTR | gestiona | REAL |
Gerente de Proyecto | Diseñador Web | LTR | gestiona | REAL |
Gerente de Proyecto | Ingeniero de control de calidad de software | LTR | gestiona | REAL |
Gerente de Proyecto | Oficina de Proyectos | LTR | gestiona | REAL |
Gerente de Proyecto | Ingeniero de Seguridad de la Información | LTR | gestiona | REAL |
Gerente de Proyecto | Ingeniero de base de datos | LTR | gestiona | REAL |
Gerente de Proyecto | Soporte técnico | LTR | gestiona | REAL |
Gerente de Proyecto | Gerente de control de calidad | LTR | gestiona | REAL |
Analista de sistemas | Analista de requisitos | LTR | gestiona | REAL |
Analista de requisitos | Representante técnico | LTR | gestiona | REAL |
Administrador del sistema | Ingeniero de hardware sénior | LTR | gestiona | REAL |
Ingeniero de hardware sénior | Ingeniero de hardware | LTR | gestiona | REAL |
Ingeniero de software sénior | Ingeniero de software | LTR | gestiona | REAL |
Para todos los roles anteriores, la relación se lee de izquierda a derecha, p. el director del proyecto gestiona el ingeniero de base de datos. Alternativamente, puede adoptar el formato de derecha a izquierda (el ingeniero de la base de datos informa al administrador del proyecto) si esa es su convención preferida.
Finalmente, debemos definir la relación entre nuestros dos nuevos empleados:
Relación entre partidos | Relación de tipo de rol | |||
---|---|---|---|---|
1er Interactor (Organización) | Segundo interactuante (persona) | Primer interactuador (función) | Segundo interactuante (rol) | Descripción |
Jane Smith | Alex Jones | Ingeniería CTO | Gerente de Proyecto | gestiona |
Por supuesto, puede tener cualquier número de equipos en la forma de esta jerarquía. En cierto sentido, por lo tanto, party_relationship
es una instancia de role_type_relationship
. Esto es similar a la forma en que un objeto es una instancia de una clase en la programación orientada a objetos.
Incluyendo metadatos lógicos
Con referencia al diagrama del equipo de desarrollo del proyecto, también podemos definir las siguientes relaciones lógicas entre roles :
1er tipo de rol | Segundo tipo de rol | Descripción Dirección | Descripción | Tipo de relación |
---|---|---|---|---|
Equipo central | Especialista en proyectos | RTL | es miembro de | LOGICO |
Equipo central | Analista de sistemas | RTL | es miembro de | LOGICO |
Equipo central | Analista de requisitos | RTL | es miembro de | LOGICO |
Equipo central | Representante técnico | RTL | es miembro de | LOGICO |
Equipo central | Administrador del sistema | RTL | es miembro de | LOGICO |
Equipo central | Ingeniero de hardware sénior | RTL | es miembro de | LOGICO |
Equipo central | Ingeniero de hardware | RTL | es miembro de | LOGICO |
Equipo central | Ingeniero de software sénior | RTL | es miembro de | LOGICO |
Equipo central | Ingeniero de software | RTL | es miembro de | LOGICO |
Equipo central | Ingeniero de base de datos | RTL | es miembro de | LOGICO |
Equipo central | Soporte técnico | RTL | es miembro de | LOGICO |
Equipo central | Gerente de control de calidad | RTL | es miembro de | LOGICO |
Equipo central | Diseñador Web | RTL | es miembro de | LOGICO |
Equipo central | Ingeniero de control de calidad de software | RTL | es miembro de | LOGICO |
Equipo central | Oficina de Proyectos | RTL | es miembro de | LOGICO |
Equipo central | Ingeniero de Seguridad de la Información | RTL | es miembro de | LOGICO |
Equipo de apoyo | Diseñador Web | RTL | es miembro de | LOGICO |
Equipo de apoyo | Ingeniero de control de calidad de software | RTL | es miembro de | LOGICO |
Equipo de apoyo | Oficina de Proyectos | RTL | es miembro de | LOGICO |
Equipo de apoyo | Ingeniero de Seguridad de la Información | RTL | es miembro de | LOGICO |
Tenga en cuenta que party_relationship
nunca es una instancia de una role_type_relationship
. Entonces, ¿cuál es el punto de definir relaciones lógicas?
Bueno, probablemente esto se explique mejor con un ejemplo. Imagina que quisieras enviar una carta a todos los empleados que lógicamente son miembros del equipo de soporte. Para crear una lista de correo, debe escribir una consulta que devuelva todos los roles de interactuador del Equipo de soporte LÓGICO 2 unidos a los mismos roles de interactuador REAL 2, unidos a party_relationship
, se unió a la party
. Esto le permitiría obtener los nombres y direcciones de todos los interesados.
Un caso especial
Es posible que haya notado un par de entradas inusuales en el role_type
tabla de metadatos, a saber:
Tipo de rol | Tipo de fiesta |
---|---|
Yo mismo | Persona |
Igual | Organización |
Estas son dos instancias de un caso especial, que ocurre cuando una parte tiene una relación reflexiva consigo misma:
1er tipo de rol | Segundo tipo de rol | Descripción Dirección | Descripción | Tipo de relación |
---|---|---|---|---|
Yo mismo | Analista de sistemas | LTR | empleado | REAL |
Por ejemplo, para un analista de sistemas autónomo, los interactuadores 1 y 2 en party_relationship
referirse de nuevo a la misma party
fila:es decir, ambas columnas de clave externa contienen exactamente el mismo party.ID
valor.
La importancia de tener contexto
Imagine que tenemos un pequeño equipo de análisis que se forma básicamente a partir de la rama entre el director del proyecto y el empleado técnico:
1er tipo de rol | Segundo tipo de rol | Descripción Dirección | Descripción | Tipo de relación |
---|---|---|---|---|
Pequeño equipo de análisis | Gerente de Proyecto | RTL | clientes potenciales | REAL |
Gerente de Proyecto | Analista de sistemas | LTR | gestiona | REAL |
Analista de sistemas | Analista de requisitos | LTR | gestiona | REAL |
Analista de requisitos | Representante técnico | LTR | gestiona | REAL |
Cada una de las relaciones aquí también existe en la estructura del equipo de desarrollo del proyecto. Entonces, ¿cómo diferenciamos una relación de gerente de proyecto → analista de sistemas de otra?
Usamos el contexto opcional clave externa entre role_type_relationship
y role_type
. Para el pequeño equipo de análisis, establecemos el contexto de todas las relaciones en "pequeño equipo de análisis", el elemento de nivel superior. Y hacemos lo mismo con la estructura del equipo de desarrollo de proyectos. Cuando atravesamos la estructura, lo hacemos solo para el tipo de equipo que nos interesa.
Pros y contras del patrón de lista de materiales de relación de grupo
Si ha leído mis otros artículos sobre el tema, probablemente haya adivinado que soy un fanático del patrón de diseño de la Lista de materiales. Es simple, pero muy poderoso. La advertencia es que debe usarse de manera adecuada y debe adaptarse para que su implementación siga siendo manejable.
En esta implementación de relación de partes del patrón BOM, nos aseguramos de que nuestras relaciones sigan siendo precisas definiendo primero las relaciones permitidas entre los interactuadores que existen en nuestro dominio. Esto, por ejemplo, evitaría que el Servicio de Impuestos Internos sea "empleado" como diseñador web en ABC Software Inc.
¿Qué posibilidades surgen de definir las relaciones de esta manera? Bueno, es posible que su organización necesite saber para qué otras organizaciones han trabajado sus empleados y contratistas actuales. Esto ayuda a evitar posibles conflictos de intereses o incluso fraudes. Un ejemplo de esto es una organización de adjudicación. Necesita saber en qué escuelas han enseñado previamente sus evaluadores para asegurarse de que no evalúen los exámenes de esas escuelas. En un modelo de relación partidista, es fácil consultar y obtener esa información.
Por otro lado, es posible que su organización desee almacenar la misma información porque podría presentar oportunidades comerciales. Solo depende de tu dominio.
En resumen, la información que puede obtener de los datos bien estructurados de las relaciones con las partes puede ser invaluable.