Bonjour à tous !
Je m'en remets à vous, car malgré mes recherches, je reste bloquée face à un problème de clé étrangère pointant sur une clé primaire de type SERIAL !
En fait voilà, rien ne vaut un exemple simplifié :
J'ai une table projet dont la clé primaire id_projet est de type SERIAL.
J'ai une table objet dont la clé primaire id_objet est de type SERIAL.
Un projet contient plusieurs objets.
Un objet peut appartenir à 1 ou plusieurs projets, ainsi j'ai une table supplémentaire Fait_partie_projet dont la clé primaire est faite de deux clés étrangères :
id_projet INTEGER REFERENCES projet (id_projet)
et :
id_objet INTEGER REFERENCES objet (id_objet)
Je connais la fonction currval() pour utiliser la valeur actuelle d'une séquence.
Le fait est qu'il est tout à fait possible d'insérer un premier tuple dans projet, pour un projet x par exemple. Ensuite, de commencer à remplir les tables objet et fait_partie_projet dans lesquelles en effet je peux utiliser currval() pour récupérer la clé primaire de ma table projet. Mais ensuite, si un nouveau projet y est déclaré, faisant incrémenter la clé primaire, comment faire référence au projet x (ou n'importe quel autre projet inséré auparavant) dans ma table fait_partie_projet ?!
J'ai bien pensé aussi à faire une fonction (en tant que débutante ceci est un peu obscure pour moi cependant) en utilisant un "RETURNING (id_projet) AS monprojet" mais je me suis dit que le problème serait le même : Si j'insère un nouveau projet, la variable monprojet contiendra alors la nouvelle valeur de clé primaire... Et donc comment faire référence à d'anciennes clés primaires....
Bref, au secours !
N'hésitez pas à me demander des précisions si je n'ai pas été claire !
Merci par avance à ceux qui me liront et prendront le temps de m'aiguiller !
Partager