|
Publicité ' | ||||||||||||||||||||||||
|
|
#61 | |
|
Membre éprouvé
![]() olivier pittonÉtudiant Inscription : juin 2012 Messages : 210 ![]() |
Bien que la solution proposée est affreuse, elle a le mérite de fonctionner. Pourquoi ne pas faire un mysqldump + source, en changeant le nom de la BD. Cela t'évites tous les conflits de PRIMARY KEY etc...
Mais comme il a été dit précédemment, il faudrait voir avec tes supérieurs comment changer ce fonctionnement. Tu ne résous pas le problème de tes duplicats de BD, et tu ajoutes une solution crade / complexe pour masquer cela. Je pense que le mieux serait de garder une unique base de données. Tu peux y ajouter des merge tables pour les grosses tables de ta BD, afin de splitter un peu le tout. Citation:
|
|
|
|
00
|
|
|
#62 |
Inscription : décembre 2011 Messages : 257 ![]() |
Au fait, les BDD sont sur des bancs de tests, et les bancs peuvent ne pas être connectés au réseau (et en cas de tests, s'il y a une panne réseau les tests sont interrompus ...). C'est pour cela que l'on garde les BDD en local sur les bancs de tests.
On voudraient cependant avoir une BDD centralisée regroupant les lignes des BDD locales, pour cela : 1/ Importation des dernier back up des BDD locales sur le PC centralisés (bdd_local1, bdd_local2) ... 2/ Copie des lignes des bdd locals dans la BDD CENTRALISEE, c'est ici que ça bloque parce que je suis obligé de copier le champs clés primaire apparament, ce qui provoque donc un erreur de duplication 3/ On aimerai réaliser le tout une fois par semaine par exemple ... J'ai donc pensé à faire un script batch qui appele ensuite un script sql pour la manipulation des requêtes ... Merci beaucoup ! |
|
|
00
|
|
|
#63 |
![]() ![]() |
On reste sur le même principe que j'avais décrit... quelques pages avant !
La difficulté que tu rencontres est que, pour une table donnée existant dans toutes les BDD puisqu'elles ont la même structure, le même identifiant peut être trouvé dans toutes les BDD. Lors de l'importation, il est impossible d'importer deux fois la même clé primaire. Tu as 2 possibilités... 1) Soit il doit y avoir correspondance entre les identifiants de la BDD consolidée et des BDD décentralisées. Il faut alors modifier la structure de la BDD centralisée en ajoutant dans les tables une colonne identifiant la BDD d'où provient la ligne. Exemple : Dans BDD1.table1.t1_id, qui est aussi la colonne définissant la clé primaire de la table, tu as l'identifiant 1. Idem dans BDD2.table1.t1_id, la même valeur 1. Il faut que dans la base de données consolidée, BDD0.table1 ait une colonne t1_BDD qui identifie le numéro de la BDD d'où provient chaque ligne, et que la clé primaire de cette table soit formée du couple {t1_bdd, t1_id}. Ainsi, dans BDD0.table1, tu pourras avoir les lignes suivantes : t1_BDD, t1_id 1, 1 2, 1 3, 1 ... Le même id, mais pas la même clé primaire. Lors de l'importation des données, ton programme doit valoriser cette nouvelle colonne en fonction de la BDD que tu importes. 2) Soit tu n'as pas besoin de conserver les identifiants des BDD décentralisées. Tu peux alors te contenter d'un identifiant auto-incrémenté dans la BDD centralisée mais : - attention à la cohérence des clés étrangères, ce qui complique les requêtes d'importation ! - tu dois trouver une autre clé candidate dans chaque table pour pouvoir n'importer que les lignes qui ne l'ont pas encore été et ce n'est pas toujours possible ! Je préconise donc plutôt la première solution qui permet de conserver une cohérence entre la BDD consolidée et les BDD décentralisées.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|
00
|
|
|
#64 |
Inscription : décembre 2011 Messages : 257 ![]() |
Parcontre, étant donnée que les BDD sont spécifiques au bancs de tests, on avait penser à introduire une colonne avec le bancs de tests en question (donc non incrémentés ...), dans certaines tables ce champs ne sera pas nécessaire, du coup j'aurai toujours le problème pour copier les données si l'on a déjà la même clés primaire existante sur la BDD centralisés! Avez vous une idée pour éviter les doublons (éviter d'entrer une valeur pour les champs ID avec la requête que j'ai posté ?).
Merci beaucoup! |
|
|
00
|
|
|
#65 | ||||||||
![]() ![]() |
Soit la table fictive suivante figurant dans toutes tes BDD :
Code :
Code :
Quand tu importes les données de la BDD1, tu fais ce genre de requête : Code :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
||||||||
|
10
|
|
|
#66 |
Inscription : décembre 2011 Messages : 257 ![]() |
OK, merci !
Dans certaines tables, la clés primaire est constitué de plusieurs colonnes : Code :
PRIMARY KEY (`EQUIPMENT_PN`,`EQUIPMENT_SN`,`EQUIPMENT_EC`) Mais dans la majorité des tables, j'ai qu'un seul champs table_id dans PRIMARY KEY. Je n'aurai pas de doublons lors des copies avec INSERT INTO ? Et je ne veux pas que le champs ID s'incrémente, puisque j'ajouterai ce champs sur les bases locales, les utilisateurs taperont ensuite le numéro du bancs, donc là ca coince ?! Sachant que le numéro du bancs est actuellement remplis sur une table, on pourraient peut être le copier sur toutes sur les autre tables (dans la colonne bdd_id) automatiquement afin de ne pas obliger les utilisateurs à le renseigner à chaque fois car il ne change pas dans la BDD locale ... Merci beaucoup !!! |
|
|
00
|
|
|
#67 | |||||
![]() ![]() |
Citation:
Citation:
Citation:
Citation:
Si tu as une BDD par banc, ça ne me semble pas utile d'ajouter cette colonne dans les BDD locales. Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|||||
|
10
|
|
|
#68 | |
Inscription : décembre 2011 Messages : 257 ![]() |
Citation:
Et merci beaucoup ! |
|
|
|
00
|
|
|
#69 | ||
Inscription : décembre 2011 Messages : 257 ![]() |
Apparemment pour les clés primaires ça fonctionne !(en tapant les requêtes deux à deux). Parcontre la requête d'insertion ne passe pas :
Code :
C'est peut être du au fait qu'il n'y a pas de valeurs pour l'instant à t1.bdd? Merci!! |
||
|
|
00
|
|
|
#70 |
![]() ![]() |
Pourquoi avoir ajouté des parenthèses dans le SELECT ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|
00
|
|
|
#71 |
Inscription : décembre 2011 Messages : 257 ![]() |
Exact, maintenant j'ai une erreur du type 'DATA TRUNCATED' pour la colonne calibration_tolerance (données du type 1.25) ?
Merci! |
|
|
00
|
|
|
#72 | |||||
![]() ![]() |
Je n'avais pas regardé en détail ta requête mais elle est fausse !
Citation:
Code :
J'ai l'impression que tu te précipites un peu trop dans ce que tu fais et dans l'écriture des messages que tu postes. Essaie un peu de comprendre l'aide qu'on t'apporte car ça devient lassant de reprendre tes erreurs évidentes ! Avant de répondre mon message #63, j'ai pris le temps de relire toute la discussion pour me remémorer le problème et retrouver les solutions que j'avais suggérées.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|||||
|
00
|
|
|
#73 | ||
Inscription : décembre 2011 Messages : 257 ![]() |
C'est OK pour la commande, par contre j'avais une erreur DUPLICATE KEY (pour un 2éme enregistrements ou les clés CALIBRATION_id sont identiques MAIS la colonne t1_bdd change). Je me suis donc aperçu que la clés primaire n'est pas constituée des deux champs ! Pourtant j'ai bien tapé les 4 requêtes de ton postes précédent:
C'est la 1ére requête qui passe pas: Code :
Code :
Incorrect TABLE definition; there can be only one auto COLUMN AND it must be defined AS a KEY |
||
|
|
00
|
|
|
#74 | ||
![]() ![]() |
OK il faut alors redéfinir la colonne pour supprimer l'auto-incrément :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
||
|
00
|
|
|
#75 |
Inscription : décembre 2011 Messages : 257 ![]() |
Ok , je vais m'y concentrer merci ! Je dois proposer une autre solution ... :
Chaque bancs de tests dispose de sa propre BDD (même structure) on voudrait avoir une BDD regroupant toutes les BDD des bancs (MAJ fréquente car après çela je développerai une application d'exploitation des BDD depuis la BDD centralisée). A savoir que l'on peut pas mettre les BDD en réseau car les bancs peuvent être déconnectés du réseau et ils doivent toujours pouvoir faire les tests de produits ... J'ai donc pensé à dupliquer les BDD sur chaque bancs (back up et importation planifiée) et ainsi utiliser une réplication vers le serveur centralisé (au moins la MAJ sera automatisée pour ce cas). Les bancs pourront continués à fonctionner en cas de non accès au réseau ainsi. Avez vous une idée ? |
|
|
00
|
|
|
#76 |
![]() ![]() |
Euh... c'est toujours la même question depuis le début de cette discussion !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|
00
|
|
|
#77 |
Inscription : décembre 2011 Messages : 257 ![]() |
C'est pour rappeler le sujet ... J'aurai besoin d'une autre solution (j'avais pensé à celle là : duplication sur chaque bancs et réplication sur un serveur maitre). Ça vous semble possible, et judicieux surtout ? Il faut que je trouve la solution la plus adéquate à ce problème.
Merci! |
|
|
00
|
|
|
#78 |
![]() ![]() |
Je ne comprends pas l'intérêt e dupliquer toutes les BDD de tous les bancs sur chaque banc.
Chaque banc a t-il besoin des données des autres bancs ? Sinon, le principe est le même que celui énoncé jusque là pour importer les BDD des bancs vers la BDD consolidée. C'est juste à multiplier et à paramétrer pour chaque banc.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|
00
|
|
|
#79 |
Inscription : décembre 2011 Messages : 257 ![]() |
Au fait, je veux avoir la BDD de chaque bancs sur mon serveur pour ensuite exploiter les données des bancs depuis cette unique BDD. Aprés la solution du script, je voulais savoir s'il a une autre solution (réplication maitre esclave ... en prenant en compte que les applications doivent communiquer en local avec la BDD)
|
|
|
00
|
|
|
#80 |
![]() ![]() |
Je n'ai jamais fait de réplication de BDD MySQL mais je suppose qu'elle va être quelque peu perturbée si une BDD n'est pas connectée.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|
00
|
Copyright © 2000-2013 - www.developpez.com