Versionando sua Base de dados com Visual Studio e TFS

Tempo de leitura: menos de 1 minuto

E ai Pessoal, beleza?

Hoje estou dando uma passada por aqui, para escrever para vocês, um pouco sobre uma coisa que não é nova, mas que muita gente não utiliza em suas empresas, ou em seus projetos, vim escrever hoje sobre como versionar seu banco de dados utilizando o Visual Studio e o TFS.

Na maioria das empresas em que passei, as empresas ou não versionavam o banco, ou então, ficavam criando aqueles scripts “.sql” para salvar no Source Control, pois desconheciam isso( e para ser sincero eu também, eu aprendi sobre isso, quando meu amigo Alessandro Falanque me disse que precisava de algo do tipo, e comentou comigo sobre os projetos SQL)

Geralmente quando abrimos o Visual Studio para desenvolver nossas aplicações, nos restringimos apenas as linguagens C#/VB.NET, sem nem mesmo olhar oque mais a ferramenta nos permite fazer, então, acredito que muitos de vocês, não sabem que no Visual Studio existe um tipo de linguagem, que é o SQL Server, e essa linguagem nos permite desenvolver banco de dados utilizando o Visual Studio.

Então, para começarmos logo esse artigo, vamos criar um projeto SQL

 

 

Vamos criar o Projeto, e adicionar o mesmo ao Source Control(TFS) para que possamos gerenciar as versões do banco.

 

Agora que já criamos o Projeto, vamos começar a trabalhar com o Banco, para trabalhar com o banco de dados no Visual Studio, podemos começar do Zero, ou podemos também importar o Banco de dados direto da base de dados, ou até mesmo de scripts “.sql”. Para esse artigo, vamos importar direto do Banco de Dados, para isso, clique com o botão direito do mouse sobre o nome da Solução, selecione “Import” > “Database..”, conforme figura abaixo:

 

 

 

Após selecionarmos essas opções, será exibida uma tela para configurar a conexão com a base de dados, e também, solicitando oque deseja importar, se deseja importar permissões, configurações, logins, etc, conforme imagem abaixo:

 

 

 

Com as devidas configurações feitas, basta clicar em Start, que a importação será realizada, e você pode acompanhar essa importação, pois será exibida uma tela como o print abaixo:

 

 

 

Quando o processo estiver concluído, basta clicar em Finish, e você irá voltar ao Visual Studio, e a estrutura do banco estará criada na Solution Explorer, conforme imagem abaixo:

 

 

 

Oque eu acho muito interessante nesse tipo de projetos, é que o Visual Studio cria uma estrutura visual, e também a parte de Script, quando eu vi isso pela primeira vez, me lembrei dos projetos asp.net, onde podíamos dividir a tela entre Design e Source, e achei isso muito legal, e você pode ver como fica isso na imagem abaixo:

 

 

 

Viram? Bem legal não? Fica bem amigável para se trabalhar com esse tipo de projetos desta maneira, fica bem a cara do SQL Server mesmo, com esse tipo de projeto, o próprio DBA pode utilizar para criar os bancos se ele assim desejar.

 

Vamos fazer um teste no Banco de dados? Vamos ver essa tabela da imagem a cima no banco, possui exatamente a mesma estrutura, confira na imagem abaixo:

 

 

 

As estruturas estão idênticas certo? Legal, vamos agora voltar ao Visual Studio, e vamos incluir uma nova coluna, eu vou incluir aqui a “VC_TESTE”, conforme pode ser visto na imagem abaixo:

 

 

Acabamos de adicionar o Campo “VC_TESTE” no projeto de Banco de dados, e agora, precisamos replicar essa estrutura para a base de dados, mas como vamos fazer isso? Simples, basta dar um “F5” para realizar o deploy no banco, feito isso, vamos olhar a estrutura da tabela ALB_CLIENTE no banco:

 

 

Como vocês podem ver, a coluna foi criada na tabela do SQL Server. Legal não? Vamos agora incluir algum dado nesta tabela para que possamos realizar um teste excluindo essa nova coluna que acabamos de criar:

 

 

 

Agora que realizamos esse insert, vamos ir ao Visual Studio, excluir a coluna que acabamos de criar, e tentar fazer novamente o deploy para o Banco:

 

 

 

Você viu que gerou um erro certo? Porque ocorreu esse erro? Porque se você excluir essa coluna, você terá perda de dados, isso garante a integridade do seu banco(do meu ponto de vista), MAS, e se eu quiser deixar que isso ocorra? Se eu quiser excluir essa coluna, mesmo sabendo que os dados serão perdidos?

Neste caso, basta você desabilitar essa regra nas propriedades do projeto, conforme exibido na imagem abaixo:

 

 

 

Ou seja, basta desabilitar o Checkbox ” Block incremental deployment if data loss migth occur”, que nesse caso, você conseguirá fazer o deploy e a coluna será excluída.

 

Neste nosso exemplo, nos apenas importamos o banco de dados, não criamos nenhuma tabela do Zero, mas caso queira incluir uma nova tabela, como podemos fazer isso?

Basta dentro da pasta de Tabelas, clicar em Add New Item, e incluir uma nova tabela:

 

 

 

 

Bom, como nós ainda não realizamos nenhum teste com integração ao TFS, vamos agora, criar uma nova coluna na tabela “ALB_Veiculos”, chamada “VC_TESTE”, e realizar um check-in no TFS:

 

 

 

Vamos agora, novamente excluir esse campo, e realizar um novo Check-in no TFS, e logo em seguida, vamos ver como podemos recuperar essa versão.

Clique com o botão direito em cima da tabela “ALB_Veiculos” >Source Control > View History, lá você pode ver a nossa alteração de inclusão do campo “VC_TITULO”:

 

 

Após achar a alteração que deseja, clique com o botão direito do mouse sobre ela, e clique em “Get This Version” para baixar essa versão para sua máquina

 

 

 

Uma coisa bem legal que esse tipo de projeto nos permite também, é realizar um “Schema Compare” entre o Projeto de base de dados, e o Banco de dados propriamente dito, conforme vou mostrar na figura abaixo:

 

O mais interessante sobre isso, é que ele não só apenas compara os Schemas, mas também me permite atualizar a base(ou o projeto, dependendo da ordem que realizo o compare) de acordo o projeto esteja, dê uma olhada na imagem abaixo, ela está mostrando que tenho que realizar duas atualizações de estrutura no banco, pois as tabelas estão divergentes, e tenho que incluir uma que não existe no banco:

 

 

Bom pessoal, é isso que eu queria mostrar para vocês, espero que tenham conseguido entender, e que seja útil a quem ler, e caso tenham duvidas estou disponível para ajuda-los naquilo que eu for capaz.

Vou deixar o projeto no GitHUb para que possam baixar caso desejarem para dar uma olhada no projeto:

SampleDatabase