Sunteți pe pagina 1din 82

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso

1
ndice
Captulo 1 - Introduo a Sistemas de Bancos de Dados ........................................... 3
1.1 SGBD SISTEMAS GERENCIADORES DE BANCOS DE DADOS ................ 4
1.2 Aplicao de Exemplo ............................................................................................... 5
Captulo 2 - Linguagens de Consulta.......................................................................... 9
2.1 lgebra Relacional..................................................................................................... 9
2.1.1 Seleo................................................................................................................................10
2.1.2 Projeo..............................................................................................................................12
2.1.3 Produto Cartesiano.............................................................................................................14
2.1.4 Renomeao.......................................................................................................................17
2.1.5 Unio..................................................................................................................................17
2.1.6 Diferena de Conjuntos......................................................................................................18
2.1.7 Interseo de Conjuntos......................................................................................................19
2.1.8 J uno.................................................................................................................................19
2.1.9 Diviso................................................................................................................................20
2.1.10 ASSIGNMENT..............................................................................................................22
2.2 QBE e QUEL............................................................................................................ 23
2.3 SQL (Structured Query Language) ....................................................................... 23
2.3.1 Estrutura Bsica da DML do SQL......................................................................................23
2.3.1.1 A clusula SELECT..................................................................................................24
2.3.1.2 A clusula WHERE ..................................................................................................26
2.3.1.3 A clusula FROM.....................................................................................................27
2.3.1.4 A Renomeao..........................................................................................................28
2.3.1.5 Operadores de Strings...............................................................................................29
2.3.1.6 Ordenao de Resultado............................................................................................29
2.3.2 Operaes com Conjuntos..................................................................................................30
2.3.3 Funes de Agregao........................................................................................................31
2.3.4 Valores Nulos (NULL).......................................................................................................34
2.3.5 SubConsultas Aninhadas (Subqueries)...............................................................................35
2.3.5.1 Pertencer ao Conjunto...............................................................................................35
2.3.5.2 Comparao de Conjuntos........................................................................................36
2.3.5.3 Teste de Relaes Vazias..........................................................................................38
2.3.6 Relaes Derivadas.............................................................................................................39
2.3.7 Modificando os Dados........................................................................................................39
2.3.7.1 DELETE ...................................................................................................................39
2.3.7.2 INSERT.....................................................................................................................43
2.3.7.3 UPDATE - Atualizaes...........................................................................................45
2.3.8 DDL (Linguagem de Definio de Dados).........................................................................46
2.3.8.1 Tipos de Domnios Existentes no SQL-92................................................................46
2.3.8.2 Definio de Esquemas.............................................................................................47
Captulo 3 - Processamento de Consultas ................................................................. 52
3.1 Conceitos Bsicos ..................................................................................................... 52
3.1.1 Reviso HASHING............................................................................................................53
3.2 Tipos de Organizao de Arquivos ........................................................................ 53
3.2.1 Arquivos com Registros No Ordenados.........................................................................54
3.2.2 Arquivos com Registros Ordenados...................................................................................54
3.2.3 Arquivos HASH ou Diretos................................................................................................54
3.2.4 Arquivos com ndices.........................................................................................................54
3.2.5 Como indexar uma tabela?.................................................................................................55
3.3 ndices Ordenados ................................................................................................... 56
3.3.1 ndices Densos e Esparsos..................................................................................................57
3.3.2 ndices de mltiplos nveis.................................................................................................58
3.3.3 Atualizao de ndices........................................................................................................59
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
2
3.3.3.1 Remoo...................................................................................................................59
3.3.3.2 Incluso.....................................................................................................................60
3.3.4 ndices Secundrios............................................................................................................60
3.4 ndices em rvore.................................................................................................... 61
3.4.1 rvores B............................................................................................................................61
3.4.1.1 Buscas.......................................................................................................................61
3.4.1.2 Insero de Dados.....................................................................................................62
3.4.1.3 Remoo de Dados....................................................................................................68
3.4.2 rvores B+.........................................................................................................................73
3.5 Boas Prticas para Indexao................................................................................. 76
Captulo 4 - Processamento de Transaes............................................................... 78
4.1 Conceito de Transao ............................................................................................ 78
4.2 Por que Controlar a Concorrncia?....................................................................... 79
4.2.1 Problema 1 Perda de Atualizao....................................................................................79
4.2.2 Problema 2 Atualizao Temporria (Leitura Suja dirty read) ....................................79
4.2.3 Problema 3 Agregao Incorreta.....................................................................................80
4.3 Por que Mecanismos de Recuperao?.................................................................. 80
4.4 Propriedades Desejveis de uma Transao ......................................................... 80
4.5 Transaes na linguagem SQL............................................................................... 81
Captulo 5 - Tcnicas de Controle de Concorrncia................................................. 82




Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
3
Captulo 1 - Introduo a Sistemas de
Bancos de Dados
Neste captulo inicial faremos uma pequena introduo aos conceitos de
bancos de dados. H muitas definies para bancos de dados:
Consiste em um sistema de manuteno de informaes por computador que tem
por objetivo mant-las e disponibiliz-las aos seus usurios quando solicitadas
(C.J . DATE).
Coleo de dados, organizados, integrados (no duplicados), que constituem
uma representao natural, sem imposio de restries ou modificaes para
todas as aplicaes relevantes.(PALMER).
H autores que fazem distino entre Dado e Informao. Os dados so
um conjunto de fatos distintos e objetivos, relativos a eventos (DAVENPORT &
PRUSAK, 1998) que constituem a base para a criao da informao, sendo obtidos,
por exemplo, de registros ou transaes. Eles no possuem significados inerentes,
descrevem apenas parte do acontecido e no fornecem condies para qualquer
julgamento, interpretao ou base para tomada de ao.
As informaes so dados dotados de relevncia e propsito
(DAVENPORT & PRUSAK, 1998), constituindo-se em um fluxo de mensagens que
tem por objetivo exercer algum impacto sobre o julgamento e o comportamento do seu
receptor.
Tabela 1 - Caractersticas de dado e informao
Dado Informao
Simples observaes sobre o estado do
mundo
Facilmente estruturado
Facilmente obtido por mquinas
Freqentemente quantificado
Facilmente transfervel
Dados dotados de relevncia e propsito
Requer unidade de anlise
Exige consenso em relao ao significado
Exige necessariamente a mediao humana

A Tabela 1e a Figura 1, ilustram as definies acima:

Figura 1 - Exemplo de dado e informao
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
4
1.1 SGBD SISTEMAS GERENCIADORES DE BANCOS DE
DADOS
Um SGBD uma coleo de programas que permite a definio, construo
e manipulao de Bases de Dados para as mais diversas finalidades.
De forma resumida, podemos dizer que:
SGBD =Coleo de dados inter-relacionados +Camada de software para acess-los
Alguns dos principais objetivos de um SGBD so prover um ambiente que
seja adequado e eficiente para recuperar e armazenar dados bem como prover os
usurios com uma viso abstrata destes.
No devemos confundir um SGBD, Sistema Gerenciador de Banco de
Dados, com a parte do Sistema Operacional chamada de Gerenciador de Arquivos. Veja
algumas das desvantagens de um Gerenciador de Arquivo frente a um SGBD.
1. Redundncia e inconsistncia de dados. Arquivos com formatos diferentes,
diferentes linguagens de programao, elementos de informao duplicados em
diversos arquivos.
2. Dificuldade no acesso aos dados. Dados recuperados de forma complexa,
inconveniente e ineficiente.
3. Isolamento de dados. Dados intimamente relacionados podem estar mantidos
separadamente (Ex.: Planilhas Excel).
4. Anomalias de acesso concorrente. Dados acessados por diferentes programas
aplicativos uma tarefa complicada a superviso e controle desta
concorrncia.
5. Problemas de segurana. Difcil definio de nveis de visibilidade para
usurios.
6. Problemas de integridade. Restrio de integridade nos valores dos atributos
de difcil manuteno.

Abaixo temos a representao bsica e simplificada da estrutura de
funcionamento de um sistema de banco de dados.

Banco de Dados
Programas Usurios
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
5
1.2 Aplicao de Exemplo
Nosso estudo estar embasado em uma aplicao bancria. Desenvolvemos
um banco de dados relacional para expressar os correntistas de um banco. Os esquemas
abaixo detalham o banco de dados (projetos lgico e fsico). Os dados de demonstrao
so sintticos.
Tipo
Gerencia
Tem
tem
Abre
toma
faz
Agencia
ID
BANCO_ID (FK)
Cidade
Nome
Codigo
Cliente
ID
NOME
Tipo
Conta
ID
AGE_ID (FK)
CLI_ID (FK)
CodigoConta
DataAbertura
Saldo
Banco
ID
Nome
Codigo
Movimentacao
ID
CONTA_ID (FK)
Valor
Operacao
CodigoDocumento
Data
Pessoa Fisica
ID (FK)
CPF
DataNascimento
Pessoa J uridica
ID (FK)
CGC
DataFormacao
InscricaoEstadual
Emprestimo
ID
AGE_ID (FK)
CLI_ID (FK)
Data
DataPagamento
J urosMensais
ValorEmprestado
ValorPago

Figura 2 - Esquema Lgico do Banco de Dados de Aplicao Bancria
Agencia
ID: Long Integer
BANCO_ID: Long Integer (FK)
Cidade: Text(50)
Nome: Text(50)
Codigo: Text(20)
Cliente
ID: Long Integer
NOME: Text(50)
Tipo: Text(1)
Conta
ID: AutoNumber
AGE_ID: Long Integer (FK)
CLI_ID: Long Integer (FK)
CodigoConta: Text(50)
DataAbertura: Date/Time
Saldo: Long Integer
Banco
ID: Long Integer
Nome: Text(100)
Codigo: Text(10)
Movimentacao
ID: AutoNumber
CONTA_ID: Long Integer (FK)
Operacao: Text(1)
Valor: Currency
CodigoDocumento: Text(10)
Data: Date/Time
Pessoa Fisica
ID: Long Integer (FK)
CPF: Text(20)
DataNascimento: Date/Time
Pessoa J uridica
ID: Long Integer (FK)
CGC: Text(20)
DataFormacao: Date/Time
InscricaoEstadual: Text(20)
Emprestimo
ID: AutoNumber
CLI_ID: Long Integer (FK)
AGE_ID: Long Integer (FK)
Data: Date/Time
DataPagamento: Date/Time
J urosMensais: Decimal
ValorEmprestado: Currency
ValorPago: Currency

Figura 3 - Esquema Fsico do Banco de Dados de Aplicao Bancria
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
6
Exemplos de dados da Tabela BANCO
ID Nome Codigo
1 Banco do Brasil 001
2 Banco Real 356
3 Banco Bradesco 789
4 Banco Itau 129

Exemplos de dados da Tabela AGENCIA
ID BANCO_ID Cidade Nome Codigo
1 1 Rio de J aneiro Ag Centro 4891-1
2 1 Rio de J aneiro Ag Tijuca 3872-1
3 1 Sao Paulo Ag Tiete 3098-2
4 2 Salvador Ag Ondina 8987-2
5 2 Sao Paulo Ag Tiete 2 2121-0
6 2 Sao Paulo Ag Pinhes 213-A
7 3 Rio de J aneiro Ag Borel 2874-2
8 3 Brasilia Ag Ministerios 2129-0
9 3 Salvador Ag Barra 9827-2
10 4 Sao Paulo Ag Barra Funda 2233-2
11 4 Sao Paulo Ag Ministerios 0983-0
12 4 Sao Paulo Ag Barra 9354-2

Exemplos de dados da Tabela CLIENTE
ID NOME Tipo
1 Leonardo F
2 Lucro Certo SA J
3 Maria F
4 J oao Pedro F
5 Mudancas J oe J
6 Armando J ose F

Exemplos de dados da Tabela PESSOA FISICA
ID CPF DataNascimento
1 07898281790 6/8/1977
3 12345678912 10/1/1980
4 98765432109 26/2/1969
6 56941236420 17/10/1940

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
7
Exemplos de dados da Tabela PESSOA J URIDICA
ID CGC DataFormacao InscricaoEstadual
2 87628871/0001 1/12/1957 29389
5 98767266/0002 6/7/1997 56416

Exemplos de dados da Tabela CONTA
ID AGE_ID CLI_ID CodigoConta DataAbertura Saldo
1 1 4 3652-8 13/1/2002 90821
2 2 4 3323-4 23/12/1998 12000
3 3 1 3215-9 6/1/1997 1000
4 4 3 9873-8 3/3/2000 50000
5 5 5 4982-1 18/8/1999 33312
6 6 6 3177-2 14/7/2003 800
7 7 2 3212-1 9/6/2002 1300
8 8 2 0098-0 20/5/2001 47893
9 9 1 3277-1 3/10/2002 78933

