Re: Implementing "thick"/"fat" databases - Mailing list pgsql-general

From Karl Nack
Subject Re: Implementing "thick"/"fat" databases
Date
Msg-id 1311460053.2738.2155131297@webmail.messagingengine.com
Whole thread Raw
In response to Re: Implementing "thick"/"fat" databases  (Darren Duncan <darren@darrenduncan.net>)
List pgsql-general
> > SELECT create_transaction(1, current_date, 'Transaction 1', ((1,
> > 50), (2, -50)));
>
> Well, not quite, because specifying the number "50" twice would be
> ridiculous for such a non-generic function; you can calculate the "-
> 50" from it in the function.

Not if there were more than two line-items per transaction. A paycheck
is a good example, where generally one or more income accounts are
credited and multiple tax accounts as well as one or more asset accounts
are debited. Ensuring that all the line-items add up to 0 would be one
of the data integrity rules implemented in the database (though most
likely checked in the application layer as well).

> A general rule of thumb, however you would design a routine in a
> normal programming language, try to do it that way in PL/PgSQL,
> assuming that PL/PgSQL is a competent language, and then tweak to
> match what you actually can do.

In the language I'm most familiar with, PHP, I could do this with an
associative array:

$transaction = array(
    'id' => 1,
    'date' => date('Y-m-d'),
    'description' => 'Transaction 1',
    'line_items' => array(
        array('account_id' => 1, 'amount' => 50),
        array('account_id' => 2, 'amount' => -50),
    ),
);

From which I can easily build the appropriate SQL statements. This would
be very similar in Python. I wonder if this would be achievable in
PL/PGSQL, maybe through the use of composite types and/or domains?


Karl Nack

Futurity, Inc
5121 N Ravenswood Ave
Chicago, IL 60640
773-506-2007

pgsql-general by date:

Previous
From: "Karl Nack"
Date:
Subject: Re: Implementing "thick"/"fat" databases
Next
From: Gavin Flower
Date:
Subject: Re: Implementing "thick"/"fat" databases