Thread: Reference with inheritance propagate data
Hello, All ! I have base table q_base_table with column (id bigint) which may be inherited by users tables, primary key for both base table and derived tables is id. Now I need for another table record_rubricator which has to be referenced to base and derived tables, which way I have to do it, because postgresql does not allow automatically propagate data ? -- Best regards, Sincerely yours, Yuriy Rusinov.
On Wed, 2012-06-13 at 00:38 +0400, Yuriy Rusinov wrote: > Hello, All ! > > I have base table q_base_table with column (id bigint) which may be > inherited by users tables, primary key for both base table and derived > tables is id. Now I need for another table record_rubricator which has > to be referenced to base and derived tables, which way I have to do > it, because postgresql does not allow automatically propagate data ? One foreign key cannot reference two tables. Have you considered a design that does not use inheritance? For instance, the users table could reference q_base_table, and then record_rubricator could also reference q_base_table? Also, I don't understand what you mean about propagating data. What data do you want to propagate? Regards, Jeff Davis
Hello, Jeff ! > > One foreign key cannot reference two tables. > > Have you considered a design that does not use inheritance? For > instance, the users table could reference q_base_table, and then > record_rubricator could also reference q_base_table? Unfortunately not, because this design does not developed by me and these changes will result to inefficiency of all project. > > Also, I don't understand what you mean about propagating data. What data > do you want to propagate? We're need common numeration for primary key for all users tables, but others columns may be different for tables. -- Best regards, Sincerely yours, Yuriy Rusinov.
On Thu, Jun 14, 2012 at 2:08 AM, Yuriy Rusinov <yrusinov@gmail.com> wrote: > Hello, Jeff ! > >> >> One foreign key cannot reference two tables. >> >> Have you considered a design that does not use inheritance? For >> instance, the users table could reference q_base_table, and then >> record_rubricator could also reference q_base_table? > > Unfortunately not, because this design does not developed by me and > these changes will result to inefficiency of all project. >> >> Also, I don't understand what you mean about propagating data. What data >> do you want to propagate? > > We're need common numeration for primary key for all users tables, but > others columns may be different for tables. > When we forked LedgerSMB from SQL-Ledger they used a similar design and it was a mess. I don't want to go into the problems we figured could exist or we heard about from users. Luckily if all you are looking for is a common place for primary keys there is a useful shim that we came up with: 1) Create a table that stores the pkey value and what table it's in. 2) Use triggers on other tables to maintain that data 3) Use fkeys against either the other tables themselves (where it is a local reference) or against the common table It's not really ideal. It's possible the data will get out of sync of something goes wrong and then you will have problems but it seems to work for the most part and without a significant performance headache. Best Wishes, Chris Travers
On Thu, 2012-06-14 at 13:08 +0400, Yuriy Rusinov wrote: > We're need common numeration for primary key for all users tables, but > others columns may be different for tables. Will a sequence shared between the two tables solve this problem? http://www.postgresql.org/docs/9.1/static/sql-createsequence.html Regards, Jeff Davis