Re: returning inserted rows, derived tables design

Поиск
Список
Период
Сортировка
От Bruno Wolff III
Тема Re: returning inserted rows, derived tables design
Дата
Msg-id 20041023160536.GA18478@wolff.to
обсуждение исходный текст
Ответ на returning inserted rows, derived tables design  ("Ruediger Herrmann" <ruediger.herrmann@gmx.de>)
Список pgsql-general
On Sat, Oct 23, 2004 at 12:30:07 +0200,
  Ruediger Herrmann <ruediger.herrmann@gmx.de> wrote:
> Hello again,
>
> as I am new to PostgreSQL (great pice of softwork btw) this probably won't
> be the last question.
>
> I access PostgreSQL from Java via the PostgreSQL JDBC driver. I am
> currently building a little framework that provides basic CRUD
> operations by mapping class properties to database columns. All my
> primary keys are artificial and built by sequences (datat type bigserial).
> Now I need to (re-)read the row that was inserted/updated because triggers
> may have changed the column values, row versions (CMAX, thanks to Tom Lane)
> are different and so on.
> For the update operation I "know" wich row to select since the primary key
> alread exists. But what about the insert? When I know the sequence for
> a particular primary key I could obtain its last value select the row
> with this very primary key...
> This would imply that my framework must "know" wich sequence belongs to
> a primary key. I don't like this idea.
> To come to an end, a RETURNNG clause for the insert/update statement would
> be the perfect solution, but there isn't any, right?

Currently the sequence names can be derived from the table and serial
column names. If the names aren't too long, I think it is
tablename_serialname_seq. In 8.0 (unreleased) there is a function that returns
the name of the sequence associated with a serial column.

> Another uncertainty: Is it wise to have most tables derive from one base
> table (concering performace, concurrence, maintainability, etc). Let's say
> 99% of my tables have an Id (artificial primary key), CreatedBy, UpdatedBy
> column.
> Should I put those columns in a base table and derive from it or let each
> table have these columns by itself.
> As for the Id column (bigserial) in the "derived solution" there would be
> only one sequence wich makes it unique for the whole database. That sounds
> very appealing from the application point of view.

I would avoid using inheritance and use views instead. Inheritance is currently
half-baked and you have to do too much working around limitations when using
it. (In particular having a unique constraint accross all derived tables is a
pain.)

I wouldn't repeat the columns in the actual tables you are using. Instead
the derived tables should refer to the base table using a foriegn key.
You can then use views (and rules if you need the views to be updateable.)
to make derived tables in queries with the columns from the base tables.

В списке pgsql-general по дате отправления:

Предыдущее
От: Robert Fitzpatrick
Дата:
Сообщение: COPY command with PHP
Следующее
От: Bruno Wolff III
Дата:
Сообщение: Re: OID's