Re: referential integrity with inheritance
Re: referential integrity with inheritance
От:
Stephan Szabo <sszabo@megazone23.bigpanda.com>
Дата:
On Wed, 4 Sep 2002, Colin Fox wrote: > Accounts may be held by either people or companies. So what I tried was > creating an abstract type called Entities, and deriving people and > companies from Entities. > > Then I tried saying: > create table acct_holders > ( > id serial, > entity_id integer not null references entities(id), > account_id integer not null references accounts(id), > primary key(id) > ); > > (I also noticed that although the documentation says that to get all > results from derived tables, I'd have to suffix the parent tablename with > '*', as in "select * from entities*;". But right now, when I select from > just 'entities', I get the derived tables (postgres 7.2.2). Bug?) The default behavior was changed (I think for 7.2) to cascade to children by default. You can use ONLY
referential integrity with inheritance
От:
"Colin Fox" <cfox@cfconsulting.ca>
Дата:
Hi, All. I'm setting up a simple accounting system, and I want to have accounts, companies and people. Accounts may be held by either people or companies. So what I tried was creating an abstract type called Entities, and deriving people and companies from Entities. Then I tried saying: create table acct_holders ( id serial, entity_id integer not null references entities(id), account_id integer not null references accounts(id), primary key(id) ); (I also noticed that although the documentation says that to get all results from derived tables, I'd have to suffix the parent tablename with '*', as in "select * from entities*;". But right now, when I select from just 'entities', I get the derived tables (postgres 7.2.2). Bug?) Anyway - when I try to insert into the acct_holders table, I get: ERROR: referential integrity violation - key referenced from acct_holders not found in entities I have a corresponding record in the Companies table, which is derived from Entities. Is there any way I can make the reference checker happy? Since I want both People and Companies to have accounts, I need the reference checker to make sure the reference is in "entities or any sub table". I thought I could do it with: ..entity_id integer not null references entities*(id) as the syntax is for a select, but I get a syntax error. Any suggestions?