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

Como puedo hacer una base de datos de amigos

Estas en el tema de Como puedo hacer una base de datos de amigos en el foro de Bases de Datos General en Foros del Web. Hola, quisiera saber como puedo crear una base de datos tipo Hi5. Bueno primeramente mi Base de datos es: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código sql: Ver original ...
  #1 (permalink)  
Antiguo 16/09/2009, 11:25
 
Fecha de Ingreso: octubre-2008
Mensajes: 155
Antigüedad: 16 años, 1 mes
Puntos: 1
Como puedo hacer una base de datos de amigos

Hola, quisiera saber como puedo crear una base de datos tipo Hi5.
Bueno primeramente mi Base de datos es:

Código sql:
Ver original
  1. CREATE DATABASE amigos;
  2.  
  3. CREATE TABLE usuario(
  4. id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  5. usuario VARCHAR(10),
  6. nombres VARCHAR(30),
  7. apellidos VARCHAR(30)
  8. );
  9.  
  10. CREATE TABLE amigos(
  11. id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  12. usuario VARCHAR(10)
  13. );

EJEMPLO DE USUARIOS REGISTRADOS

Tachi
Pablo
Taz
Pedro

EJEMPLO DE AMIGOS DE USUARIOS

Tachi tiene como amigo a Pablo y Taz
Pablo tiene como amigo a Tachi y Pedro

Espero que me han etendido
GRACIAS
  #2 (permalink)  
Antiguo 17/09/2009, 06:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Como puedo hacer una base de datos de amigos

Como tumismo du¡ces necesitas registrar las parejas de amigos


luego la tabla de amigos que propones no te sirve....

yo haria algo así


CREATE TABLE amigos(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
idamigo1 INT NOT NULL
idamigo2 INT NOT NULL
);

Donde idamigo1 y idamigo2 son claves foraneas las dos referenciadas a usuario.id

Debes controlar que tanto idamigo1/idamigo2 como idamigo2/idamigo1 sean unicos....es decir las parejas de amigos deben ser unicas....

Quim
  #3 (permalink)  
Antiguo 17/09/2009, 07:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Como puedo hacer una base de datos de amigos

Yo no tendría a idamigo1 e idamigo2 como campos diferentes. Si tachi quiere ser amigo de pedro sería necesario crear otro campo y no se trata de eso.

Un usuario puede tener N amigos y un amigo puede pertenecer a N usuarios. Por esta razón es necesaria la inclusión de una nueva tabla que contenga las llaves de ambas tablas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 17/09/2009, 08:40
 
Fecha de Ingreso: octubre-2008
Mensajes: 155
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Como puedo hacer una base de datos de amigos

huesos52 esta en lo sierto, pero como podria ser con lo de la tabla de amigo?
  #5 (permalink)  
Antiguo 18/09/2009, 00:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Como puedo hacer una base de datos de amigos

Lo siento pero o no me he explicado o no me habeis entendido


CREATE TABLE amigos(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
idamigo1 INT NOT NULL
idamigo2 INT NOT NULL
);


Esto permite que cada usuario tenga tantos amigos como quiera ya que habrá una doble relacion 1 a n con la tabla usuarios...

Cita:
Donde idamigo1 y idamigo2 son claves foraneas las dos referenciadas a usuario.id


usuario

id::::::nombre....
1::::::::Tachi
2::::::::Pablo
3::::::::Taz
4::::::::Pedro

Si

Cita:
Tachi tiene como amigo a Pablo y Taz
Pablo tiene como amigo a Tachi y Pedro
esto se traduce en


amigos

id:::::::idamigo1:::::::::idamigo2
1:::::::::::1::::::::::::::::::::2
2:::::::::::1::::::::::::::::::::3
3:::::::::::2::::::::::::::::::::1
4:::::::::::2::::::::::::::::::::4

Cita:
Si tachi quiere ser amigo de pedro sería necesario crear otro campo y no se trata de eso.

Noooo!!!
Simplemente se agrega un registro y listos

5:::::::::::1::::::::::::::::::::4


