Resumo
Os cenários abaixo utilizarão a tarefa de adicionar uma coluna NOT NULL em uma tabela. Esta tarefa é simples mas dependendo do resultado desejado você pode encontrar uma série de problemas. Muitas abordagens irão mover ou renomear a tabela o que pode ter consequências para as chaves estrangeiras ou relacionamentos. Adicionar uma coluna NOT NULL irá cobrir muitos dos problemas que você terá ao alterar chaves estrangeiras entre tabelas.
Nós utilizaremos uma estrutura de banco de dados simples para que possamos focar no comportamento da ferramenta sem maiores intereferências.
Este laboratório está dividio em quatro cenários
O cenário 1 irá lhe mostrar como as mudanças são geralmente tratadas em um sistema de projeto e quais problemas você pode encontrar quando faz deploy de mudanças para um banco de dados que contém dados.
Os cenários de 2 a 4 irão sugerir abordagens para tratar estas mudanças, incluindo os prós e contras de cada situação.
Objetivos dos Cenários
Entendimento das três formas através das quais é possível integrar código customizado ao sistema de deployment.
Balanceamento das necessidades de performance, gestão de fonts e migração complexa de dados sem comprometer as funcionalidades do banco do dados.
Duração estimada: 2 horas
Cenário 1 – Movimentação Complexa de Dados – Comportamento Padrão para Edição de Desenvolvimento
Local dos arquivos iniciais: C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario1
Local dos arquivos finais: C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario1_Answer
Qual é o comportamento padrão da edição de banco de dados? Existem alguns caminhos possíveis. Se a tabela estiver vazia um comando ALTER TABLE será gerado. Senão, será feita uma tentativa de mover os dados, realizar as alterações e devolver os dados a tabela.
O que acontece se a tabela possuir dados?
O que acontece se a tabela possuir relacionamentos com chaves?
Neste cenário nós iremos preparar nosso exemplo e explorar o comportamento padrão da edição de banco de dados. Uma área para o início do laboratório é oferecida para servir de ponto de partida para o projeto. Copie este projeto para uma área de teste. Conforme for progredindo no laboratório, caso você trave em algum ponto, você poderá checar o projeto na área com o resultado final e revisar as diversas seções do laboratório.
Abra o projeto de exemplo
Abra a solução
Abra o Visual Studio 2010.
No menu principal clique em File, clique em Open project e então vá até o projeto localizado em C:\HOL\DatabaseProjectGuidance\Integration with Custom Code and External Changes\ComplexDataMovement\Scenario1. Abra o arquivo SimpleDatabase.sln.
Se você navegar até o projeto SimpleDatabase (Selecione a pasta Schema Objects/Schemas/Dbo/Tables sob o projeto) você irá perceber que ele descreve uma estrutura de banco de dados conforme abaixo. (Figura 59)
Figura 59 Diagrama de ER dos objetos incluídos no schema
Faça o Build e Deploy da solução
No Solution Explorer, clique com o botão direito no projeto SimpleDatabase e selecione Properties.
Defina a opção Deploy action para Create a deployment script (.sql) and deploy to the database.
Especifique a conexão SQL para a instância de banco de dados de destino clicanco em Edit. Digite “.” no campo server name e SimpleDatabase para o nome do banco de dados.
Verifique se as opções estão como na Figura 60.
Figura 60 Opções de Deployment para o projeto SimpleDatabase
No Solution Explorer, clique com o botão direito no projeto SimpleDatabase e selecione Deploy.
Agora que temos um banco de dados vazio nós podemos explorar o comportamento da edição do banco de dados conforme formos fazendo as mudanças. Nós iremos dedicar um bom tempo avaliando a saída da engine de deployment, logo iremos alterar a ação de Deploy para que o script seja apenas gerado.
Faça alterações no projeto e avalie o script de deployment
Defina a ação de Deploy
No Solution Explorer, clique com o botão direito no projeto SimpleDatabase e selecione Properties.
Altere o campo Deploy action para Create a deployment script (.sql).
Adicione uma coluna NOT NULL na tabela Companies
Abra o arquivo Companies.table.sql expandindo a pasta Schema Objects, Schemas, dbo, Tables.
Adicione o atributo NOT NULL na coluna LanguageLocale. O script deve ficar igual ao abaixo:
CREATE TABLE [dbo].[Companies]
(
Id int NOT NULL,
ParentId int NULL,
Name nvarchar(100) NOT NULL,
LanguageLocale nvarchar(5) NOT NULL
)
Faça o deploy do projeto
Clique com o botão direito na solução de banco de dados e clique em Deploy para fazer o deploy para o banco de dados especificado. Você verá o progresso do deployment na janela Output do Visual Studio. Ao final da saída registrada na janela output você verá uma seção Deployment script generated to: que contém o caminho para o arquivo .sql contendo as instruções de alteração do banco de dados.
Abra o arquivo .sql gerado localizado no caminho indicado na janela output.
NOTA
Há dois comportamentos que precisamos notar:
A engine detecta que você está adicionando uma coluna NOT NULL sem DEFAULT e exibe um alerta de que o deployment irá falhar caso já existam dados na tabela. O alerta aparece na janela Output conforme a seguir: "Warning SQL01270: The column LanguageLocale on table [dbo].[Companies] must be changed from NULL to NOT NULL. If the table contains data,..."
O comportamento padrão é gerar um script com a instrução ALTER.
Este comportamento é esperado, mas não é interessante uma vez que não temos nenhum dado na tabela. Vamos então popular as tabelas com dados para que seja possível visualizar o que acontece neste caso.
Popule a tabela com dados de exemplo
Remova a coluna LanguageLocale
Abra o arquivo Companies.table.sql expandindo a pasta Schema Objects, Schemas, dbo, Tables.
Remova a coluna LanguageLocale deletando o código relevante do script. O resultado deve ser como abaixo:
CREATE TABLE [dbo].[Companies]
(
Id int NOT NULL,
ParentId int NULL,
Name nvarchar(100) NOT NULL
)
Certifique-se de que o a ação de deployment esteja configurada para fazer o deploy. No Solution Explorer, clique com o botão direito no projeto SimpleDatabase e clique em Properties. Na aba Deploy, o campo Deploy action deve ser alterado para Create a deployment script (.sql) and deploy to the database.
Clique com o botão direito na solução e selecione Deploy para publicar as alterações no banco de dados especificado.
Gere dados de exemplo
No Solution Explorer, abra a pasta Data Generation Plans.
Dê um duplo-clique no arquivo SampleData.dgen. O plano de geração de dados sera aberto e você irá visualizar uma prévia dos dados que serão gerados. (Figura 61)
Compartilhe com seus amigos: |