Escolar Documentos
Profissional Documentos
Cultura Documentos
VÍDEO LOCADORA
UNIP – SWIFT
Exemplo 1:
INSERT INTO Departamento (ID_Depto, NomeDepto, ID_Gerente)
VALUES (10, 'Marketing', 3);
UPDATE Funcionario SET salario = salario * 1.05
WHERE ID_Depto = 5;
COMMIT;
DELETE FROM Funcionario;
ROLLBACK;
No exemplo, o departamento 10 é inserido, os salários dos funcionários
do departamento 5 são atualizados, mas nenhum funcionário é excluído.
Exemplo 2:
INSERT INTO Departamento (ID_Depto, NomeDepto, ID_Gerente)
VALUES (11, 'RH', 2);
SAVEPOINT ponto1;
DELETE FROM Funcionario;
ROLLBACK TO SAVEPOINT ponto1;
UPDATE Funcionario SET salario = salario * 1.05
WHERE ID_Depto = 5;
COMMIT;
No exemplo, o departamento 11 é inserido, os salários dos funcionários
do departamento 5 são atualizados, mas nenhum funcionário é excluído.
Se uma única operação DML falhar durante a execução, será feito
rollback somente dessa operação.
Alguns SGBDs implementam um savepoint implícito à operação que
está sendo executada. Todas as outras alterações são mantidas, mas usuário
deve finalizar as transações explicitamente usando uma operação COMMIT ou
ROLLBACK.
Controle de concorrência:
Índices
Os índices aceleram a recuperação dos dados. Por exemplo, imagine
que você compre um livro de 800 páginas para suas pesquisas acadêmicas e
este não apresente em seu conteúdo um índice reportando o seu conteúdo.
Uma pesquisa talvez não fosse tão pavorosa, mas se você precisar de várias
pesquisas seria muito desagradável ficar horas procurando o conteúdo que
deseja estudar. Por outro lado, um livro que apresente um índice de suas
abordagens, se faz muito mais fácil e torna as pesquisas até prazerosas, pois
teremos condição de irmos direto ao ponto que queremos.
Um bom exemplo da criação necessária de índices, são aplicações
bancárias que atendem caixas eletrônicos.
Sempre que solicitamos uma determinada transação ou mesmo
informação, tal solicitação tende a ser cada vez mais rapidamente atendida.
E quantos correntistas geralmente têm os grandes bancos?
Será que quanto mais correntistas, mais lenta será a consulta?
Se não os índices, uma pesquisa pelo seu saldo demoraria quase o
tempo de um almoço para retornar seus dados, ou mesmo, retornar uma
resposta a sua solicitação de saque. Uma vez tendo ciência do funcionamento
dos índices, respeitando a sua regra de negócios, uma consulta deverá ter
resposta em tempo satisfatório.
A criação de índices deve ser considerada de acordo com a frequência
de uso de determinados dados e tabelas. Um índice pode ser um instrumento
chave para atender os objetivos da otimização. Entretanto, o mesmo pode ser
capaz de interferir no desempenho de forma negativa. Uma boa regra geral
segundo PRICE (2009) é: “Crie um índice quando uma consulta recuperar até
10% do total de linhas em uma tabela.”
Isso significa que, o critério para a escolha de índices é a seletividade.
Portanto, quando maior for a seletividade, melhor será o índice. Uma coluna
que contém valor exclusivo para cada linha (um número de CPF, por exemplo),
é um atributo candidato à indexação.
Assim, os índices são criados com intuito de eliminar a leitura de toda a
tabela na intenção de encontrar o registro. Mas deve-se tomar cuidado: possuir
mais índices em uma tabela não significa que as consultas serão aceleradas.
Cada operação DML (Data Manipulation Language) que seja submetida a
‘commit’ em uma tabela com índices significa que os índices devem ser
atualizados. Quanto mais índices associados a uma tabela existir, maior será o
esforço realizado pelo SGBD para atualizar todos os índices após uma
instrução DML.
Quando colunas indexadas são modificadas, o SGBD desloca recurso
internamente para manter esses índices atualizados e associados;
A manutenção de índices requer tempo e recursos, portanto, não crie
índices que não serão usados efetivamente;
Quando se contém grande quantidade de dados duplicados, índices
apresentam mais custo que benefícios. Assim como usar índices com atributos
de pouca variação, como “sexo” ou atributos do tipo flag.
Por que não criar índices?
Os índices são muito bons no sentido de desempenho do banco de
dados, otimizam as buscas de dados, mas, por outro lado, consomem muito
espaço em disco, o que pode se tornar concorrente do próprio banco se você o
detém em um espaço generoso ou pode se tornar caro quando de detém o
banco em um storage.
Árvores: B e B+
Árvore B:
Proposta por Bayer e McCreight em 1972 a árvore B opera junto com o
armazenamento secundário e pode ser sintonizada para reduzir os transtornos
impostos por essa armazenagem. Uma propriedade importante das árvores B é
o tamanho de cada nó, que pode ser tão grande quanto o tamanho de um
bloco. Uma árvore B é uma árvore de busca múltipla com as seguintes
propriedades:
1. A raiz tem pelo menos duas sub-árvores, a menos que ela seja uma
folha;
2. Cada nó não-raiz e não-folha contém k-1 chaves e k ponteiros para as
sub-árvores onde: [m/2] ≤ k ≤ m;
3. Cada nó folha contém k-1 chaves, onde [m/2] ≤ k ≤ m;
4. Todas as folhas estão no mesmo nível.
Árvore B+:
Uma árvore B+ é uma estrutura de dados do tipo árvore derivada das
árvores B, mas com uma forma diferente de armazenamento de suas chaves.
Tal organização confere propriedades, algoritmos de inserção, busca e
remoção de chaves diferentes dos utilizados em árvores B, mas com uma
gama de aplicações muito semelhantes em banco de dados e sistemas de
arquivos.
Estruturas de dados como essa são muito empregadas em banco de
dados e sistemas de arquivos como o NTFS para o Microsoft Windows, o
sistema de ficheiros ReiserFS para Unix, o XFS para IRIX e Linux, e o JFS2
para AIX, OS/2 e Linux, usam este tipo de árvore.
Assim como as árvores B, as árvores B+ visam reduzir as operações de
leitura e escrita em memória secundária, uma vez que, essas operações são
demoradas para um sistema computacional e devem ser minimizadas sempre
que possível.
Para definir uma árvore B+ devemos levar em consideração alguns
aspectos relativos ao disco de memória secundária utilizado e a quantidade de
memória primária disponível. Assim, para escolher o tamanho de uma página
de sequence set e, portanto, quantas chaves esta podem armazenar é uma
tarefa dependente do disco utilizado: suponhamos que cada página folha
armazene d chaves.
O index set, como dito anteriormente, apenas carrega cópias de chaves
para referenciar a busca e sua construção é semelhante ao de uma árvore B.
Suponhamos que estes nós internos possam apontar para n nós filhos, ou seja,
uma árvore B com no máximo n-1 chaves por página.
Páginas internas:
As páginas internas apresentam apenas referências para a localização
das chaves de busca contidas nas páginas folha. Estas páginas incluem a
página raiz da árvore e todos os nodos internos (exceto as páginas folha). Ou
seja, as páginas internas funcionam como um índice que apenas apontam para
a localização exata de uma chave e sua construção é semelhante ao de uma
árvore B com número mínimo de chaves igual a [n/2]-1 e máximo de n-1 por
página.
Páginas folha:
Nas páginas folha estão abrigadas todas as chaves inseridas e durante
o processo de inserção e remoção de chaves estas podem sofrer overflows ou
underflows conforme estas violem o número máximo igual a d ou mínimo igual
a [d/2] permitido de chaves.
A operação de busca sobre uma árvore B+ pode ser realizada de duas
maneiras: iniciando a busca (linear ou binária) pelo apontador para o ‘sequence
set’ ou pelo apontador para a raiz da árvore. O método mais eficiente é pelo
apontador para a raiz na qual é semelhante ao realizado numa árvore B. Dessa
forma quando buscamos uma chave k, percorremos a árvore de cima para
baixo carregando as páginas internas e selecionando a página apontada pelo
ponteiro correspondente ao intervalo no qual pertence k e caso uma cópia de k
esteja numa página interna devemos carregar a página à direita de k.
Encontrado uma página folha o algoritmo deve buscar k nesta e responder se
ela se encontra ou não.
estudios = Estúdios.
Tabela composta das seguintes colunas; id_estudio, nome, país e id_dist.
Sendo a coluna id_estudio a Chave Primária da tabela. A coluna nome é Não Nula, e a coluna
pais pode ser Nula.
filmes = Filmes.
Tabela composta das seguintes colunas; id_filme, nome, diretor, id_estudio,
ano_lanc, gênero e esrb. Sendo a coluna id_filme a Chave Primária da tabela. Todas as
colunas, com exceção da esrb, são NOT NULL.
departamento = Departamento.
Tabela composta das seguintes colunas; id_depto, id_super, nome_depto.
Sendo a coluna id_depto a Chave Primária da tabela. Todas as colunas são NOT NULL. A
coluna id_super é uma chave estrangeira que referencia a tabela empregados.
empregados = Empregados.
Tabela composta das seguintes colunas; matricula, nome, cpf, id_depto,
função, salario. Sendo a coluna matricula a Chave Primária da tabela. Todas colunas são NOT
NULL. A coluna id_depto é uma chave estrangeira que referencia a tabela departamento. A
coluna salário possui uma restrição CHECK, que verifica se o salário do funcionário é maior
que zero.
estoque = Estoque.
Tabela composta das seguintes colunas; id_estoque, id_filme, id_disco,
quantidade. Sendo a coluna id_estoque a Chave Primária da tabela. Todas as colunas são
NOT NULL. Essa tabela possui a Chave Estrangeira id_filme, que referencia a tabela Filmes, e
possui as restrições de ON DELETE CASCADE e ON UPDATE CASCADE. Essa tabela
também possui a restrição CHECK, que evita que a coluna quantidade fique negativa.
clientes = Clientes.
Tabela composta das seguintes colunas; id_cliente, cpf, nome, endereço, email
e telefone. Sendo a Chave Primária composta das colunas id_cliente e cpf. Todas as colunas,
com exceção da endereço, são NOT NULL.
locacoes = Locações
Tabela composta das seguintes colunas; n_nota, id_cliente, id_estoque,
prazo_dev, preco. Sendo a coluna n_nota a Chave Primária da tabela. As colunas id_cliente e
id_estoque são Chaves Estrangeiras que referenciam, respectivamente, as tabelas Clientes e
Estoque. Ambas as chaves estrangeiras possuem as restrições ON DELETE CASCADE e ON
UPDATE CASCADE. A coluna preço possui a restrição CHECK, que permite apenas valores
positivos na coluna.
ELMASRI, Rames; NAVATHE, Shamkant B. Sistemas de Banco de dados. 4ª ed. São Paulo:
Person Addison Wesley, 2005, 724 p.