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 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
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
From | Date | Subject | |
---|---|---|---|
Next Message | Andreas Seltenreich | 2005-04-13 16:31:38 | Re: Netzwerkstrukturen im relationalen Modell |
Previous Message | Vortex | 2005-04-13 14:20:26 | Re: Netzwerkstrukturen im relationalen Modell |