Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/01/2011, 14:52
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problemas con fk e innodb

Mmm... Posteaste a las 8 de la noche del viernes, momento en que uno en realidad esta viendo a dónde salir, si no lo ha hecho ya...
¿No piensas que tienes que tener un poco más de paciencia? A fin de cuentas, tampoco somos nerds que sólo vivimos para esto, o personajes de "The Big Bang Theory". Hacemos otras cosas el viernes a la noche...

Bueno, aparte de eso, el diseño plantado está mal de entrada.

Si una persona puede estar asignada a una obra diferente cada día, lo que tienes es una relación N:N entre Personal y Obra, con un atributo discriminante en la clave, que es la fecha, o bien el día a trabajar (según sea).

El que se requiera 7 registros para abarcar la semana entera es irrelevante, ya que ahorras en espacios nulos lo que usas en registros que no existirán. Además, la consulta se vuelve más eficiente luego, porque las validaciones se hacen contra un sólo campo o un sólo índice...

Como toda relación N:N crea una tabla diferente para expresarla, la cosa sería:

Cita:
PERSONAL(personal_id, ...)
OBRA(obra_id, ...)
PERSONAL_OBRA(personal_id, obra_id, fecha)
Cada entrada en PERSONAL_OBRA representa un día en que una persona está asignada a una obra, y como sólo puede estar en una obra al día, la fecha es parte de la PK de esa tabla (las dos FK son a su vez parte de la PK de la tabla).

En este contexto, separar o consultar agrupando por día de la semana sólo requiere usar funciones de fecha como DAYOFWEEK(fecha), la cual devuelve un valor entre 1 y 7 que representan el día de la semana.

Si, en cambio, la discriminación de la asignación es por día de la semana, la cosa se complica y puede ser necesario hacer un modelado más detallado.

¿Me estoy acercando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)