Skip site navigation (1) Skip section navigation (2)

Re: Netzwerkstrukturen im relationalen Modell

From: Harald Fuchs <use_reply_to(at)protecting(dot)net>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Netzwerkstrukturen im relationalen Modell
Date: 2005-04-13 16:19:42
Message-ID: pubr8ify3l.fsf@srv.protecting.net (view raw or flat)
Thread:
Lists: pgsql-de-allgemein
In article <20050413110046(dot)48c22bf5(dot)vortex25(at)gmx(dot)de>,
Vortex <vortex25(at)gmx(dot)de> writes:
 
>> create table relation (a int, b int);
>> 
>> create function min(integer, integer) returns integer as
>> 'select CASE WHEN $1 > $2 THEN $2 ELSE $1 END' language 'SQL'
>> IMMUTABLE;
>> 
>> create function max(integer, integer) returns integer as
>> 'select CASE WHEN $1 > $2 THEN $1 ELSE $2 END' language 'SQL'
>> IMMUTABLE;
> Hm, macht min() und max() sowas nicht von Haus aus? Nur müssten
> es halt rows sein. Ich hätte erwartet, daß sowas in der Art:
> min(generate_series($1,$2,$2-$1)) funktioniert. Aber
> generate_series() scheint andere Spalten zu generieren, als
> die aus einer "richtigen" Tabelle :-).

>> create UNIQUE INDEX relation_idx_antisymmetrie
>> ON relation (min(a,b),max(a,b));
> Aber hier wäre der Fall daß ein Objekt mit sich selbst
> verbunden wird, nicht automatisch ausgeschlossen, oder?
--> CHECK a != b ?

>> Elegant genug? :-)
> Ohja, das ist es, das ist es! :-)

Etwas _zu_ elegant für meinen Geschmack ;-)
Adjazenzabfragen sollten einen Index verwenden können

Ich würde stattdessen folgendes machen:
* PRIMARY KEY (a, b)
* CHECK (a < b)
* CREATE INDEX tbl_b_ix ON tbl (b)
* Evtl. ein BEFORE-INSERT-Trigger, der ggf. a und b vertauscht.
  Damit mußt Du Dich um die Reihenfolge nicht selber kümmern
* CREATE VIEW tblv (id, adj) AS
    SELECT a, b FROM tbl
  UNION ALL
    SELECT b, a FROM tbl
  Das vereinfacht Adjazenzabfragen: SELECT adj FROM tblv WHERE id = myID


In response to

Responses

pgsql-de-allgemein by date

Next:From: Andreas SeltenreichDate: 2005-04-13 16:31:38
Subject: Re: Netzwerkstrukturen im relationalen Modell
Previous:From: VortexDate: 2005-04-13 14:20:26
Subject: Re: Netzwerkstrukturen im relationalen Modell

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group