Tendras que controlar varios temas

1. no tiene ningun sentido que alguien sea amigo de si mismo

ejemplo
6:::::::::::1::::::::::::::::::::1

2. que hacer con las relaciones inversas, es decir, si 1 es amigo de 2 automaticamente 2 es amigo de 1?

ejemplo
1:::::::::::1::::::::::::::::::::2
7:::::::::::2::::::::::::::::::::1


3. Las repeticiones, que se solucionan con un indice sobre los dos campos....

ejemplo
1:::::::::::1::::::::::::::::::::2
7:::::::::::1::::::::::::::::::::2

si idamigo1 y idamigo2 forman un indice unico compuesto será imposible que el registro 7 llegue a guardarse

y otros...

En aplicaciones como Hi5 o Facebook no hay dos categorias usuarios y amigos, sino que se trata de usuarios que son amigos entre ellos, no puedes ser amigo de alguien que no es usuario sencillamente por que no lo encuentras en el sistema.... puedes invitar a alguien a entrar y en el momento que se registra como usuario luego puede pasar a ser amigo tuyo pero no antes...

Espero haberme explicado mejor. Quizas el nombre adecuado para la tabla sea amistades no amigos....

Quim

Última edición por quimfv; 18/09/2009 a las 01:13
  #6 (permalink)  
Antiguo 18/09/2009, 08:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Como puedo hacer una base de datos de amigos

me gusta la idea.

No te habías explicado bien.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 23/09/2009, 12:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 155
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Como puedo hacer una base de datos de amigos

Hola, me he enredado un poco si me pueden dar un ejemplo se los agradeceria.
  #8 (permalink)  
Antiguo 09/11/2009, 20:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 140
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Como puedo hacer una base de datos de amigos

Cita:
Iniciado por quimfv Ver Mensaje
Lo siento pero o no me he explicado o no me habeis entendido


CREATE TABLE amigos(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
idamigo1 INT NOT NULL
idamigo2 INT NOT NULL
);


Esto permite que cada usuario tenga tantos amigos como quiera ya que habrá una doble relacion 1 a n con la tabla usuarios...





usuario

id::::::nombre....
1::::::::Tachi
2::::::::Pablo
3::::::::Taz
4::::::::Pedro

Si



esto se traduce en


amigos

id:::::::idamigo1:::::::::idamigo2
1:::::::::::1::::::::::::::::::::2
2:::::::::::1::::::::::::::::::::3
3:::::::::::2::::::::::::::::::::1
4:::::::::::2::::::::::::::::::::4



Noooo!!!
Simplemente se agrega un registro y listos

5:::::::::::1::::::::::::::::::::4


Tendras que controlar varios temas

1. no tiene ningun sentido que alguien sea amigo de si mismo

ejemplo
6:::::::::::1::::::::::::::::::::1

2. que hacer con las relaciones inversas, es decir, si 1 es amigo de 2 automaticamente 2 es amigo de 1?

ejemplo
1:::::::::::1::::::::::::::::::::2
7:::::::::::2::::::::::::::::::::1


3. Las repeticiones, que se solucionan con un indice sobre los dos campos....

ejemplo
1:::::::::::1::::::::::::::::::::2
7:::::::::::1::::::::::::::::::::2

si idamigo1 y idamigo2 forman un indice unico compuesto será imposible que el registro 7 llegue a guardarse

y otros...

En aplicaciones como Hi5 o Facebook no hay dos categorias usuarios y amigos, sino que se trata de usuarios que son amigos entre ellos, no puedes ser amigo de alguien que no es usuario sencillamente por que no lo encuentras en el sistema.... puedes invitar a alguien a entrar y en el momento que se registra como usuario luego puede pasar a ser amigo tuyo pero no antes...

Espero haberme explicado mejor. Quizas el nombre adecuado para la tabla sea amistades no amigos....

Quim
Hola, tu idea me parece muy buena pero tengo algunas dudas:

