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

relacionar clientes entre si

Estas en el tema de relacionar clientes entre si en el foro de Mysql en Foros del Web. hola amigos, vereis me han ecargado un proyecto y me han surgido un problema en el planteamiento de las tablas. Por un lado tengo una ...
  #1 (permalink)  
Antiguo 15/07/2006, 02:38
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
relacionar clientes entre si

hola amigos, vereis me han ecargado un proyecto y me han surgido un problema en el planteamiento de las tablas.

Por un lado tengo una tabla cliente, con todos los datos del cliente y su id unica, por el otro lado tengo que relacionar los clientes que esten relacionados entre si.

Por la tando he pensado en crear un tabla llamada cliente_relacion aki viene el problema no se que que seria mas efectivo si crear la tabla asi:

id_cliente_1, id_cliente_2, fecha

por lo tanto usaria una fila por cada relacion, pero luego me presentaria un problema a la hora de relacionar la tabla con la tabla clientes ya que si kiero obtener las relaciones de un cliente la id de ese cliente prodria estar en id_cliente_1 o id_cliente_2 entonces no se sabria a que campo tengo que hacer el join

tambien se me ocurre crear una tabla:

id_cliente, id_relacion_con, fecha

pero con dos filas por cada relacion, la primera con la id de un cliente y su relacion y la segunda fila al reves, esto me haria mas facil a la hora de relacionar las tablas y obtener las relaciones de un cliente pero claro la cantida de registros de la tabla se multiplicaria notablemente (clientes * tantos clientes haya)

¿como prodria solucionar un problema como este de una manera simple y sin chapuzas XD que ralentizen la bd??
  #2 (permalink)  
Antiguo 18/07/2006, 20:29
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Pues se me ocurre crear una tabla llamada "relacion" con 3 campos
id = seria un campo INT y autoincrementable
id_cliente = guardaria el ID del cliente
relacion = guardaria el ID del cliente con el cual esta relacionado.

la tabla quedaria asi
id|id_cliente| relacion
1, CL01, CL02
2, CL01, CL05
3, CL01, CL08
4, CL01, CL09

tendrias que hacer join por el campo "id_cliente".
y para acelerar la consulta declara "id_cliente" como index

Saludos!
  #3 (permalink)  
Antiguo 19/07/2006, 03:36
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
wenas genetix gracias por responder, de la manera que tu dices seria la mejor opcion pero luego me surgiria un problema ya que no soy yo el que relaciona los clientes si no ellos mismos.

Utilizando tu ejemplo, si es el CL02 el que se ha relacionado, quedaria:

1, CL02, CL01

entonces si el CL02 quiere ver sus relaciones bastaria con hacer un

select... where id_cliente='CL02' y con un join a los datos del CL01 para que el CL02 pueda ver sus datos.

Pero si es el CL01 el que esta mirando sus relaciones, esa relacion no apareceria y aunque puedo hacer un select where id_cliente='CL01' or relacion='CL01' apareceria esa relacion, pero como haria el join al otro cliente, si no se en que campo está.
  #4 (permalink)  
Antiguo 19/07/2006, 03:51
 
Fecha de Ingreso: junio-2006
Mensajes: 87
Antigüedad: 17 años, 9 meses
Puntos: 0
Lo que puedes hacer es:
Tabla relaciones id_rel, id_cli1, id_cl2
Tienes las tabla de Clientes con id_cli.
La select que puedes hacer es

Código:
select id_cli, cli_nom
from clientes,relaciones
where clientes.id_cli=realaciones.id_cl1
 and id_cli2='CL01'

union

select id_cli, cli_nom
from clientes,relaciones
where clientes.id_cli=realaciones.id_cl2
 and id_cli1='CL01'
Hacer una union, así sabes que campo tienes que cruzar con clientes para obtener los datos del cliente relacionado con CL01
  #5 (permalink)  
Antiguo 19/07/2006, 10:20
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
seanchan
Bueno mi solucion seria asi.
Si el Cliente A se relaciona con el cliente B y los dos puedan verse, la tabla relacion quedaria asi.

id|id_cliente| relacion
1, CL01, CL02
2, CL02, CL01
3, CL03, CL01
4, CL01, CL03

Y con un simple join sacas todas las relaciones.
yo creo que eso es lo mas optimo
Saludos!
  #6 (permalink)  
Antiguo 19/07/2006, 10:55
 
Fecha de Ingreso: junio-2006
Mensajes: 87
Antigüedad: 17 años, 9 meses
Puntos: 0
Las dos versiones tienen sus pros y sus contras, o bien sacrificas en complejidad a la hora de seleccionar los datos o en la inserción duplicando la información.

Si suponemos que en la tabla hay más datos que se pueden actualizar (No se una fecha, o un tipo) ambas soluciones tendrían que buscar por los dos campos.
  #7 (permalink)  
Antiguo 20/07/2006, 07:38
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
gracias genetix y seanchan por vuestra ayuda

genetix esa forma es lo que pense en un principio pero la cantidad de registros aumentarian un monton conforme crezcan los clientes y sus relaciones

CL01, CL02
CL01, CL03
CL01, CL04

CL02, CL01
CL02, CL03
CL02, CL04

CL03, CL01
CL03, CL02
CL03, CL04

... imaginate con 1000 clientes XD

seanchan tu forma da lo que yo quiero y solo usa un registro, cuales son las contras?
  #8 (permalink)  
Antiguo 20/07/2006, 08:06
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Por que no agregarle un atributo a la tabla cliente que sea una llave foranea a la misma tabla cliente.?
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #9 (permalink)  
Antiguo 20/07/2006, 08:30
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
no entendi eso
  #10 (permalink)  
Antiguo 25/07/2006, 04:52
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
aun sigo con esto me tiene emparanoyao, cada vez que avanzo me sale otro problema, al final voy a optar por la solucion de genetix usando 2 registros.

Mi pregunta es: ¿Sera mas optimo esta opcion que la de seanchan a pesar de que a la larga hubiese millones mas de registros?
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 05:33.