Ver Mensaje Individual
  #5 (permalink)  
Antiguo 09/11/2010, 20:11
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: Consulta con varias foraneas de una misma tabla

Cita:
Iniciado por Punchi Ver Mensaje
Pareciera una N:M, pero no lo es como tal, puesto que los usuarios deben estar en sólo 1 empresa (pero de cada tipo; dato1, dato2, dato3) y la empresa puede tener a varios usuarios.

Una N:M sería cuando varios usuarios (>1) pueden estar en varias empresas y varias empresas pueden contener a varios usuarios... este es un caso en donde un usuario esta sólo 1 una empresa pero debe tener de esos 3 tipos... se entiende?

Gracias!
Es más un tema de criterios de diseño.

El hecho de si necesitas o no una tercera tabla se basa en la forma de definir la relación entre las otras dos.

Si la relación es obligatoria, es decir si un mismo usuario debe estar vinculado a tres empresas y no puede estar vinculado a menos, es posible manejar eso con tres campos adicionales en la tabla usuarios, todos FK de empresa.

Pero si la relación es que puede estar vinculado hasta con tres empresas y como mínimo una, eso podría implicar una tercera tabla, por cuestiones de normalización. Hay que tener en cuenta que si la media de los registros no tiene los tres campos completos, se está desperdiciando espacio de almacenamiento (por pequeño que sea), y habitualmente en esos casos se recomienda separar esos conjuntos en una relación distinta.... que sería precisamente la N:M.

Además, es más simple manejar las relaciones de esa forma, ya que las consultas requieren dos JOIN y no tres como en tu propuesta..


En este punto la cosa tiene más que ver con el criterio del diseñador que con una metodología exclusiva.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/11/2010 a las 03:42