Bonjour,

Nous travaillons sur des bases utilisant un modèle en étoile et nous abusons donc de foreign key pour maintenir l’intégrité ce celui-ci.
Toutefois force est de constater que certaines clef étrangères nous posent problème , par exemple :
Mettons une table d'action et une table d'activité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE actions(id INT UNSIGNED PRIMARY KEY  AUTO_INCREMENT,
id_contact INT UNSIGNED,
action_time DATETIME,
id_activite INT UNSIGNED,
 
foreign key (id_activite) reference activites(id),
foreign key (id_contact) reference contacts(id),
UNIQUE(id_contact,id_activite, action_time));
 
CREATE TABLE activites(id INT UNSIGNED PRIMARY KEY ,
nom TEXT,
 ...);
La table d'action est remplie par nos soins, la table d'activités est quand )à elle remplie à l'aide des informations que nous fournit notre client
Notre historique d'action remonte trop loin dans le temps et nous ne possédons pas un historique aussi avancé des activités pour ce client, ainsi nous avons été "contraint" de mettre en place le trigger suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
CREATE TRIGGER  maj_activite BEFORE INSERT ON actions    
FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT * FROM activites WHERE NEW.id_activite = activites.id)
AND NEW.id_activite/NEW.id_activite IS NOT NULL
THEN INSERT INTO activites VALUES (NEW.id_activites, ...)
END IF;
END
Dorénavant , quelque soit l'actions qu'on tente d’insérer dans la table d'actions, si il ne trouve pas d'activité reférente , il la créera avant d’insérer le tuple dans la table d'actions ..
J'ai vraiment l'impression qu'on perds l’intérêt de la clef étrangère en faisant ça ..

Qu'en pensez vous ?

Merci d'avance pour tous vos conseils !