Demonstra Passo a passo: Aplicar as técnicas de refatoração de banco de dados

Usando a refatoração em Visual Studio Premium ou Visual Studio Ultimate, você pode reduzir o número de tarefas repetitivas e sujeitas a erros que você deve executar ao criar e atualizar um esquema de banco de dados. Por exemplo, você pode usar a refatoração para atualizar as referências a um objeto de banco de dados se deve alterar o seu nome ou o objeto deverá mover para um esquema diferente. Se você adotar essa abordagem, você pode aumentar a velocidade e a precisão das alterações de rotina no design de banco de dados.

Esta explicação passo a passo ilustra um cenário típico no desenvolvimento de banco de dados. Para adicionar recursos de um banco de dados existente, você deve executar a implementação inicial e revisá-lo com outro membro da equipe. Durante a revisão, você identificará os diversos problemas que devem ser tratadas antes de você verificar as alterações. Em seguida, você usará uma variedade de técnicas de refatoração para alterar o esquema.

Essa explicação passo a passo ilustra as seguintes tarefas:

  • Importando esquema da banco de dados

  • A implementação de uma tarefa de desenvolvimento de banco de dados típico

  • Corrigindo um erro de codificação

  • A conclusão da tarefa de desenvolvimento

  • Comentários de revisão do código de endereçamento.

Pré-requisitos

Para concluir essa explicação passo a passo, você precisa do seguinte:

  • Visual Studio PremiumouVisual Studio Ultimate

  • Acesso somente leitura para um servidor de banco de dados no qual o banco de dados de AdventureWorks2008 está instalado.

Importando esquema da banco de dados

Antes de alterar um esquema em um ambiente de equipe, você normalmente verificar um projeto existente do seu sistema de controle de versão. Para esta explicação, você pode cria um projeto de banco de dados e importar o esquema do banco de dados de exemplo AdventureWorks2008.

Para criar um projeto de banco de dados

  1. No menu File, aponte para New, e em seguida, clique em Project.

    A caixa de diálogo New Project será exibida.

  2. Em Modelos instalados, expanda o banco de dados nó e clique o SQL Server nó.

  3. Na lista de modelos, clique em Projeto de banco de dados de 2008 do SQL Server.

  4. Em nome, digite RefactorAdventureWorks e clique em OK.

    É criada uma solução que contém um projeto do banco de dados vazio, chamado RefactorAdventureWorks, como o seu projeto de teste (também conhecido como uma caixa de proteção).

    Em seguida, você deve importar o esquema de uma instância implantada do banco de dados AdventureWorks.

Para importar o banco de dados AdventureWorks

  1. Em um Solution Explorer ou Visualização Esquema, clique em RefactorAdventureWorks.

  2. Sobre o projeto menu, clique em Importar objetos de banco de dados e configurações de.

    ObservaçãoObservação

    Você pode também direito RefactorAdventureWorks e, em seguida, clique em Importar objetos de banco de dados e configurações de.

    O Banco de dados de importação wizard aparece.

  3. No conexão de banco de dados de origem lista, clique na conexão que corresponde ao banco de dados AdventureWorks.

    Observação importanteImportante

    Se você não tiver ainda conectado ao banco de dados, você deve clicar primeiro em Nova conexão para criar uma conexão a ele. Para obter mais informações, consulte Como: Criar uma conexão de banco de dados.

  4. Clique em Iniciare em seguida, clique em Concluir quando os objetos e configurações foram importadas.

    Como o esquema é importado, os itens de projeto que correspondem aos objetos do banco de dados aparecem sob o projeto de banco de dados em Solution Explorer e Visualização Esquema.

    ObservaçãoObservação

    Embora você conectado ao banco de dados para importar o esquema, agora são desconectados e trabalhando off-line.

    Em seguida, você executará uma tarefa típica no desenvolvimento de banco de dados, adicionando código para o projeto de banco de dados.

A implementação de uma tarefa de desenvolvimento de banco de dados típico

