Re: inheritance - Mailing list pgsql-novice

From Avi Schwartz
Subject Re: inheritance
Date
Msg-id F82C6017-B23F-11D7-9966-000393AE5044@CFFtechnologies.com
Whole thread Raw
In response to Re: inheritance  (Jake Stride <nsuk@users.sourceforge.net>)
List pgsql-novice
This brings up a related question.  What if a non-capital city becomes
a capital?  Maybe Illinois will decide to make Chicago its capital
instead of Springfield :-)   With Dmitry's method you just set the
boolean flag.  How do you do that with inherited tables?  Do you have
to delete the record from the cities table and create a new one in the
capitals table?  This will may break relationships.

Avi

On Wednesday, Jul 9, 2003, at 11:03 America/Chicago, Jake Stride wrote:

> Doing things your way means that you end up having several different
> views and sets of data to look after on updates etc.
>
> The example given means that you only have two tables and can quite
> easily see all the cities at once, and only the capitals if you want.
>
> You don't have to worry about rules and extra data, postgreSQL looks
> after everything for you. With the inheritance, anything you insert
> into
> the capitals table automatically appears in the the cities table too,
> so
> do all updates.
>
> Hope this explains :-)
>
> As to duplicate keys, you can recreate the primary key in each
> inherited
> table. Also shouldn't you be updating in the relavent table?
>
> On Wed, 2003-07-09 at 16:54, Dmitry Tkach wrote:
>> Perhaps, I am missing something in this whole inheritance picture...
>> But
>> this is exactly one (of many) reasons why I could never understand why
>> people even consider using anything like inheritance in sql :-)
>> Perhaps, somebody could explain to me what kind of benefit you can get
>> from this 'inheritance' thing, that would outweight the obvious
>> disadvantages (such as this problem, a similar problem with
>> unique/foreign keys,  data duplication etc...).
>>
>> For this particular case, I would do something like this, rather than
>> messing with inheritance:
>>
>> create table cities
>> (
>>    name text primary key,
>>    population float,
>>    altitude int,
>>    capital bool not null default false
>> );
>>
>> create view capitals as select name, population, altitude from cities
>> where capital;
>> create rule new_capital as on insert to capitals do instead insert
>> into
>> cities values (new.*, true);
>> create rule upd_capital as on update to capitals do instead update
>> cities set name=new.name, population=new.population,
>> altitude=new.altitude where name=old.name;
>>
>> -- plus, perhaps, a partial index to speed up getting a list of all
>> capitals if necessary:
>> create unique index capital_idx on cities (name) where capital;
>>
>> Dima
>>
>> Volker Krey wrote:
>>
>>> Hello,
>>>
>>> I am working with PostgreSQL 7.2.1 under Windows 2000 (native version
>>> by PeerDirect) and have a problem with inheritance. To illustrate it,
>>> I will take the inheritance example from the Users Guide with a minor
>>> change, i.e. I introduce a PRIMARY KEY to the original table cities.
>>>
>>> CREATE TABLE cities (
>>>      name            text PRIMARY KEY,
>>>      population      float,
>>>      altitude        int     -- (in ft)
>>> );
>>>
>>> CREATE TABLE capitals (
>>>      state           char(2)
>>> ) INHERITS (cities);
>>>
>>> My problem now is the following: If I insert a data set into
>>> capitals,
>>> everything looks fine and a SELECT on cities returns the appropriate
>>> data just inserted into capitals. But if I now insert a city with the
>>> same name into cities the system will accept it so that I find myself
>>> with two entries in cities that have the same PRIMARY KEY. Of course
>>> this causes trouble, e.g. if I want to UPDATE one entry, an error
>>> message appears. If I still insist on changing the entry, both will
>>> be
>>> affected, because they share the same PRIMARY KEY.
>>> Can anybody tell me how to solve this problem? Maybe it has already
>>> been solved and is just a result of me using the old 7.2.1 version.
>>> I'd be very grateful for any hints, since the inheritance features of
>>> PostgreSQL would make life a lot easier for me.
>>>
>>> Thanks for your help, Volker.
>>>
>>
>>
>>
>> ---------------------------(end of
>> broadcast)---------------------------
>> TIP 8: explain analyze is your friend
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to majordomo@postgresql.org so that your
>       message can get through to the mailing list cleanly


pgsql-novice by date:

Previous
From: Dmitry Tkach
Date:
Subject: Re: inheritance
Next
From: Dmitry Tkach
Date:
Subject: Re: inheritance