X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id 81A26D9933 for ; Tue, 27 Sep 2005 12:01:32 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 30718-03 for ; Tue, 27 Sep 2005 15:01:27 +0000 (GMT) Received: from svr4.postgresql.org (svr4.postgresql.org [66.98.251.159]) by svr1.postgresql.org (Postfix) with ESMTP id 2C6C8D98E3 for ; Tue, 27 Sep 2005 12:01:23 -0300 (ADT) Received: from website.brandywine.com (mailcheck.brandywine.com [146.145.113.9]) by svr4.postgresql.org (Postfix) with ESMTP id 01C755AF6A9 for ; Tue, 27 Sep 2005 15:01:22 +0000 (GMT) X-eSCM-MailFrom: Received: from BAM_EXCHANGE (10.1.0.100) by website.brandywine.com (10.1.0.9); Tue, 27 September 2005 11:03:55 -0400 Received: from [10.1.0.60] (gen-wayne [10.1.0.60]) by bam_exchange.brandywine.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2653.13) id R6ZYXV26; Tue, 27 Sep 2005 11:01:37 -0400 Message-ID: <43395F1F.4070101@brandywine.com> Date: Tue, 27 Sep 2005 11:02:55 -0400 From: Daryl Richter Reply-To: daryl@brandywine.com Organization: Brandywine Asset Management User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Axel.Rau@Chaos1.DE Cc: mike@fuhr.org, pgsql-sql@postgresql.org Subject: Re: Updating cidr column with network operator References: <413a156ac3889b31bc079d099a110814@Chaos1.DE> In-Reply-To: <413a156ac3889b31bc079d099a110814@Chaos1.DE> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0 required=5 tests=[none] X-Spam-Level: X-Archive-Number: 200509/269 X-Sequence-Number: 22816 Axel.Rau@Chaos1.DE wrote: > > Am 27.09.2005 um 16:02 schrieb Daryl Richter: > > > >>>An attribute is redundant if it repeats a fact that can be learned >>>without it. If one table contains IP addresses and another contains >>>networks, then you can associate IP addresses and networks with a >>>join of the two tables; indeed, this is how the "fix the network >>>column" update works. Having a network column in the address table >>>simply repeats what could be learned through the join. >>> >>> >> >>I agree with Michael here. I think the fundamental problem with your >>schema is that it is possible to have contradictory data between the >>network and address table, always a bad situation. >> >>I would replace network.id with a serial type value and make the cidr a >>separate column, for example: >> >>CREATE TABLE network ( >> id int not null PRIMARY KEY, >> address cidr not null, >> attr1 varchar(10) null >>); >> >>CREATE TABLE address ( >> id inet PRIMARY KEY, >> network int NOT NULL >> REFERENCES network >>); >> >> > > I agree with Michael too, but I understand him differently: What he says is: > > "Get rid of the redundancy", > which means to me: > "remove the fk from address to network completly". > The attribute "network" is not realy needed because we can always join > address.id << network.id > This reduces the necessary logic to keep things consistent. I still can have > > my cascaded delete in network, have to do it with a trigger. > I'm currently looking at performance issues. > > Introducing a synthetic pk in network does not really make things easier. > Instead I introduced an insert/update trigger which prevents from overlaps > in network (which is not as a matter of course for cidr columns, I have > learnt): > Ok, I guess, but isn't tit true now that you can insert a new address row which doesn't belong to any valid network?? > CREATE OR REPLACE FUNCTION dd.ids_network_update_insert_check() RETURNS > TRIGGER AS $$ > BEGIN -- check if new net overlapps with existing one > PERFORM N.id FROM network N WHERE NEW.id << N.id OR NEW.id >> N.id; > IF FOUND THEN > RAISE EXCEPTION '?Attempt to insert overlapping network %', > NEW.id; > RETURN NULL; > END IF; > RETURN NEW; > END; > $$ LANGUAGE 'plpgsql'; > > Axel > > Axel Rau, Frankfurt, Germany +49-69-951418-0 -- Daryl "We want great men who, when fortune frowns, will not be discouraged." -- Colonel Henry Knox, 1776