Search Postgresql Archives

Table inheritance implementation.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi.

I'm developing an application using PostgreSQL and it happened table
inheritance is THE solution to some design problems I have.
Unfortunately the feature doesn't exactly work as true class/object
inheritance would.  Main problems are well recognized and documented:
child table doesn't inherit parent constraints and parent's index
doesn't get updated with child's keys.  While I didn't dig in the
Postgres internals, from the symptoms I guess the inheritance is
implemented as implicit UNION of the tables.  To be more specific, I
have:

CREATE TABLE parent (
	p int PRIMARY KEY
);
CREATE TABLE child (
	c int
);

If I'm right, in the backend there are two tables: parent(pid) and
child(pid,cdata) and
	INSERT INTO child ...
just go to child.  Then when I 
	SELECT ... FROM parent
Postgres does
	SELECT ... FROM parent UNION SELECT ... FROM child
for me (might be syntax error, I'm not so familiar with SQL).

This scenario of course explains these problems and I understand solving
them won't be easy.  But I have another question: why can't be
inheritance implemented as implicit JOIN?

I mean, in the backend there would be tables parent(p) and child(c) plus
some glue added (if oids/tids are not enough).  So
	INSERT INTO child VALUES (1,2)
would
	INSERT INTO parent VALUES (1)
	INSERT INTO child (2)
And
	SELECT ... FROM parent
would work as is, but
	SELECT ... FROM child
would effect in
	SELECT ... FROM parent JOIN child ON glue

It seems to me that it would solve both mentioned problems in one shot:
parent contains all keys it should have (and so index does) and parent's
constraints are enforced at the same time.

The glue can be issue or may be not.  The real issue would be with
overriding parent's constraints (from my point of view it's minor one
compared to contemporary problems).  There may be other deficiencies I'm
not aware of.  On the bright side, I think this implementation (or at
least some functionality of) can be made with rules.

Anyone share thought about the whole idea?  Or details?

Best regards.
-- 
Grzegorz Nowakowski



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux