Re: Subject: Re: constrain with MATCH full and NULL values inreferenced table - Mailing list pgsql-general
From | Adrian Klaver |
---|---|
Subject | Re: Subject: Re: constrain with MATCH full and NULL values inreferenced table |
Date | |
Msg-id | 402afcca-08f0-0b10-0ffb-b6d824c6b45e@aklaver.com Whole thread Raw |
In response to | Re: Subject: Re: constrain with MATCH full and NULL values inreferenced table (stan <stanb@panix.com>) |
Responses |
Re: Subject: Re: constrain with MATCH full and NULL values inreferenced table
|
List | pgsql-general |
On 8/12/19 10:30 AM, stan wrote: >>> The task_instance table is the one the original question was in reference >>> to. >>> >>> CREATE TABLE employee ( >>> employee_key integer DEFAULT nextval('employee_key_serial') >>> PRIMARY KEY , >>> id varchar(5) NOT NULL UNIQUE , >>> first_name varchar NOT NULL, >>> ); >>> >>> CREATE TABLE work_type ( >>> work_type_key integer DEFAULT nextval('work_type_key_serial') >>> PRIMARY KEY , >>> type smallint UNIQUE , >>> descrip varchar UNIQUE , >>> modtime timestamptz DEFAULT current_timestamp >>> ); >>> >>> CREATE TABLE rate ( >>> employee_key integer NOT NULL, >>> work_type_key integer NOT NULL, >>> rate numeric (5, 2) NOT NULL, >>> descrip varchar , >>> modtime timestamptz DEFAULT current_timestamp , >>> FOREIGN KEY (employee_key) references employee(employee_key) , >>> FOREIGN KEY (work_type_key) references work_type(work_type_key) , >>> CONSTRAINT rate_constraint UNIQUE (employee_key , work_type_key) >>> ); >>> >>> >>> CREATE TABLE task_instance ( >>> task_instance integer DEFAULT nextval('task_instance_key_serial') >>> PRIMARY KEY , >>> project_key integer NOT NULL , >>> employee_key integer NOT NULL , >>> work_type_key integer NOT NULL , >>> hours numeric (5, 2) NOT NULL , >>> work_start timestamptz , >>> work_end timestamptz , >>> modtime timestamptz DEFAULT current_timestamp , >>> descrip varchar , >> >> Aren't the marked ones below redundant?: >> >>> FOREIGN KEY (employee_key) references employee(employee_key) , >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> FOREIGN KEY (project_key) references project(project_key) , >>> FOREIGN KEY (work_type_key) references work_type(work_type_key) , >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> FOREIGN KEY (work_type_key , employee_key) REFERENCES rate (work_type_key , employee_key) MATCH FULL >> >> They are covered above. >> >>> ); > > OK, looks like learning time for me, again. Which is alwasy a good thing. My > thought here was that I needed to specify these on the dreivative table > (task_instnce). Are you teaching me that, since these constraints exist on > the tables that rate is derived from, I do not need to specify thmm for the > rate table? If I'm following what you are trying to do then: 1) task_instance is dependent on the information in rate being present for a given combination of (work_type_key , employee_key). 2) If 1) is correct then you cannot create a record in task_instance until a record exists in rate. 3) 2) means you have already established a relationship to employee and work_type via rate. > > The purpose of those is to verify that the key being inserted already exists > in the parent (eg employee) table. > -- Adrian Klaver adrian.klaver@aklaver.com
pgsql-general by date: