Bonjour,
j'ai un petit problème fondamentale de SQL:
d'abord les tables:
les tables ont ete créées sans problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 CREATE TABLE t1( np int REFERENCES autre_table (champs), nt int REFERENCES autre_table (champs), na SERIAL UNIQUE NOT NULL, PRIMARY KEY (na,np,nt) ) WITH OIDS; CREATE TABLE t3( nq SERIAL UNIQUE NOT NULL, np int NOT NULL, nt int NOT NULL, na int NOT NULL, FOREIGN KEY (na,np,nt) REFERENCES t1 (na,np,nt)[/INDENT] ) WITH OIDS;
valeurs de t1 (la clé primaire est bien 1,3,1)
losrque que je veux remplir t2 avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 np | nt | na ----+----+--- 3 | 1 | 1
je recois le message d'erreur suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INSERT INTO t2 VALUES (DEFAULT,3,1,1);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ERREUR: Une instruction insert ou update sur la table t1 viole la contrainte de clé étrangère t1_fkey DÉTAIL : La clé (na,np,nt)=(1,3,1) n est pas présente dans la table t1
je ne comprends pas ou se trouve le probleme:
1- une clé etrangère fait bien référence à une clé primaire (multiple)
2- pour ne pas faire référence à une clé primaire elle même clé étrangère, il y a dans cette clé primaire multiple (de t1) le champs "na" qui n'est pas une référence, qui est unique et non nulle (un index est créé pour na et un autre pour (na,np,nt) ).
Le SGBG (ici postgre) devrait pouvoir la retrouver (?)
comment récupérer (np,nt) sans passer par les tables d'origines? (c'est le but de la manip)
Merci à la communauté,
Partager