Exemplos de dados da Tabela MOVIMENTACAO
ID CONTA_ID Valor Operacao CodigoDocumento Data
1 1 R$ 500,00 C x998 10/1/2000
2 1 R$ 1.500,00 D x997 30/1/2000
3 1 R$ 1.500,00 C x998 20/5/2000
4 1 R$ 4.500,00 D x997 10/1/2001
5 2 R$ 1.800,00 C 3872 10/1/2000
6 2 R$ 1.900,00 C 2908 30/1/2000
7 2 R$ 100,00 C 2398 20/5/2000
8 2 R$ 50,00 C 9823 10/1/2001
9 9 R$ 100,00 C 2111 10/1/1998
10 8 R$ 200,00 D 3444 11/5/1999
11 7 R$ 350,00 C 5783 14/7/2002
12 6 R$ 450,00 D 9234 15/11/2000
13 5 R$ 550,00 C 9324 15/10/1997

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
8
Exemplo da Tabela EMPRESTIMO
ID AGE
_ID
CLI_ID Data DataPagament
o
JurosM
ensais
ValorEmpresta
do
ValorPago
1 5 1 12/12/2003 3 R$ 5.000,00 R$ 0,00
2 11 5 4/11/2002 1 R$ 500.000,00 R$ 0,00
3 1 6 22/8/2003 5 R$ 15.000,00 R$ 10.000,00
4 5 3 12/12/2002 12/5/2003 3 R$ 50.000,00 R$ 50.000,00
5 12 3 14/12/2002 12/5/2003 1 R$ 20.000,00 R$ 20.000,00
6 3 1 21/8/2002 21/8/2003 5 R$ 44.000,00 R$ 44.000,00
7 6 2 7/5/2002 7/5/2003 3 R$ 89.000,00 R$ 89.000,00
8 6 2 4/4/2002 30/4/2002 1 R$ 3.000,00 R$ 3.030,00
9 10 1 22/10/2002 31/12/2002 5 R$ 15.000,00 R$ 15.000,00

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
9
Captulo 2 - Linguagens de Consulta
Uma linguagem de consulta a linguagem atravs da qual usurios e
programas solicitam informaes de um banco de dados. De uma maneira geral, elas
apresentam nvel mais alto quando comparadas a linguagens de programao (Fortran,
C, Pascal etc).
Os operadores de uma linguagem de consulta so capazes de manipular
conjuntos inteiros de objetos simples, sem a restrio de um registro de cada vez.
Neste contexto, linguagens de consultas podem ser:
1. Procedurais usurios informam ao sistema a sequncia de operaes que deve
ser enviada ao banco de dados, tal seqncia ir computar o resultado desejado.
Exemplos: lgebra Relacional e PLSQL (linguagem procedural da Oracle que
estende o SQL).
2. No-Procedurais ou Declarativas usurios especificam a informao que
desejam sem se preocupar em informar a maneira como ela ser recuperada.
Exemplos: SQL e QBE.
Uma linguagem de consulta completa ainda contempla facilidades para
insero, remoo e atualizao de informaes, bem como criao e remoo de
objetos em um banco de dados.
2.1 lgebra Relacional
A lgebra relacional uma linguagem de consulta procedural muito
importante porque serve como base para a implementao eficiente de linguagens
declarativas (mais simples). a base matemtica dos bancos de dados relacionais, que
so os bancos de dados convencionais mais utilizados nos dias atuais.
Como estamos no mundo relacional, os objetos do banco de dados so
tabelas (relaes) que apresentam relacionamentos entre si. Assim, a linguagem consiste
em um conjunto de operaes que tomam uma ou mais relaes como entrada e
produzem uma nova relao como resultado (mundo fechado).
Abaixo temos algumas propriedades das relaes para melhor entendimento
de lgebra relacional:
As tuplas de uma relao no tm uma ordem definida. Formam um conjunto.
Uma tupla formada por um conjunto de pares (<atributo>, <valor>) e tambm
no tm uma ordem explcita.
Todos os valores so atmicos, no h atributos multivalorados (chamamos esta
regra de primeira forma normal).
No h tuplas duplicadas. No pode haver duas linhas com os mesmos valores
em uma tabela.
Cada chave candidata deve ser nica para cada tupla.
Nenhuma chave primria pode ser nula.
Uma tupla em uma relao que referencia outra relao deve referenciar uma
tupla existente naquela relao (chamamos esta regra de integridade referencial).
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
10
As operaes da lgebra relacional podem ser divididas em dois grupos:
1. Operaes Fundamentais
a. SELEO (unria)
b. PROJ EO (unria)
c. PRODUTO CARTESIANO (binria)
d. RENOMEAO (unria)
e. UNIO (binria)
f. DIFERENA DE CONJ UNTOS (binria)
2. Operaes Derivadas das Fundamentais (e muito importantes)
a. INTERSEO DE CONJ UNTOS
b. J UNO
c. DIVISO
d. ASSIGNMENT

A partir de agora, examinaremos cada operao da lgebra relacional.
2.1.1 Seleo
A operao de seleo constri uma nova tabela usando um subconjunto
horizontal de uma tabela existente, isto , todas as linhas de uma tabela que satisfaam a
determinada condio.
A condio expressa como uma combinao lgica (booleana) de termos,
sendo cada termo uma comparao singela que pode se tornar verdadeira ou falsa para
uma determinada linha, inspecionando-se aquela linha isoladamente.
Se um termo envolver uma comparao entre valores de dois atributos
dentro da mesma linha, ento esses atributos tm que estar definidos no mesmo
domnio. Por exemplo, no possvel comparar diretamente um nmero com uma
string.
A operao de seleo
unria;
usada para selecionar um subconjunto das tuplas em uma relao, subconjunto
este de tuplas que satisfazem a um predicado especificado (condio de
seleo);
representada pela letra grega sigma ( );
Possui o predicado subscrito em , sendo o predicado uma combinao booleana
de termos;
Possui a relao argumento entre parnteses seguindo o ;
Em geral denotada da seguinte forma: <condio de seleo>(<nome da
relao>).
Exemplo:
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
11

A B C
1 Y a
3 X c
2 Y b



A B C
2 Y b

As operaes lgicas permitidas so =, !=(<>), <, <=, >, >=.
Os conectores lgicos so ^ (operador E and) e v (operador OU
or).
Outros exemplos:
Selecione as agncias do Rio de J aneiro.
cidade=Rio de J aneiro (AGENCIA)
ID BANCO_ID Cidade Nome Codigo
1 1 Rio de J aneiro Ag Centro 4891-1
2 1 Rio de J aneiro Ag Tijuca 3872-1
7 3 Rio de J aneiro Ag Borel 2874-2


B=y ^A>1
(R)
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
12
Encontrar as movimentaes de crdito maiores do que 1000.
operacao=C ^valor>1000 (MOVIMENTACAO)
ID CONTA_ID Valor Operacao CodigoDocument
o
Data
3 1 R$ 1.500,00 C x998 20/5/2000
5 2 R$ 1.800,00 C 3872 10/1/2000
6 2 R$ 1.900,00 C 2908 30/1/2000

2.1.2 Projeo
A operao de projeo forma uma nova tabela usando um subconjunto
vertical de algumas colunas de uma tabela, subconjunto obtido pela seleo de atributos
especificados, extraindo colunas especficas e removendo qualquer linha duplicata no
conjunto de colunas extradas.
A projeo nos fornece a maneira de permutar (reordenar) os atributos de
uma dada relao. Nenhum atributo pode ser especificado mais de uma vez em uma
operao de projeo. A omisso da lista de nomes de atributos equivalente
especificao de uma lista contendo todos os nomes de atributos da relao dada, na sua
ordem correta, da esquerda para a direita. Em outras palavras, tal projeo idntica
relao dada.
Observao: qualquer operao da lgebra relacional um processo de
construo de tabela. Reconhecendo este fato e ainda que, matematicamente falando,
uma relao (tabela) um conjunto um conjunto de linhas e por definio conjuntos
no podem conter elementos em duplicata, justifica-se o fato de que em uma projeo as
linhas em duplicata sejam extradas do resultado final.
A operao de projeo
unria;
usada para retornar a prpria relao argumento, mas com certos atributos
(colunas) deixados de fora;
representada pela letra grega pi ( );
Possui os atributos que se deseja que apaream no resultado como subscritos de
;
Possui a relao argumento entre parnteses seguindo o ;
Em geral denotada da seguinte forma: <lista de atributos>(<nome da
relao>).
Exemplo:
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
13


A B C
1 y a
3 x c
2 y b



B C
y A
x C
y B

Repare a remoo de duplicatas!
Os nomes dos atributos devem ser separados por vrgula (,).
possvel agrupar operadores:
A B C
1 y a
3 x c
2 y b



B
y

B
y
x

B,C
(R)
B
(R)

B
(
B=y ^A>1
(R))
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
14
Outros exemplos:
Mostre o CPF das pessoas fisicas.
cpf (PESSOA FISICA)
cpf
07898281790
12345678912
56941236420
98765432109

Mostre os cdigos de bancos existentes em Salvador.
Devemos fazer uma seleo de todas as agncias de Salvador, em seguida projetar o
cdigo dos bancos.
banco_id (cidade=Salvador(AGENCIA))
banco_id
2
3

Observe que neste caso, se houver mais de uma agncia na cidade, o cdigo do banco
aparecer somente uma vez no resultado.
2.1.3 Produto Cartesiano
Esta operao combina atributos (colunas) a partir de diversas relaes.
Trata-se de uma operao binria muito importante e custosa. Esta operao nos mostra
todos os atributos das relaes envolvidas.
O resultado do produto cartesiano uma nova relao em que cada tupla
uma combinao de tuplas das relaes envolvidas.
Nesta operao, a tendncia que o tamanho do resultado seja bem grande
(operao custosa). Por exemplo, se uma tabela A tem y tuplas e uma tabela B
tem z tuplas, ento o resultado (A X B) ter y*z tuplas.
A operao de produto cartesiano:
binria;
representada pela letra xis ( X );
Tem uma representao natural para os nomes dos atributos quando no existe
ambigidade (vide exemplo abaixo);
Em geral denotada da seguinte forma: R1 X R2.





Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
15
Exemplo:
R1 R2
A B C
1 y a
3 x c
2 y b









Como implementar uma correlao entre os atributos A e D em R1 e R2
especificamente? (J UNCAO)
D C
1 Vinho
2 Champagne
A B R1.C D R2.C
1 y a 1 Vinho
1 y a 2 Champagne
3 x c 1 Vinho
3 x c 2 Champagne
2 y b 1 Vinho
2 y b 2 Champagne
R1 X R2
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
16
Outros Exemplos:
CLIENTE =(codigo, nome)
FIADO =(codigo, valor)
Se quisermos saber os nomes dos clientes e seus fiados, deveramos fazer:
codigo,nome,valor ( CLIENTE.codigo=FIADO.codigo (Cliente x Fiado) )
Supondo as tabelas CLIENTE e FIADO abaixo, podemos representar das etapas desta
consulta.
CLIENTE FIADO
codigo nome
1 Chico
2 Ana


CLIENTE X FIADO
CLIENTE.codigo nome FIADO.codigo valor
1 Chico 1 5,00
1 Chico 1 10,00
1 Chico 2 4,00
1 Chico 2 8,00
2 Ana 1 5,00
2 Ana 1 10,00
2 Ana 2 4,00
2 Ana 2 8,00
CLIENTE.codigo=FIADO.codigo (CLIENTE X FIADO)
CLIENTE.codigo nome FIADO.codigo valor
1 Chico 1 5,00
1 Chico 1 10,00
2 Ana 2 4,00
2 Ana 2 8,00

Encontrar uma combinao de servios, indicando pessoas fsicas para pessoas jurdicas
venderem produtos ou servios.
PESSOA FISICA X PESSOA J URIDICA
pessoa
fisica.I
D
CPF DataNasci
mento
pessoaj
uridica.I
D
CGC DataForm
acao
InscricaoEs
tadual
1 07898281790 6/8/1977 2 87628871/0001 1/12/1957 29389
1 07898281790 6/8/1977 5 98767266/0002 6/7/1997 56416
3 12345678912 10/1/1980 2 87628871/0001 1/12/1957 29389
3 12345678912 10/1/1980 5 98767266/0002 6/7/1997 56416
4 98765432109 26/2/1969 2 87628871/0001 1/12/1957 29389
4 98765432109 26/2/1969 5 98767266/0002 6/7/1997 56416
6 56941236420 17/10/1940 2 87628871/0001 1/12/1957 29389
6 56941236420 17/10/1940 5 98767266/0002 6/7/1997 56416
codigo valor
1 5,00
1 10,00
2 4,00
2 8,00
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
17
2.1.4 Renomeao
A operao de renomear uma tabela usada sempre que uma relao
aparece mais de uma vez em uma consulta. representada pela letra grega (ro) . A
forma geral :
<novo nome>(TABELA)

Exemplo:
Encontrar as agncias que so da mesma cidade que a agncia ID nmero 6.
Para obtermos a cidade da agncia 6 fazemos:
id=6 (AGENCIA)
ID BANCO_ID Cidade Nome Codigo
6 2 Sao Paulo Ag Pinhes 213-A

Entretanto, para encontrar outras agncias com esta mesma cidade, necessria uma
nova referncia tabela agncia. Se novamente inserirmos a palavra AGENCIA na
expresso, geraremos uma ambigidade, ento necessrio utilizar renomeao.
AGENCIA2 (AGENCIA)
Finalmente obtemos:
agencia.cidade =agencia2.cidade ( id=6 (AGENCIA) X AGENCIA2 (AGENCIA) )

ID BANCO_ID Cidade Nome Codigo
12 4 Sao Paulo Ag Barra 9354-2
11 4 Sao Paulo Ag Ministerios 0983-0
10 4 Sao Paulo Ag Barra Funda 2233-2
6 2 Sao Paulo Ag Pinhes 213-A
5 2 Sao Paulo Ag Tiete 2 2121-0
3 1 Sao Paulo Ag Tiete 3098-2

Exerccio: Para obtermos o resultado acima, falta uma projeo na expresso acima?
Onde e como a colocar?
2.1.5 Unio
A operao binria unio representada, como na teoria dos conjuntos, pelo
smbolo U. A unio de duas relaes R e S (R U S) o conjunto de todas as tuplas
pertencentes a R, ou a S, ou a ambas.
A operao de unio a primeira que requer que as duas relaes operando
sejem compatveis de unio, isto , elas tm que ser do mesmo grau (mesmo nmero
de atributos), digamos n, e os atributos das duas relaes tm que ser retirados do
mesmo domnio (no precisam ter o mesmo nome).
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
18
Lembre-se que, como na teoria dos conjuntos, duplicatas so eliminadas em
uma operao de unio.
Exemplo:
Encontrar todos os clientes, com informaes detalhadas.
necessrio obtermos dados de pessoas fsicas e de pessoas jurdicas, assim:
id,cpf,datanascimento(PESSOA FISICA) U id,cgc,dataformacao(PESSOA J URIDICA)
id cpf datanascimento
1 07898281790 6/8/1977
2 87628871/0001 1/12/1957
3 12345678912 10/1/1980
4 98765432109 26/2/1969
5 98767266/0002 6/7/1997
6 56941236420 17/10/1940

O nome da coluna veio como cpf por que?
2.1.6 Diferena de Conjuntos
A diferena entre duas relaes R e S (nesta ordem), (R S), o conjunto de
todas as tuplas t pertencentes a R, mas no a S.

Exemplo:

Encontrar os cdigos de bancos que no tm agncias no RIO DE J ANEIRO.

ID (BANCO) BANCO_ID ( cidade=RIO DE JANEIRO (AGENCIA) )
(todos os bancos) (bancos com agncias no rio de janeiro)

Na primeira parte projetamos todos os cdigos dos bancos e na segunda parte,
projetamos os cdigos de bancos das agncias existentes no Rio de J aneiro.

Se um banco tem agncia no Rio de J aneiro, ento seu cdigo aparece na primeira parte
E na segunda, fazendo com que ele NO aparea no resultado final.

Se um banco no tem agncia no Rio, ento seu cdigo s aparece na primeira parte,
fazendo com que entre no resultado final, exemplificado abaixo.

id
2
4

Observao importante: na diferena de conjuntos, bem como na unio, as
relaes devem ser compatveis de unio.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
19
2.1.7 Interseo de Conjuntos
A operao representada pelo smbolo . A interseo de duas relaes R
e S (R S) o conjunto de todas as tuplas pertencentes simultaneamente a R e a S. A
interseo poder ser expressa atravs de diferena de conjuntos como:
R S =R (R S)
Exemplos:
Encontre o cdigo dos clientes que tem emprstimo e conta na agncia de
ID 3.
CLI_ID ( age_id=3 (EMPRESTIMO) ) CLI_ID ( age_id=3 (CONTA) )
(clientes que tm emprstimo) (clientes que tm conta)
cli_id
1

2.1.8 Juno
uma das operaes mais importantes da lgebra relacional. Simplifica a
operao de produto cartesiano atravs do operador de seleo, que fica implcito.
A operao de juno forma, a partir de duas tabelas que possuem, cada
uma, uma coluna definida em um domnio comum, uma tabela nova e mais ampla, na
qual cada linha formada pela concatenao de duas linhas, uma de cada tabela
original, sendo que as duas linhas tm o mesmo valor naquelas duas colunas.
Se uma linha de uma das tabelas originais no tiver correspondente na outra,
ela simplesmente no participa do resultado.
Na verdade esta definio corresponde apenas a uma das vrias unies
possveis ou seja, a juno na qual a condio de juno est baseada na igualdade
entre valores na coluna comum e por isso conhecida como equi-join. possvel
tambm definir, por exemplo, uma juno maior do que, uma juno no-igual, etc.
A operao de juno representada da seguinte forma:
R1 (condio) R2
equivalente a:
condio (R1 X R2)
Exemplos:
Encontre o nome dos clientes que tm emprstimos, o valor do emprstimo
e o ID da agncia que emprestou o dinheiro.
Nome,ValorEmprestado,AGE_ID ( CLIENTE(id=cli_id)EMPRESTIMO )
nome valoremprestado age_id
Leonardo R$ 5.000,00 5
Leonardo R$ 44.000,00 3
Leonardo R$ 15.000,00 10
Lucro Certo SA R$ 89.000,00 6
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
20
Lucro Certo SA R$ 3.000,00 6
Maria R$ 50.000,00 5
Maria R$ 20.000,00 12
Mudancas J oe R$ 500.000,00 11
Armando J ose R$ 15.000,00 1

O identificador interno da Agncia no tem valor para um usurio ( um
campo de controle). Vamos estender a juno para contemplar mais uma tabela, pois
no queremos mais o ID da Agncia, mas o seu cdigo e cidade.
Nome,ValorEmprestado,Cdigo, Cidade (
CLIENTE(id=cli_id) EMPRESTIMO (age_id=id) AGENCIA
)
nome valoremprestado codigo cidade
Leonardo R$ 5.000,00 2121-0 Sao Paulo
Mudancas J oe R$ 500.000,00 0983-0 Sao Paulo
Armando J ose R$ 15.000,00 4891-1 Rio de J aneiro
Maria R$ 50.000,00 2121-0 Sao Paulo
Maria R$ 20.000,00 9354-2 Sao Paulo
Leonardo R$ 44.000,00 3098-2 Sao Paulo
Lucro Certo SA R$ 89.000,00 213-A Sao Paulo
Lucro Certo SA R$ 3.000,00 213-A Sao Paulo
Leonardo R$ 15.000,00 2233-2 Sao Paulo

Restries podem ser colocadas em qualquer relao envolvida na juno.
Por exemplo, se desejarmos ver os clientes que pediram emprstimos no Rio de
J aneiro, temos a seguinte consulta.
Nome,ValorEmprestado,Cdigo, Cidade (
cidade=RiodeJ aneiro(CLIENTE(id=cli_id)EMPRESTIMO(age_id=id)AGENCIA)
)
nome valoremprestado codigo cidade
Armando J ose R$ 15.000,00 4891-1 Rio de J aneiro

Repare que a juno ASSOCIATIVA!
2.1.9 Diviso
A operao diviso, representada por , serve para consultas que incluem
frases com para todos.
Exemplo:


Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
21
R1 (numerador) R2 (denominador)
B C
y a
y c
y b
x a






Suponha que desejamos encontrar os clientes que tm conta em TODAS as
agncias da cidade de Brasilia.
Em primeiro lugar, obtemos todas as agncias de Brasilia (denominador):
AUX1 ID ( cidade=Brasilia (AGENCIA) )
id
8

Em segundo lugar, temos que obter os clientes e as agncias nas quais eles
tm conta (numerador):
AUX2 Nome,AGE_ID ( CLIENTE(id=cli_id)CONTA )
nome age_id
Leonardo 3
Leonardo 9
Lucro Certo SA 7
Lucro Certo SA 8
Maria 4
J oao Pedro 1
J oao Pedro 2
Mudancas J oe 5
Armando J ose 6

Agora precisamos encontrar os clientes que apaream em AUX2 com cada
ID de agncia em AUX1. Escrevemos esta consulta da seguinte forma:
AUX2 AUX1
NOME
Lucro Certo SA

C
a
b
c
B
y
R1 R2
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
22
2.1.10 ASSIGNMENT
a operao utilizada no exemplo da diviso acima, usada para reduzir a
complexidade das expresses. Utiliza o operador .
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
23
2.2 QBE e QUEL
2.3 SQL (Structured Query Language)
A linguagem SQL uma linguagem de consulta declarativa. Esta linguagem
se tornou padro nos produtos relacionais do mercado, da a sua importncia.
O Departamento de Pesquisas da IBM desenvolveu a SQL como forma de
interface para o sistema de BD relacional denominado SYSTEM R, incio dos anos 70.
Em 1986 o American National Standard Institute (ANSI), publicou um padro SQL.
A linguagem SQL apresenta diversas partes:
1. Comandos DDL (Data Definition Language) provem comandos para
criao e manuteno de relaes no SGBD. Exemplos: criar esquemas, criar
tabelas, criar ndices, modificar tabelas, remover ndices etc.
2. Comandos DML (Data Manipulation Language) provem uma forma
declarativa de recuperar informaes no banco de dados. A linguagem SQL
baseada na lgebra e no clculo relacional. A SQL ainda traz comandos DML
para insero, atualizao e remoo de tuplas.
3. Comandos Embutidos so usados dentro de linguagens de programao como
C, Pascal, Cobol etc.
4. Definies de Vises comandos para criao de vises.
5. Segurana comandos para definir permisses nos objetos do banco de dados:
relaes, atributos, vises, procedimentos etc.
6. Integridade comandos que implementam as restries de integridade dos
dados.
7. Controle de Transao comandos que especificam incio e fim de transaes.
2.3.1 Estrutura Bsica da DML do SQL
Uma expresso bsica em SQL apresenta trs clusulas bsicas: SELECT
FROM WHERE.
SELECT lista atributos que so desejados no resultado (anlogo projeo
em lgebra relacional).
FROM lista as relaes que sero usadas na consulta. As relaes listadas
nesta clusula formam um produto cartesiano implcito no resultado.
WHERE corresponde ao predicado lgico que cada tupla deve satisfazer para
entrar no resultado (anlogo seleo em lgebra relacional).
Uma consulta tpica em SQL tem a forma:
SELECT DI STI NCT A1, A2, A3, . . . , An
FROM R1, R2, R3, . . . , Rm
WHERE P
Cada A (A1, A2... An) corresponde a atributos existentes nas relaes R
(R1, R2... Rm). P um predicado lgico, por exemplo: A2 >40.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
24
A consulta bsica SQL acima tem um correspondente em lgebra relacional,
que o seguinte:
A1, A2, A3,,An (P (R1 x R2 x R3 x ... x Rm))
(projeo) (seleo) (produto cartesiano)

Observaes:
Se a clusula WHERE omitida, o predicado P considerado como sempre
verdadeiro.
A lista de atributos pode ser substituda por um asterisco (*) que indica que
queremos todos os atributos.
O resultado do SQL uma relao!
Embora conceitualmente falando exista o produto cartesiano, os processadores
da linguagem conseguem identificar junes e otimizam o processamento das
consultas, atravs do otimizador de consultas.

2.3.1.1 A clusula SELECT
Comecemos com um exemplo: encontre os nomes dos bancos na tabela
Banco.
SELECT Nome
FROM Banco
No SQL a eliminao de duplicatas no automtica por ser ineficiente
em muitos casos. Em SQL devemos explicitamente declarar que queremos a remoo
de duplicatas, com a clusula DISTINCT.
Exemplo: Encontre os IDs internos de clientes que tm emprstimos (ter uma tupla na
tabela Emprestimo).

Otimizador de
Consultas
Consulta
SQL
Expresses
em lgebra
Relacional
Plano de
Execuo
Cdigo de
Execuo no
SGBD
Parser
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
25
SELECT DISTINCT cl i _i d
FROM Empr est i mo
cli_id
1
2
3
5
6

Sem a clsula distinct:
SELECT cl i _i d
FROM Empr est i mo
Ou
SELECT ALL cl i _i d
FROM Empr est i mo
cli_id
1
5
6
3
3
1
2
2
1

A lista de atributos pode ser substituda por asterisco (*):
SELECT *
FROM CLI ENTE
ID NOME Tipo
1 Leonardo F
2 Lucro Certo SA J
3 Maria F
4 J oao Pedro F
5 Mudancas J oe J
6 Armando J ose F

permitido o uso de operadores (aritmticos, concatenao de strings, uso
de funes etc) nas clusulas SELECT.
SELECT I D, ( Sal do * 1. 1) as Sal doMai s10Por cent o
FROM Cont a
WHERE Sal do * 1. 1 > 5000
possvel usar
expresses na
clusula WHERE.
possvel
renomear o nome
do campo.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
26
ID SaldoMais10Porcento
1 99903,1
2 13200
4 55000
5 36643,2
8 52682,3
9 86826,3

2.3.1.2 A clusula WHERE
Os predicados da clusula WHERE so expresses lgicas (booleanas) e
retornam verdadeiro ou falso para cada tupla processada.
permitido o uso de conectores lgicos (AND, OR e NOT).
Exemplo: Recupere as movimentaes de crdito superiores a 1000 nas contas
correntes.
SELECT *
FROM Movi ment acao
WHERE ( Oper acao = C ) and ( Val or > 1000)
ID CONTA_ID Valor Operacao CodigoDocumento Data
3 1 R$ 1.500,00 C x998 20/5/2000
5 2 R$ 1.800,00 C 3872 10/1/2000
6 2 R$ 1.900,00 C 2908 30/1/2000

