pequeño problema de modelado
Hola. Mis conocimientos del modelado de las BD son un poco limitados, y se me ha planteado un problema que no veo claro como solucionar.
Tengo que hacer una aplicación que maneje un conjunto de proyectos. Esos proyectos tienen asignadas unas personas, y cada persona puede desarrollar más de un rol dentro del mismo proyecto.
Lo primero que me viene a la cabeza es meter una relación de grado tres, pero entonces tendrÃa una relación por cada rol ¿no? necesitaria un registro para cada terna (proyecto, persona, rol) asi con todos los roles de una misma persona. No se muy bien como se pasa eso a una tabla. ¿Alguien podrÃa darme una solución a esto?
Muchas gracias.
Tengo que hacer una aplicación que maneje un conjunto de proyectos. Esos proyectos tienen asignadas unas personas, y cada persona puede desarrollar más de un rol dentro del mismo proyecto.
Lo primero que me viene a la cabeza es meter una relación de grado tres, pero entonces tendrÃa una relación por cada rol ¿no? necesitaria un registro para cada terna (proyecto, persona, rol) asi con todos los roles de una misma persona. No se muy bien como se pasa eso a una tabla. ¿Alguien podrÃa darme una solución a esto?
Muchas gracias.
XenaiX:
La solución a tu problema dependerá de las demás restricciones que puedas tener.
Pueden haber personas en proyectos sin roles?
Pueden haber roles en proyectos sin personas asignadas?
Si no pueden darse estos casos entonces no tendrÃas problemas en implementar una relación de grado tres, lo cual llevado a tablas puede implementarse con 4 tablas: una por cada entidad (proyecto, persona y rol) y otra con la triple relación proyecto-persona-rol (tabla con las 3 foreign keys not null).
Sin embargo yo no lo modelarÃa con un modelo de triple relación (en general trato de evitarlos) porque te limitan en ciertos aspectos.
Una alternativa: en primer lugar hago una relación N:N entre Persona y Proyecto. Luego hago una asociación entre estas entidades (digamos que te queda una nueva entidad compuesta por ambas y la relación) y finalmente asocio esta a la entidad Roles por medio de una N:N.
Que gano con este modelo? permitirme por ejemplo tener personas en proyectos sin roles definidos (util si quiero definirlos mas tarde)
Para implementar esta solución necesito 5 tablas:
3 tablas (una por cada entidad proy, pers, rol)
1 tabla que represente la relación persona-proyecto
1 tabla con la relacion entre Roles y la tabla persona-proyecto
Espero te haya orientado.
La solución a tu problema dependerá de las demás restricciones que puedas tener.
Pueden haber personas en proyectos sin roles?
Pueden haber roles en proyectos sin personas asignadas?
Si no pueden darse estos casos entonces no tendrÃas problemas en implementar una relación de grado tres, lo cual llevado a tablas puede implementarse con 4 tablas: una por cada entidad (proyecto, persona y rol) y otra con la triple relación proyecto-persona-rol (tabla con las 3 foreign keys not null).
Sin embargo yo no lo modelarÃa con un modelo de triple relación (en general trato de evitarlos) porque te limitan en ciertos aspectos.
Una alternativa: en primer lugar hago una relación N:N entre Persona y Proyecto. Luego hago una asociación entre estas entidades (digamos que te queda una nueva entidad compuesta por ambas y la relación) y finalmente asocio esta a la entidad Roles por medio de una N:N.
Que gano con este modelo? permitirme por ejemplo tener personas en proyectos sin roles definidos (util si quiero definirlos mas tarde)
Para implementar esta solución necesito 5 tablas:
3 tablas (una por cada entidad proy, pers, rol)
1 tabla que represente la relación persona-proyecto
1 tabla con la relacion entre Roles y la tabla persona-proyecto
Espero te haya orientado.
Gracias por la respuesta. TenÃa la duda de como pasar a tablas la relación ya que tengo varias cardinalidades dependiendo con quien se relacione cada entidad y pensé que tendrÃa que hacerse varias tablas, una para cada una o algo asÃ. No se si el caso serÃa igual cuando por ejemplo una persona solo pudiese estar asignada a un proyecto.
Además tampoco se como poner la cardinalidad entre roles y proyectos. Teóricamente serÃa N:N pero es que como en realidad rol se asocia con proyecto por las personas me parece un concepto extraño.
La segunda alternativa parece interesante, aunque no sabrÃa muy bien como dibujar el modelo. De todas maneras no la necesito, asi que no me complicaré añadiendo otra tabla.
Gracias otra vez. Un saludo.
Además tampoco se como poner la cardinalidad entre roles y proyectos. Teóricamente serÃa N:N pero es que como en realidad rol se asocia con proyecto por las personas me parece un concepto extraño.
La segunda alternativa parece interesante, aunque no sabrÃa muy bien como dibujar el modelo. De todas maneras no la necesito, asi que no me complicaré añadiendo otra tabla.
Gracias otra vez. Un saludo.
Xenai, se me ocurre una pregunta.
Los roles en los proyectos son limitados?
No hay la posibilidad de que con el tiempo se creen roles nuevos?
Si es asi, Yo lo haria de la siguiente forma:
Inevitablemente se necesitan las tablas de Personas y proyectos, en la relacion que se crea entre estas dos yo pondria un campo adicinal de tipo Booleano por cada rol, asi puedo saber que roles tiene la persona 'X' en el Proyecto 'Y'.
Persona Proyecto Rol1 Rol2 Rol3
----------- ------------- ------ ------- ------
X Y 1 0 1
La limitación de este modelo es que si se crea un nuevo rol se tiene que alterar esta tabla relación y no simplemente agregar un registro como en el modelo de triple relación.
Espero haber sido de gran ayuda.
Los roles en los proyectos son limitados?
No hay la posibilidad de que con el tiempo se creen roles nuevos?
Si es asi, Yo lo haria de la siguiente forma:
Inevitablemente se necesitan las tablas de Personas y proyectos, en la relacion que se crea entre estas dos yo pondria un campo adicinal de tipo Booleano por cada rol, asi puedo saber que roles tiene la persona 'X' en el Proyecto 'Y'.
Persona Proyecto Rol1 Rol2 Rol3
----------- ------------- ------ ------- ------
X Y 1 0 1
La limitación de este modelo es que si se crea un nuevo rol se tiene que alterar esta tabla relación y no simplemente agregar un registro como en el modelo de triple relación.
Espero haber sido de gran ayuda.
Sà pensé inicialmente en poner rol como atributo de la relación, algo extensible a que tuviese un número fijo de roles, pero cada persona tendrá un número indeterminado de roles, dependiendo de lo ajustado que anden con los proyectos y lo que tenga que apretar el gestor de proyectos a los empleados para que hagan cuarenta cosas a la vez.
Se podrÃa usar este modelo si la eficiencia de las búsquedas fuese crÃtica, pero realmente cuantas personas pueden acceder a la aplicación, vamos, si fuesen más de 100 serÃa que mi aplicación la está usando IBM o Microsoft :-D . Aun en esos casos no serÃa nada crÃtico, por tanto prefiero abogar por la facilidad de mantenimiento.
Gracias por la idea.
Se podrÃa usar este modelo si la eficiencia de las búsquedas fuese crÃtica, pero realmente cuantas personas pueden acceder a la aplicación, vamos, si fuesen más de 100 serÃa que mi aplicación la está usando IBM o Microsoft :-D . Aun en esos casos no serÃa nada crÃtico, por tanto prefiero abogar por la facilidad de mantenimiento.
Gracias por la idea.
