VeneHosting.com :: Tu Hosting en Venezuela

Autor Tema: Ayuda con Relacion Ciclica  (Leído 817 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Agrus

  • Novato
  • *
  • Mensajes: 14
  • Puntuación: 0
    • Ver Perfil
Ayuda con Relacion Ciclica
« : 02 de septiembre de 2009, 07:49:26 am »
Saludos Amigos.

Actualmente me encuentro haciendo un diseño de Base de Datos pero me he encontrado con un inconveniente que no logro solucionar y quisiera ver que consejos pueden darme.

La empresa tiene "Proyectos", los cuales tienen "Actividades" por realizar, un proyecto esta compuesto por varias actividades. A su vez, los "Empleados" de la empresa estan asignados a los "Proyectos" y tienen "Actividades de Proyecto" asignadas.

Cada fin de mes, los empleados deben reportar cuantas "Horas" trabajaron en una "Actividad" especifica.

Al momento de General las Tablas tenemos una Tabla PROYECTOS relacionada con EMPLEADOS y con ACTIVIDADES, una Tabla ACTIVIDADES relacionada con PROYECTOS y EMPLEADOS, y una tabla EMPLEADOS relacionada con PROYECTOS y ACTIVIDADES, lo cual me esta generando una relacion ciclica que no puedo solucionar.

Alguna Idea? Oo

Desconectado oyepez003

  • Usuario Dedicado
  • ***
  • Mensajes: 143
  • Puntuación: 6
  • Sexo: Masculino
  • La suerte esta en el conocimiento
    • Ver Perfil
    • Soluciones tecnológicas YepSua C.A.
Re: Ayuda con Relacion Ciclica
« Respuesta #1 : 02 de septiembre de 2009, 09:21:37 am »
Por lo que puede entender estas serian las premisas de tu esquema:

1.- Un Proyecto puede tener muchas actividades.
2.- Una Actividad esta asociada a un solo Proyecto.
3.- Una Actividad puede estar asociada a muchos Empleados.
4.- Un Empleado esta asociado a multiples Actividades.

Entonces creo que deberias tener:

Una tabla Proyecto relacionada a una tabla Actividad con relacion one-to-many.

Una tabla Empleado donde tengas todos los empleados de la Organizacion.

Una tabla Actividad_Empleado que seria la que haga la relacion many-to-many entre la tabla Actividad y la tabla Empleado.

Creo que con eso bastaria... no?


--
Omar Yepez
http://www.yepsua.com The YepSua team
http://jquery4php.sourceforge.net/ The jQuery4PHP project
Sigueme: http://twitter.com/oyepez003

Desconectado Agrus

  • Novato
  • *
  • Mensajes: 14
  • Puntuación: 0
    • Ver Perfil
Re: Ayuda con Relacion Ciclica
« Respuesta #2 : 02 de septiembre de 2009, 09:59:21 am »
Por lo que puede entender estas serian las premisas de tu esquema:

1.- Un Proyecto puede tener muchas actividades.
2.- Una Actividad esta asociada a un solo Proyecto.
3.- Una Actividad puede estar asociada a muchos Empleados.
4.- Un Empleado esta asociado a multiples Actividades.

Entonces creo que deberias tener:

Una tabla Proyecto relacionada a una tabla Actividad con relacion one-to-many.

Una tabla Empleado donde tengas todos los empleados de la Organizacion.

Una tabla Actividad_Empleado que seria la que haga la relacion many-to-many entre la tabla Actividad y la tabla Empleado.

Creo que con eso bastaria... no?




Primero que todo muchas gracias por tomarte el tiempo de revisar mi caso y responder.

Si hasta alli todo iria bien, el problema se me presenta al querer relacionar la Tabla Proyectos con la Tabla Empleados, puesto que si ya esta la relacion Empleados-Actividades, y la Actividad-Proyectos, al querer relacionar la tabla Empleados con Proyectos se me genera el ciclo que quisiera evitar.

Desconectado tierrarara

  • Usuario Junior
  • **
  • Mensajes: 85
  • Puntuación: 3
    • Ver Perfil
    • Rare Earth
Re: Ayuda con Relacion Ciclica
« Respuesta #3 : 02 de septiembre de 2009, 10:24:18 am »
yo creo que no seria necesario esa tabla,  desde los proyectos puedes llegar a los empleados por medio de las actividades del proyecto y viceversa, desde los empleados puedes llegar hasta los proyectos por medio de la misma tabla actividades

no entiendo que es lo que necesitas entonces

Desconectado Agrus

  • Novato
  • *
  • Mensajes: 14
  • Puntuación: 0
    • Ver Perfil
Re: Ayuda con Relacion Ciclica
« Respuesta #4 : 02 de septiembre de 2009, 10:32:59 am »
yo creo que no seria necesario esa tabla,  desde los proyectos puedes llegar a los empleados por medio de las actividades del proyecto y viceversa, desde los empleados puedes llegar hasta los proyectos por medio de la misma tabla actividades

no entiendo que es lo que necesitas entonces

Correcto, alli tienes razon

Pero digamos que tu eres un empleado de alli, se te asigno una Actividad para un Proyecto.

Si las actividades pueden ser las mismas para cada proyecto, es decir, puedes hacer X actividad para X proyecto, en el momento de generar el reporte, como especificas a cual proyecto le hiciste la actividad?. Puedes generar un reporte de tiempo por actividad, mas no un reporte de tiempo por proyecto. Me explico?

Esto me esta llevando mal por ahora, estoy trancado y no consigo manera de solucionarlo sin poder hacer esa relacion ciclica

Desconectado cyberjunior

  • Usuario Junior
  • **
  • Mensajes: 53
  • Puntuación: 1
    • Ver Perfil
Re: Ayuda con Relacion Ciclica
« Respuesta #5 : 02 de septiembre de 2009, 11:35:47 am »
Buen Día.-

Mi opinión: Crea la relación: Empleado - Proyectos y Proyectos - Actividades.

La relación Empleado - Actividades me parece que esta demás ya que puedes luego hacer una vista de las tres tablas y tendrás los empleados con sus proyectos y actividades asociadas.


Al mismo tiempo, para subsanar el problema: "Cada fin de mes, los empleados deben reportar cuantas "Horas" trabajaron en una "Actividad" especifica." crea una cuarta tabla llamado por ejemplo Horas_Trabajadas y en la misma almacenas: id_empleado, id_proyecto_id_actividad, cantidad_de_horas, fecha.

Saludos
Lic. Luis Vásquez

Desconectado tierrarara

  • Usuario Junior
  • **
  • Mensajes: 85
  • Puntuación: 3
    • Ver Perfil
    • Rare Earth
Re: Ayuda con Relacion Ciclica
« Respuesta #6 : 02 de septiembre de 2009, 12:57:51 pm »
create table proyectos (
id int,
nombre
);

create table actividades (
id int,
nombre,
int proyecto_id
);

create table empleados (
id int,
cedula varchar,
nombre varchar
);

creata table atividades_empleados (
actividad_id int,
empleado_id int
);




select  p.nombre, e.nombre

from proyectos p
left join actividades a on p.id = a.proyecto_id
left join actividades_empleados a_e on a_e.actividad_id =  a.id
left join empleados e on a_e.empleado_id = e.id

crea que con eso tienes los nombres de los proyectos donde trabaja cada empleado
independientemente de que los nombres de las actividades de cada proyecto se llamen igual





Desconectado Agrus

  • Novato
  • *
  • Mensajes: 14
  • Puntuación: 0
    • Ver Perfil
Re: Ayuda con Relacion Ciclica
« Respuesta #7 : 02 de septiembre de 2009, 01:25:15 pm »
Buen Día.-

Mi opinión: Crea la relación: Empleado - Proyectos y Proyectos - Actividades.

La relación Empleado - Actividades me parece que esta demás ya que puedes luego hacer una vista de las tres tablas y tendrás los empleados con sus proyectos y actividades asociadas.


Al mismo tiempo, para subsanar el problema: "Cada fin de mes, los empleados deben reportar cuantas "Horas" trabajaron en una "Actividad" especifica." crea una cuarta tabla llamado por ejemplo Horas_Trabajadas y en la misma almacenas: id_empleado, id_proyecto_id_actividad, cantidad_de_horas, fecha.

Saludos

Entiendo lo que planteas, pero no comprendo como voy a relacionar esa nueva tabla sin crear un ciclo de tablas.

Por como dices debo relacionar la tabla Horas_Trabajadas con Empleados(id_empleado), Proyecto (id_proyecto), Actividad (id_actividad), pero si contamos que ya arriba hicimos 2 relaciones entre Empleado - Proyecto y Proyecto Actividad, no se estaria creando una relacion ciclica hasta 3 veces?

Gracias de nuevo y disculpame si comprendi mal lo que quieres plantear

Desconectado oyepez003

  • Usuario Dedicado
  • ***
  • Mensajes: 143
  • Puntuación: 6
  • Sexo: Masculino
  • La suerte esta en el conocimiento
    • Ver Perfil
    • Soluciones tecnológicas YepSua C.A.
Re: Ayuda con Relacion Ciclica
« Respuesta #8 : 02 de septiembre de 2009, 03:22:38 pm »
Creo que Crear  la relación: Empleado - Proyectos y Proyectos - Actividades es una redundancia....

El problema es que si una actividad pertenece a dos proyectos no sabes a cual proyecto trabajo....? como lei por ahi entonces deberias tener una tabla trabajo_actividad con los campos id_actividad y total_horas por este ultimo tienes las horas trabajadas .... no veo para que tienes que tener el proyecto en la tabla trabajo_actividad ya que si trabajaste en una actividad que pertenece a 10 proyectos y fueron 10 horas trabajadas en el reporte deberia salir:


ACTIVIDAD
|AFECTA A LOS PROYECTOS|HORAS EMPLEADAS
Actividad 1
|Proyecto 1 - Proyecto 2 - Proyecto N|10 hrs

Algo asi  :) mas o menos

