Sto giocando con come strutturare una risposta a questa domanda da quando è stata originariamente pubblicata. Questo è difficile poiché il caso di VS2010 non riguarda la descrizione delle caratteristiche e dei vantaggi dello strumento. Si tratta di convincere il lettore a fare un cambiamento fondamentale nel proprio approccio allo sviluppo del database. Non facile.
Ci sono risposte a questa domanda da parte di professionisti del database esperti, con un mix di background che comprende DBA, sviluppatore / dba e OLTP e data warehousing. Non è possibile per me affrontare questo aspetto per ogni aspetto dello sviluppo del database in una sola seduta, quindi proverò a presentare un caso per uno scenario particolare.
Se il tuo progetto soddisfa questi criteri, penso che ci sia un caso convincente per VS2010:
- Il tuo team sta utilizzando VS2010 per lo sviluppo di applicazioni.
- Il tuo team sta usando TFS per il controllo del codice sorgente e la gestione delle build.
- Il tuo database è SQL Server.
- Il tuo team ha già o è interessato a test automatici VS.
Se stai valutando VS2010 per lo sviluppo del database, la tua bibbia sarà la Guida al database di Visual Studio dei Visual Studio ALM Rangers . Eventuali citazioni che seguono che non hanno riferimenti verranno da questo documento.
Andiamo quindi ...
Perché il processo di sviluppo del database è diverso dallo sviluppo dell'applicazione?
Dati. Se non fosse per quei dati fastidiosi, lo sviluppo del database sarebbe un gioco da ragazzi. Potremmo semplicemente DROP tutto su ogni versione e dimenticare questa problematica gestione delle modifiche.
L'esistenza di dati complica il processo di modifica del database poiché i dati vengono spesso migrati, trasformati o ricaricati quando le modifiche sono introdotte da sforzi di sviluppo dell'applicazione che influenzano la forma delle tabelle del database o altri schemi di dati. Durante questo processo di modifica, i dati sulla qualità della produzione e lo stato operativo devono essere protetti da modifiche che potrebbero comprometterne l'integrità, il valore e l'utilità per l'organizzazione.
Cosa c'è che non va in SSMS?
Si chiama SQL Server Management Studio per un motivo. Come strumento autonomo, non è pratico gestire i tuoi sforzi di sviluppo se seguirai le migliori pratiche accettate.
Solo con gli script, per applicare in modo significativo pratiche consolidate di controllo del codice sorgente al tuo sviluppo, dovrai mantenere sia le definizioni degli oggetti (ad esempio uno script CREATE TABLE), sia gli script di modifica (ad esempio ALTER TABLE) E lavorare sodo per assicurarti che rimangano sincronizzati.
La catena di versioni per le modifiche a una tabella diventa piuttosto stupida abbastanza rapidamente. Un esempio molto semplicistico:
-- Version 1
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20))
-- Version 2
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(50))
-- Version 3
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(100))
Dalla versione 3, lo script di modifica del database contiene:
ALTER TABLE dbo.Widget ADD Description VARCHAR(50)
ALTER TABLE dbo.Widget ALTER COLUMN Description VARCHAR(100)
Se la versione live di questo database è la versione 1 e la nostra prossima versione è la versione 3, lo script seguente sarebbe tutto ciò che era necessario ma invece verranno eseguite entrambe le istruzioni ALTER.
ALTER TABLE dbo.Widget ADD Description VARCHAR(100)
Gli sprint di 5 anni di 4 settimane aggiungono alcuni script di versione divertenti e richiedono un'ulteriore gestione da parte dell'uomo per ridurre al minimo l'impatto sui tempi di implementazione.
Quindi c'è qualcosa di sbagliato in SSMS? No, fa bene a cosa serve, amministrare e gestire SQL Server. Ciò che non pretende nemmeno di fare è aiutare uno sviluppatore di database con il compito (a volte) molto complesso di gestire il cambiamento.
Se non riesci a creare tutte le versioni del database dall'origine e l'aggiornamento a qualsiasi versione futura, il controllo del codice sorgente è interrotto. Se non la pensi così, chiedi a Eric Sink .
Che dire di SSMS + <- inserire lo strumento di confronto degli schemi ->?
Questo è sicuramente un passo nella giusta direzione e toglie gran parte dello sforzo manuale richiesto per mantenere gli script. Ma (ed è un grande ma), in genere ci sono passaggi manuali coinvolti.
I popolari strumenti di confronto degli schemi possono essere completamente automatizzati e integrati nel processo di compilazione. Tuttavia, nella mia esperienza, la pratica più comune è che un confronto sia eseguito manualmente, gli script risultanti sono stati osservati, controllati nel controllo del codice sorgente, quindi eseguiti manualmente per la distribuzione. Non bene.
Ogni volta che noi umani fallibili dobbiamo essere coinvolti nel processo di costruzione o dispiegamento, introduciamo dei rischi e rendiamo il processo non ripetibile.
Se tu e il tuo team siete tra i pochi ad avere un confronto e una distribuzione degli schemi completamente automatizzati, vi saluto! Ragazzi, avete maggiori probabilità di essere aperti ai vantaggi che VS2010 ha da offrire come:
- Hai già accettato che i passaggi manuali sono pericolosi.
- Vedi il valore dell'automazione.
- Sei disposto a investire il tempo necessario per farlo funzionare.
Se non è possibile creare una build in un singolo passaggio o distribuire in un solo passaggio, il processo di sviluppo e distribuzione è interrotto. Se non la pensi così, chiedi a Joel Spolsky .
Perché VS2010?
La domanda posta da @NickChammas è alla ricerca di funzionalità killer che dimostrino perché VS2010 è un punto di svolta per lo sviluppo di database. Non credo di poter presentare il caso su tale base.
Forse comicamente, dove altri vedono difetti in questo strumento vedo forti ragioni per l'adozione:
- Dovrai cambiare il tuo approccio.
- Tu e il tuo team sarete costretti a lavorare in modo diverso.
- Dovrai valutare l'impatto di ogni modifica, a lungo, in dettaglio.
- Sarai guidato a rendere idempotente ogni cambiamento .
Se sei l'unico DBA di un progetto, gestendo tutte le modifiche al database, questo ragionamento deve sembrare ridicolo al limite dell'assurdo. Se tuttavia pensi che @BrentOzar abbia un punto e una delle nuove regole è che tutti sono i DBA , dovrai controllare le modifiche al database in modo che tutti gli sviluppatori del team possano lavorare.
L'adozione di progetti di database può richiedere un cambiamento mentale (le vecchie abitudini sono difficili da infrangere ) per alcuni sviluppatori o almeno un cambiamento nel processo o nei flussi di lavoro. Gli sviluppatori che hanno sviluppato applicazioni di database in
cui il database di produzione rappresenta la versione corrente del database dovranno adottare un approccio basato sul codice sorgente in cui il codice sorgente diventa il veicolo su cui viene apportata la modifica ai database . Nei progetti di database di Visual Studio, il progetto e il codice sorgente sono "Una versione della verità" per lo schema del database ed è gestito usando flussi di lavoro SCM probabilmente già utilizzati dallo sviluppatore o dall'organizzazione per altre parti del loro stack di applicazioni. Per i dati, il database di produzione rimane la sua "Una versione della verità" come dovrebbe essere.
Siamo arrivati al cambiamento fondamentale necessario per adottare con successo l'approccio VS2010 allo sviluppo del database ...
Tratta il tuo database come codice
Non è più necessario modificare il database live. Ogni modifica del database seguirà lo stesso modello di una modifica dell'applicazione. Modifica sorgente, compilazione, distribuzione. Questo non è un cambiamento temporaneo di direzione da parte di Microsoft, questo è il futuro di SQL Server . Database come codice è qui per rimanere.
Lo sviluppatore del database definisce la forma dell'oggetto per la versione dell'applicazione, non come mutare l'oggetto esistente nel motore di database nella forma desiderata. Potresti chiederti: come viene distribuito su un database che contiene già la tabella dei clienti? È qui che entra in gioco il motore di distribuzione. Come accennato in precedenza, il motore di distribuzione prenderà la versione compilata dello schema e la confronterà con una destinazione di distribuzione del database. Il motore di differenziazione produrrà gli script necessari per aggiornare lo schema di destinazione in modo che corrisponda alla versione che si sta distribuendo dal progetto.
Sì, ci sono altri strumenti che seguono un modello simile e per i progetti al di fuori dei vincoli che ho posto sulla mia risposta, valgono la stessa considerazione. Ma, se lavori con Visual Studio e Team Foundation Server ALM, non penso che possano competere.
Cosa c'è che non va nei progetti di database VS2010?
Modifica: Allora che senso hai?
@AndrewBickerton ha menzionato in un commento che non ho risposto alla domanda originale, quindi proverò a riassumere "Perché dovrei usare Visual Studio 2010 su SSMS per lo sviluppo del mio database?" Qui.
- SSMS non è uno strumento di sviluppo del database. Sì, puoi sviluppare TSQL con SSMS ma non fornisce le ricche funzionalità IDE di VS2010.
- VS2010 fornisce un framework per trattare il database come codice.
- VS2010 porta l' analisi del codice statico nel codice del database.
- VS2010 offre gli strumenti per automatizzare completamente il ciclo di build-deploy-test.
- SQL2012 e Visual Studio vNext estendono le capacità dei progetti di database. Conosci subito VS2010 e avrai un vantaggio sugli strumenti di sviluppo del database di prossima generazione.