Para essa tarefa, você precisa para implementar o suporte para controlar o histórico de ausências de cada funcionário. Como parte dessa tarefa, você deve criar os seguintes objetos:

  • Uma tabela que controla a data de início e término de cada ausência e o tipo de ausência (férias, licença médica, como Jurado, flutuante feriado, folga não pagos ou Luto deixar). Você irá adicionar a tabela no esquema de pessoa posteriormente neste passo a passo. Os dados na tabela possuem as seguintes restrições:

    • Ausências nunca são mais de cinco dias. (Mais ausências são divididas em várias entradas).

    • Ausências têm intervalos de data válida.

    • A tabela está relacionada à tabela funcionário pelo EmployeeID.

  • Um modo de exibição que mostra o histórico de ausência total de cada funcionário.

  • Um procedimento armazenado que registra uma ausência e atualiza as horas de férias do funcionário, se o tipo de ausência estiver de férias.

Para preparar-se para adicionar código

  1. Sobre o Exibir menu, clique em Visualização do esquema de banco de dados.

  2. Em Visualização Esquema, expanda o RefactorAdventureWorks nó.

  3. Se Visualização Esquema é classificada por tipo de objeto, clique em o objeto de alteração de agrupamento na barra de ferramentas.

    ObservaçãoObservação

    Modo de exibição do esquema é classificada por tipo de objeto se ele contém nós que são chamados de tabelas e modos de exibição. Se Visualização Esquema contém a um nó chamado esquemas, você pode continuar com o próximo procedimento.

    Em seguida, você adiciona a tabela de AbsenceHistory para o projeto de banco de dados.

Para adicionar a tabela de AbsenceHistory

  1. Em Visualização Esquema, expanda o esquemas nó, expanda o pessoa subnó e expanda o tabelas subnó.

  2. Com o botão direito do tabelas subnó, o ponto de Adde clique em tabela.

    O Add New Item caixa de diálogo aparece.

  3. Em nome, tipo AbsenceHistorye clique em Add.

    O Transact-SQL editor abre, exibindo a definição da tabela AbsenceHistory.

  4. No Transact-SQL editor, substituir a definição da tabela existente com o seguinte código:

    CREATE TABLE [Person].[AbsenceHistory]
    (
    [EmployeeID] INT NOT NULL, 
    [BeginDate] DateTime NOT NULL,
    [EndDate] DateTime NOT NULL,
    [AbsenceType] NCHAR(1) NOT NULL
    );
    
  5. Sobre o arquivo menu, clique em Salvar Person.AbsenceHistory.table.sql.

    Em seguida, você adiciona uma restrição de verificação para a tabela AbsenceHistory.

Para adicionar a restrição de verificação para a tabela

  1. Em Visualização Esquema, expanda o AbsenceHistory nó.

  2. Com o botão direito do restrições o nó, aponte para Adde clique em Restrição Check.

    O Add New Item caixa de diálogo aparece.

  3. Em nome, tipo CK_AbsenceHistory_ValidDatese clique em Add.

    O Transact-SQL editor abre, exibindo a definição da restrição.

  4. No Transact-SQL editor, substituir a definição de restrição existente com o seguinte código:

    ALTER TABLE [Person].[AbsenceHistory]
    ADD CONSTRAINT [CK_AbsenceHistory_ValidDates] 
    CHECK  (EndDate >= BeginDate AND DateDiff(day, EndDate, BeginDate) <= 5)
    go
    EXECUTE sp_addextendedproperty @name = N'MS_Description', 
    @value = 'Check constraint [EndDate]>= [BeginDate]', 
    @level0type = N'SCHEMA', 
    @level0name = N'Person', 
    @level1type = N'TABLE', 
    @level1name = N'AbsenceHistory', 
    @level2type = N'CONSTRAINT', 
    @level2name = N'CK_AbsenceHistory_ValidDates';
    

    Esse código define uma restrição na tabela que certifica-se de que a data de término é posterior à data de início e de que o delta entre eles não exceda cinco dias.

  5. Sobre o arquivo menu, clique em Salvar Person.AbsenceHistory.CK_AbsenceHistory_ValidDates.chkconst.sql.

    Em seguida, você adiciona uma chave estrangeira na tabela AbsenceHistory.