Expresses aritmticas podem ser usadas tambm neste ponto. As
expresses podem envolver constantes ou valores de campos da tupla.
Exemplo: Recupere os emprstimos de quem pagou um valor mais alto do que pegou
emprestado.
SELECT *
FROM EMPRESTI MO
WHERE Val or Pago > Val or Empr est ado
ID AGE
_ID
CLI_ID Data DataPagament
o
JurosM
ensais
ValorEmpresta
do
ValorPago
8 6 2 4/4/2002 30/4/2002 1 R$ 3.000,00 R$ 3.030,00



Para faixas de valores, o operador between pode ser usado.
Exemplo: Recupere as contas com saldo entre 1000 e 2000 (inclusive).
SELECT *
FROM CONTA
WHERE Sal do bet ween 1000 and 2000
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
27
ID AGE_ID CLI_ID CodigoCont
a
DataAbertur
a
Saldo
3 3 1 3215-9 6/1/1997 1000
7 7 2 3212-1 9/6/2002 1300

Exerccio: como implementar o between sem usar a palavra between?

2.3.1.3 A clusula FROM
Define um produto cartesiano entre as relaes listadas.
Exemplo (de produto cartesiano na seo 2.1.3):
Encontrar uma combinao de servios, indicando pessoas fsicas para pessoas jurdicas
venderem produtos ou servios.
PESSOA FISICA X PESSOA J URIDICA
SELECT *
FROM PESSOAFI SI CA, PESSOAJ URI DI CA
PESSO
AFISIC
A.ID
CPF DataNasci
mento
PESSOA
JURIDIC
A.ID
CGC DataForm
acao
InscricaoEstad
ual
1 07898281790 6/8/1977 2 87628871/0001 1/12/1957 29389
1 07898281790 6/8/1977 5 98767266/0002 6/7/1997 56416
3 12345678912 10/1/1980 2 87628871/0001 1/12/1957 29389
3 12345678912 10/1/1980 5 98767266/0002 6/7/1997 56416
4 98765432109 26/2/1969 2 87628871/0001 1/12/1957 29389
4 98765432109 26/2/1969 5 98767266/0002 6/7/1997 56416
6 56941236420 17/10/1940 2 87628871/0001 1/12/1957 29389
6 56941236420 17/10/1940 5 98767266/0002 6/7/1997 56416

As junes devem ser expressas na clusula WHERE (lembre-se da
definio de juno).
Exemplo: Recupere os nomes dos clientes pessoas fsicas que tm alguma conta.
SELECT DISTINCT cliente.nome
FROM Cliente, Conta
WHERE (cliente.id =conta.cli_id) AND (cliente.tipo =F)
nome
Armando J ose
J oao Pedro
Leonardo
Maria

Exemplo 2: Recupere as movimentaes da conta Cdigo 3323-4
SELECT movi ment acao. *
Semi-J uno. No
recuperou campos
de Conta.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
28
FROM Movi ment acao, Cont a
WHERE
( movi ment acao. cont a_i d = cont a. i d) and cont a. Codi goCont a =
3323-4
ID CONTA_ID Valor Operacao CodigoDocument
o
Data
5 2 R$ 1.800,00 C 3872 10/1/2000
6 2 R$ 1.900,00 C 2908 30/1/2000
7 2 R$ 100,00 C 2398 20/5/2000
8 2 R$ 50,00 C 9823 10/1/2001

2.3.1.4 A Renomeao
O SQL prov um mecanismo para implementao da renomeao, tanto em
nvel de atributos como de relaes.
A palavra AS precede o novo nome desejado.
Exemplo:
Sel ect Nome as NomedoBanco, Codi go as Codi godoBanco
Fr omBanco
NomedoBanco CodigodoBanco
Banco do Brasil 001
Banco Real 356
Banco Bradesco 789
Banco Itau 129

Exemplo 2: com juno.
SELECT m. *
FROM Movi ment acao as M, Cont a as C
WHERE
( m. cont a_i d = c. i d) and c. Codi goCont a = 3323- 4
(O resultado o mesmo da consulta que ilustou a semi-juno)

Exemplo 3: Encontrar as agncias que so da mesma cidade que a agncia cdigo
nmero 6 (j vimos em lgebra relacional).
SELECT A2. *
FROM Agenci a as A1, Agenci a as A2
WHERE ( A1. I D = 6) AND ( A1. Ci dade = A2. Ci dade)

Observao:
Em diversas implementaes do SQL, a palavra as pode ser omitida.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
29
2.3.1.5 Operadores de Strings
O operador para encontrar padres de strings indicado pela palavra like.
Como nos principais sistemas operacionais, existem caracteres especiais para uso com o
operador LIKE.
O % pode ser substitudo por qualquer substring.
O _ (underscore ou underline) pode ser substitudo por qualquer caracter.
Caracter de escape \ (barra invertida) busca por % ou _ (no seu valor
especfico).
Por exemplo, a expresso ___% verdadeira para qualquer string com
pelo menos trs posies preenchidas.
Os padres so sensveis a maisculas (case sensitive), assim Leo
diferente de leo.
possvel usar a negao NOT LIKE.
Exemplo: Recupere os Bancos cujo nome comea termina com Brasil.
SELECT *
FROM Banco
WHERE Nome l i ke %Br asi l
ID Nome Codigo
1 Banco do Brasil 001

Ainda existe o operador de concatenao de Strings || (duas barras
verticais seguidas).
Exemplo: Formatar o Nome o CPF das pessoas fsicas em uma nica coluna.
SELECT ( C. Nome | | | | F. CPF) as Nome_e_CPF
FROM Cl i ent e C, PessoaFi si ca F
WHERE C. I D = F. I D
Nome_e_CPF
Leonardo 07898281790
Maria 12345678912
J oao Pedro 98765432109
Armando J ose 56941236420

2.3.1.6 Ordenao de Resultado
Para ordenar um resultado de SQL, usamos a clusula ORDER BY aps a
clusula WHERE.
Para ordenao ascendente, usamos a palavra ASC, para descendente
DESC. ASC o default e pode ser omitido.
Exemplo: Recupere as movimentaes de contas de maneira descrescente na Data de
Movimentao
SELECT *
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
30
FROM Movi ment acao
ORDER BY Dat a DESC
ID CONTA_ID Valor Operacao CodigoDocumento Data
11 7 R$ 350,00 C 5783 14/7/2002
8 2 R$ 50,00 C 9823 10/1/2001
4 1 R$ 4.500,00 D x997 10/1/2001
12 6 R$ 450,00 D 9234 15/11/2000
7 2 R$ 100,00 C 2398 20/5/2000
3 1 R$ 1.500,00 C x998 20/5/2000
6 2 R$ 1.900,00 C 2908 30/1/2000
2 1 R$ 1.500,00 D x997 30/1/2000
5 2 R$ 1.800,00 C 3872 10/1/2000
1 1 R$ 500,00 C x998 10/1/2000
10 8 R$ 200,00 D 3444 11/5/1999
9 9 R$ 100,00 C 2111 10/1/1998
13 5 R$ 550,00 C 9324 15/10/1997

Exemplo 2: Liste as pessoas fsicas na ordem da sua data de nascimento
SELECT *
FROM PessoaFi si ca
ORDER BY Dat aNasci ment o
ID CPF DataNascimento
6 56941236420 17/10/1940
4 98765432109 26/2/1969
1 07898281790 6/8/1977
3 12345678912 10/1/1980

Observao: o uso de ordenao pode ser custoso e s deve ser usado quando
necessrio. A ordenao tem complexidade O (N log N).

2.3.2 Operaes com Conjuntos
Os operadores de conjuntos da lgebra relacional esto presentes no SQL,
so eles: union, intersect e except (minus).
Exemplo:
Encontre os cdigos dos clientes que tm conta.
SELECT DI STI NCT CLI _I D FROM CONTA

Encontre os cdigos dos clientes que tm conta ou emprstimo.
( SELECT CLI _I D FROM CONTA)
UNION
( SELECT CLI _I D FROM EMPRESTI MO)
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
31

Encontre os cdigos dos clients que tm conta e emprstimo.
( SELECT CLI _I D FROM CONTA)
INTERSECT
( SELECT CLI _I D FROM EMPRESTI MO)

Encontre os cdigos dos clientes que tm conta, mas no tm emprstimos.
( SELECT CLI _I D FROM CONTA)
EXCEPT
( SELECT CLI _I D FROM EMPRESTI MO)

Observaes:
UNION elimina duplicatas por default. Para manter as duplicatas, necessrio
usar UNION ALL. O mesmo vale para intersect e except.
Nem todas as implementaes de SQL apresentam estes operadores de
conjuntos.
A operao Except advm do SQL-92. Seu nome na primeira verso (SQL-86)
era Minus, mas a operao a subtrao de conjuntos. S nome foi
modificado.
2.3.3 Funes de Agregao
Em SQL possvel computar valores de funes em grupos de tuplas
atravs de funes de agregao. As funes de agregao so as seguintes (SQL
padro):
Count nmero de tuplas
Sum Somatrio
Max Valor Mximo
Min Valor Mnimo
Avg Mdia Aritmtica
As funes agregadas retornam um valor somente, para todo o grupo.
Exemplo: Calcule o saldo mdio das contas existentes.
SELECT AVG( SALDO) as Sal doMedi o
FROM Cont a
SaldoMedio
35117,6666666667



Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
32
Exemplo 2: Recupere o valor mximo e mnimo movimentado nas contas.
SELECT MAX( Val or ) as maxi mo, MI N( Val or ) as mi ni mo
FROM Movi ment acao
maximo minimo
R$ 4.500,00 R$ 50,00

Exemplo 3: Recupere o nmero de contas existentes no banco.
SELECT COUNT( *) as numer odecont as
FROM CONTA
numerodecontas
9

Nos exemplos acima, tratamos a relao toda como um grupo, calculando
uma mdia, valor mximo, valor mnimo e contagem da tabela inteira. possvel
quebrar a relao em grupos com algum tipo de significado. Os grupos so
formados a partir da clusula GROUP BY que deve ser escrita aps a clusula
WHERE e antes de um possvel ORDER BY.
Exemplo: Recupere o saldo mdio por Nome de Agencia, ordene por este valor.
SELECT A. Nome, AVG( C. Sal do) as Sal doMedi oAgenci a
FROM Cont a as C, Agenci a as A
WHERE ( C. AGE_I D = A. I D)
GROUP BY A. Nome
ORDER BY AVG( C. Sal do) DESC
Nome SaldoMedioAgencia
Ag Centro 90821
Ag Barra 78933
Ag Ondina 50000
Ag Ministerios 47893
Ag Tiete 2 33312
Ag Tijuca 12000
Ag Borel 1300
Ag Tiete 1000
Ag Pinhes 800

Exemplo 2: Encontre o nmero de correntistas por cidade.
SELECT A. Ci dade, Count ( DISTINCT C. CLI _I D) as
Numer oCor r ent i st as
FROM Agenci a as A, Cont a as C
WHERE ( C. AGE_I D = A. I D)
GROUP BY A. Ci dade

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
33
Cidade NumeroCorrentistas
Brasilia 1
Rio de J aneiro 3
Salvador 2
Sao Paulo 3

Utilizamos DISTINCT pois uma pessoa com mais de uma conta na cidade, s deve
ser contada uma nica vez.

Exemplo 3: Encontre as contas cujo valor mximo de movimentao excedeu 1380 reais
nas operaes de crdito.
SELECT CONTA_I D, MAX( Val or )
FROM Movi ment acao
WHERE Oper acao = C
GROUP BY CONTA_I D
HAVI NG MAX( VALOR) > 1380
CONTA_ID Expr1001
1 R$ 1.500,00
2 R$ 1.900,00

A clusula HAVING aplicada aps a formao dos grupos. uma espcie de
segundo WHERE. A clusula HAVING normalmente envolve funo de
agregao.

Exemplo 4: Encontre o saldo mdio de conta corrente por nome de cliente que tenha
mais de uma conta.
SELECT c. NOME, Avg(cc.Saldo) AS Mdi aDeSal do
FROM cl i ent e AS c, cont a AS cc
WHERE c. I D=cc. cl i _i d
GROUP BY c. NOME
HAVING Count( DISTINCT cc.CodigoConta ) > 1
NOME MdiaDeSaldo
Pedro 16283,4935064935
Usinagens INC 11740,4252136752
Neste exemplo, usamos uma funo de agregao no SELECT e outra no HAVING!

