Ver Mensaje Individual
  #9 (permalink)  
Antiguo 06/05/2009, 21:00
Avatar de junarry
junarry
 
Fecha de Ingreso: marzo-2007
Ubicación: colombia
Mensajes: 113
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Duda al Normalizar una tabla Amigos

Cita:
Iniciado por Adolfiten Ver Mensaje
Aparentemente todos coincidimos en que no hace falta una tercera tabla.

Yo personalmente optaría por dejar como PK a CodInt, y FK los otros dos campos. Cuando vayas a buscar los amigos de un usuario, vas a tomar un campo, por tanto está bien que haya un registro "1 1 2" y un registro "4 2 1", ¿me explico?

Es más fácil buscar en un campo el id del usuario y en el valor del otro el id del amigo, si no sabés en qué campo tenés el id del usuario se dificulta un poco; tenés que buscar el id en un campo, luego en el otro, e ir tomando el id del amigo.

Para hacer la selección de amigos de un usuario probablemente hagas:

Código SENTENCIA SQL:
Ver original
  1. SELECT *
  2. FROM usuarios u, transitiva t, usuarios uu
  3. WHERE u.CodUs = CODIGO_DEL_USUARIO_AL_QUE_LE_BUSCO_LOS_AMIGOS
  4.       AND t.CodUsAmi = uu.CodUs

Saludos.
Hola......mas o menos por ahí va mi propuesta de solucion!!...:

Independiente de si se deja o no el campo CodInt, no es necesario llenar la tabla de esta forma:
CodInt / CodUs / CodUsAmi
1 |1 | 2
2 | 1 | 3
3 | 1 | 4
4 |2 | 1
5 | 2 | 6
6 | 3 | 2

simplemente si ya tenemos una registro con una relacion 1|2 no creamos otro registro con una relacion 2|1, y al momento de buscar los amigos de un usuario lo ariamos de la siguiente forma:

...voy a colocar un ejemplo:

suponiendo que tenemos los siguentes registros en la tabla amigos:
CodInt / CodUs / CodUsAmi
1 | 1 | 2
2 | 1 | 3
3 | 1 | 4
4 | 2 | 5
5 | 5 | 6
6 | 5 | 1
7 | 7 | 1

entonces para encontrar todos los amigos del usuario 1 hariamos primero una consulta como esta: SELECT CodUsAmi FROM AMIGOS WHERE CodUs=1. osea seleccioneme todos los codigos de CodUsAmi donde el codigo de usuario sea = 1...en esta primera consulta me encontraria los siguientes registros:
1 | 1 | 2
2 | 1 | 3
3 | 1 | 4...osea me encontro que solo tiene tres amigos. El 2, 3 y 4..

entonces para seleccionar los otros amigos que faltan hariamos otra consulta pero al revez!!....osea algo asi como esto:
SELECT CodUs FROM AMIGOS WHERE CodUsAmi=1...osea seleccioneme todo los codigos de CodUs donde el CodUsAmi sea =1.......en esta segunda consulta obtendriamos el siguiente resultado:
6 | 5 | 1
7 | 7 | 1...osea que encontro los otros amigos. 5, 7

de este modo ya tendriamos todos los amigo del usuario 1...nos quedaria no se confrontar las dos consultas o algo asi!!...no se!!...unirlas o algo parecido...para así tener en un solo lugar todos los amigos del usuario 1...

Espero me hayan entendido!!!...o si no pregunten......yo pienso que es una buena solucion!!