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 22:58:09
Message-ID: pu7jj6ffni.fsf@srv.protecting.net (view raw or flat)
Thread:
Lists: pgsql-de-allgemein
In article <20050413201724(dot)62db7411(dot)vortex25(at)gmx(dot)de>,
Vortex <vortex25(at)gmx(dot)de> writes:

> On 13 Apr 2005 18:19:42 +0200
> Harald Fuchs <use_reply_to(at)protecting(dot)net> wrote:

>> Etwas _zu_ elegant für meinen Geschmack ;-)
>> Adjazenzabfragen sollten einen Index verwenden können
> Hm, darüber habe ich mir in der Tat auch gerade
> Gedanken gemacht.

>> 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

> Hm, abgesehen von dem INDEX ist das ja eigentlich genau das was ich
> jetzt schon mache. Auch diesen VIEW verwende ich so. Allerdings verstehe
> ich das mit dem Index gerade nicht ganz. Ich muß aber auch zugeben,
> daß ich eigentlich überhaupt nicht wirklich weiß, was in einem
> View mit einem Index passiert.

> Ist es so, daß die äußere WHERE Bedinung einfach nach innen
> an die beiden SELECTS durchgereicht wird?

Ja.  Ein VIEW ist eigentlich nichts anderes als ein gespeicherter
SELECT-Ausdruck, und PostgreSQL ist "schlau" genug, das WHERE aus dem
VIEW in die beiden SELECTs herunterzuziehen.

> Aber müsste ich dann
> nicht auch noch einen einzelnen Index für die Spalte "a" generieren?

Nein, weil Du bereits einen PRIMARY KEY (also einen UNIQUE INDEX) auf
die Kombination aus a und b hast.  Jeder kombinierte Index ist auch
für Abfragen anwendbar, die einen "leftmost prefix" der betreffenden
Spalten verwenden.


In response to

pgsql-de-allgemein by date

Next:From: Peter EisentrautDate: 2005-04-14 07:18:39
Subject: Re: Constraints bei Dumpimport
Previous:From: Markus BertheauDate: 2005-04-13 18:52:26
Subject: Re: Constraints bei Dumpimport

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