Observaes:
Durante o processamento da consulta, as tuplas que satisfazem a clusula
WHERE so alocadas nos grupos definidos pela clusula ORDER BY.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
34
Aps a criao dos grupos (processamento de todas as tuplas) a clusula
HAVING aplicada para cada grupo, sendo uma segunda filtragem.
Somente os grupos que satisfazem a clusula HAVING so enviados como
resposta consulta.
2.3.4 Valores Nulos (NULL)
O nulo representa a ausncia de valor e no deve ser confundido com
zero, strings vazias, datas iniciais etc. A ausncia de valor no pode ser COMPARADA
convencionalmente nem figurar em funes de agregao. Qualquer comparao com o
valor nulo retorna falso, o que exclui a tupla de um possvel resultado.
O SQL prov uma expresso especial para comparao de nulos: is null e
is not null.
Para testar se um campo tem valor nulo em uma clusula WHERE, usamos
WHERE campo IS NULL.
Observao: existem comandos DDL que impedem que uma coluna possa
assumir o valor nulo.
Exemplos:
Tabela TesteNulos (os IDs 3 e 5 tm Numero como NULL)
ID NOME Numero
1 ABC 10
2 DEF 15
3 GHI
4 J KL 30
5 MNO
6 PQR 10

Observe as consultas e os resultados:
SELECT COUNT( NUMERO) FROM TESTENULOS
Expr1000
4

SELECT AVG( NUMERO) FROM TESTENULOS
Expr1000
16,25

SELECT * FROM TESTENULOS WHERE NUMERO = NULL
ID NOME Numero

SELECT * FROM TESTENULOS WHERE NUMERO I S NULL
ID NOME Numero
3 GHI
5 MNO
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
35

2.3.5 SubConsultas Aninhadas (Subqueries)
Em algumas situaes importante a utilizao de subconsultas. Embora
sua implementao seja, na maioria dos casos, bastante custosa, seu funcionamento
bastante importante.
2.3.5.1 Pertencer ao Conjunto
Para relaes de pertinncia, as operaes IN e NOT IN so usadas.
Exemplos:
Encontrar os IDs de clientes que tm emprstimos:
SELECT DI STI NCT C. I D
FROM CLI ENTE C
WHERE C. I D I N ( SELECT E. CLI _I D FROM EMPRESTI MO E)
ID
1
2
3
5
6

Como escrever esta consulta de outra forma? Sem subconsulta? J fizemos antes...

Mais de um atributo pode ser testado, ou seja, cada elemento na operao IN se
comporta como uma tupla e no como um valor atmico.
Encontrar o par de IDs agencia e cliente que figuram em conta e emprstimo.
SELECT DI STI NCT C. CLI _I D, C. AGE_I D
FROM CONTA C
WHERE ( C. CLI _I D, C. AGE_I D) I N
( SELECT E. CLI _I D, E. AGE_I D FROM EMPRESTI MO E)
Observao: a consulta acima no roda no MSAccess, mas funciona no Oracle, por
exemplo.

Encontrar os IDs de clientes que no tm emprstimos:
SELECT DI STI NCT C. I D
FROM CLI ENTE C
WHERE C. I D NOT I N ( SELECT E. CLI _I D FROM EMPRESTI MO E)
ID
4

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
36
Outra maneira de calcular aqueles que no tm emprstimos?








2.3.5.2 Comparao de Conjuntos
Para comparar um valor contra um conjunto, usamos este tipo de operao.
Exemplos:
Encontrar as movimentaes de crditos da conta ID = 2 maiores que alguma
movimentao da conta ID =1
SELECT M. *
FROM MOVI MENTACAO M
WHERE
M. Oper acao = ' C'
AND M. CONTA_I D = 2
AND M. Val or > some
( SELECT M2. val or
FROM Movi ment acao M2
WHERE M2. CONTA_I D = 1)
ID CONTA_ID Valor Operacao CodigoDocumento Data
5 2 R$ 1.800,00 C 3872 10/1/2000
6 2 R$ 1.900,00 C 2908 30/1/2000

Encontrar as movimentaes de crditos da conta ID =2 maiores que TODAS as
movimentaes da conta ID =1
SELECT M. *
FROM MOVI MENTACAO M
WHERE
M. Oper acao = ' C'
AND M. CONTA_I D = 2
AND M. Val or > ALL
( SELECT M2. val or
FROM Movi ment acao M2
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
37
WHERE M2. CONTA_I D = 1)
ID CONTA_ID Operacao Valor CodigoDocumento Data


Encontrar os ID de Agncia que tm o saldo mdio em Conta Corrente maior que a
mdia geral do banco central.
Nota: No possvel usar MAX(AVG(SALDO))!!
Para encontrar o grupo de mdias por agncia, a soluo simples:
sel ect age_i d, avg( sal do)
f r omcont a
gr oup by age_i d
age_id Expr1001
1 90821
2 12000
3 1000
4 50000
5 33312
6 800
7 1300
8 47893
9 78933

Para encontrar a mdia geral, a soluo tambm simples:
sel ect avg( sal do)
f r omcont a
Expr1000
35117,666667

Finalmente...
sel ect age_i d, avg( sal do)
f r omcont a
gr oup by age_i d
havi ng avg( sal do) >= al l ( sel ect avg( sal do) f r omcont a)
age_id Expr1001
1 90821
4 50000
8 47893
9 78933

O mximo saldo mdio dado pela consulta abaixo:
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
38
sel ect age_i d, avg( sal do)
f r omcont a
gr oup by age_i d
havi ng avg( sal do) >= al l
( sel ect avg( sal do) f r omcont a group by age_id)
age_id Expr1001
1 90821

Por que? :)

2.3.5.3 Teste de Relaes Vazias
O construtor EXISTS testa se o resultado da subconsulta retorna algo.
Caso retorne, EXISTS verdadeiro. possvel utilizar NOT EXISTS.
Exemplos:
Encontre as contas que tm movimentao em 2002.
SELECT C. *
FROM Cont a C
WHERE EXI STS
( SELECT M. I D
FROM Movi ment acao M
WHERE M. Dat a >= #01- 01- 2002#
AND M. Dat a <= #31- 12- 2002#
AND M. CONTA_I D = C. I D)
ID AGE_ID CLI_ID CodigoConta DataAbertura Saldo
7 7 2 3212-1 9/6/2002 1300

Encontre as contas que no tm movimentao em J aneiro de 2003.
SELECT C. *
FROM Cont a C
WHERE NOT EXI STS
( SELECT M. I D
FROM Movi ment acao M
WHERE M. Dat a >= #01- 01- 2003#
AND M. Dat a <= #31- 01- 2003#
AND M. CONTA_I D = C. I D)


Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
39
ID AGE_ID CLI_ID CodigoConta DataAbertura Saldo
1 1 4 3652-8 13/1/2002 90821
2 2 4 3323-4 23/12/1998 12000
3 3 1 3215-9 6/1/1997 1000
4 4 3 9873-8 3/3/2000 50000
5 5 5 4982-1 18/8/1999 33312
6 6 6 3177-2 14/7/2003 800
7 7 2 3212-1 9/6/2002 1300
8 8 2 0098-0 20/5/2001 47893
9 9 1 3277-1 3/10/2002 78933

2.3.6 Relaes Derivadas
s vezes importante ver o resultado de uma consulta como uma relao
existente na clusula FROM. Esta construo permitida no SQL, colocando-se uma
subconsulta na clusula FROM.
Exemplos:
Implementando na mo o Having...
sel ect r . age_i d, r . sal domedi o
f r om
(select age_id, avg(saldo) as saldomedio
from conta
group by age_id)
as r
wher e r . sal domedi o > 32750
age_id saldomedio
1 90821
4 50000
5 33312
8 47893
9 78933

2.3.7 Modificando os Dados
At o presente momento ns apenas vimos meios de consultar dados
existentes no banco de dados. A linguagem SQL tambm apresenta uma forma
declarativa para inserir, atualizar e remover dados em SGBDS.

2.3.7.1 DELETE
A operao de remoo expressa pelo comando DELETE e tem a mesma
estrutura de um comando SELECT, a diferena que as tuplas selecionadas na clusula
WHERE no sero mostradas ao usurio, mas sim removidas permanentemente do
banco de dados.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
40
A estrutura do comando DELETE em SQL a seguinte:
DELETE FROM <<TABELA>>
WHERE <<CONDI CAO>>
Repare que um comando DELETE sem clusula WHERE remove todas as
tuplas de uma tabela.
Exemplo:
Remover as movimentaes de crdito da conta com CONTA_ID =2.
Repare o comando SELECT:

Substituindo SELECT * por DELETE, temos:

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
41

Um comando DELETE pode somente remover tuplas de uma nica relao
por vez. Entretanto, a sua clusula WHERE pode conter subconsultas que acessam
outras relaes existentes na base de dados, por exemplo:
Exemplo:
Pegando o ID interno de um determinado Codigo de Conta

Apagando as movimentaes desta conta:


Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
42
Como o comando DELETE altera a base de dados, este pode modificar
resultados de funes de agregao (count, avg, sum, min, max etc).
Exemplo:
Como apagar as movimentaes maiores do que a mdia de movimentaes existentes
na base de dados? Quando apagamos uma tupla, a mdia muda!!!

A soluo encontrada pelo SGBD realizar primeiramente a subconsulta,
calculando o valor mdio. S ento as tuplas que satisfazem a clusula principal do
comando WHERE so removidas.
A mdia mudou...

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
43

Se aplicarmos o comando de novo, novas tuplas sero removidas:


Assim como a mdia...


2.3.7.2 INSERT
O comando INSERT permite que novas tuplas sejam inseridas em uma
relao do banco de dados.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
44
possvel informar completamente a tupla ou inserir em uma tabela o
resultado de uma consulta SELECT.
A estrutura do comando INSERT em SQL a seguinte:
I NSERT I NTO <<TABELA>> ( <<CAMPOS>>)
VALUES ( <<VALORES PARA OS CAMPOS>>)
Ou
I NSERT I NTO <<TABELA>> ( <<CAMPOS>>)
SELECT <<CAMPOS COMPATI VEI S>> FROM <<TABELA>>
Campos omitidos recebem o valor NULL.

Exemplo: Inserir um novo cliente pessoa fsica na base.
Esta operao consiste na insero de uma nova tupla na tabela Cliente e de uma outra
tupla relacionada em PessoaFisica:


Se deu a louca no Banco Central (praxe) e eles resolvem transformar os emprstimos
em Contas?
Inserimos as novas contas diretamente da tabela EMPRESTIMO.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
45


Boa prtica: ao usar um INSERT a partir de um SELECT, primeiro faa o SELECT
sozinho para ter noo que a operao ser a desejada.
2.3.7.3 UPDATE - Atualizaes
O comando UPDATE permite que tuplas existentes no banco de dados
tenham determinados (pelo menos um) campos modificados.
O comando UPDATE tambm utiliza uma clusula WHERE que ir guiar a
operao de atualizao, ou seja, somente tuplas que gerem verdadeiro na clusula
WHERE tero seus valores potencialmente modificados.
Em geral, uma clusula WHERE vlida em um comando SELECT, tambm
vlida em um comando UPDATE.
A estrutura do comando UPDATE em SQL a seguinte:
UPDATE <<TABELA>>
SET <<CAMPO1>> = <<NOVO VALOR 1>>,
<<CAMPO2>> = <<NOVO VALOR 2>>,
. . .
WHERE <<CONDI CAO>>
Exemplos:
Tirar o CPMF (subtraindo 0.38%) das movimentaes de dbito em conta:
--Simulamos uma nova chave
--Fixamos um valor
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
46


2.3.8 DDL (Linguagem de Definio de Dados)
O SQL prov meios declarativos para a definio de objetos dentro do
banco de dados. Por objetos, entenda-se:
Domnios
Esquemas
Restries de Integridade
ndices para Tabelas
Segurana
Modos de armazenamento fsico
2.3.8.1 Tipos de Domnios Existentes no SQL-92

char(n) (or character(n)): fixed-length character string, with user-specified length.
varchar(n) (or character varying): variable-length character string, with user-
specified maximum length.
int or integer: an integer (length is machine-dependent).
smallint: a small integer (length is machine-dependent).
numeric(p, d): a fixed-point number with user-specified precision, consists of p digits
(plus a sign) and d of p digits are to the right of the decimal point. E.g., numeric(3, 1)
allows 44.5 to be stored exactly but not 444.5.
real or double precision: floating-point or double-precision floating-point numbers,
with machine-dependent precision.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
47
float(n): floating-point, with user-specified precision of at least n digits.
date: a calendar date, containing four digit year, month, and day of the month.
time: the time of the day in hours, minutes, and seconds.

possivel criar um novo tipo de dados, semelhantemente ao mecanismo usado em
linguagens de programao:
create domain person-name char(20)

2.3.8.2 Definio de Esquemas
Uma tabela pode ser definida em SQL atravs do comando CREATE
TABLE.

CREATE TABLE (
A1 D1,
A2 D2,
. . .
AN DN,
<<r est r i es de i nt egr i dade>>
)

