Cita:
Iniciado por Adolfiten 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 originalSELECT *
FROM usuarios u, transitiva t, usuarios uu
WHERE u.CodUs = CODIGO_DEL_USUARIO_AL_QUE_LE_BUSCO_LOS_AMIGOS
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!!