| From: | Linos <info(at)linos(dot)es> | 
|---|---|
| To: | Calabaza <calalinux(at)gmail(dot)com> | 
| Cc: | pgsql-es-ayuda(at)postgresql(dot)org | 
| Subject: | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Consulta diseño | 
| Date: | 2009-04-15 18:40:38 | 
| Message-ID: | 49E62A26.4030601@linos.es | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
Calabaza escribió:
> El día 15 de abril de 2009 10:53, Linos <info(at)linos(dot)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.
-la tabla "cliente" es la tabla donde mantengo a los clientes finales, personas 
físicas, no empresas, las operaciones con estos usuarios son venta de material 
en las tiendas, siempre pago al contado y tienen campos como apellido1, 
apellido2, sexo, fecha_nacimiento, numero_tarjeta_socio y otros q no tienen 
sentido para las empresas cliente.
-la tabla "empresa_cliente" es la tabla donde guardamos a las empresas que nos 
compran habitualmente, tienen formas de pago, descuentos, tarifas distintas y 
riesgos permitidos que no tienen los clientes finales.
-la tabla "empresa_grupo" es la tabla donde se guardan los datos de la empresa 
que forman parte del grupo de empresas, estamos formados por pequeñas sociedades 
y cada una puede tener una o varias tiendas, así que al enviarse un albarán 
intra-empresa del grupo tienen unas características especiales que luego hay q 
tratar, ademas no tienen riesgos y se dan un tratamiento especial por ser del grupo.
Un saludo,
Miguel Angel.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Linos | 2009-04-15 18:42:36 | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Consulta diseño | 
| Previous Message | Cesar Erices | 2009-04-15 17:55:12 | Re: PostgreSQL 8.4 Beta fue liberado |