SSDT è paragonabile a Liquibase / Flyway in quanto fa quello che fanno ma adottando un approccio diverso. Con SSDT hai l'ambiente di sviluppo in modo da ottenere cose come andare alla definizione, trovare riferimenti e intelli-sense, nonché la possibilità di compilare un progetto in un dacpac e quindi distribuire quel dacpac in un database.
Il modo SSDT (e il modo di confronto sql di redgate) per eseguire un diluvio è dichiarare ciò che si desidera, quindi se si desidera modificare una tabella simile a:
create table a(id int)
a un tavolo che assomiglia a:
create table a(id int, another_column varchar(12))
con SSDT basta cambiare la definizione della tabella con la seconda e lasciare che SSDT si preoccupi di come aggiornarla (può fare una tabella alterata, aggiungere una colonna o cambiare l'ordine della colonna, quindi sarà necessario ricostruire la tabella ecc.).
Con Liquibase (DbUp, ReadyRoll, metodi manuali ecc.) Ciò che fai è in questo caso scrivere la tabella alter e assicurarti di eseguire gli script nell'ordine corretto, considera questo scenario:
- Rilascio 1: crea la colonna ciao sulla tabella
- Rilascio 2: rinomina la colonna hello in joe_blogs
- Rilascio 3: rinomina la colonna joe_blogs in Hello
- Versione 4: crea una colonna joe_blogs
Se manca una delle versioni, nessuna delle successive può continuare.
Vantaggi degli script di aggiornamento (Liquibase, DbUp, ecc.):
- Hai il controllo completo sugli script
- DBA / sviluppatori sono abituati a questo
Vantaggi del confronto / unione (SSDT, Redgate SQL Compare):
- Non è necessario scrivere script di aggiornamento
- È facile arrivare a qualsiasi versione specifica basta confrontare e unire quella versione
Svantaggi degli script di aggiornamento:
- Deve essere eseguito in ordine
- Non fare errori sugli umani
- Può essere lento soprattutto se hai molti cambiamenti
- A meno che il tuo team non disponga di database molto disciplinati in ambienti diversi (sviluppo, test, stadiazione, prod, ecc.) Spesso non sono sincronizzati rendendo non validi i test
- Il downgrade di una versione significa scrivere il contrario di tutti gli script che hai già scritto
Svantaggi dell'utilizzo di confronta / unisci:
- Gli strumenti non sono affidabili al 100%, forse ingiustamente
- SSDT richiede un progetto funzionante, molti database hanno codice che in realtà non viene compilato o eseguito (pensa a tabelle scartate ma non a procedure ecc.), L'ho visto in circa 8/10 database che ho ereditato :)
- Molti sviluppatori / amministratori di database sono restii a rinunciare allo sviluppo in SSMS / blocco note
Personalmente penso davvero che SSDT sia un ambiente di sviluppo professionale e ciò significa che posso concentrarmi sulla scrittura di codice e test utili piuttosto che sulla scrittura di script di aggiornamento che sono di per sé solo un mezzo per raggiungere un fine.
Hai chiesto opinioni quindi eccoti :)
Ed