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é
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
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, ...);
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 :
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 ..
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
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 !
Partager