Slt, je suis en train d'essayer de faire un héritage avec PostgreSQL mais je rencontre un problème.
Je crées un table "mère" Personnes (contenant id_personne + autres champs). Je fais hériter une table nommée adhérents et une autre nommée touristes.
je fais ensuite une table familles qui a une clé étrangère id_chef_famille référençant l'id d'un adhérent (et surtout pas d'un touriste). Seulement, l'id d’adhérent est celui de la table Personne. Il ne m'est pas possible de faire :
Je suis obligé de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE Familles ( id_famille integer NOT NULL, id_chef_famille integer NOT NULL, CONSTRAINT "Familles_pkey" PRIMARY KEY (id_famille), CONSTRAINT "Famille_to_Adherents_id_personne" FOREIGN KEY (id_chef_famille) REFERENCES Adherents(id_personne), );
je me suis dit, ce n'est pas un problème il suffira d'ajouter un trigger qui vérifiera que l'id est bien l'id d'un adhérent mais pas d'un touriste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE Familles ( id_famille integer NOT NULL, id_chef_famille integer NOT NULL, CONSTRAINT "Familles_pkey" PRIMARY KEY (id_famille), CONSTRAINT "Famille_to_Adherents_id_personne" FOREIGN KEY (id_chef_famille) REFERENCES Personnes(id_personne), );
J'ajoute donc mon adhérent :
Jusque là tout va bien mais lorsque j'ajoute la nouvelle famille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INSERT INTO adherents (id_personne, nom, prenom, date_naissance, num_licence, num_secu_sociale, statut) VALUES (1, 'Tavernier', 'Bertran', '1961-06-01', 111, 111111, 'Directeur');
Il me met une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INSERT INTO familles (id_famille, id_chef_famille, code_postal, ville, pays, num_mobile, num_fixe, email, bateau1, bateau2) VALUES (1, 1, 31400, 'Toulouse', 'France', '0612345678', '0412345678', 'bigboss@gmail.com', 2, NULL);
Alors que quand je parcours mes tables, il y a bien mon adhérent d'id_personne = 1 dans personnes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ERREUR: une instruction insert ou update sur la table « familles » viole la contrainte de clé étrangère « Famille_to_Adherents_id_personne » DÉTAIL : La clé (id_chef_famille)=(1) n'est pas présente dans la table « personnes ».
Comment résoudre le problème ?
J'ai essayé de mettre comme contrainte à Famille :
mais je reçois une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CONSTRAINT "Famille_to_Adherents_id_personne" FOREIGN KEY (id_chef_famille) REFERENCES Adherents(id_personne)
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ERREUR: il n'existe aucune contrainte unique correspondant aux clés données pour la table « adherents » référencée État SQL :42830
Cordialement.
Partager