Para adicionar a definição de chave estrangeira

  1. Em Visualização Esquema, com o botão direito do chaves nó, aponte para Adde clique em Chave estrangeira.

    O Add New Item caixa de diálogo aparece.

  2. Em nome, tipo FK_AbsenceHistory_Employee_EmployeeIDe clique em Add.

    O Transact-SQL editor abre, exibindo a definição da chave estrangeira.

  3. No Transact-SQL editor, substituir a definição existente para a chave externa com o seguinte código:

    ALTER TABLE [Person].[AbsenceHistory]
    ADD CONSTRAINT [FK_AbsenceHistory_Employee_EmployeeID] 
    FOREIGN KEY ([EmployeeID]) 
    REFERENCES [HumanResources].[Employee] ([BusinessEntityID]) 
    ON DELETE NO ACTION ON UPDATE NO ACTION;
    
    GO
    EXECUTE sp_addextendedproperty @name = N'MS_Description', 
        @value = 'Foreign key constraint referencing Employee.BusinessEntityID.', 
        @level0type = N'SCHEMA', 
        @level0name = N'Person', 
        @level1type = N'TABLE', 
        @level1name = N'AbsenceHistory', 
        @level2type = N'CONSTRAINT', 
        @level2name = N'FK_AbsenceHistory_Employee_EmployeeID';
    

    Esse código define um relacionamento de chave estrangeiro entre EmployeeID na tabela AbsenceHistory e o BusinessEntityID em [HumanResources].Tabela de [Funcionários].

  4. Sobre o arquivo menu, clique em Salvar Person.AbsenceHistory.FK_AbsenceHistory_Employee_EmployeeID.fkey.sql.

    Neste ponto, você percebe que a tabela deve ser no esquema de recursos humanos em vez disso. O procedimento seguinte, você corrigirá esse erro.

Corrigindo um erro de codificação

Porque você já tenha definido restrições e chaves estrangeiras, a movimentação de uma tabela e seus objetos relacionados para um esquema diferente seria normalmente consomem uma grande quantidade de tempo. Você pode usar a refatoração para rapidamente o banco de dados e mover facilmente a tabela e seus objetos relacionados para o esquema correto antes de continuar.

Para mover a tabela de AbsenceHistory o esquema de recursos humanos

  1. Em Visualização Esquema, clique com o botão direito na tabela AbsenceHistory, aponte para Refactore clique em Mover para o esquema.

    O Esquema mover caixa de diálogo aparece.

  2. No Novo esquema , clique em HumanResources.

  3. Verifique o Visualizar alterações caixa de seleção está selecionada e clique em OK.

    O Visualizar alterações caixa de diálogo aparece. Você pode revisar as alterações antes de aplicá-las ao seu projeto de banco de dados.

  4. Clique em Apply.

    As alterações de refatoração são aplicadas ao seu projeto de banco de dados. A tabela de AbsenceHistory se move do esquema da pessoa para o esquema de recursos humanos, juntamente com todos os objetos relacionados.

  5. Em Visualização Esquema, expanda o HumanResources nó do esquema e, em seguida, expanda o tabelas nó.

    A tabela de AbsenceHistory aparece no esquema correto.

    ObservaçãoObservação

    Quando você moveu os objetos para o esquema correto, você não alterou os nomes dos arquivos no qual os objetos são definidos. Se você quiser atualizar os nomes de arquivo, você deve renomeá-los em Solution Explorer.

    Em seguida, você concluirá as etapas restantes da tarefa de desenvolvimento.

A conclusão da tarefa de desenvolvimento

Agora que você tiver corrigido o esquema da tabela, você deve criar os seguintes objetos:

  • Um modo de exibição que mostra, para cada funcionário, o histórico de ausência completa.

  • Um procedimento armazenado que registra uma ausência e atualiza as horas de férias do funcionário, se o tipo de ausência estiver de férias.

