| 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: | Whole Thread | Raw Message | 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 |