Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

relacion-entidad

Estas en el tema de relacion-entidad en el foro de Mysql en Foros del Web. Hola, Estoy implementando el modelo entidad-relacion entre usuarios y amigos, pero tengo una pregunta. tabla usuario id_usuario nombre tabla amistad_usuario id_amistad_usuario id_amistad id_usuario tabla amistad ...
  #1 (permalink)  
Antiguo 01/05/2012, 13:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
relacion-entidad

Hola,

Estoy implementando el modelo entidad-relacion entre usuarios y amigos, pero tengo una pregunta.

tabla usuario
id_usuario
nombre

tabla amistad_usuario
id_amistad_usuario
id_amistad
id_usuario

tabla amistad
id_amistad
id_usuario


suponiendo que tengo estos datos

tabla usuario
1 pablo
2 juan

tabla amistad_usuario
1 1 1

tabla amistad
1 2

select
u.id_usuario,
a.id_usuario
FROM usuario u
inner join amistad_usuario au
on au.id_usuario = u.id_usuario
inner join amistad a
on a.id_amistad = au.id_amistad
where u.id_usuario = "id de la ficha perfil de usario"
con la siguiente consulta, si yo me meto en el perfil de pablo en su perfil me apareceria que es amigo de juan pero si me meto en la ficha de juan no me aparecera que es amigo de pablo. esto es que esta mal la relacion-entidad???

un saludo
  #2 (permalink)  
Antiguo 02/05/2012, 04:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: relacion-entidad

Todos los posibles amigos tienen que ser usuarios, no? Es decir yo usuario puedo ser amigo de otros usuarios.

Puedo ser amigo del alguien que no es usuario?....

Si las amistades se dan entre usuarios te sobra una tabla

Usuarios
IdUsuario
nombre
...

Amistades
idAmistad
idUsuario1
idUsuario2
....

Debes controlar que no haya repeticiones del tipo

idUsuario1/idUsuario2
idUsuario2/idUsuario1


Código MySQL:
Ver original
  1. SELECT u.nombre
  2. FROM amitades a inner join usuarios u ON a.idUsuario1=u.idUsuario
  3. WHERE a.idUsuario2="id de la ficha perfil de usario"
  4. SELECT u.nombre
  5. FROM amitades a inner join usuarios u ON a.idUsuario2=u.idUsuario
  6. WHERE a.idUsuario1="id de la ficha perfil de usario"
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 02/05/2012, 11:21
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: relacion-entidad

quimfv, las amistades son solamente entre los usuarios.
tenes razon lo montare de esta manera.
Una consulta mas, si tenes por ejemplo

tabla usuarios
id_usuarios

tabla profesores
id_usuarios

y quiero crear un sistema de comentarios un usuario no puede dejar un comentario a un profesor, solo a un usuario y viceversa.

entonces creo una

tabla comentarios
id_comentario
id_emisor
id_receptor
tipo(si es profesor o usuario)
texto

en la que van todos los comentarios de ambos

o creo

tabla comentarios_usuario
id_comentario
id_emisor
id_receptor
texto

tabla comentarios_profesor
id_comentario
id_emisor
id_receptor
texto

mi duda esta en que es mejor, ya que igual si pongo todos los registros en una tabla las consultas tardan mas en leer. pero de esta forma tengo menos tablas.

cual me recomendas??
  #4 (permalink)  
Antiguo 02/05/2012, 12:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: relacion-entidad

No seria mejor una sola tabla de usuarios y agregar el campo tipo para diferenciar entre profes y no profes.... para que dos tablas....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 02/05/2012, 12:48
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: relacion-entidad

quimfv, estoy de acuerdo con vos pero, ya lo tiene montado así en el trabajo.

Etiquetas: join, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:14.