|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Ahmed MedWebmaster Inscription : mai 2009 Messages : 142 ![]() |
Bonjour tout le monde,
Voila je doit faire un historique des enregistrements de deux tables lier, chaque fois que je fait un update ou delete ou insert je doit copier les valeurs modifier(supprimer ou inserer) dans des tables identique aux table principe(les meme champs),vous trouverez on piece joint une image avec le shema de mes tables. j'ai ajouter un champ indice pour recuperer l'historique. Mon problem c'est que quand j'ajoute un enregistrement dans la table :CopieTableB (voir l'image) avec un ID_attA et ID_attB existant deja mais avec un nouveau indice il m'affiche un erreur de violation de contraint unique. Je sollicite votre aide et j'attend des propositions sur mon shema des tables si je doit enleve une attribue ou faire des modif. Merci d'avance et je suis disponible pour plus d'explication PS: je ne veut pas utiliser des trigger(tout les actions(insert,update,delete) je doit les faire en code vb.net). |
|
|
00
|
|
|
#2 |
![]() ![]() |
Il faut inclure vos indices dans vos clefs primaires des tables de copie.
Ne pas utiliser de triggers est une erreur.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#3 | ||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Bonjour,
Vous avez une table A (parent table) et vous voudriez être capable à tout moment de lister toute modification faite sur cette table (update/delete). Vous avez une table B (child table) et vous voudriez être capable à tout moment de lister toute modification faite sur cette table (update/delete). Voici quelques remarques (a) Comme l'integrité est assurée dans les tables d'origine, il me semble qu'il ne faut pas reproduire ces mêmes contraintes dans les tables copies (b) vous ne devriez pas definir les mêmes unique keys dans les tables copies que celles qui existent dans les tables d'origine. Pensez un peu à vos "requirements" techniques. Vous voulez historiser tous les updates dans la table A (et B). Deux updates d'un record unique dans la table A (ou B) peuvent avoir lieu à tout moment ce qui va générer deux inserts dans les tables copies; ces inserts vont être rejetés si vous implémentez les mêmes unique keys dans les tables copies (c) vous pouvez ne pas historiser les inserts; en effet un record présent dans la table A et non présent dans la table copie A veut dire que ce record n'a jamais été mis à jour. (d) au lieu d'ajouter un champ indice ajouter plutot une clé primaire basée sur une séquence et donnez lui un nom parlant. Au passage, cette clé primaire (ou le champs indice) sont des "meaningless keys" c'est à dire qu'elles ne servent pas grand chose toutes seules lors d'un select sur l'historique Code :
Mohamed Houri |
||
|
|
10
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Ahmed MedWebmaster Inscription : mai 2009 Messages : 142 ![]() |
C'est ce que je viens de faire , j'ai supprimer les clé primaire des tables copietableA et copierTableB(ID_attCA,ID_attCB) et j'ai met l'indice comme cle primaire dans ces deux table mais j'ai toujour la meme erreur.
Je sais que c'est plus facil de faire des trigger mais le probleme que j'ai c'est que j'ai pas le droit d'utiliser un insert(CopieTableB) chaque fois que je fait un update(TableB) ,c'est a dire (PS j'ai deux button A pour inserer ou modifier dans la table A et Button B pour la table B et je peut clicker plusieurs fois sur le button B avant de clicker sur le button A) J'ouvre ma page vb.net on mode Ajout d'un nouveau enrregistrement dans la table A(indice=1): je peut creer autant d'enregistrement sur la table B et faire en meme temps un copier vers la table CopieTableB ,mais si je veux modifier un enregistrement dans la table B, je ne doit pas faire une insertion dans la table copieTableB car l'indice est toujour le meme dans la table A je doit juste faire un update dans les deux table (principe et la copier de B),apres ca, je valide et j'enregistre dans la table A ainsi que la CopieTableA. J'ouvre ma page vb.net on mode modification d'un enregistrement de la table A (indice=2 j'increment l'indice):si je fais une modification d'un enregistrement deja existant de la table B je doit l'inserer dans la table copieTableB car l'indice =2(c'est a ce stade que il m'affiche l'erreur de violation de contraint unique) mais si je fait une modification apres la premier je doit juste le modifier dans la table copieTableB car indice deja existant. Je ne sais pas si un trigger peut faire un test pour savoir a quel moment doit faire un insert ou update dans la table copieTableB (j'ai jamais fait des trigger donc faible),mais si c'est possible je suis interesser.J'espere que j'ai bien explique mon cas
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com