As restries de integridade incluem integridade referencial (foreign key) e chaves
primrias e checagem de valores.
Exemplos (sintaxe do MS Access):
CREATE TABLE Banco(
I D I NTEGER,
Nome VARCHAR( 100) ,
Codi go VARCHAR( 10)
)
GO
CREATE TABLE Agenci a(
I D I NTEGER,
BANCO_I D I NTEGER,
Ci dade VARCHAR( 50) ,
Nome VARCHAR( 50) ,
Codi go VARCHAR( 20)
)
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
48
GO
CREATE TABLE Cl i ent e(
I D I NTEGER,
NOME VARCHAR( 50) ,
Ti po VARCHAR( 1)
)
GO
CREATE TABLE PessoaFi si ca(
I D I NTEGER,
CPF VARCHAR( 20) ,
Dat aNasci ment o DATETI ME
)
GO
CREATE TABLE PessoaJ ur i di ca(
I D I NTEGER,
CGC VARCHAR( 20) ,
Dat aFor macao DATETI ME,
I nscr i caoEst adual VARCHAR( 20)
)
GO

CREATE TABLE Empr est i mo(
I D COUNTER NOT NULL,
CLI _I D I NTEGER,
AGE_I D I NTEGER,
Dat a DATETI ME,
Dat aPagament o DATETI ME,
J ur osMensai s DOUBLE,
Val or Empr est ado CURRENCY,
Val or Pago CURRENCY
)
GO
CREATE TABLE Cont a(
I D COUNTER NOT NULL,
AGE_I D I NTEGER,
CLI _I D I NTEGER,
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
49
Codi goCont a VARCHAR( 50) ,
Dat aAber t ur a DATETI ME,
Sal do I NTEGER
)
GO
CREATE TABLE Movi ment acao(
I D COUNTER NOT NULL,
CONTA_I D I NTEGER,
Oper acao VARCHAR( 1) ,
Val or CURRENCY,
Codi goDocument o VARCHAR( 10) ,
Dat a DATETI ME
)
GO

Para remover tabelas em uma base de dados, usado o comando DROP TABLE.

Exemplo:


cr eat e t abl e f i l me
(
i d i nt eger pr i mar y key,
nome var char ( 50)
)
GO
dr op t abl e f i l me
GO

Para modificar tabelas, usamos o comando ALTER TABLE. Por modificao leia-se
adio, excluso e modificao de atributos e insero e remoo de restries de
integridade.
Exemplo:
dr op t abl e f i l me
go

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
50
cr eat e t abl e f i l me
(
i d i nt eger pr i mar y key,
nome var char ( 50)
)
GO

al t er t abl e f i l me al t er col umn nome var char ( 50) not nul l
GO

dr op t abl e at or
go

cr eat e t abl e at or
( i d i nt eger pr i mar y key,
nome var char ( 60) not nul l
)
GO

dr op t abl e par t i ci pacao
go

cr eat e t abl e par t i ci pacao
(
f i l me_i d i nt eger ,
at or _i d i nt eger ,
dat a dat e not nul l
)
GO

ALTER TABLE par t i ci pacao ADD
CONSTRAI NT [ FK_f i l me] FOREI GN KEY
(
f i l me_i d
) REFERENCES f i l me ( i d)
GO
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
51

al t er t abl e par t i ci pacao
dr op CONSTRAI NT FK_f i l me
go

Observao: A maioria dos SGBDs apresenta pequenas variaes na sintaxe empregada
nos comandos da DDL. Uma leitura no manual de cada produto resolve o problema.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
52
Captulo 3 - Processamento de
Consultas
Neste captulo nos concentraremos no estudo de tcnicas de indexao e do
processamento de junes em bancos de dados.
Em diversas consultas estudadas nos captulos anteriores, apenas um
pequeno conjunto das tabelas era solicitado como resultado. Por exemplo, encontrar
todos as agncias do banco com ID =293 significa efetuar a consulta: SELECT *
FROM AGENCIA WHERE BANCO_ID =293. Quando estamos falando de um
enorme nmero de bancos, esta consulta pode ficar custosa, pois a nica maneira de
resolv-la ser percorrendo toda a tabela Agncia a cada execuo da consulta.
Quando necessrio o acesso direto e rpido a determinados registros,
precisamos usar estruturas auxiliares que iro desempenhar esta tarefa. A estas
estruturas auxiliares, damos o nome de ndices.
3.1 Conceitos Bsicos
Um ndice para uma tabela funciona como um catlogo em uma biblioteca,
onde fichas ordenadas por autor facilmente nos permitem encontrar os livros de um
determinado escritor, sem que tenhamos que procurar em todos os livros das estantes.
Embora a analogia acima seja completamente vlida, no mundo dos bancos
de dados, as tcnicas de indexao so mais sofisticadas.
Existem dois tipos de ndices:
Ordenados (Ordered indices) so baseados em uma lista ordenada de valores
dos campos.
de Disperso (Hash indices) so baseados em uma disperso dos valores dos
campos atravs de uma funo de HASH. Cada valor de campo mapeado para
uma posio (bucket), de forma que ela possa ser acessada em tempo constante.
Assim como nas livrarias, possvel ter mais de uma estrutura de ndice por
tabela, visto que podemos ter as fichas ordenadas por autor, editora, nome do livro, ano
de publicao, assunto etc. Alm disso, nos bancos de dados, um ndice pode ser
construdo sobre um ou um conjunto de mais atributos.
At agora s vimos maravilhas no uso de ndices, entretanto o
funcionamento do banco de dados no composto apenas de operaes de leitura
(consultas). Desta forma, necessrio avaliar o impacto do uso de ndices nas operaes
de incluso / remoo e no quesito de espao de armazenamento.
Os mtodos de indexao sero avaliados segundo os seguintes critrios:
1. Tipo de Acesso o ndice bom para acesso direto, para busca em faixas de
valores etc?
2. Tempo de Acesso tempo para encontrar um item ou um conjunto de itens,
usando o ndice.
3. Tempo de Incluso tempo para inserir um novo item no ndice (inclui o
tempo de busca da posio correta dentro da prpria estrutura de ndice).
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
53
4. Tempo de Remoo tempo para remover um item do ndice (inclui o tempo
para encontrar o tem a ser removido e a atualizao das estruturas).
5. Uso de Espao espao ocupado pela estrutura de indexao.
Nas prximas sees, estaremos examinando diversas tcnicas de
indexao. No existe uma tcnica melhor em todas as situaes, ou seja, importante
identificar a melhor maneira de indexao, dada a forma de consulta aos dados e a
natureza da aplicao do banco de dados.
3.1.1 Reviso HASHING
``Hashing'' uma tcnica que busca realizar as operaes de insero,
remoo e busca em tempo constante.
Imagine que cada elemento em um conjunto possua um nmero associado a
ele e que quaisquer dois elementos distintos possuam nmeros associados diferentes.
Desta forma, poderiamos armazenar os elementos em um array na posio indicada pelo
nmero associado ao elemento.

Se conseguirmos associar a cada elemento a ser armazenado um nmero
como no exemplo acima, poderemos realizar as operaes de insero, remoo e busca
em tempo constante.
A funo que associa a cada elemento de um conjunto U um nmero que
sirva de ndice em uma tabela (array) chamada funo hash.
Uma funo hash deve satisfazer as seguintes condies:
Ser simples de calcular.
Assegurar que elementos distintos possuam ndices distintos.
Gerar uma distribuio equilibrada para os elementos dentro do array.
3.2 Tipos de Organizao de Arquivos
Seguindo a analogia feita na seo anterior, vamos estudar os tipos
existentes de organizao de arquivos. No mundo dos bancos de dados relacionais,
possvel estabelecer uma analogia arquivo tabela, de forma que uma organizao
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
54
especfica de arquivo pode ser uma opo de implementao fsica de tabela em um
banco de dados.
Atualmente, os SGBDs do mercado tm seus modos nativos de organizao
de arquivos, mas importante conhecer a maneira como isso feito.
3.2.1 Arquivos com Registros No Ordenados
Arquivos so organizados como heap (estrutura de dados) ou pilha.
Os registros so desordenados e se organizam como foram inseridos. Assim,
novos registros so inseridos sempre no final do arquivo.
MUITO EFICIENTE para insero.
MUITO CARO para a seleo de um determinado registro (precisa buscar em
todos os registros para encontrar).
Quando existem muitas remoes, de tempos em tempos o arquivo deve ser
reorganizado.
3.2.2 Arquivos com Registros Ordenados
So arquivos seqenciais em que os registros ficam fisicamente ordenados
dentro do arquivo. A ordenao baseanda no valor de um (ou um conjunto) de
seus atributos.
Arquivos com registros ordenados so MUITO EFICIENTES para: (i) recuperar
registros na ordem dos valores dos atributos de ordenao, (ii) achar o prximo
registro de uma seqncia, (iii) usar um critrio de busca baseado no valor do
atributo de ordenao.
Este tipo de organizao, no traz NENHUMA VANTAGEM para: acesso
aleatrio (randmico), (ii) acesso ordenado baseado no valor de atributos que
no os que compem a chave de ordenao.
Este tipo de organizao acarreta um processamento CARO para INSERO e
REMOO. Por que?
3.2.3 Arquivos HASH ou Diretos
Um atributo usado como chave de HASH a qual uma funo aplicada para
clculo do endereo do bloco de disco no qual o registro ser armazenado.
Este mtodo MUITO EFICIENTE para recuperao de um registro especfico
baseado no valor do atributo usado como chave de HASH.
Este mtodo MUITO CARO para recuperar registros de maneira ordenada
(mesmo que seja usada a chave de HASH) e para recuperar registros usando
outros atributos que no os da chave de HASH.
3.2.4 Arquivos com ndices
Requerem estruturas de dados ADICIONAIS auxiliares alm do arquivo
contendo os registros de dados. Utilizam atributos indexadores (chaves de
busca) para encontrar o endereo do registro desejado.


Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
55
3.2.5 Como indexar uma tabela?
Como acessar diretamente uma tupla em uma tabela? Sem essa resposta, no
possvel pensar em utilizar um mtodo de indexao.
Imagine que o seguinte arquivo texto no bloco de notas seja um arquivo
com registros no-ordenados:


Imaginando que este texto seja uma tabela com apenas um atributo e que
cada linha represente uma tupla, podemos assumir que usar o nmero da linha seja
uma forma de acesso direto a uma tupla. Assim, uma estrutura rudimentar de ndice
ordenado seria a seguinte:
Antonio 5
Cabral 4
J oo 1
Leonardo 3
Silva 2

Repare que este ndice rudimentar um ndice ordenado (os nomes esto
ordenados alfabeticamente).
Nos SGBDs, cada tupla existente em uma tabela apresenta um identificador
fsico, usado para acesso direto pelos ndices. No Oracle, por exemplo, este
identificador se chama ROWID.
Devemos entender que, quando disponvel, este campo virtual um
controle interno do banco de dados e no deve ser utilizado dentro de aplicaes.
Nome ROWID
J oao 88755
Silva 29761
Leonardo 12828
Cabral 19976
Antonio 21987

A mesma estrutura rudimentar de ndice acima, agora usa os identificadores
fsicos das tuplas. Para entendermos a indexao, somente temos que conhecer a
existncia destes identificadores fsicos, e no a maneira como eles so criados /
mantidos (temas de interesse para um curso de criao de sistemas de bancos de dados).
Antonio 21987
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
56
Cabral 19976
J oo 88755
Leonardo 12828
Silva 29761

3.3 ndices Ordenados
Para implementar um eficiente acesso aleatrio (no necessariamente
seqencial) aos dados, estruturas de ndice so utilizadas.
Um arquivo de dados ou uma tabela podem conter diversos ndices, mas
cada um deve apresentar uma chave de busca diferente. Por chave de busca, entenda-se
a lista de campos que estaro sendo indexados.
Todos os ndices so baseados nos mesmos conceitos bsicos: chaves e
campos de referncia (ponteiros para posies fsicas). Inicialmente vamos estudar
ndices simples, consistindo simplesmente de vetores com chaves e campos de
referncia. Mais tarde vamos estudar ndices com estruturas mais complexas,
especialmente rvores.
Uma das principais vantagens dos ndices poder manter a maior parte
possvel do ndice em memria principal, que MUITO MAIS RPIDA QUE O
DISCO, local onde os dados realmente esto armazenados.
Nos ndices ordenados, os valores da chave de busca encontram-se em
uma ordem bem definida.
Denomina-se NDICE PRIMRIO aquele que especificado sobre o
campo chave da ordenao de um arquivo com tipo de organizao com Registros
Ordenados. O campo chave usado para ordenar fisicamente os registros do arquivo
no disco, e cada registro TEM UM VALOR NICO PARA ESTE CAMPO. A chave
de busca normalmente, mas no necessariamente, a chave primria.
NDICE SECUNDRIO aquele especificado sobre qualquer campo de
um arquivo que no o de ordenao fsica.
Como um arquivo s pode ter uma ordenao fsica possvel, s possvel a
existncia de UM NDICE PRIMRIO associado ao mesmo. Um arquivo pode ter
vrios ndices secundrios.

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
57

Figura 4 - Exemplo de ndice Primrio
3.3.1 ndices Densos e Esparsos
Dentro do universo dos ndices ordenados, encontramos uma classificao.
Um ndice ordenado pode ser denso ou esparso (no denso).

Em um ndice DENSO:
Cada valor distinto da chave tem a correspondente entrada no ndice.
Cada entrada no ndice contm um valor da chave de busca e um ponteiro para o
registro relacionado.
Tambm chamado de COMPLETO.
Em um ndice ESPARSO:
Apenas ALGUNS dos valores distintos da chave tm uma entrada no ndice.
Para encontrar o registro com o valor K da chave: Encontra-se a entrada do
ndice com o maior valor MENOR QUE K (quase chegando). Partindo do
registro apontado pela entrada do ndice encontrada, percorre-se o arquivo
seqencialmente.
Tambm chamado de PARCIAL.

Figura 5 - ndice DENSO a esquerda
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
58


Figura 6 - ndice ESPARSO a esquerda

Quais seriam as vantagens de um ndice no denso? Menos espao de
armazenamento, menos tempo na atualizao e na remoo.
ndices densos tendem a ser mais rpidos para encontrar a informao.

3.3.2 ndices de mltiplos nveis
Em diversas situaes, mesmo com a construo de um ndice esparso, o
tamanho da estrutura fica proibitivo, imagine o seguinte cenrio:

1. O arquivo tem 100.000 registros com valores diferentes para o campo a ser
indexado.
2. O bloco de disco tem capacidade para armazenar um bloco de ndice com 10
registros. Assim, o ndice ter 10.000 blocos, o que torna qualquer algoritmo que
o percorra inevitavelmente lento. Lembre-se que entruturas de ndice requerem
que o nmero de acessos a disco seja baixo.

Nestas situaes, a soluo para minimizar o problema da indexao a
construo de um ndice esparso SOBRE o ndice padro, de forma que este guie a
busca pela chave indexada.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
59

Figura 7- ndice Multi-Nivel com um n de ndice esparso

Uma busca binria pode ser feita no ndice outer para encontrar o bloco de
ndice denso apropriado. Uma vez encontrado o bloco de ndice denso correto, fazemos
uma busca dentro deste e por fim encontramos a informao.
Quando o nmero de valores por indexar muito alto, utilizamos mais de
um nvel (procedimento corriqueiro).
Como nada no mundo perfeito, incluses, atualizaes e remoes nos
dados devem ser refletidas em TODOS OS NVEIS DO NDICE.
A idia que cada bloco de disco corresponda a um bloco de ndice
(eficincia na leitura).
3.3.3 Atualizao de ndices
Toda estrutura de ndice (no importa seu tipo) deve ser atualizada ao longo
que operaes aconteam no arquivo.
3.3.3.1 Remoo
Encontre o registro (faa uma busca)
Se este o ltimo registro com a referida chave de busca, delete a entrada do
ndice.
o Para ndices densos este procedimento como apagar um registro do
arquivo.
o Para ndices esparsos substitua o valor a ser removido pelo prximo
valor possvel (obedecendo a ordem). Caso esta operao no seja
possvel, apague a entrada do ndice esparso.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
60
3.3.3.2 Incluso
Encontre o bloco para insero (faa uma busca)
o Para ndices densos caso o valor de chave no exista, insira o valor de
chave e atualize as referncias.
o Para ndices esparsos caso a incluso acarrete na criao de um novo
bloco de ndice correspondente, ento crie uma nova entrada de ndice
esparso e atualize as referncias, caso contrrio, nada feito.

3.3.4 ndices Secundrios
Conforme exposto acima, os ndices secundrios so aqueles especificados
sobre qualquer campo de um arquivo que no o de ordenao fsica. Assim, para
construir um ndice secundrio, necessrio armazenarmos ponteiros para todos os
registros do arquivo (deve ser DENSO).




Um ndice secundrio melhora as consultas sobre atributos que no
compem a chave primria de uma tabela.
Como j visto, esta classe de ndices deve ser atualizada a cada operao no
arquivo correspondente, assim, necessrio usar bom senso para decidir se um ndice
ser til no dia a dia do banco de dados (melhora a leitura penalizando as incluses e
remoes).
J ohnson
Green
Hayes
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
61
3.4 ndices em rvore
Na medida em que um arquivo cresce em demasia, as estruturas de ndice
estudadas at o momento tm seu desempenho degradado (marcas de remoo,
movimentao de blocos etc). O desempenho volta a ficar razovel quando as estruturas
de ndice so re-organizadas.
rvores-B (Bayer&MCCreight 1972) s vezes tambm chamadas rvores-
Bayer ou rvores Multivias, foram originalmente concebidas para a implementao de
mecanismos de indexao por chave primria em memria secundria (DISCO).
Permite um nmero menor de ns (menor altura) e, por conseguinte menos
acessos a disco. Implementaes comuns utilizam arquivo de ndices com ponteiros
para arquivo de registros de dados.
rvore binria de busca.

3.4.1 rvores B
A rvore B, utilizando o recurso de manter mais de uma chave em cada n
da estrutura, proporciona uma organizao de ponteiros tal que as operaes de leitura,
incluso e remoo so executadas rapidamente.
Sua construo assegura que as folhas se encontram todas em um mesmo
nvel, no importando a ordem de entrada de dados.
As rvores B so largamente utilizadas como forma de armazenamento em
memria secundria. Diversos sistemas comerciais de bancos de dados, por exemplo, as
empregam.
Seja d um nmero natural. Uma rvore B de ordem d uma rvore ordenada
que vazia, ou que satisfaz as seguintes condies:
1. a raiz e uma folha ou tem no mnimo dois filhos;
2. cada n interno (no raiz e no folha) possui no mnimo d+1 filhos;
3. cada n tem no mximo 2d + 1 filhos;
4. todas as folhas esto no mesmo nvel.

Em uma rvore B, cada n denominado pgina. A estrutura apresentada
satisfaz ainda as seguintes propriedades:
a. Seja m o nmero de chaves em uma pgina P no folha. P tem m+1 filhos.
Conseqentemente, cada pgina contm entre d e 2d chaves, com exceo da
raizo que possui entre 1 e 2d chaves.
b. Em cada pgina P, as chaves esto ORDENADAS.
c. Os ponteiros de cada pgina so organizados como uma rvore de busca, em que
os intervalos de valores so respeitados.
3.4.1.1 Buscas
A busca em uma rvore B semelhante a empregada em rvores binrias de
busca.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
62

Figura 8 - rvore B de ordem 2

Observe, na figura 8, a busca da chave N na rvore B de ordem 2. De
incio, a chave procurada (N) comparada com a nica chave existente na raiz (I).
Como N maior que I, ento a busca segue recursivamente para a prxima pgina
(que contm as chaves maiores do que I L e O).
A operao repetida para a pgina filha. Na prxima pgina do caminho,
deve-se procurar a posio adequada, testando-se o valor N com todas as chaves
armazenadas no n at que seja encontrado o ponteiro conveniente para o
prosseguimento da busca (ou a chave ser encontrada). Neste exemplo, a busca ainda no
encontra o valor N e passa para a terceira pgina, segundo o ponteiro que demarca as
chaves maiores do que L e menores do que O.
Finalmente, na terceira leitura de pgina do disco, a chave N encontrada
na folha.
3.4.1.2 Insero de Dados
Considere agora o problema de inserir uma nova chave X em uma rvore B.
Uma NOVA CHAVE, SEMPRE INSERIDA EM UMA PGINA FOLHA. O
primeiro passo consiste em executar uma busca para encontrar a posio (folha) onde
X deveria estar. Vamos construir passo a passo a rvore da figura 8, inserindo as
letras do alfabeto em ordem. Lembre-se que estamos trabalhando com ordem 2 (cada n
interno tem no mximo (2d+1) =5 ponteiros).
No caso trivial, inserimos A, B, C e D. A rvore fica com a
seguinte estrutura.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
63


Ao inserir a chave E, a regra de tamanho de um n estar sendo violada,
pois o n j apresenta 2d (4) chaves antes da insero. A soluo para este problema
regorganizar as pginas, processo conhecido por ciso de pgina.
A ciso da pgina, executada em P, transforma uma pgina com excesso de
chaves em DUAS. Em P permanecem as d primeiras entradas. As ltimas chaves dentre
as d+1 restantes sero alocadas em uma nova pgina. A chave central ser alocada no
nvel acima da rvore.
Neste exemplo, a pgina P vai conter as chaves A e B. Teremos um
irmo criado para P que vai conter D e E (o novo valor). E o valor central passa
para o nvel acima C, criando uma nova raiz para a rvore. Vide figura abaixo.

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
64
Repare que agora temos mais espao para a incluso de novas chaves nas
folhas da arvore.
Continuando com a construo da rvore, agora inserimos F e G, para
quase completarmos novamente a pgina. Estas novas incluses desconhecem a
existncia das chaves A e B, pois elas esto no outro ramo da rvore.


Quando H for inserida, uma nova ciso de pginas vai ocorrer:


O n cheio apresentava D, E, F, G e H. Conforme a regra geral
da rvore B, as d (2 neste exemplo) primeiras (D e E) permanecem na pgina. As d
ltimas (G e H) vo para uma nova pgina e o termo central (F) sobe de nvel,
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
65
compondo com C a raiz da rvore. Repare que na primeira ciso de pginas a raiz foi
modificada enquanto que nesta, a altura da rvore no se modificou.

Com a continuidade das incluses neste mesmo raciocnio, quando
inserirmos a chave K, temos a seguinte posio aps a ciso:


Da mesma forma, quando inserirmos N, a rvore B de ordem 2 toma o
seguinte formato:


Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
66
Chegando ao ponto mais interessante, podemos ver que, aps a insero de
O e P a rvore vai ficar como a figura abaixo:


No momento de inserir Q, aplicando o algoritmo de ciso, teremos uma
pgina com M e N, outra com P e Q e o valor O sobe de nvel, chegando at a
raiz. MAS NESTE MOMENTO, a raiz tambm est completa!!
Com a raiz completa, no h outra alternativa seno a ciso propagada de
pgina. A propagao da ciso automtica e funciona sempre que o n pai est cheio.
Assim, a raiz cheia (composta de C, F, I, L e O) sofrer uma ciso, gerando dois irmos
(C, F) e (L, O) e uma nova raiz (I).


Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
67
interessante notar que o resto da rvore B no sofre modificaes.
Somente o caminho da folha at a raiz pode sofrer ciso de pginas.

Note tambm que existe espao para incluso de novas chaves sem a
necessidade de novas cises. Vamos inserir AA, Leo, EE etc.


Esta rvore foi construda com a insero em ordem. Vamos reconstru-la
com a insero na ordem inversa, ou seja, EE, Leo, AA, Q, P, ... , B, A.


Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
68
A estrutura um pouco diferente, mas apresenta a mesma altura, o que
garante um bom desempenho nas buscas.
3.4.1.3 Remoo de Dados
J vimos que uma rvore B se auto-ajusta na medida que novos ns so
inseridos nas pginas. O processo de ciso de pginas garante que a rvore est coerente
com a definio formal em todos os momentos de sua existncia.
Assim como a insero pode tornar um n cheio demais (com mais de 2d
chaves), a remoo pode torn-lo vazio demais (subutilizado) (com menos de d chaves).
Em certas situaes, a remoo de dados poder ocasionar na reorganizao da rvore
B, conforme veremos adiante.
Considere a rvore B de ordem d=2 construda abaixo:


O algoritmo BSICO da remoo de ns o seguinte:
Se a chave x a ser removida estiver em uma folha, a chave simplesmente
removida.
Se a chave x NO se encontra em uma folha, o espao de x no n interno
deve ser preenchido pelo valor imediatamente maior na rvore, digamos y. A
chave y NECESSARIAMENTE deve existir em uma folha.

Com a segunda regra acima bem definida, o problema da remoo pode
estar restrito ao caso em que a informao removida de uma folha. Imagine, na
rvore acima, que necessrio remover a chave EE. Como ela existe em uma folha, o
procedimento imediato. Caso a chave a ser removida seja F, que se encontra em um
n interno, a chave G (imediatamente maior) tomar o lugar de F no n interno e
bastar apagarmos G para completarmos o processo (no podemos ter duas chaves
G neste exemplo).
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
69
Vamos apagar a chave B da rvore acima.

B existe em uma folha no existe necessidade de mover chaves.
Apagamos B.
A pgina folha ainda tem no mnimo d=2 chaves.


Para passarmos para o caso mais complicado, imagine que houve novas
inseres de chaves, e que a rvore est como abaixo:

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
70
Vamos apagar a chave F da rvore acima.
F um n interno procuramos a maior chave maior que F que exista em
folha. Encontramos G.
Colocamos G no lugar de F. (Com isso j apagamos F)
Apagamos G da folha.

Observe o resultado (G est no n interno):


Prosseguindo com as remoes, vamos apagar a chave D.
D chave existente em folha.
Apagamos D.
VIOLAMOS A REGRA DA RVORE B. A pgina fica com 1 chave somente
(E).

