Comment modifier votre schéma de base de données?

comment préparez-vous vos deltas SQL? enregistrez-vous manuellement chaque changement de schéma SQL dans un dossier delta, ou avez-vous une sorte de processus de diffing automatisé?

je suis intéressé par les conventions pour versionner le schéma de base de données avec le code source. Peut-être un crochet pré-commit qui diffs le schéma?

en outre, quelles sont les options de deltas diffing existent en dehors de DbDeploy ?

Modifier: voir les réponses je voudrais clarifier que je suis familier avec le schéma standard pour exécuter une migration de base de données en utilisant des deltas. Ma question porte sur la création des deltas eux-mêmes, de préférence automatiquement.

aussi, le versioning est pour PHP et MySQL si cela fait une différence. (Pas de Ruby solutions s'il vous plait).

114
demandé sur Joe Phillips 2008-10-06 22:02:29

17 réponses

voir

Existe-t-il un système de contrôle de version pour les modifications de la structure de la base de données?

comment modifier ma base de données MS SQL dans SVN?

et L'article de Jeff

Obtenir Votre Base De Données Sous Contrôle De Version

je ressens votre douleur, et j'aimerais qu'il y ait une meilleure réponse. Cela pourrait être plus proche de ce que vous avez été à la recherche pour.

mécanismes de suivi des modifications du schéma de freinage rhéostatique

en général, je pense qu'il n'y a pas de solution adéquate, acceptée, et je roule ma propre dans ce domaine.

57
répondu harpo 2017-05-23 11:33:26

vous pourriez jeter un oeil à un autre, fil similaire: Comment puis-je version de ma base de données MS SQL dans SVN? .

4
répondu Jason Jackson 2017-05-23 12:26:42

si vous êtes toujours à la recherche d'options : consultez neXtep designer. Il s'agit d'un environnement libre de développement de base de données GPL basé sur les concepts de contrôle de version. Dans l'environnement, vous travaillez toujours avec des entités suivies en versions et pouvez vous concentrer sur le développement du modèle de données. Une fois qu'une version est terminée, le moteur de génération SQL branché sur le système de contrôle de version peut générer n'importe quel delta dont vous avez besoin entre 2 versions, et vous offrira un mécanisme de livraison si vous avez besoin.

entre autres choses, vous pouvez synchroniser et inverser la synchronisation de votre base de données pendant les développements, créer des diagrammes de modèle de données, interroger votre base de données en utilisant des clients SQL intégrés, etc.

consultez le wiki pour plus d'informations : http://www.nextep-softwares.com/wiki

il prend actuellement en charge Oracle, MySql et PostgreSql et est en java de sorte que le produit fonctionne sur windows, linux et mac.

4
répondu Christophe Fondacci 2010-10-25 05:06:03

Je ne gère pas les deltas. Je fais des changements à une base de données principale et j'ai un outil qui crée un script de construction basé sur XML basé sur la base de données principale.

quand vient le temps de mettre à jour une base de données existante, j'ai un programme qui utilise le script de construction basé sur XML pour créer une nouvelle base de données et les tables nues. Je copie alors les données de l'ancienne base de données en utilisant INSERT dans x SELECT de y et puis applique tous les index, les contraintes et les déclencheurs.

nouvelles tables, nouvelles Colonnes, Colonnes supprimées sont toutes manipulées automatiquement et avec quelques petites astuces pour ajuster la routine de copie, je peux gérer les renommages de colonne, les changements de type de colonne et d'autres remaniements de base.

Je ne recommande pas cette solution sur une base de données avec une énorme quantité de données, mais je mets régulièrement à jour une base de données qui est plus de 1 Go avec 400 tables.

2
répondu Darrel Miller 2008-10-06 18:15:44

vous n'avez pas mentionné quels RDBMS vous utilisez, mais si C'est le serveur MS SQL, Le de Red-Gate Compare nous a été indispensable pour créer des deltas entre les scripts de création d'objets.

2
répondu jalbert 2008-10-06 18:20:06

Je ne suis pas du genre à me vanter, mais j'ai développé une application Web interne pour suivre les changements dans les schémas de base de données et créer des scripts de mise à jour avec versions.

cet outil est appelé Brésil et est maintenant open source sous une licence MIT. Le Brésil est ruby / ruby on rails basé et soutient le déploiement de changement à n'importe quelle base de données que Ruby dBi soutient (MySQL, ODBC, Oracle, Postgres, SQLite).

le Soutien à l' mettre les scripts de mise à jour dans le contrôle de version est prévu.

2
répondu Joakim Bodin 2009-01-01 19:58:17

http://bitbucket.org/idler/mmp - outil de version de schéma pour mysql, écrit en PHP

2
répondu user381751 2010-07-02 05:49:47

Je m'assure que les changements de schéma sont toujours additifs. Donc je ne laisse pas tomber les colonnes et les tables, parce que cela zapperait les données et ne peut pas être retranché plus tard. De cette façon, le code qui utilise la base de données peut être retranché sans perte de données ou de fonctionnalités.

j'ai un script de migration qui contient des instructions qui crée des tables et des colonnes si elles n'existent pas encore et les remplit avec des données.

le script de migration s'exécute chaque fois que le le code de production est mis à jour et après de nouvelles installations.

quand je voudrais laisser tomber quelque chose, je le fais en le retirant du script d'installation de la base de données et du script de migration de sorte que ces éléments de schéma obsolètes seront progressivement éliminés dans de nouvelles installations. Avec l'inconvénient que les nouvelles installations ne peuvent pas passer à une version plus ancienne avant l'installation.

et bien sûr j'exécute DDLs via ces scripts et jamais directement sur la base de données pour garder les choses la synchronisation.

2
répondu Calmarius 2015-07-16 10:51:26

nous exportons les données dans un format portable (en utilisant notre chaîne d'Outils), puis nous les importons dans un nouveau schéma. pas besoin de delta SQL. Fortement recommandé.

1
répondu Shachar 2008-10-06 18:07:56

j'utilise Firebird de la base de données pour plus de développement et d'utilisation de la FlameRobin de l'outil d'administration. Il a une belle option pour enregistrer tous les changements. Il peut tout enregistrer dans un seul gros fichier, ou un fichier par modification de base de données. J'utilise cette deuxième option, puis je stocke chaque script dans le logiciel de contrôle de version - plus tôt J'ai utilisé Subversion, maintenant J'utilise Git.

je suppose que vous pouvez trouver un outil MySQL qui a la même journalisation comme FlameRobin pour Firebird.

dans l'une des tables de base de données, je stocke le numéro de version de la structure de base de données, de sorte que je peux mettre à jour n'importe quelle base de données facilement. J'ai aussi écrit un script PHP simple qui exécute ces scripts SQL un par un sur n'importe quelle base de données cible (le chemin de base de données et le nom d'utilisateur/mot de passe sont fournis sur la ligne de commande).

il y a aussi une option pour enregistrer toutes les déclarations DML (insérer, mettre à jour supprimer), et I activez ceci tout en modifiant certaines données "par défaut" que contient chaque base de données.

j'ai écrit un beau livre blanc sur la façon dont je fais tout cela en détail. Vous pouvez télécharger le document en .format pdf avec les scripts de démonstration PHP de ici .

1
répondu Milan Babuškov 2008-10-06 19:48:01

j'ai également développé un ensemble de scripts PHP où les développeurs peuvent soumettre leurs scripts deltasql à un dépôt central.

dans l'une des tables de base de données (appelée TBSYNCHRONIZE), je stocke le numéro de version du dernier script exécuté, de sorte que je puisse mettre à jour n'importe quelle base de données facilement en utilisant l'interface web ou un client développé sur le but pour Eclipse.

l'interface web permet de gérer plusieurs projets. Il supporte aussi la base de données "branches".

vous pouvez tester l'application à http://www.gpu-grid.net/deltasql (si vous vous connectez en tant qu'administrateur avec mot de passe testdbsync). L'application est open source et peut être téléchargé ici: http://sourceforge.net/projects/deltasql

deltasql est utilisé de manière productive en Suisse et en Inde, et est populaire au Japon.

1
répondu Tiziano Mengotti 2009-01-29 13:26:54

il y a quelques mois, j'ai cherché dans tool for versioning MySQL schema. J'ai trouvé de nombreux outils utiles, comme la migration Doctrine, la migration RoR, certains outils écrits en Java et en Python.

mais aucun d'entre eux n'a été satisfait mes exigences.

mes exigences:

  1. Pas d'exigences exclure PHP et MySQL
  2. pas de fichiers de configuration schema, comme schema.yml dans la Doctrine
  3. en Mesure pour lire le schéma courant de la connexion et créer un nouveau script de migration, que représentent le schéma identique dans d'autres installations de l'application.

j'ai commencé à écrire mon outil de migration, et aujourd'hui j'ai la version bêta.

s'il vous Plaît, essayez, si vous avez un intérêt pour ce sujet. S'il vous plaît envoyez-moi des demandes futures et bugreports.

code Source: bitbucket.org/idler/mmp/src Présentation en anglais: bitbucket.org/idler/mmp/wiki/Home Vue d'ensemble en russe: antonoff.info/development/mysql-migration-with-php-project

1
répondu Maxim Antonov 2010-07-07 21:31:42
1
répondu popalka 2011-11-18 16:18:39

ce sujet m'intéresse aussi.

Il y a certaines discussions sur ce sujet dans le Django wiki .

fait intéressant, il ressemble à CakePHP a un schéma de version intégré en utilisant juste la commande cake schema generate .

1
répondu Swaroop C H 2011-11-20 04:26:10

Pour MySQL

quand j'atterris sur un nouveau DB:

tout D'abord, je vérifie la structure:

mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB1_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_1.sql
mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB2_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_2.sql
diff FILENAME_1.sql FILENAME_2.sql > DIFF_FILENAME.txt
cat DIFF_FILENAME.txt | less

grâce aux utilisateurs de stackoverflow je pourrais écrire ce script rapide pour trouver des différences de structure.

src: https://stackoverflow.com/a/8718572/4457531 & https://stackoverflow.com/a/26328331/4457531

dans une deuxième étape, je vérifie les données, table par table avec mysqldiff . C'est un peu archaïque mais une boucle php basée sur information_schema les données font sûrement du travail

pour le versioning, j'utilise la même façon, mais j'ai formaté un script de mise à jour SQL (pour mettre à niveau ou faire un rollback) avec des résultats diff et j'utilise la convention de numéro de version (avec plusieurs modifications le numéro de version ressemble à une adresse ip) .

initial version : 1.0.0
                  ^ ^ ^
                  | | |
structure change: - | |
datas added: -------- |
datas updated: --------
1
répondu Nolwennig 2017-05-23 11:33:26

j'utilise la version stricte du schéma de la base de données (tracée dans une table séparée). Les Scripts sont stockés dans le contrôle de version, mais ils vérifient tous la version de schéma actuelle avant de faire n'importe quel changement.

Voici l'implémentation complète pour SQL Server (la même solution pourrait être développée pour MySQL si nécessaire): Comment maintenir le schéma de base de données SQL Server Version

0
répondu Zoran Horvat 2015-07-14 14:12:00

après une longue enquête, j'ai compris qu'il y a des outils de tierce partie ou des types de projet de studio visuel qui ne me satisfont pas, ou juste des blogs sur la théorie mais pas d'implémentation. J'ai donc mis en place un système de travail, qui est utilisé presque un an, et expliqué ici:

http://nalgorithm.com/2015/11/09/database-versioning-part-1 /

selon l'intérêt, continuera à écrire plus.

0
répondu Yuksel Daskin 2016-04-07 08:57:38