Thread: reference to a view
In my db I have a table type_of_action, fields code varchar, name varchar, medical boolean. Two other tables refer to this table, one of them to the medical rows, the other one to the none-medical rows. I would like to make the reference with a view, like this: create table type of action_type ( code varchar, name varchar, medical boolean ); create view action_type_medical as select * from action_type where medical=true; create view action_type_non_medical as select * from action_type where medical=false; create table general_actions ( field1, field2, field_etc, action_type varchar references action_type_non_medical(code) ); create table medical_actions ( field1, field2, field_etc, action_type varchar references action_type_medical(code) ); But pg refuses this, can't create a reference to a view. I can now create a trigger plus function that will do the check, but is there a more elegant way? Thanks! -- 10:35-10:41 Fedora Core release 2 (Tettnang) Linux 2.6.6-1.435
On Wed, 16 Jun 2004, Joolz wrote: > In my db I have a table type_of_action, fields code varchar, name > varchar, medical boolean. Two other tables refer to this table, one of > them to the medical rows, the other one to the none-medical rows. I > would like to make the reference with a view, like this: > > create table type of action_type ( > code varchar, > name varchar, > medical boolean > ); > > create view action_type_medical as select * from action_type > where medical=true; > create view action_type_non_medical as select * from action_type > where medical=false; > > create table general_actions ( > field1, field2, field_etc, > action_type varchar references action_type_non_medical(code) > ); > > create table medical_actions ( > field1, field2, field_etc, > action_type varchar references action_type_medical(code) > ); > > But pg refuses this, can't create a reference to a view. I can now > create a trigger plus function that will do the check, but is there a > more elegant way? Thanks! Not really right now. Note, that to do foreign keys properly you need triggers on action_type as well and those triggers need to take into account the view conditions to determine what checks to do.
> [Stephan Szabo schreef op 16-06-2004 07:57 -0700] > > On Wed, 16 Jun 2004, Joolz wrote: > > > In my db I have a table type_of_action, fields code varchar, name > > varchar, medical boolean. Two other tables refer to this table, > > one of them to the medical rows, the other one to the none-medical > > rows. I would like to make the reference with a view, like this: > > > > create table type of action_type ( > > code varchar, > > name varchar, > > medical boolean > > ); > > > > create view action_type_medical as select * from action_type > > where medical=true; > > create view action_type_non_medical as select * from action_type > > where medical=false; > > > > create table general_actions ( > > field1, field2, field_etc, > > action_type varchar references action_type_non_medical(code) > > ); > > > > create table medical_actions ( > > field1, field2, field_etc, > > action_type varchar references action_type_medical(code) > > ); > > > > But pg refuses this, can't create a reference to a view. I can now > > create a trigger plus function that will do the check, but is > > there a more elegant way? Thanks! > > Not really right now. Note, that to do foreign keys properly you > need triggers on action_type as well and those triggers need to take > into account the view conditions to determine what checks to do. Thanks for pointing that out. Considering this, it may be a better idea after all to make two (physically) seperate tables after all. After all, these are "only" domain tables, and I don't want the reverse-update trigger to change any of my "real" data. -- 22:40-22:43 Fedora Core release 2 (Tettnang) Linux 2.6.6-1.435