Nesta situao, duas operaes so possveis: concatenao OU
redistribuio de chaves. Tenha em mente que estas operaes devem re-colocar a
rvore B correta perante a sua definio.
Duas pginas so consideradas adjacentes quando possuem o mesmo pai
(so irms) e os ponteiros que as ligam ao pai so consecutivos. Assim, a pgina que
ficou somente com a chave E tem duas pginas adjacentes (a pgina [A , AA] e a
pgina [EEE, EF].
Quando a pgina afetada pela remoo (P) tem uma pgina adjacente (Q) tal
que o total de chaves em P adicionado ao total de chaves em Q NO ULTRAPASSA
2d chaves, as pginas P e Q so concatenadas.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
71
No nosso exemplo a pgina P s contm a chave E, e a pgina adjacente
Q contm as chaves [A, AA]. A concatenao de pginas leva a seguinte
configurao [A, AA, E]. Para a vore ficar correta, falta descermos uma chave
de um n interno. A chave escolhida no n interno para descer a chave que fica
entre as pginas adjacentes (C) neste exemplo.
A nossa rvore B fica com a seguinte configurao agora.


Continuando, imagine que agora queremos remover a chave C. A
remoo imediata (simples construa a figura!).
Nova situao surge quando vamos remover EEE. A pgina P, afetada
pela remoo vai conter s uma chave EF e sua pgina adjacente a esquerda vai
conter trs [A, AA, E]. O total de chaves das pginas adjacentes NO MENOR QUE
2d. Neste exemplo, o total de chaves exatamente igual a 2d (4) e no existe vantagem
em concatenar ns, pois no poderemos descer com a chave do meio (EE).

Nestas situaes, surge a REDISTRIBUIO. Neste processo, imagine que
uma concatenao foi efetuada:
Criou-se uma pgina com as chaves [A, AA, E, EE, F].
A, AA, E pertenciam a pgina adjacente.
F pertencia a pgina que sofreu a remoo.
EE foi a chave do n interno que desceu.
A pgina do primeiro tpico consiste de cinco chaves (violando a regra).
Ento faa a ciso, ou seja, d primeiros para um lado, d ltimos para o outro e a central
pra cima. Assim, mantemos duas pginas [A, AA] e [EE, F] e subimos a nova chave
central E.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
72
A redistribuio de chaves uma concatenao seguida de uma ciso de
pginas.

Temos a rvore:


Finalmente, como a ciso, a concatenao de chaves propagvel para
nveis superiores da rvore, gerando diminuio de altura caso a raiz seja atingida.
Por exemplo, se apagamos G, H toma o seu lugar no n interno, mas a
folha fica com um nmero menor de chaves que o permitido. Assim, a pgina vai sofrer
uma concatenao com a sua adjacente a esquerda, resultando que a chave G vai
descer, deixando o n interno com uma chave somente E. O n interno vai propagar
a concatenao para o seu adjacente e a raiz da rvore descer de nvel.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
73


Literatura complementar:
Estruturas de Dados e Seus Algoritmos 2 Edio
J ayme Luiz Szwarcfiter

File Organization and Processing maravilhoso livro
Alan L. Tharp

Nota: a rvore B que usei nestas notas de aula encontra-se em
http://www.mars.dti.ne.jp/~torao/program/structure/btree.html

Outros programas legais (incluindo rvore B bTree)
http://www.dcc.unicamp.br/~rezende/ASTRAL/

Que tal treinar?

3.4.2 rvores B+
Embora revolucionria a rvore B ainda sofre com alguns problemas quando
existe a necessidade de acesso seqencial-indexado. Imagine que vc precisa encontrar as
chaves maiores do que H. Na rvore acima, em dois acessos a disco, vc a encontra.
Mas onde esto as prximas? Na verdade esto espalhadas entre ns internos e folhas.

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
74
As rvores B+ so uma variante das rvores B em que TODAS AS
CHAVES ENCONTRAM-SE NAS FOLHAS. Os ns internos apenas REPLICAM
chaves para guiar uma busca at a chave existente na folha. TODAS AS FOLHAS
SO INTERLIGADAS POR PONTEIROS (sequence-sets) (o que corrige o
problema da busca seqencial a partir de determinada chave).

Observe a rvore B+com no mximo 3 chaves por n:

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
75


Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
76


Os ns internos da rvore B+se comportam como os da rvore B.

Animao disponvel em: http://www.cs.msstate.edu/~hwang/project/visualization.html

3.5 Boas Prticas para Indexao

The attributes whose values are required in equality or range conditions
(selection operation) and those that are keys or that participate in join conditions (join
operation) require access paths. Remember SELECTIVITY.
The performance of queries largely depends upon what indexes or hashing
schemes exist to expedite the processing of selections and joins. On the other hand,
during insert, delete, or update operations, existence of indexes adds to the overhead.
This overhead must be justified in terms of the gain in efficiency by expediting queries
and transactions.
The physical design decisions for indexing fall into the following categories:
1. Whether to index an attribute: The attribute must be a key, or there must be
some query that uses that attribute either in a selection condition (equality or
range of values) or in a join. One factor in favor of setting up many indexes is
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
77
that some queries can be processed by just scanning the indexes without
retrieving any data.
2. What attribute or attributes to index on: An index can be constructed on one or
multiple attributes. If multiple attributes from one relation are involved together
in several queries, (for example, ( gar ment _st yl e_#, col or ) in a garment
inventory database), a multiattribute index is warranted. The ordering of
attributes within a multiattribute index must correspond to the queries. For
example, the above index assumes that queries would be based on an ordering of
colors within a gar ment _st yl e_# rather than vice versa.
3. Whether to set up a clustered index: At most one index per table can be a
primary or clustering index, because this implies that the file be physically
ordered on that attribute. In most RDBMSs, this is specified by the keyword
CLUSTER. (If the attribute is a key, a primary index is created, whereas a
clustering index is created if the attribute is not a key.) If a table requires several
indexes, the decision about which one should be a clustered index depends upon
whether keeping the table ordered on that attribute is needed. Range queries
benefit a great deal from clustering. If several attributes require range queries,
relative benefits must be evaluated before deciding which attribute to cluster on.
If a query is to be answered by doing an index search only (without retrieving
data records), the corresponding index should not be clustered, since the main
benefit of clustering is achieved when retrieving the records themselves.
4. Whether to use a hash index over a tree index: In general, RDBMSs use B
+
-trees
for indexing. However, ISAM and hash indexes are also provided in some
systems. B
+
-trees support both equality and range queries on the attribute used
as the search key. Hash indexes work well with equality conditions, particularly
during joins to find a matching record(s).
5. Whether to use dynamic hashing for the file: For files that are very volatilethat
is, those that grow and shrink continuouslyone of the dynamic hashing
schemes discussed later would be suitable. Currently, they are not offered by
most commercial RDBMSs.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
78
Captulo 4 - Processamento de
Transaes
4.1 Conceito de Transao

Uma transao uma unidade lgica de processamento do banco de
dados, que inclui uma ou mais operaes de acesso ao banco de dados. Estas operaes
podem incluir incluses, remoes, alteraes e leituras. As operaes do banco de
dados que formam uma transao podem ser embutidas dentro de um programa de
aplicao ou podem ser especificadas de maneira interativa atravs de uma linguagem
de consulta, como o SQL, por exemplo.
Uma transao iniciada com um comando iniciar a transao (begin
transaction ou begin work) e terminada com um comando terminar a transao (end
transaction ou commit transaction). As operaes que formam uma transao podem
ser desfeitas (no confirmadas) se o comando desfazer a transao (rollback
transaction) for executado.
Para entendimento dos conceitos de transao, vamos imaginar que o banco
de dados seja formado por um conjunto de itens de dados nomeados. O tamanho de
um item de dados se chama granularidade e pode ser o atributo de uma tupla, a tupla
em si, um bloco de disco com diversas tuplas, e at mesmo uma tabela inteira. Os
conceitos relacionados ao processamento de transaes so independentes da
granularidade dos itens de dados analisados.
Seguindo esta analogia, possvel estabelecer dois tipos de operaes
bsicas no banco de dados:
Read_item(X) l o valor do item do banco de dados X
Write_item(X) escreve o valor do item do banco de dados X
A Figura 9 abaixo, representa duas transaes simplificadas: T1 e T2.
T1 T2
read_item(X);
X:=X-N;
write_item(X);
read_item(Y);
Y:=Y+N;
write_item(Y);
read_item(X);
X:=X+M;
write_item(X);
Figura 9 - Transaes T1 e T2
O conjunto de leitura (read-set) de uma transao o conjunto de todos
os itens de dados que a transao l. O conjunto de gravao (write-set), o
conjunto de todos os itens de dados que a transao modifica no banco de dados.
Exerccio: qual o read-set e o write-set de T1 e de T2?

Quando pensamos em um ambiente multi-usurio e multi-programado,
transaes podem ser submetidas por vrios usurios e executadas de maneira
concorrente pelo SGBD, acessando os mesmos itens de dados. Se estas execues no
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
79
forem controladas, podemos ter problemas e tornarmos nosso banco de dados
inconsistente. Bem-vindo ao mundo do controle de concorrncia e da recuperao de
falhas.
4.2 Por que Controlar a Concorrncia?
Olhando para a Figura 9, imagine que o item de dados X representa o
nmero de assentos reservados em um determinado vo V1 e que Y representa o
nmero de assentos reservados em um outro vo V2.
Imagine que T1 e T2 so submetidas ao mesmo tempo por dois usurios
diferentes. T1 transfere N assentos reservados do vo V1 para o vo V2. T2
reserva M assentos no vo V1.
4.2.1 Problema 1 Perda de Atualizao
T1 T2
read_item(X);
X:=X-N;


write_item(X);
read_item(Y);

Y:=Y+N;
write_item(Y);


read_item(X);
X:=X+M;


write_item(X);

Observamos claramente que o item de dados X atualizado em T1 foi
perdido com a atualizao posterior de T2. T2 l o valor de X ANTES de T1 atualiz-
lo com o novo valor. Confira com valores numricos.

4.2.2 Problema 2 Atualizao Temporria (Leitura Suja dirty
read)
T1 T2
read_item(X);
X:=X-N;
write_item(X);



read_item(Y);
<<FALHA NA TRANSAO>>




read_item(X);
X:=X+M;
write_item(X);

Neste caso, com a falha da transao T1, o valor ORIGINAL de X
retornado ao banco de dados (sem a subtrao do valor N). O problema se d porque
T2 j havia lido o valor temporrio de X e efetuou as contas com um valor
incorreto. Confira com valores numricos.

Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
80
4.2.3 Problema 3 Agregao Incorreta
T1 T3




read_item(X);
X:=X-N;
write_item(X);




read_item(Y);
Y:=Y+N;
write_item(Y);

Sum:=0;
Read_item(A);
Sum:=Sum +A;
()



Read_item(X);
Sum:=Sum+X;
Read_item(Y);
Sum:=Sum+Y;

Neste cenrio, temos uma terceira transao T3 que est calculando o total
de assentos reservados em todos os vos atravs de uma funo de agregao SUM.
Em T1, o write-set [X,Y], mas T3 utiliza o valor correto de X e o valor incorreto de Y,
pois a transao T1 ainda no corrigiu o valor de Y.
4.3 Por que Mecanismos de Recuperao?

Sempre que uma transao submetida ao SGBD, este deve garantir que:
(1) todas as operaes da transao se completam com sucesso e seu efeito registrado
permanentemente no banco de dados, OU (2) a transao no tem absolutamente
NENHUM efeito no banco de dados, nem em quaisquer outras transaes.
Como uma transao composta de diversas etapas, as primeiras etapas
podem ser realizadas com sucesso at que uma determinada etapa falhe. Neste caso, o
SGBD dever automaticamente realizar o comando desfazer transao (rollback).
Tipos de falhas mais comuns:
1. Falha do Computador (crash do sistema) erro de hardware, software ou de
rede ocorrido durante a execuo da transao. Erros de hardware so
geralmente relacionados como a memria principal ou a CPU.
2. Erro Lgico da Transao overflow, diviso por zero, violao de restries
de integridade, aborto espontneo pelo usurio etc.
3. Imposio do Controle de Concorrncia o prprio sistema pode detectar um
impasse (deadlock) e desfazer automaticamente uma das transaes.
4.4 Propriedades Desejveis de uma Transao
Propriedades ACID.
Atomicidade uma transao uma unidade atmica de processamento; realizada
integralmente ou no realizada de jeito algum.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
81
Consistncia Preservada uma transao preservadora de consistncia se a sua
plena execuo levar o banco de dados de um estado consistente para outro estado
tambm consistente.
Isolamento uma transao deve parecer como se estivesse sendo executada
isoladamente de outras transaes. Ou seja, a execuo de uma transao no deve
sofrer interferncia de quaisquer outras transaes que estejam sendo executadas
concorrentemente.
Durabilidade ou Persistncia as alteraes aplicadas ao banco de dados por meio
de uma transao confirmada devem persistir no banco de dados. Estas modificaes
no podem ser perdidas em funo de nenhuma falha.

4.5 Transaes na linguagem SQL

De forma geral, os ambientes interativos mantm uma transao aberta at
que sejam executados os comandos commit ou rollback. Neste momento, uma nova
transao aberta.
Os diversos SGBDs do mercado tm a opo de configurar o isolamento
da transao, permitindo que leituras sujas sejam suportveis, por exemplo. O nvel de
isolamento default na maioria dos produtos read commited.
Bancos de Dados 2 Apostila e Notas de Aula - Leonardo Figueiredo Cardoso
82
Captulo 5 - Tcnicas de Controle de
Concorrncia

S-ar putea să vă placă și