Re: Circular Dependency in Tables and Deletion of Data

From: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
To: Mans <mananvyas(at)gmail(dot)com>
Cc: pgsql-admin(at)postgresql(dot)org
Subject: Re: Circular Dependency in Tables and Deletion of Data
Date: 2006-07-24 16:20:57
Message-ID: 20060724091649.H55713@megazone.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

On Mon, 24 Jul 2006, Mans wrote:

> Hello,
>
> Note: I know that its not a very good db design. But what if a senario
> comes in front of you?
>
> I have created an uncommon database design. Which is as follows:
> Created 2 Tables :- Emp1 and Emp2
>
> TableA with 2 Attributes
> A1 and A2.
> A1 is the primary key.
>
> TableB with 2 Attributes
> B1 and B22.
> B1 is primary key
> B2 is refereing to Emp1.Pr1
>
> Now I have altered table for addeing one more foreign key constraint.
> The constraint is on TableA.A2 refering to TableB.B1
>
> This creates the circular dependency.
> Now I have add one record in each table then "Will it allow me to
> delete without schema change??"If yes then how?
> I can not delete the tables also??
> Is this a useless functionality given in DB or where is this used?
> Can postgres detect it automatically and restrict it to do so?
> Is any other DB restricts this kind of functionality or not?
>
> Sample code is given below for trial purpose....
>
> create table TableA (
> A1 integer primary key,
> A2 integer
> );
>
> create table TableB (
> B1 integer primary key,
> B2 integer references TableA(A1)
> );
>
> ALTER TABLE TableA ADD CONSTRAINT distfk FOREIGN KEY (A2) REFERENCES
> TableB(B1) MATCH FULL;

You need to have one or both of the constraints marked at least as
deferrable. If you make the constraint initially deferred, then it should
automatically wait until transaction end to check that constraint (thus
you could use a second statement in the same transaction to remove the
related rows). If you leave it as initially immediate, then you can use
SET CONSTRAINTS to make it temporarily deferred.

Also, the schema you gave should not prevent you from removing rows whose
referencing column is NULL, which is potentially useful for some people.

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Benjamin Krajmalnik 2006-07-24 16:25:37 Re: Unexplained growth of tables
Previous Message Richard Chen 2006-07-24 15:47:03 How to specify alternative locations for postgresql.{key,crt} files?