Descrever objetos de banco de dados

Concluído

Além das tabelas, um banco de dados relacional pode conter outras estruturas que ajudam a otimizar a organização dos dados, encapsular ações programáticas e aprimorar a velocidade de acesso. Nesta unidade, você aprenderá sobre três dessas estruturas com mais detalhes: exibições, procedimentos armazenados e índices.

O que é uma exibição?

Uma exibição é uma tabela virtual com base no conjunto de resultados de uma consulta SELECT. Você pode considerar uma exibição como uma janela em linhas especificadas de uma ou mais tabelas subjacentes. Por exemplo, você pode criar uma exibição nas tabelas Order e Customer que recupera dados de pedidos e clientes para fornecer um único objeto que facilita a determinação de endereços de entrega de pedidos:

CREATE VIEW Deliveries
AS
SELECT o.OrderNo, o.OrderDate,
       c.FirstName, c.LastName, c.Address, c.City
FROM Order AS o JOIN Customer AS c
ON o.Customer = c.ID;

É possível consultar a exibição e filtrar os dados de maneira muito semelhante à de uma tabela. A consulta a seguir localiza detalhes de pedidos de clientes que vivem em Seattle:

SELECT OrderNo, OrderDate, LastName, Address
FROM Deliveries
WHERE City = 'Seattle';

O que é um procedimento armazenado?

Um procedimento armazenado define instruções SQL que podem ser executadas sob comando. Os procedimentos armazenados são usados para encapsular lógica programática de ações em um banco de dados que os aplicativos precisam executar ao trabalhar com os dados.

Você pode definir um procedimento armazenado com parâmetros para criar uma solução flexível para ações comuns que talvez precisem ser aplicadas aos dados com base em uma chave ou em critérios específicos. Por exemplo, o procedimento armazenado a seguir pode ser definido para alterar o nome de um produto com base na ID do produto especificada.

CREATE PROCEDURE RenameProduct
	@ProductID INT,
	@NewName VARCHAR(20)
AS
UPDATE Product
SET Name = @NewName
WHERE ID = @ProductID;

Quando um produto precisa ser renomeado, você pode executar o procedimento armazenado, passando a ID do produto e o novo nome a ser atribuído:

EXEC RenameProduct 201, 'Spanner';

O que é um índice?

Um índice ajuda a pesquisar dados em uma tabela. Imagine um índice em uma tabela como um índice no final de um livro. Um índice de livro contém um conjunto classificado de referências, com as páginas nas quais cada referência ocorre. Quando você deseja encontrar uma referência a um item no livro, procura por ela no índice. Você pode usar os números de página no índice para ir diretamente para as páginas corretas no livro. Sem um índice, talvez seja necessário ler todo o livro para localizar as referências que você está procurando.

Quando você cria um índice em um banco de dados, especifica uma coluna da tabela e o índice contém uma cópia desses dados em uma ordem classificada, com ponteiros para as linhas correspondentes na tabela. Quando o usuário executa uma consulta que especifica essa coluna na cláusula WHERE, o sistema de gerenciamento de banco de dados pode usar esse índice para buscar os dados mais rapidamente do que se precisasse examinar toda a tabela, linha por linha.

Por exemplo, você pode usar o código a seguir para criar um índice na coluna Name da tabela Product:

CREATE INDEX idx_ProductName
ON Product(Name);

O índice cria uma estrutura baseada em árvore que o otimizador de consulta do sistema do banco de dados pode usar para localizar rapidamente linhas na tabela Product com base em um Name especificado.

Exemplo de um índice que cria uma estrutura baseada em árvore.

Em uma tabela que contém poucas linhas, o uso do índice provavelmente não será mais eficiente do que simplesmente ler a tabela inteira e localizar as linhas solicitadas pela consulta (nesse caso, o otimizador de consulta ignorará o índice). No entanto, quando uma tabela tem muitas linhas, os índices podem melhorar drasticamente o desempenho das consultas.

É possível criar vários índices em uma tabela. Portanto, se você também quisesse encontrar produtos com base no preço, a criação de outro índice na coluna Price da tabela Product poderia ser útil. No entanto, os índices não são gratuitos. Um índice consome espaço de armazenamento e sempre que você insere, atualiza ou exclui dados em uma tabela, é necessário haver manutenção nos índices dessa tabela. Esse trabalho adicional pode causar lentidão nas operações de inserção, atualização e exclusão. Você precisa ter um equilíbrio entre o uso índices que aceleram suas consultas e o custo de executar outras operações.