Re: Design problem : using the same primary keys for inherited

From: Daryl Richter <daryl(at)brandywine(dot)com>
To: David Pradier <david(dot)pradier(at)clarisys(dot)fr>
Cc: Russell Simpkins <russellsimpkins(at)hotmail(dot)com>, pgsql-sql(at)postgresql(dot)org
Subject: Re: Design problem : using the same primary keys for inherited
Date: 2005-10-14 14:57:26
Message-ID: 434FC756.90901@brandywine.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

David Pradier wrote:
>>Most of the inheritance i've seen done in databases retain the parent primary as a foreign key and a primary key. That being said, only you and your team can decide if more than one object will extend a base class. If you were doing something more like this
>>person -> sweepstakes entry
>>to model a sweepsakes entry is a person, and you allow a person to enter a sweepstakes more than once, but to enter a contest the user must provide a unique email address, then you could not just use a foreign key as the primary key in sweepstakes, since the primary key would disallow multiple entries in sweepstakes entry, you would then use a serial data type in both person and sweepstakes along with the foriegn key in sweepstakes from person.
>>The answer depends on the need. Hope that helps.
>
>
> Thanks Russ, but well...
> It doesn't help me a lot. Our needs seem to allow that we use an id as
> primary key and foreign key at the same time.
> What i fear more is that it be against a good database design practice,
> because leading to potential problems.
>
> I give a clearer example :
>
> CREATE TABLE actor (
> id_actor serial PRIMARY KEY,
> arg1 type1,
> arg2 type2
> )
>
> CREATE TABLE person (
> id_person INTEGER PRIMARY KEY REFERENCES actor,
> arg3 type3,
> arg4 type4
> )
>
> Don't you think it is a BAD design ?
> If it isn't, well, it will expand my database practices.
>

It *is* a bad design. You should not do this. After all, how is that
any different than this?

CREATE TABLE actor_person (
id_actor serial PRIMARY KEY,
arg1 type1,
arg2 type2
arg3 type3,
arg4 type4
)

Furthermore, inheritance is almost certainly the wrong relationship type
here. Normally, Actor would be a Role that a Person would be playing:

create table role(
id serial primary key, -- 1
name char(20) not null -- "Actor"
);

create table person(
id serial primary key, -- 1
name char(20) not null, -- "David"
role_id int not null references role -- 1
);

> David

>

--
Daryl Richter
Director of Technology

(( Brandywine Asset Management )
( "Expanding the Science of Global Investing" )
( http://www.brandywine.com ))

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message codeWarrior 2005-10-14 15:29:40 Re: Design problemi : using the same primary keys for inherited objects.
Previous Message Muralidharan Ramakrishnan 2005-10-14 14:48:05 Re: copy table