El día 15 de abril de 2009 10:53, Linos <i...@linos.es> 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. luego de buscar que es "albaranes de salida" http://www.google.com.py/search?hl=es&q=que+es+albaranes+de+salida&btnG=Buscar+con+Google&meta= Empiezo a entender tu problema.... > 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. Podrias mostrar los create table de cada uno por favor? Creo que deberia quedar algo asi: Una empresa_grupo posee varias empresa_cliente y esa empresa_cliente posee varios clientes. lo que sería en un pseudo diagrama de entidad/relacion: empresa_grupo 1 ---<poseee>---- N empresa_cliente empresa_cliente 1 --<posee> ------ N clientes Pero realmente no se cual sea tu nececidad... > 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 > Un abrazo. -- §~^Calabaza^~§ from Villa Elisa, Paraguay -- TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo