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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Luis Fernando Lopez Aguilar 2009-04-15 18:47:42 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Consulta diseño
Previous Message inf200476 2009-04-15 18:42:52 Utilizar un Web Services en PL/pgsql