Search Postgresql Archives

Re: custom integrity check

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

 



CREATE TABLE cats_items (
cat_id	            int4 NOT NULL,
item_id		    int4 NOT NULL,
FOREIGN KEY (cat_id) REFERENCES cats (cat_id),
FOREIGN KEY (item_id) REFERENCES items (item_id),
PRIMARY KEY (cat_id, item_id)
);

CREATE TABLE items_master_cats (
  cat_id int4  PRIMARY KEY
  item_id int4 NOT NULL, 
  UNIQUE KEY(cat_id)
  FOREIGN KEY  (cat_id) REFERENCES cats_items(cta_id) 
  FOREIGN KEY  (item_id) REFERENCES cats_items(item_id)
);



ALTER TABLE cats_items ADD constraint
  fk_imc_ci FOREIGN KEY ( cat_id ) REFERENCES cat_items;


cat_items still contains all relationsships including the masters.
items_master_cats only the masters.

Because of the constraint 'fk_imc_ci
it should not be possible to have an entrie in
cat_items if the cat_id of the entrie is not in masters.
( To solve hen-and-egg-Problem this contraint is defered, so you can have this situation, but
you can't commit it. )

You can  add  plpg-procedures , rules, trigger and/or views to
hide this complicated data-model from the users.





Abdul-Wahid Paterson wrote:
Hi,

I have the following table as a link table between my 'cats' table and
my 'items' table. Every item must have at least one cat and exactly
one 'master' cat.

How can I create an integrity check to make sure that each item has
exactly one 'master' cat.

CREATE TABLE cats_items (
cat_id	            int4 NOT NULL,
item_id		    int4 NOT NULL,
master		    boolean DEFAULT 'f',
FOREIGN KEY (cat_id) REFERENCES cats (cat_id),
FOREIGN KEY (item_id) REFERENCES items (item_id),
PRIMARY KEY (cat_id, item_id)
);


Thanks,

Abdul-Wahid

---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
      joining column's datatypes do not match
  


[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