Skip site navigation (1) Skip section navigation (2)

Re: Consulta diseño

From: Linos <info(at)linos(dot)es>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta diseño
Date: 2009-04-15 18:46:21
Message-ID: 49E62B7D.4010001@linos.es (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Alvaro Herrera escribió:
> Linos escribió:
> 
>> 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;
> 
> Efectivamente parece que necesitara un poco más de normalización.
> Creo que deberías tener una única tabla de "clientes", que llevara el
> nombre y otros datos comunes; y el resto de los datos podrían ir en una
> tabla diferente con columnas para los datos que son únicos a cada tipo.
> 

En un principio la pensé asi pero me di cuenta que el numero de campos comunes 
iba a ser ridiculamente bajo. Por ejemplo observa estas dos:

			Table "cliente"
       Column      |         Type          |          Modifiers
------------------+-----------------------+-----------------------------
  cliente_id       | integer               | not null
  codigo_cliente   | character varying(16) | not null
  nombre           | character varying(64) |
  apellido1        | character varying(64) |
  apellido2        | character varying(64) |
  sexo             | character(1)          |
  email            | text                  |
  puntos           | integer               | default 0
  activado         | boolean               | default true
  revision_datos   | boolean               | default false
  id_direccion     | integer               |
  id_tienda_alta   | integer               | not null
  numero_hijos     | integer               |
  fecha_nacimiento | date                  |
  fecha_alta       | date                  | default ('now'::text)::date
  idioma           | character varying(64) |
  nacionalidad     | character varying(64) |
  observaciones    | text                  |
  numero_tarjeta   | character(13)         |
  id_usuario       | integer               | not null
  correo_devuelto  | boolean               | default false
Indexes:
     "cliente_pkey" PRIMARY KEY, btree (cliente_id)
     "uq_codigo_index_cli" UNIQUE, btree (codigo_cliente)
     "uq_tarjeta_index_cli" UNIQUE, btree (numero_tarjeta)
     "apellido1_index_cli" btree (apellido1)
     "apellido2_index_cli" btree (apellido2)
     "nombre_index_cli" btree (nombre)
     "pattern_apellido1_cli" btree (apellido1 varchar_pattern_ops)
     "pattern_codigo_cliente_cli" btree (codigo_cliente varchar_pattern_ops)
     "pattern_nombre_cli" btree (nombre varchar_pattern_ops)
     "pattern_numero_tarjeta_cli" btree (numero_tarjeta bpchar_pattern_ops)


                       Table "empresa_cliente"
        Column        |         Type          |          Modifiers
---------------------+-----------------------+-----------------------------
  empresa_id          | integer               | not null
  cif                 | character varying(16) | not null
  email               | text                  |
  fecha_alta          | date                  | default ('now'::text)::date
  nombre_comercial    | text                  |
  nombre              | text                  | not null
  id_direccion_fiscal | integer               | not null
  id_direccion_postal | integer               |
  forma_pago          | character varying(32) | not null
  codigo_contable     | integer               |
  dto_especial        | integer               | default 0
  dto_pp              | integer               | default 0
  pais                | character varying(64) | not null
  divisa              | character varying(32) | not null
  observaciones       | text                  |
  id_regimen_fiscal   | integer               | not null
  id_tarifa           | integer               | not null
  activado            | boolean               | default true
  riesgo_alcanzado    | numeric(10,2)         | default 0.00
  riesgo_permitido    | numeric(10,2)         | default 0.00
  id_persona_contacto | integer               |
  id_usuario          | integer               | not null
Indexes:
     "empresa_cliente_pkey" PRIMARY KEY, btree (empresa_id)
     "uq_codigo_contable_index_empcli" UNIQUE, btree (codigo_contable)
     "uq_email_index_empcli" UNIQUE, btree (email)
     "uq_nombre_index_empcli" UNIQUE, btree (nombre)

Como puedes ver hay pocas cosas en común, aun así es una opción, quizás mejor 
que la que uso actualmente, intentare analizarlo mas a fondo o hacer la prueba a 
ver q tal me queda.

Un saludo,
Miguel Angel.

In response to

Responses

pgsql-es-ayuda by date

Next:From: Luis Fernando Lopez AguilarDate: 2009-04-15 18:47:42
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Consulta d
Previous:From: inf200476Date: 2009-04-15 18:42:52
Subject: Utilizar un Web Services en PL/pgsql

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group