web-dev-qa-db-fra.com

Comment un groupe peut-il suivre les modifications du schéma de la base de données?

Quelles méthodologies de contrôle de version aident les équipes de personnes à suivre les modifications de schéma de base de données?

68
Toby

il y a quelques minutes, je vérifiais ceci: n tableau qui devrait exister dans tous les projets avec une base de données , semble assez simple à mettre en pratique, vérifiez-le:

Cela s'appelle schema_version (ou migrations, ou ce qui vous convient) et son but est de garder une trace des modifications structurelles ou des données dans la base de données. Une structure possible (exemple dans MySQL) est:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

insérer dans schema_version (key, extra) des valeurs ('001', 'schema version');

Que vous ajoutiez ce tableau depuis le début du projet ou juste après avoir déployé la première version sur un serveur de transfert ou de production, c'est à vous de décider.

Chaque fois que vous devez exécuter un script SQL pour modifier la structure de la base de données ou effectuer une migration de données, vous devez également ajouter une ligne dans cette table. Et faites-le via une instruction d'insertion au début ou à la fin de ce script (qui est validé dans le référentiel de code du projet).

45
eiefai

Je pense que la meilleure méthode est d'avoir la base de données générée dans le cadre de votre processus de construction . Gardez tous les scripts sous contrôle de code source avec le reste du code, et chacun est responsable de son propre environnement.

A défaut, RedGate a n outil pour intégrer le contrôle de code source dans SSMS et SQL Compare est utile pour comparer/synchroniser les schémas MS SQL Server. Visual Studio Database Edition a également un outil de comparaison de schéma intégré .

Une autre question SO m'amène à Migrator Dot Net sur laquelle je vais commencer à enquêter pendant mon temps libre copieux. Cela ressemble à une bonne méthode, mais cela pourrait être plus un investissement en temps/frais généraux que vous ne le souhaitez.

23
Larry Smithmier

eiefai déjà mentionné n tableau qui devrait exister dans tous les projets avec une base de données . C'est un excellent article de blog, mais à l'OMI, il ne représente qu'une partie du chemin vers une solution de travail pour le contrôle de la révision de la base de données. Je pense que toute tentative de "répondre" à cette question dans le monde réel doit prendre en compte certaines des autres informations sur VCS et les bases de données:

12
TML

Il y a quelques angles différents pour aborder cette question, je pense. L'angle "outil d'abord", je crois, va varier en fonction de la plate-forme et des préférences personnelles. Exemple: j'utilise un projet de base de données dans MS Visual Studio, mais je ne suis pas sûr que ce soit une excellente solution pour MySQL. Je connais également des gens qui sont assez vendus sur leurs outils préférés de Redgate, Erwin, Embarcadero, etc.

Il y a aussi un angle "processus d'abord" pour cette question, qui sera (espérons-le) revisité sur ce site dans les questions suivantes. Les clés de voûte de ce processus consistent à placer votre schéma sous contrôle de source et à gérer les modifications de sorte que vous puissiez appliquer les modifications de schéma de la version "x" à la version "y" à peu près à la demande.

Une réponse définitive à ce sujet va finir par ressembler à un livre, il vaut donc probablement la peine de commencer par en référencer un: Redgate a récemment publié un livre électronique gratuit appelé " Le guide Red Gate de SQL Server Développement en équipe ", et bien qu'il y ait beaucoup de choses à débattre, c'est un très bon endroit pour commencer le débat, OMI. Contrairement au nom, une grande partie du contenu de ce livre est suffisamment générale pour s'appliquer à n'importe quelle base de données (pas seulement SQL Server) et à n'importe quel ensemble d'outils (pas seulement Redgate). Si vous ne l'avez pas déjà vu, cela vaut vraiment la peine, au moins.

Enfin, il vaut probablement la peine de lier la "réponse héritée" de stackoverflow .

8
D. Lambert

SchemaCrawler est mon outil pour produire un fichier texte avec tous les objets de schéma de base de données. J'ai conçu cette sortie de texte pour être à la fois lisible par l'homme et différable par rapport à une sortie similaire d'un autre serveur.

En pratique, ce que j'ai trouvé, c'est que la sortie d'un fichier texte du schéma de base de données est utile, lorsqu'elle est effectuée dans le cadre de la construction. De cette façon, vous pouvez archiver le fichier texte dans votre système de contrôle de code source et avoir un historique des versions de l'évolution de votre schéma au fil du temps. SchemaCrawler est conçu pour automatiser cela également, à partir de la ligne de commande.

5
Sualeh Fatehi