Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/07/2010, 19: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: Como normalizar esto? (parece facil pero yo no pude)

La solución surge de la misma definición de la relación que podemos definir como "es hermano de".

La cosa es así: Tienes una entidad denominada Usuario, la cual tiene una relación consigo misma que se define como "un usuario puede tener uno o más hermanos, que a su vez son otros usuarios".

Esto implica que en la relación un usuario puede tener cero o muchos hermanos y cada uno de esos hermanos a su vez puede tener cero o muchos hermanos.

Esto es lo que se denomina relación N:N, y por definición del modelo relacional, toda relación N:N entre entidades genera una tabla en el modelo de datos.

Entonces, tienes dos tablas: Usuario y Es_Hermano_de, exactamente como lo planteaste originalmente. Esa es la forma correcta.

Ahora bien, lo que a tí te llama la atención es que eventualmente tendrás que una vinculación aparentemente duplicada, cuando el hermano 1 y el 2 aparezcan en dos claves como (1, 2) y (2, 1). Bueno, eso es absolutamente irrelevante, porque no son claves iguales, y además la semantica de la relación está balando de dos cosas diferentes cuando se menciona ambas claves: el origen de la relación en un caso el el hermano 1 y en el otro es el 2. Desde el punto de vista del análisis de datos es diferente...

¿Se comprende?

Piensalo a nivel de búsquedas: SI quiero encontrar a los hermanos de María, no es lo mismo que si quiero encontrar a las hermanas de Juan... No estoy buscando lo mismo y por tanto la consulta no se escribe igual, según el orden de los campos de que figuran en esa relación...

¿Ahora lo visualizas?

Esa es la idea.

Tip final: No sirve poner una columna para "hermano" en la tabla Usuario, porque en esa columna sólo podrías poner una PK, lo que implicaría que el usuario sólo podría tener un hermano, lo que es irreal. Y no puedes poner múltiples valores en un campo, porque eso es una violación al modelo relacional y lo único que conseguirías es hacer a las consultas enormemente complejas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)