PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 24/05/2016 17:34:41

tolosan31
Membre

probléme de clé étrangére

bonjour,

j'ai un problème de déclaration de clé étrangère entre 2 tables. que je n'arrive pas à résoudre
j'ai 3 tables :
Techantillons (id-ech(PK) , id_espece , id_organe )
Tespeces (id_espece (PK), nom_especes )
Torganes ( id organe , id_espece, nom_organe ) avec une PK sur (id_organe,id_espece ) car les organes sont spécifiques à une espèce

Pour la clé étrangére entre le Techantillons et Tespeces (sur id_espece ) pas de souci.
Par contre dans la  table Techantillons  je voudrais pouvoir ajouter une contrainte supplémentaire de reference sur id_organe avec la table Torganes (id_organe)

mais quand je creé la clé étrangère dans la table Techantillons  sur  T_espece (id organe) , j'ai un message d'erreur :
ERREUR:  il n'existe aucune contrainte unique correspondant aux clés données pour la
table « organe » référencée .
ce qui me parait logique puisque ayant une  PK sur (id_organe,id_espece )  id_organe n'est effectivement pas unique

y'a t il un moyen de contourné cela pour éviter cette erreur ? ou mon modèle n'est probablement pas bon ?

merci

Hors ligne

#2 24/05/2016 17:52:58

rjuju
Administrateur

Re : probléme de clé étrangére

Bonjour,


Tout dépend de comment vous voulez modéliser les choses. Est-ce qu'un organe de même nom pour deux espèce différentes est un même organe ou pas (et donc un même id_organe) ? Si c'est le cas, et ça me semblerait le plus logique, il faut corriger votre table Torganes et ajouter une table définissant les organes présents par espèce. Sinon, il vous faut juste déclarer une clé étrangère sur (id_organe, id_espece).

Hors ligne

#3 25/05/2016 16:56:46

tolosan31
Membre

Re : probléme de clé étrangére

bonjour,

l'idée serait que ma table organe fasse office de table organe par espèce,
j'ai réussi à déclarer une clé étrangère sur (id_organe, id_espece)
et cala fonctionne comme souhaité moyennant un remplissage de la table organe  en cohérence avec ceux déjà présent dans la table echantillon  , ce qui est le but recherché .

merci de votre conseil

Hors ligne

Pied de page des forums