clé primaire/clé étrangère
Bonjour,
j'ai un petit problème fondamentale de SQL:
d'abord les tables:
Code:
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; |
les tables ont ete créées sans problème
valeurs de t1 (la clé primaire est bien 1,3,1)
Code:
1 2 3 4
|
np | nt | na
----+----+---
3 | 1 | 1 |
losrque que je veux remplir t2 avec:
Code:
1 2
|
INSERT INTO t2 VALUES (DEFAULT,3,1,1); |
je recois le message d'erreur suivant:
Code:
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é,
clé primaire / clé étrangère
tu as raison pour le message d'erreur il s'agit bien de:
Code:
1 2
| ERREUR: Une instruction INSERT ou UPDATE sur la TABLE t2 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 |
même en spécifiant le nom des champs avec:
Code:
INSERT INTO t2 (nq,np,nt,na) VALUES (DEFAULT,3,1,1);
j'obtiens le même message d'erreur.