Ver Mensaje Individual
  #8 (permalink)  
Antiguo 14/07/2011, 18:37
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: eficiencia en claves primarias

Creo que estás creando relaciones transitivas entre las tablas, y ese es un error conceptual.
Supongamos un esquema como el que describes, que se parece a una "bolsa de trabajo", como se denominaban en mi provincia:
Cita:
un usuario crea un "trabajo" que puede trabajar (realizarse) en distintas provincias, a esas provincias se asignan ofertas que dependen de otra tabla "fechas" en la que se guardan que fechas tiene libre un usuario (el anterior)
Voy a hacerte una salvedad: No tiene sentido guardar "fechas libres" que tiene un usuario. Eso implicaría crear registros vacíos para la tabla en la base, lo que redunda en ineficiencia de consultas. Los días libres se obtienen al procesar los datos de los días usados, y se debe hacer por programación, no en la base.
El esquema que planteas se podría representar más o menos así:



En este esquema, un usuario puede crear un tipo de trabajo, o usar alguno ya definido (la tabla podría ser fija). A su vez de ese trabajo puede crear una oferta, para una fecha o período determinado, que debe estar en alguna provincia (tabla fija).
por otro lado, un usuario podría aceptar una oferta ya hecha.
En este esquema se puede consultar perfectamente:
- Qué ofertas hay, para qué fechas y en dónde.
- Quienes han hecho esas ofertas, (agregando datos) cuando y para qué período.
- Quienes pueden hacer realizado trabajos similares.
- Qué disponibilidad de tiempo tienen para esos trabajos.
- Qué períodos han trabajado, haciendo qué y dónde

Pero por sobre todo, puedes notar que el esquema de PK que tiene es simple. No existe transitividad ni transferencia de PKs, porque en realidad ese tipo de relaciones no las necesita como PK. Las requiere como FK.
Algunas restricciones, como evitar que el mismo usuario ingrese el mismo trabajo, o que se dupliquen las ofertas, se resuelve creando índices UNIQUE y no necesariamente haciendo PKs innecesariamente complicadas.

Al menos esta en mi visión a vuelo de pájaro, par aun problema así. No sé si me estoy aproximando a la idea del sistema que tienes que implementar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)