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

Re: [pgsql-fr-generale] Pas de contrainte référentielle vers un champ non-UNIQUE :-(

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: Stephane Bortzmeyer <bortzmeyer(at)nic(dot)fr>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: [pgsql-fr-generale] Pas de contrainte référentielle vers un champ non-UNIQUE :-(
Date: 2008-09-08 15:42:25
Message-ID: 48C547E1.4010609@lelarge.info (view raw or flat)
Thread:
Lists: pgsql-fr-generale
Stephane Bortzmeyer a écrit :
> J'essaie de mettre une contrainte référentielle mais le champ visé n'a
> pas été déclaré comme UNIQUE :
> 
> essais=> CREATE TABLE Foo(name TEXT NOT NULL);
> CREATE TABLE
> essais=> CREATE TABLE Bar(truc TEXT, machin TEXT REFERENCES Foo(name));
> ERROR:  there is no unique constraint matching given keys for referenced table "foo"
> 
> [Si Foo(name) est déclaré UNIQUE, cela passe.]
> 
> Première question : pourquoi PostgreSQL 8.3 impose t-il cette
> contrainte supplémentaire qui ne me semble pas logique ?
> 

Pourquoi contrainte supplémentaire ? une référence, c'est une clé
étrangère. L'idée de la clé étrangère, c'est qu'*un* élément est lié à
*un ou plusieurs* autres. Ce premier élément doit être dissociable. Et
il doit être dissociable pour que les règles ON UPDATE et ON DELETE des
clés étrangères puissent fonctionner.

Mais si je comprends bien, tu veux faire un système où un ou plusieurs
éléments d'un table sont liés à un ou plusieurs éléments d'une table Y
(du n-n à la place du 1-n de PostgreSQL).

> Deuxième question : quel contournement utiliser à part abandonner la
> sécurité que me fournit REFERENCES ?
> 

Il va falloir que tu crées un système de triggers qui fera la même
chose, mais qui n'implémentera pas ON UPDATE et ON DELETE.


-- 
Guillaume.
 http://www.postgresqlfr.org
 http://dalibo.com

In response to

pgsql-fr-generale by date

Next:From: Sébastien LardièreDate: 2008-09-08 15:44:25
Subject: Re: Pas de contrainte référentielle vers un champ non-UNIQUE :-(
Previous:From: Jean-Samuel ReynaudDate: 2008-09-08 15:16:30
Subject: Re: Pas de contrainte référentielle vers un champ non-UNIQUE :-(

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