Ya que no creo que el dueño quiera que salgan 30 horas cuando en realidad son 10 y aparte ..... el avance en una actividad que modifica varios proyectos los afecta a todos.... si avanzas 5 horas... esa actividad estas avanazando en todos los proyectos asociados a ella.

Saludos...

--
Omar Yepez
http://www.yepsua.com The YepSua team
http://jquery4php.sourceforge.net/ The jQuery4PHP project
Sigueme: http://twitter.com/oyepez003

Desconectado Agrus

  • Novato
  • *
  • Mensajes: 14
  • Puntuación: 0
    • Ver Perfil
Re: Ayuda con Relacion Ciclica
« Respuesta #9 : 02 de septiembre de 2009, 03:51:48 pm »
Creo que Crear  la relación: Empleado - Proyectos y Proyectos - Actividades es una redundancia....

El problema es que si una actividad pertenece a dos proyectos no sabes a cual proyecto trabajo....? como lei por ahi entonces deberias tener una tabla trabajo_actividad con los campos id_actividad y total_horas por este ultimo tienes las horas trabajadas .... no veo para que tienes que tener el proyecto en la tabla trabajo_actividad ya que si trabajaste en una actividad que pertenece a 10 proyectos y fueron 10 horas trabajadas en el reporte deberia salir:


