aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 17 nov. 2005 à 15:02
salut
premiere chose, tu dis que tu travaille sur une grosse base de données.
je ne sais pas pas ce que tu stocke, mais pour SQL server, j'estime que si tu n'a pas plusieurs dizaines voire centaines de giga de données, ca n'est pas une "grosse" base... en tout ca ca ne devrait pas t'empecher de créer des contraintes d'intégrité referentielles... essaie peut etre de preciser ton probleme pour la création de ces clef, le probleme vient sans doute d'ailleurs.
sinon pour ce qui est de ton probleme de trigger, tu fait un trigger de type ON UPDATE,
pour faire un controle lors de la suppression d'une ligne dans la table, que tu devrais faire un type INSTEAD OF DELETE.
cs_kurky
Messages postés111Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention27 avril 2010 17 nov. 2005 à 19:20
Ma base fait pres de 80Mo et contient de nombreuses relations.
Je pense que c'est toutes ces relations ensembles qui font qu'il y a des conflits pour la création de certaines.
Je te dirais exactement quel est le message d'erreur demain.
Pour ce qui est du trigger, je connais la commande ON DELETE mais, justement sur un delete d'un employé par exemple, il ne faut pas qu'il soit supprimé si la reference de cet employé existe dans un test. Et c'est ca (empecher le delete de l'employé) que je ne c pas faire.
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 18 nov. 2005 à 11:04
tu as peut etre des conflits pour créer des relations avec l'option CASCADE
dans ce cas en effet tu ne peut pas créer de 'boucle' de suppression. par exemple si tu as deux tables, tu ne peux pas specifier un delete cascade de la table A vers la table B, et un autre de la B vers la A.
idem avec trois tables.
car sinon le systeme ferait une boucle infinie
donc dans ce cas il faut gerer ca par un trigger. tu pourrai avoir le meme probleme (un trigger A declenche un trigger B, qui redeclenche le A...) sauf que dans le cas des triggers, tu peux définir le nombre maximum d'imbrication (avec la variable NESTED_TRIGGER de memoire...) par defaut je crois meme qu'il est a 0 : un trigger ne peut pas en declencher un autre !)
et pour faire ca avec un trigger ?
tu fais un trigger INSTEAD OF DELETE, et si un enregistrement corrspondant a la ligne supprimee existe dans une autre table, tu annule la suppression en faisant un ROLLBACK (et eventuellement un RAISE ERROR pour spécifier a ton application que la suppression n'a pas eu lieu)
voici le lien vers les MSDN sur les triggers, il y a un exemple de trigger pour le controle d'integrité :