Envoyé par : Raphael
Date : 22/09/2010 06:17
Bonjour,
Sous cette question un peu étrange se cache une interrogation vis-à-vis de l'évolution du schéma d'une BDD :
Actuellement, je distribue des BDD Sqlite3 vierges dans mes applis pour que les utilisateurs les remplissent. Je passe beaucoup de temps à penser ce schéma pour qu'il soit vraiment pérenne... Pourquoi ? Tout simplement car je ne saurais pas quoi faire si je devais le faire évoluer... par exemple rajouter une table...
Pour moi, il faudrait que je distribue la nouvelle version de la BDD vierge mais là plusieurs problèmes : Soit mes utilisateurs perdent toutes leurs données (écrasées), soit il faut que je prévoie un système d'export/import et là encore ce serait un système manuel.
Mais alors comment font les gens avec des BDD ? Serait-ce une astuce du genre :
A l'ouverture, on check si la BDD existe, sinon on la créé Puis on vérifie que la table1 existe, sinon on la créé Puis la suivante,...
Et concernant l'ajout/suppression d'un champ à une table, est-ce possible de le faire évoluer en douceur lors d'une MAJ ?
Merci d'avance pour tout conseil concernant l'évolution d'un schéma d'une BDD au fil des MAJ...
Envoyé par : thefab
Date : 24/09/2010 19:59
C'est vrai qu'il est mieux de bien penser le schéma de la base avant, mais il est tout à fait possible de modifier la structure par après:
ALTER TABLE data ADD COLUMN new_column TEXT;
Envoyé par : Raphael
Date : 24/09/2010 20:13
Oui, mais ce que je me demande c'est comment gérer ça ?
Je le rajoute dans le code d'ouverture de mon appli. dans la MAJ et dans toutes les MAJ suivantes ? (car si une personne a sauté celle où y a cette modif, il est dans le caca).
Et il se passe quoi si je rajoute une colonne qui existe déjà ? Puis-je tester si elle existe avant ?
Je ne sais pas si je suis très clair en fait...
Envoyé par : thefab
Date : 28/09/2010 01:10
Pour avoir vu ça ailleurs je pense que le plus simple c'est d'avoir une table xxxx(int version) et de stocker le numéro de version de ton schéma.
Au démarrage tu fais:
if (version == 1) { // exécuter les modifications du schéma 1 vers 2 // ALTER TABLE data ADD COLUMN new_column TEXT; // ALTER TABLE data DROP COLUMN old_column; // ... UPDATE xxxx SET version = 2; version = 2; } if (version == 2) { // exécuter les modifications du schéma 2 vers 3 } ...
Ça devrait fonctionner pour tout les cas: schéma qui passe directement de 1 à 5 ou pour une simple mise à jour, 2 vers 3...
Tiens nous au courant c'est intéressant...
Envoyé par : Raphael
Date : 28/09/2010 06:10
Ah effectivement, c'est une solution intéressante !
J'avais dû y penser il y a quelques années mais bizarrement je l'avais complètement oubliée !
Tu as raison, ainsi je n'ai plus mon problème de détection de tables ou autres, il suffit de gérer manuellement mon numéro de version pour le schéma de ma BDD.
Grand merci, je pense appliquer ce système dès mon prochain projet =D
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.