Para adicionar a exibição de vEmployeeAbsenceHistory

  1. Em Visualização Esquema, no esquema de recursos humanos, expanda o modos de exibição nó.

  2. Com o botão direito do modos de exibição nó, aponte para Adde clique em Exibir.

    O Add New Item caixa de diálogo aparece.

  3. Em nome, tipo vEmployeeAbsenceHistorye clique em Add.

    O Transact-SQL editor abre, exibindo a definição para o modo de exibição.

  4. No Transact-SQL editor, substituir a definição do modo de exibição existente com o seguinte código:

    CREATE VIEW [HumanResources].[vEmployeeAbsenceHistory]
    AS 
    SELECT 
        a.* 
        ,c.[Title] 
        ,c.[FirstName] 
        ,c.[MiddleName] 
        ,c.[LastName] 
        ,c.[Suffix] 
    FROM [HumanResources].[Employee] e
        INNER JOIN [Person].[Person] c 
        ON c.[BusinessEntityID] = e.[BusinessEntityID]
        INNER JOIN [AbsenceHistory] a 
        ON e.[BusinessEntityID] = a.[EmployeeID] 
    ;
    
    GO
    EXECUTE sp_addextendedproperty @name = N'MS_Description', 
    @value = 'Returns employee name and absence history.', 
    @level0type = N'SCHEMA', 
    @level0name = N'HumanResources', 
    @level1type = N'VIEW', 
    @level1name = N'vEmployeeAbsenceHistory';
    

    Esse código define um modo de exibição que retorna dados de uma combinação de tabelas de funcionário, contato e AbsenceHistory.

  5. Sobre o arquivo menu, clique em Salvar HumanResources.vEmployeeAbsenceHistory.view.sql.

    Em seguida, você adiciona um procedimento armazenado.

Para adicionar o uspRecordAbsence o procedimento armazenado

  1. Em Visualização Esquema, no esquema de recursos humanos, expanda o programação nó e em seguida, expanda Stored Procedures nó.

  2. Com o botão direito do Stored Procedures nó, aponte para Adde clique em Procedimento armazenado.

    O Add New Item caixa de diálogo aparece.

  3. Em nome, tipo uspRecordAbsencee clique em Add.

    O Transact-SQL editor abre, exibindo a definição para o procedimento armazenado.

  4. No Transact-SQL editor, substituir a definição existente para o procedimento armazenado com o seguinte código:

    CREATE PROCEDURE [HumanResources].[uspRecordAbsence]
    @EmployeeID INT,
    @AbsenceType NCHAR(1),
    @StartDate DATETIME,
    @EndDate DATETIME
    AS
    BEGIN
    BEGIN TRANSACTION
    INSERT INTO [AbsenceHistory] (EmployeeID, BeginDate, EndDate, AbsenceType)
    VALUES(@EmployeeID, @StartDate, @EndDate, @AbsenceType)
    IF (@AbsenceType = 'V')
    BEGIN
    UPDATE [Employee]
    SET [VacationHours] = [VacationHours] - DateDiff(day, @StartDate, @EndDate)
    WHERE [BusinessEntityID] = @EmployeeID
    END
    COMMIT TRANSACTION
    END;
    

    Esse código define um procedimento armazenado que adiciona uma linha na tabela AbsenceHistory e atualiza o campo VacationHours na tabela de funcionários, se o tipo de ausência é 'v'.

  5. Sobre o arquivo menu, clique em Salvar dbo.uspRecordAbsence.proc.sql.

    No próximo procedimento, você deve atender os comentários que você recebe em uma revisão de código.

Comentários de revisão do código de endereçamento.

Quando revisar seu código com outro membro da equipe, você recebeu comentários sobre várias práticas recomendadas. Você foi solicitado para evitar o uso de SELECT *, porque ela produz avisos, se você executar a análise estática de código em seu código de banco de dados. Além disso, você foi solicitado para qualificar totalmente os nomes que você usou no procedimento armazenado. Finalmente, você foi solicitado para renomear a coluna BeginDate na tabela AbsenceHistory StartDate.

ObservaçãoObservação

Requisitos e padrões de codificação variam entre equipes. Você deve aplicar os padrões de codificação da sua organização para o Transact-SQL o código que você gravar. Esta explicação passo a passo é ilustrando os dois problemas. Além disso, você normalmente aplicaria essas técnicas para todos os novos códigos (por exemplo, qualificando totalmente todos os nomes do novo código), não apenas a um objeto de banco de dados único.

