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

Diseño de base de datos sencillo

Estas en el tema de Diseño de base de datos sencillo en el foro de SQL Server en Foros del Web. Pues el problema es el siguiente: Tengo una tabla de avales y otra tabla de clientes, y un cliente tiene 2 avales específicamente. Las tablas ...
  #1 (permalink)  
Antiguo 10/01/2013, 10:34
 
Fecha de Ingreso: enero-2013
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Información Diseño de base de datos sencillo

Pues el problema es el siguiente: Tengo una tabla de avales y otra tabla de clientes, y un cliente tiene 2 avales específicamente.

Las tablas están así:

| Avales |
------------
| Id_Avales |
| Nombre |
| Dirección |
| Teléfono |
| Observaciones |

| Clientes |
------------
| Id_Clientes |
| Nombre |
| Direccion |
| Telefono |
| Observaciones |

Y el resultado que espero es simplemente toda la información de Clientes pero con las 2 personas que los avalan, por decir algo así:

| Id _Cliente | Nombre | Dirección | Teléfono | Observaciones | Aval1 | Aval 2 |
------------------------------------------------------------------
| 1 | Juanito | Priv algo | 222222 | --------- | Jesus | Pedro |
| 2 | Pablito | Priv algo | 222222 | --------- | Juan | Ricardo |
| 3 | Jorgito | Priv algo | 222222 | --------- | Luis | Esteban |
| 4 | Rafita | Priv algo | 222222 | --------- | Fer | Gabriel |
| 5 | Pepito | Priv algo | 222222 | --------- | Beto | Jose |
-----------------------------------------------------------------

Lo que estaba pensando era hacer una tabla que una las dos tablas anteriores de esta manera:


| Clientes_x_Avales |
----------------
| Id |
| Id_Clientes |
| Id_Clientes |

Y que estén unidas por llaves foráneas pero entonces no se como hacer que salgan los dos avales en la tabla de resultado porque como tengo entendido, cada nombre de cada aval esta unido a su ID, entonces no se como hacerle, seria de mucha ayuda si pudieran decirme como, yo siento que es algo sencillo pero no veo como hacerle!!!

Muchas Gracias de antemano!!
  #2 (permalink)  
Antiguo 10/01/2013, 10:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Diseño de base de datos sencillo

tabla union
id_cliente id_aval

que tendria una relacion uno a muchos, un cliente puede tener muchos avales

Viendo tus datos digamos juanito (id 1) tendria 2 avales

id_cliente id_aval
1 1
1 2
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 10/01/2013, 14:04
 
Fecha de Ingreso: enero-2013
Mensajes: 176
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Diseño de base de datos sencillo

Seria buena opcion incluir una clave foranea en la tabla 'avales' para relacionarla con el cliente directamente?
__________________
Define tus intereses, se curioso, investiga, comete errores, aprende, practica, mejora, enseña y vuelve a comenzar....
  #4 (permalink)  
Antiguo 10/01/2013, 15:13
 
Fecha de Ingreso: enero-2013
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Diseño de base de datos sencillo

Si, acabo de hacer eso, pero el problema ahora es que no encuentro ni conozco la manera de ocultar los registros duplicados que se generan en la consulta!!... Alguien sabe como??
  #5 (permalink)  
Antiguo 10/01/2013, 15:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Diseño de base de datos sencillo

Cita:
Iniciado por Paty_RR Ver Mensaje
Seria buena opcion incluir una clave foranea en la tabla 'avales' para relacionarla con el cliente directamente?
Si vas a hacer la relacion de esa manera es implicito que lleva una llave foranea para que te asegures que tus registros tienen relacion ;).....

Y en cuanto a la ultima pregunta de puch07, que query estas ejecutando???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 10/01/2013, 16:21
 
Fecha de Ingreso: enero-2013
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Diseño de base de datos sencillo

Algo asi como:

SELECT Clientes.*, Avales.Nombre, Avales.Nombre
FROM Clientes INNER JOIN Avales ON Clientes.Id = Avales.Id_Clientes;

Donde muestro dos veces la columna avales. nombre, mi intencion era que aparecieran en una columna el primero que se registro y en otra el segundo, pero me salen las dos columnas iguales obviamente y dentro de las columnas de ide_cliente, telefono, etc, me salen valores repetidos. Si se por que pasa eso, lo que quiero saber es como hacer que no salgan esos valores repetidos!!
  #7 (permalink)  
Antiguo 10/01/2013, 17:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Diseño de base de datos sencillo

No puedes agrupar porque seguirian saliendo repetidos, para ponerlos en 2 columnas necesitarias saber si el aval es el 1 o el 2, y como sabria eso???

Código SQL:
Ver original
  1. CREATE TABLE #cliente(
  2. id INT,
  3. nombre VARCHAR(20)
  4. )
  5.  
  6. CREATE TABLE #aval(
  7. id INT,
  8. nombre VARCHAR(20)
  9. )
  10.  
  11. DROP TABLE #relacion
  12. CREATE TABLE #relacion
  13. (
  14. id_cliente INT,
  15. id_aval INT,
  16. num_aval INT
  17. )
  18.  
  19. INSERT INTO #cliente VALUES (1,'Juan')
  20. INSERT INTO #cliente VALUES (2,'Pedro')
  21. INSERT INTO #cliente VALUES (3,'Maria')
  22.  
  23. INSERT INTO #aval VALUES (1,'Mario')
  24. INSERT INTO #aval VALUES (2,'Lupe')
  25. INSERT INTO #aval VALUES (3,'Ana')
  26.  
  27. INSERT INTO #relacion VALUES (1,1,1)
  28. INSERT INTO #relacion VALUES (1,2,2)
  29. INSERT INTO #relacion VALUES (2,1,1)
  30. INSERT INTO #relacion VALUES (3,3,1)
  31.  
  32.  
  33. SELECT t2.nombre AS cliente,
  34. CASE WHEN t1.num_aval=1 THEN
  35. t3.nombre END AS aval1,
  36. CASE WHEN
  37. t1.num_aval=2 THEN t3.nombre END AS aval2 INTO #temp
  38. FROM #relacion AS t1
  39. INNER JOIN #cliente AS t2 ON (t1.id_cliente=t2.id)
  40. INNER JOIN #aval AS t3 ON (t1.id_aval=t3.id)
  41.  
  42.  
  43. SELECT t1.cliente,t2.aval1,t3.aval2 FROM #temp AS t1
  44. LEFT JOIN #temp AS t2 ON (t1.cliente=t2.cliente AND t2.aval1 IS NOT NULL)
  45. LEFT JOIN #temp AS t3 ON (t1.cliente=t3.cliente AND t3.aval2 IS NOT NULL)
  46. GROUP BY t1.cliente,t2.aval1,t3.aval2

Si agregamos un campo entero a la relacion(para decir si el aval es 1 o 2) entonces podemos meter un case dentro del query para poder saber si el aval es 1 o 2, pero de todos modos salen valores repetidos, para eso metemos el resultado dentro de una tabla temporal y con esa temporal eliminamos los nulos y lo dejamos todo en un solo renglon :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: diseño, sencillo, 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 21:02.