El día 15 de abril de 2009 9:53, Linos <[email protected]> escribió: > Hola, > estoy guardando una información en mis tablas de una manera que no me > parece la > mas correcta (pero no se me ocurre ninguna mejor) y ya que es un problema > tan > común y que muchos de vosotros sabéis muchos de bases de datos y > específicamente > de postgresql probablemente me podáis recomendar una solución mejor para > esto. > Se me da en alguna entidad mas pero poniendo por ejemplo albaranes de > salida. > > yo tengo los clientes separados en sus tablas en función de las necesidades > de > los campos de sus tablas, en este caso tengo 3 tablas de clientes: > > -cliente, empresa_cliente y empresa_grupo, los almaceno separados pq sus > columnas no son las mismas. > > claro cuando voy a hacer un albaran de salida tengo q especificar el tipo de > cliente y el id del cliente en la tabla en cuestión, uso en la tabla de > albaranes de salida los campos "tipo_cliente" e "id_cliente" para guardar > estos > valores. > > Cuando quiero hacer una consultar a los albaranes de salida donde muestre el > nombre del cliente tengo que hacer o: > > SELECT cab.numero_albaran, > CASE > WHEN tipo_cliente = 'CLIENTE' THEN cli.nombre > WHEN tipo_cliente = 'CLIENTE EMPRESA' THEN cli_emp.nombre > WHEN tipo_cliente = 'CLIENTE GRUPO' THEN cli_grp.nombre > ELSE NULL > FROM albaran_salida_cabecera AS cab > LEFT JOIN cliente AS cli ON cli.id_cliente = cab.id_cliente > LEFT JOIN cliente_empresa AS cli_emp ON cli_emp.id_cliente = > cab.id_cliente > LEFT JOIN empresa_grupo AS cli_grp ON cli_grp.id_cliente = > cab.id_cliente; > > o esto: > > SELECT cab.numero_albaran, > cli.nombre > FROM albaran_salida_cabecera AS cab > JOIN cliente AS cli ON cli.id_cliente = cab.id_cliente > WHERE tipo_cliente = 'CLIENTE' > UNION ALL > SELECT cab.numero_albaran, > cli_emp.nombre > FROM albaran_salida_cabecera AS cab > JOIN cliente_empresa AS cli_emp ON cli_emp.id_cliente = cab.id_cliente > WHERE tipo_cliente = 'CLIENTE EMPRESA' > UNION ALL > SELECT cab.numero_albaran, > cli_grp.nombre > FROM albaran_salida_cabecera AS cab > JOIN empresa_grupo AS cli_grp ON cli_grp.id_cliente = cab.id_cliente > WHERE tipo_cliente = 'EMPRESA GRUPO'; > > El caso es q todo esto me parece una solución muy extraña para lo que pienso > debería ser un problema mas común, como creéis que debería rediseñar esto? > > Gracias y un saludo, > Miguel Angel. > > -- > TIP 8: explain analyze es tu amigo >
Si no es muy tarde, deberias cambiar el modelo de tu base de datos y tratar de normalizarla mejor. Dale una vista a esto: http://www.monografias.com/trabajos5/norbad/norbad.shtml -- Atentamente, Moisés Alberto Lindo Gutarra Asesor - Desarrollador Java / Open Source Linux Registered User #431131 - http://counter.li.org/ Cel: (511) 995081720 MSN: [email protected] -- TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda
