|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() Glen RhodesÉtudiant Inscription : novembre 2009 Messages : 134 ![]() |
Bonjour,
Dans le cadre de mon projet actuel, il m'est demandé de recoder une application qui utilise une base de données MySQL. La base de données en question comporte 120 tables et ce nombre va augmenter légèrement dans la nouvelle version de l'application, toutefois la majeure partie des tables seront identiques. J'ai déjà effectué le modèle Entité-Relation de l'ancienne base sous MySQL Workbench et je suis en train de créer celui de la nouvelle (qui va sans doute évoluer régulièrement au cours du développement). Les données de l'ancienne application doivent être transférées de l'ancienne application vers la nouvelle, je me suis donc dis que j'allais écrire un script de transfert de données. Après réflexion je me suis dis qu'en procédant de cette manière à chaque modification de la nouvelle base j'aurai deux choses à maintenir (script de transfert + schéma entité-relation). Donc je viens vers vous pour solliciter votre expertise : - existe-t-il des outils permettant d'automatiser ce type de transfert? - sinon, si quelqu'un ayant déjà effectué ce genre de travail pouvait me conseiller sur les bonnes pratiques pour ne pas perdre son temps, je lui en serait très reconnaissant. Merci d'avance. Glen. |
|
|
00
|
|
|
#2 | ||||||||
![]() ![]() |
J'ai eu à faire ce travail pour une application de l'INRA.
L'ancien schéma de données n'était pas normalisé et j'ai donc remodélisé complètement les données. J'ai d'abord fait le nouveau schéma puis j'ai importé les données de l'ancien schéma dans le nouveau à coup de requêtes SQL, mais aussi un peu de PHP car certains transferts étaient impossibles ou trop complexes à faire en SQL. Citation:
Citation:
Lors du transfert des données, je me suis aperçu que l'ancien modèle a permis la conservation de données mortes, inexploitables, incohérentes que bien sûr je n'ai pas importées dans la nouvelle BDD. 120 tables, ça commence à faire beaucoup ! Commence par vérifier si le schéma actuel est normalisé et, quitte à le modifier, normalise-le. Tu obtiendras peut-être moins de tables mais de meilleures performances. Ensuite, pour importer les données dans le nouveau schéma, tu commences par les tables sans clé étrangère puis petit à petit tu arrives vers les tables en ayant le plus grand nombre. Et à chaque fois, avec des requêtes de test, tu vérifies que les données à importer sont les mêmes que les données anciennes et si ce n'est pas le cas, tu en cherches la cause. C'est là que tu peux trouver des données mortes. Un petit exemple... Imaginons que tu aies une tables des personnes avec leur adresse, y compris la ville en texte : personne (id, nom, prenom, rue, code_postal, ville) Le nouveau schéma donnera par exemple une table de référence des villes et une clé étrangère dans la table des personnes. personne_prs (prs_id, prs_id_ville, prs_nom, prs_prenom, prs_rue, prs_code_postal) Tu peux remplir la table des villes à partir d'une source fiable, par exemple l'INSEE qui te donnera les 36000 et quelques communes de France avec leur orthographe et code officiels, leur appartenance à leur canton, leur département et leur région. Commence par chercher les villes de la table personne actuelle qui n'existent pas dans la table de référence des communes françaises : Code :
Une fois les données corrigées, tu peux vérifier que toutes les lignes de la table personne actuelle sont imortables : Code :
Importation des données : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||||||
|
10
|
|
|
#3 | ||
|
Membre actif
![]() Glen RhodesÉtudiant Inscription : novembre 2009 Messages : 134 ![]() |
Merci pour cette réponse constructive!
Citation:
Citation:
En tout cas merci beaucoup pour l'explication des bonnes pratiques que vous avez mis en place, je vais pouvoir m'en inspirer pour réaliser ce travail. |
||
|
|
00
|
|
|
#4 | |
![]() ![]() |
Citation:
Par exemple, si tu as des tables par année ou par catégories mais qui ont exactement la même structure, tu réunis tout dans une seule table.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Glen RhodesÉtudiant Inscription : novembre 2009 Messages : 134 ![]() |
Bonjour,
Oui mais malheureusement la base est normalisée (120 tables c'est beaucoup mais dans le domaine médical j'ai l'impression que c'est une quantité courante). La refonte totale vient du fait qu'elle a été crée du temps ou InnoDB n'existait pas dans MySQL et que de nouvelles fonctionnalités de la future application nécessitent des changements dans le cœur du modèle. Merci pour ton implication. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com