re: 7.1.2 and foreign key unique constraint. - Mailing list pgsql-general

From patrick keshishian
Subject re: 7.1.2 and foreign key unique constraint.
Date
Msg-id 20010802124502.U25950@pioneerdigital.com
Whole thread Raw
Responses Re: re: 7.1.2 and foreign key unique constraint.  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
List pgsql-general
Greetings,

I ran accross this problem upon upgrading our database from 7.0.3
to 7.1.2:

   ERROR:  UNIQUE constraint matching given keys for referenced
   table "some_table" not found


Looking through the mailing lists i came across a couple of
discussions regarding this very same error:

   http://fts.postgresql.org/db/mw/msg.html?mid=1022876
   http://fts.postgresql.org/db/mw/msg.html?mid=1024107


I have always used foreign keys for data integrity purposes.
Basically using them to make sure one table only contains values
that are "allowed" (read: are in the foriegn table field).


A simplified _example_ of my tables follows:


   --
   --
   -- Candidate stories for publishing.
   --
   create table news_stories
   (
      id       int4           not null,   -- not a primary key
      media    int2           not null,   -- 1 = text
                                          -- 2 = audio
                                          -- 3 = video
                                          -- etc ...
         --
         -- Note that there are NO primary/unique keys here.
         -- A story might have accompanying audio or video tracks
         -- that would share the same id.
         --
         -- e.g.,       id  , media type
         --    values ( 1000,    1     )  -- the story
         --    values ( 1000,    2     )  -- the audio interview
         --    values ( 1000,    3     )  -- mpeg footage
         --
         -- One can "almost" think of the primary key being a
         -- composite of (id,media).  But just for the sake of
         -- argument lets ignore this fact, if possible.

      author   varchar(64),
      -- some other fields go here
   );

   --
   --
   -- Assistant editors would review stories from news_stories
   -- and after approving them for publishing would enter them
   -- into the following table.
   --
   create table approved_stories
   (
      id       int4           not null
                              references news_stories(id),
      editor   varchar(64),
      -- some other fields go here
   );

   --
   --
   -- The chief editor would then select the stories to be
   -- published from the approved list of stories above.
   --
   create table published_stories
   (
      id       int4           not null
                              references approved_stories(id),
      -- some other fields ...
   );


I've been using the foreign key to have a constraint on the
values that would be "allowed" in the approved_stories.id field.
The id must be a value from a record already in news_stories.

The pre-condition for a published story would then be one that
is not only a "news story", but one that has been "approved" by
an assistant editor.



Apparently, I've been using the wrong "tool" to enforce the
pre-conditions in this case.


My question now becomes:  How can one enforce the pre-conditions
outlined above if the pre-condition for a foreign key is that it
has to be unique itself.


Thanks for your time,
--
patrick keshishian

Gnu  __   _
 -o)/ /  (_)__  __ ____  __
 /\\ /__/ / _ \/ // /\ \/ /
_\_v __/_/_//_/\_,_/ /_/\_\

pgsql-general by date:

Previous
From: Jason Earl
Date:
Subject: Re: Re: [HOW TO:] timestamp WITHOUT timezone
Next
From: Paul Ramsey
Date:
Subject: Re: Points, Circles, Indexes, and query-by-Radius?