ACTIVIDAD
|AFECTA A LOS PROYECTOS|HORAS EMPLEADAS
Actividad 1
|Proyecto 1 - Proyecto 2 - Proyecto N|10 hrs

Algo asi  :) mas o menos

Ya que no creo que el dueño quiera que salgan 30 horas cuando en realidad son 10 y aparte ..... el avance en una actividad que modifica varios proyectos los afecta a todos.... si avanzas 5 horas... esa actividad estas avanazando en todos los proyectos asociados a ella.

Saludos...



Creo que si debo tener el Proyecto relacionado con la Actividad puesto que la misma actividad puede ser hecha en varios Proyectos. Es decir, "Estudio Sedimentologo" es una actividad que se podria hacer en varios Proyectos, al final el empleado debe reportar cuantas horas empleo en X proyecto con X actividad.

Estaba pensando en esa tabla de trabajo actividad, hacerla mas bien Trabajo_Proyecto, puesto que al final lo que se necesita es un reporte de horas por proyecto/empleado. El problema se me presenta cuando me toca seleccionar X actividad para X proyecto.

Gracias de verdad por sus aportes siento que poco a poco se va esclareciendo esto...de hecho a veces siento que estoy ahogado en un vaso de agua...Si este fuera el caso, apreciaria si pudieran explicarmelo de una manera mas "Yo Tarzan - Tu Jane" xD -.-
« Última Modificación: 02 de septiembre de 2009, 04:01:49 pm por Agrus »

Desconectado oyepez003

  • Usuario Dedicado
  • ***
  • Mensajes: 143
  • Puntuación: 6
  • Sexo: Masculino
  • La suerte esta en el conocimiento
    • Ver Perfil
    • Soluciones tecnológicas YepSua C.A.
Re: Ayuda con Relacion Ciclica
« Respuesta #10 : 02 de septiembre de 2009, 04:03:14 pm »
Ah ok ahora si te entiendo.... :) disculpa.

entonces ahi si sigue con lo que te dice cyberjunior....

Saludos.
--
Omar Yepez
http://www.yepsua.com The YepSua team
http://jquery4php.sourceforge.net/ The jQuery4PHP project
Sigueme: http://twitter.com/oyepez003

Desconectado Agrus

  • Novato
  • *
  • Mensajes: 14
  • Puntuación: 0
    • Ver Perfil
Re: Ayuda con Relacion Ciclica
« Respuesta #11 : 02 de septiembre de 2009, 04:05:50 pm »
Buen Día.-

Mi opinión: Crea la relación: Empleado - Proyectos y Proyectos - Actividades.

La relación Empleado - Actividades me parece que esta demás ya que puedes luego hacer una vista de las tres tablas y tendrás los empleados con sus proyectos y actividades asociadas.


Al mismo tiempo, para subsanar el problema: "Cada fin de mes, los empleados deben reportar cuantas "Horas" trabajaron en una "Actividad" especifica." crea una cuarta tabla llamado por ejemplo Horas_Trabajadas y en la misma almacenas: id_empleado, id_proyecto_id_actividad, cantidad_de_horas, fecha.

Saludos

Si me parece logica esta respuesta, unicamente que no entiendo como relacionar esa nueva tabla sin generar 3 ciclos en la BD  ??? ???

Desconectado cyberjunior

  • Usuario Junior
  • **
  • Mensajes: 53
  • Puntuación: 1
    • Ver Perfil
Re: Ayuda con Relacion Ciclica
« Respuesta #12 : 02 de septiembre de 2009, 08:29:41 pm »
Buenas Noches.-

Claro al hacer el DER se nota como una relación "CICLICA"...pero logicamente me parece la mejor forma de hacerlo a sabiendas de que en el DER no se ve muy bien y hasta complicado....o si lo deseas lo haces de la siguiente forma...

Creas tus tres tablas maestras: EMPLEADOS, PROYECTOS, ACTIVIDADES y creas la tabla de transaccion HORAS TRABAJADAS la cual posee los campos: id_empleado, id_proyecto, id_actividades, fecha, algo mas o menos asi....

EMPLEADO    PROYECTO
        |             |
     HORAS_LABORADAS
                |
         ACTIVIDADES

y así no se ve la relación cíclica...

Saludos y buenas noches.
 
Lic. Luis Vásquez

PHP de Venezuela

Re: Ayuda con Relacion Ciclica
« Respuesta #12 : 02 de septiembre de 2009, 08:29:41 pm »

 

PHP de Venezuela on Facebook