Salut.

J'ai 4 tables (membre, client, ami, utilisateur) qui héritent toutes de la table "contact"
J'ai créée une table "usr_group"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
CREATE TABLE "usr_group" (
	"idgroup" serial,
	"group_name" text,
	PRIMARY key (idgroup)
);
Je veux à présent lier des contacts (quelque soit leur type) à une ou plusieurs entrée de la table usr_group
J'ai donc créé la table

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CREATE TABLE "ctc_group_link" (
	"idgroup" integer not nul,
	"idcontact" integer not nul,
	PRIMARY key (idgroup, idcontact),
	FOREIGN key (idgroup) REFERENCES usr_group(idgroup)
);
Et c'est là tout le problème je n'ai pas trouvé comment placer une FOREIGN KEY permettant de s'assurer que idcontact est bien un contact !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
	FOREIGN key (idcontact) REFERENCES contact(idcontact)
échoue car les un enregistrement dans la table "membre" n'est pas considéré comme un "contact".

La seule solution que j'aie trouvé est de développer une procédure stockée.
Mais c'est franchement pas terrible, car non seulement si demain je créée une nouvelle table fille de "contact" la procédure stockée ne sera alors plus à jour, mais en plus il faut plusieurs procédures stockées pour contrôler l'intégrité dans les deux sens !

Alors je me demande s'il n'y aurait pas moyen de définir une FOREIGN KEY quand même avec une option que je ne n'aurais pas vu !

Comment réglez vous ce problème vous ?