1. ¿Que pasa si 1 ya no quiere ser amigo de 4?
2. En mysql como evito que se ingrese por ejemplo la pareja 2 - 2
3. Es posible agregar 1-4 sin agregar 4-1???
  #9 (permalink)  
Antiguo 01/12/2009, 11:17
Avatar de iimeh  
Fecha de Ingreso: septiembre-2009
Mensajes: 25
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Como puedo hacer una base de datos de amigos

ok amigo algo similar pense yo

pero el dilema que tengo es el siguiente, aaaa y anticipo no soy un experto en php es mas se podria decir novatazo por lo cual talvez la solucion sea tonta o fasil jajajaja

ya tengo registrados los amigos en la tabla amigos es mas le puse un campo level donde al momento de hacer la consulta verifica que el nivel 10 apica a solicitud pendiente y 18 a solicitud exitosa preveniendo talvez de esta forma el que yo quiera ser tu amigo perotu la netas con migo no...

al momento que envio la consulta todo va bien, pero cuando quiero imprimirla tengo que seleccionar el campo que no sea igual a mi id, esto para que mi lista de amigos no me muestre mi propia id en cada campo...

es decir: tomando como referencia que soy lalito

lalito ruben
jorge lalito
ramon lalito
lalito lety
armando lalito

tomando en cuanta que tenemos dos columnas amigo 1 y amigo 2 yo puedo aparecer en cualquiera de las dos columnas ya que yo soy el punto de busqueda de mi lista de amigos.

¿Cómo evitar eso, y solo imprimir el valor de mis amigos eliminando el mio ya sea de amigo1 o de amigo 2?
  #10 (permalink)  
Antiguo 03/12/2009, 07:35
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años, 7 meses
Puntos: 2
Respuesta: Como puedo hacer una base de datos de amigos

Lo que yo haría sería lo siguiente:

Mantendría la estructura de tablas que habéis propuesto, pero cambiaría el funcionamiento de forma que cuando un usuario (Luis) solicita añadir a otro como amigo (Manuel), se ingresa un registro en la base de datos con los datos idamigo1= idLuis e idamigo2 = idManuel. Y cuando Manuel ve esa solicitud y la acepta se ingresaría otro registro con los datos idamigo1=Manuel e idamigo2=Luis (igual pero con los campos inversos). De esta forma una "amistad" no es oficial hasta que existan dos registros inversos.

id::::::idamigo1:::::idamigo2
1:::::::::::1:::::::::::::::::2
2:::::::::::1:::::::::::::::::3
3:::::::::::2:::::::::::::::::3
4:::::::::::3:::::::::::::::::1

Con estos registros 1 y 3 son amigos. 2 vería la solicitud de 1 de añadirlo como amigo y 3 vería la solicitud de 2 de añadirlo como amigo.

Bueno, no sé si será mejor o peor para tu sistema, pero es una idea más. Espero que te ayude.

UN saludo
  #11 (permalink)  
Antiguo 05/12/2009, 13:26
 
Fecha de Ingreso: octubre-2008
Mensajes: 155
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Como puedo hacer una base de datos de amigos

Me gusta la idea de Paloto.
  #12 (permalink)  
Antiguo 07/12/2010, 22:41
 
Fecha de Ingreso: noviembre-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Como puedo hacer una base de datos de amigos

este problema tambien lo tengo yo pero yo hice esto

idusuario | idamigo --> como claves principales y un tercer campo que es
Estado que controlara las invitaciones por ejemplo

1 es amigo de 2 estado 1 ----> solicitud de amigo pero
2 es amigo de 1 estado 0 ---> lo que significa que el usuario 2 aun no acepta la invitacion del usuario 1 y al ser los dos id claves principales no admitira registros dobles ahora mi problema va quizas un poco por el lado del codigo debido a que spoy un novato en esto.

bueno esa es una solucion si logras implementarlo con el codigo espero tambien me puedas ayudar a completar mi codigo yo tengo un ejemplo aqui en esta pagina

www.stereo3.com aun no esta terminada por algunos detalles que aunn o temrino suerte espero que te haya ayudado en algo
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 14:20.