Novamente, esses tipos de alterações podem ser entediante e propenso a implementar. Você pode usar a refatoração de forma rápida e fácil atualizar seu código de banco de dados, o código de teste e planos de geração de dados do banco de dados.

Para expandir a SELECT * na definição de visualização

  1. Em Visualização Esquema, clique duas vezes o modo de exibição de vEmployeeAbsenceHistory.

    O Transact-SQL editor abre, exibindo a definição da exibição.

  2. Sobre o dados , aponte para Refactore clique em Expandir curingas.

    O Visualizar alterações caixa de diálogo aparece.

  3. No Expandir curingas , clique em a.*.

    O Visualizar alterações painel mostra as atualizações que serão aplicadas ao modo de exibição.

  4. Clique em Apply.

    As alterações são aplicadas ao seu projeto de banco de dados. Em seguida você irá qualificar totalmente os nomes no procedimento armazenado que você definiu em um procedimento anterior neste passo a passo.

Para qualificar totalmente os nomes no procedimento armazenado

  1. Em Visualização Esquema, clique duas vezes o procedimento armazenado de uspRecordAbsence.

    O Transact-SQL editor abre, exibindo a definição do procedimento armazenado.

  2. Sobre o dados , aponte para Refactore clique em qualificar totalmente nomes.

    O Visualizar alterações caixa de diálogo aparece e exibe todas as alterações que serão feitas se você aplicar a operação de refatoração para seu projeto.

  3. Após revisar as alterações, clique em Aplicar.

    As alterações são aplicadas ao seu projeto de banco de dados.

Para renomear a coluna de BeginDate

  1. Em Visualização Esquema, expanda a tabela de AbsenceHistory, expanda o nó de colunas, clique na coluna BeginDate.

  2. Sobre o dados , aponte para Refactore em seguida, clique em Renomear.

    A caixa de diálogo Rename aparece.

    ObservaçãoObservação

    Você também pode direito BeginDate em Visualização Esquema, aponte para Refactore em seguida, clique em Renomear.

  3. Em nome do novo, digite a data de início.

  4. Selecione o Visualizar alterações caixa de seleção e, em seguida, clique em OK.

    O Visualizar alterações caixa de diálogo aparece e exibe todas as alterações que serão feitas se você aplicar a operação de renomeação ao seu projeto de banco de dados.

  5. Clique em Apply.

    As alterações são feitas. O nome da coluna é atualizado e o nome da nova coluna aparece no Visualização Esquema para cada objeto que foi atualizado. Se você abrir a definição de restrição de data que você especificou anteriormente neste tópico, a restrição também foi atualizada para referenciar o novo nome de coluna.

Próximas etapas

Neste ponto, você normalmente seria examinar as atualizações com o membro da equipe que é executada a revisão do código e, em seguida, você deve verificar suas alterações ao controle de versão. Neste ponto, você atualizou o seu projeto de banco de dados, a representação offline de seu esquema de banco de dados. Você deve implantar esse projeto de banco de dados para um banco de dados de destino para atualizar o esquema implantado.

Quando você aplica uma operação de refatoração para seu projeto de banco de dados, informações sobre a operação são registradas em um arquivo de log de refatoração, se você pode renomear ou mover o objeto usando o sp_rename ou ALTER. Esta explicação passo a passo, o arquivo de log é denominado RefactorAdventureWorks.refactorlog. O arquivo de log a refatoração é usado no momento da implantação para tentar preservar a intenção de alterações de refatoração. Por exemplo, o log de refatoração registrará as alterações se você renomear uma coluna. No momento da implantação, essas informações impede a coluna com o nome antigo descartado, junto com quaisquer dados que ele contém, e uma coluna vazia que está sendo criado com um novo nome. Se você usar a refatoração, você não precisará adicionar instruções para os scripts de pré-implantação e pós-implantação para preservar os dados.

Consulte também

Tarefas

Como: Implantar alterações de refatoração de banco de dados

Conceitos

Mover um objeto de banco de dados para um esquema diferente

Qualificar totalmente os nomes dos objetos de banco de dados

Expanda os caracteres curinga nas instruções SELECT

Analisando o código do banco de dados para melhorar a qualidade do código