Eviter les doublons dans une table

Eviter les doublons dans une table - SQL/NoSQL - Programmation

Marsh Posté le 21-05-2014 à 09:38:32    

Bonjour,
 
J'ai un petit problème, j'espère trouver de l'aide ici.
 
J'ai deux bases, chacune sur un serveur. Ces deux bases sont identiques, mais il m'en faut 2 pour avoir de la redondance.  
J'ai créé un trigger qui permet, à chaque nouvelle ligne de ces tables, d'ajouter une ligne sur une table distante. Sauf que si je mets en marche les triggers sur mes deux tables, celui-ci va ajouter les mêmes lignes en doubles sur ma table distante.
 
Comment pourrais-je faire pour ne pas avoir de doublons sur ma table distante ?? Créer un autre trigger sur cette table distante en comparant si la ligne qu'on m'envoie n'existe pas déjà ??  
 
merci de votre aide :)

Reply

Marsh Posté le 21-05-2014 à 09:38:32   

Reply

Marsh Posté le 21-05-2014 à 11:25:06    

Si t'es sous Mysql, y'a le mécanisme de réplication : http://dev.mysql.com/doc/refman/5. [...] ation.html
http://libresavoir.org/index.php?t [...] uration%29
 
Ce mécanisme existe d'ailleurs sur d'autres SGBD ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-05-2014 à 12:18:10    

Il faut savoir ce que l'on veut faire en fait :)
2 solutions "manuelles":
Ne pas activer les triggers sur la base distante (aussi simple que ça):
ta base de réplication est "passive",
et tu copies "tout" via tes triggers de toutes tes tables de la base "prod" et ta base de back-up ne fait rien...
 
Soit tu laisses en place tes triggers sur la base de réplication , et ta base de  back up est "attive":
tu ne fais répliquer que les données "entrées et/ou modifiées" des tables "maitres"... ainsi les triggers de ta base de back up "embarquent" comme ceux de la prod.
Ceci implique par contre que si tu fais une modif sur un trigger en prod...tu fasses la même en back-up...
 
3eme solution : lire la doc de rufo lol
 
Guillaume


Message édité par gpl73 le 21-05-2014 à 12:21:16

---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 21-05-2014 à 12:38:23    

Salut à tous,
 
J'ai "bidouillé" autrement.. Je garde mes triggers sur mes deux tables, en remplaçant INSERT INTO par INSERT IGNORE INTO comme requêtes.. Et du coté de ma table distante, j'ai crée une contrainte d'unicité. Ainsi, si cette contrainte d'unicité est violée, l'insertion est ignorée ;)  

Reply

Marsh Posté le 21-05-2014 à 13:24:45    

Et pour les updates et delete, tu fais comment ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-05-2014 à 13:50:46    

Je ne fais jamais de delete dans ce trigger, et pour les dupdates je fais un test préalable pour savoir si ça déjà été mise à jour :)
 

Reply

Marsh Posté le 21-05-2014 à 14:00:26    

:jap:  
Tu as raison ifr38 !
C'est de la bidouille  
:D


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 21-05-2014 à 14:10:50    

oui,
mais ça marche pas encore .. :cry: :cry:

Reply

Marsh Posté le 21-05-2014 à 14:49:47    

Et si t'arrêtais de bidouiller et que tu te mettais à utiliser les outils proposés par ton SGBD ? :whistle:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-05-2014 à 15:34:22    

Finalement mon bidouillage fonctionne à merveille :ange:

Reply

Marsh Posté le 21-05-2014 à 15:34:22   

Reply

Marsh Posté le 21-05-2014 à 15:53:20    

et le jour ou ton second serveur (ou le lien entre ces serveurs) tombe, tes triggers planteront et tu ne pourras plus rien faire dans ta base 1  
 
niveau perfs : tu as un allé retour réseau pour aller écrire dans le serveur 2 avant de valider chaque écriture dans serveur 1
 
Si jamais il se passe quel que chose entre la fin de l'exécution du trigger ( écriture dans la base 2) et l'écriture dans la base 1, gener u nautre trigger de 1 qui interdit l'ecriture  : tes bases sont désynchronisées
 
bref, que du bonheur


Message édité par flo850 le 21-05-2014 à 15:53:48

---------------

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed