SSDT est comparable à Liquibase / Flyway car il fait ce qu'il fait mais en adoptant une approche différente. Avec SSDT, vous disposez de l'environnement de développement pour obtenir des éléments tels que la définition, la recherche de références et d'intellect, ainsi que la possibilité de compiler un projet dans un dacpac, puis de déployer ce dacpac dans une base de données.
La méthode SSDT (et la méthode de comparaison SQL Redgate) pour effectuer un déloyment consiste à déclarer ce que vous voulez, donc si vous souhaitez modifier une table qui ressemble à:
create table a(id int)
à une table qui ressemble à:
create table a(id int, another_column varchar(12))
avec SSDT, vous changez simplement votre définition de table en la seconde et laissez SSDT s'inquiéter de la façon de la mettre à niveau (peut-il faire une modification de table, ajouter une colonne ou l'ordre des colonnes change-t-il donc vous devrez reconstruire la table, etc.).
Avec Liquibase (DbUp, ReadyRoll, méthodes manuelles, etc.), dans ce cas, vous devez écrire la table alter vous-même et vous assurer que vous exécutez les scripts dans le bon ordre, envisagez ce scénario:
- Version 1 - créer une colonne bonjour sur la table
- Version 2 - renommer la colonne bonjour en joe_blogs
- Release 3 - rename column joe_blogs to hello
- Version 4 - créer une colonne joe_blogs
Si l'une des versions est manquée, aucune des suivantes ne peut continuer.
Avantages des scripts de mise à niveau (Liquibase, DbUp, etc.):
- Vous avez un contrôle total sur les scripts
- Les DBA / développeurs sont habitués à cela
Avantages de la comparaison / fusion (SSDT, Redgate SQL Compare):
- Pas besoin d'écrire des scripts de mise à niveau
- Il est facile d'accéder à n'importe quelle version spécifique, il suffit de comparer et de fusionner cette version
Inconvénients des scripts de mise à niveau:
- Doit être exécuté dans l'ordre
- Comptez sur les humains sans faire d'erreurs
- Peut être lent surtout si vous avez beaucoup de changements
- À moins que votre équipe ne soit très disciplinée, les bases de données dans différents environnements (dev, test, staging, prod, etc.) sont souvent désynchronisées, rendant tout test invalide
- Rétrograder une version signifie écrire l'inverse de tous les scripts que vous avez déjà écrits
Inconvénients de l'utilisation de la comparaison / fusion:
- Les outils ne sont pas fiables à 100%, peut-être injustement
- SSDT nécessite un projet fonctionnel, de nombreuses bases de données ont du code qui ne se compile ou ne s'exécute pas réellement (pensez aux tables supprimées mais pas aux procédures, etc.), j'ai vu cela dans environ 8/10 bases de données dont j'ai hérité :)
- De nombreux DBA / développeurs hésitent à abandonner le développement dans SSMS / bloc-notes
Personnellement, je pense vraiment que SSDT est un environnement de développement professionnel et cela signifie que je peux me concentrer sur l'écriture de code et de tests utiles plutôt que sur l'écriture de scripts de mise à niveau qui ne sont en eux-mêmes qu'un moyen de parvenir à une fin.
Vous avez demandé des opinions alors vous y allez :)
ed