Re: Actualizar campo

From: "Guillermo O(dot) Burastero" <linux(dot)gb(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Actualizar campo
Date: 2005-11-08 12:42:42
Message-ID: 43709D42.5040503@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

xpuig(at)innova7(dot)net escribió:

>Hola,
> No se como debo hacer lo siguiente:
>
>Tengo 3 tablas:
>
>tabla1(usuarios):
>id_t1 (integer) primary key
>nombre (varchar 100)
>num_pedidos (integer)
>
>tabla2(pedidos):
>id_t2 (integer) primary key
>pedidos (varchar 100)
>
>
>tabla3(relación usuarios-pedidos):
>id_1 (integer)
>id_2 (integer)
>
>Me gustaria que el campo tabla1.num_pedidos estuviera actualizado en todo
>momento con el número de pedidos que figurara en la tabla3.
>
>Esto creo que se hace con triggers sobre la tabla3 pero que función debe
>ejecutar?? como creo la función si es así?
>
>gracias de antemano.
>
>---------------------------(fin del mensaje)---------------------------
>TIP 2: puedes desuscribirte de todas las listas simultáneamente
> (envíe "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
>
>
>
Si un pedido solo pertenece a un usuario (o cliente como creo entender)
y éste puede tener varios pedidos la relación es de tipo 1 a muchos o
sea Clientes <----- Pedidos, por lo tanto no hace falta la relación que
indicas en tabla3 que normalmente se emplea para convertir una relación
muchos a muchos (difícil de manejar) en dos relaciones muchos a uno y
uno a muchos.

El esquema de realación quedaría así: Clientes (IdCliente,
NombreCliente, xxx, total_pedidos) <----- Pedidos (IdPedido, IdCliente,
pedido, yyy ).

Ahora bien, agregar el campo total_pedidos, es una mála práctica porque
es una información redundante no esencial ya que esa información esta en
la base de datos y se obtiene facilmente, por ejemplo con

SELECT c.IdCliente, COUNT (*) AS Total_pedidos FROM clientes c,
pedidos p WHERE c.IdCliente = p.IdCliente GROUP c.Id_Cliente

que te da sólo los clientes que tienen al menos un pedido, si en cambio
te interesa que te de también los clientes con 0 pedidos hacé un LEFT
JOIN así:

SELECT c.IdCliente, COUNT (p.IdCliente) AS Total_pedidos FROM
clientes c LEFT JOIN pedidos p ON c.IdCliente = p.IdCliente GROUP
c.Id_Cliente

Te aconsejo, antes de hacer el diseño de tu primer esquema de base de
datos relacional que leas algo sobre normalización. Ningúna programación
corrige un mal diseño.

Saludos

--
Guillermo O. Burastero - Linux Counter User 84879, http://counter.li.org
Córdoba 171 - B8000IFC - Bahía Blanca - Buenos Aires - Rep. Argentina
Tel +54 (291) 454-6132 - ICQ 97148268 - email: linux(dot)gb(at)gmail(dot)com

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message RRHH Monolabs Consulting 2005-11-08 13:19:15 Ofertas de trabajo relacionadas con PostgreSQL
Previous Message gonzalo sáenz 2005-11-08 12:08:44 Re: Truncado de varchar