Escolar Documentos
Profissional Documentos
Cultura Documentos
WINE
PRODUCER
Chardonnay
Buena Vista
83
85
Chardonnay
Louis Martini
81
84
Chardonnay
Chappellet
82
85
Thanksgiving
11
Jo.. Riesling
lekel
12
Jo. Riesling
Buena Vista
82
83
Late Harvest
16
Jo. Riesling
Sattui
82
83
very dry
21
Fume Blanc
79
83
Napa Valley
22
Fume Blanc
Robt. Mondavi
78
82
Mirassou
80
82
25 Wh. Burgundy
YEAR
84
BOTTLES
10
READY COMMENTS
86
30
80
82
43
77
12
87
50
Pinot Noir
Mirassou
77
85
51
Pinot Noir
78
86
64
Zinfandel
Mirassou
77
72
Gamay
Robt. Mondavi
78
86
Harvest
Anniversary
83
Demonstramos abaixo um banco de dados bastante simples, que contm um nico arquivo, o
arquivo CELLAR que rene informaes referentes ao contedo de uma adega de vinhos.
BIN
PRODUCER
Chardonnay
Buena Vista
Chardonnay
Chappellet
Pinot Noir
50
Mirassou
Alguns outros exemplos de operaes no arquivo CELLAR que, na sua maioria, so autoexplicativas. Os exemplos referentes adio ou remoo de arquivos do banco de dados.
Insero de novos dados:
INSERT INTO CELLAR
VALUES (53, 'Pinot Noir', 'Franciscan', 79, 1, 86, 'for Joan ) ;
Atualizao de dados existentes:
UPDATE CELLAR
SET BOTTLES = 4 WHERE BIN = 3 ;
Estruturada).
SQL
Uma
outra
observao
preliminar:
Normalmente, convm assumir, para simplificar, que a totalidade dos dados armazenados no
sistema mantida num nico banco de dados; estaremos adotando esta suposio
simplificada, pois no invalida substancialmente quaisquer das discusses subseqentes. Na
prtica, entretanto, pode haver boas razes, mesmo num sistema pequeno, para que os dados
sejam divididos em diversos bancos de dados distintos. Abordaremos algumas destas razes
mais frente.
Geralmente, pois, os dados no banco de dados - pelo menos num sistema grande - sero no
s integrados como compartilhados. Estes dois aspectos, integrao e compartilhamento,
representam a maior vantagem dos sistemas de banco de dados de ambientes "grandes", e
pelo menos a integrao tambm pode ser significa- tiva em ambientes "pequenos" .
Certamente h muitas outras vantagens (que sero discutidas mais tarde), mesmo nos
ambientes ditos pequenos, mas primeiro explicaremos o que significam os termos "integrado"
e "compartilhado"
imaginado como a unificao de diversos arquivos de dados que,de outra forma, seriam
distintos, eliminando-se total ou parcialmente qualquer redundncia entre os mesmos. Por
exemplo, um certo banco de dados poderia conter tanto registros de FUNCIO NRIOS, com
nome, endereo, departamento, salrio etc., como registro de INSCRIO, representando a
inscrio de funcionrios em cursos de treinamento. Suponhamos que, para o processo de
administrao de cursos, seja necessrio conhecer o departamento de cada aluno inscrito.
Claramente no seria preciso incluir esta informao, redundante, nos registros de
INSCRIO, uma vez que ela ser encontrada nos registros correspondentes aos
FUNCIONRIOS.
Por "compartilhado" quer dizer que parcelas isoladas de dados podem ser compartilhadas
por diversos usurios num banco de dados, no sentido de que todos os usurios podem ter
acesso mesma parcela de dados (e podem us-los com finalidades diferentes). Como j
mencionado, diferentes usurios podem, inclusive,ter acesso s mesmas partes de dados no
mesmo momento ("acesso concorrente"). Tal compartilhamento (concorrente ou outro) , em
parte, conseqncia do fato de que o banco de dados integrado. No exemplo
FUNCIONRIO/INSCRIO acima, a informao sobre departamento nos registros
FUNCIONRIO seria compartilhada por usurios do Departamento do Pessoal e usurios do
Departamento de Educao e, como sugerido anteriormente, os dois departamentos, estariam
utilizando as informaes para propsitos diferentes.
Outra conseqncia do mesmo fato (de que o banco de dados integrado) que qualquer
usurio, em geral, s estar interessado em um subconjunto do banco de dados total; ademais,
os subconjuntos de diferentes usurios iro sobrepor-se de muitas maneiras diferentes. Em
outras palavras, um determinado banco de dados ser percebido por usurios diferentes de
vrias formas distintas. De fato, mesmo quando dois usurios compartilham o mesmo subconjunto do banco de dados, as vises do mesmo podem diferir consideravelmente a nvel
dos detalhes.
Hardware
O Hardware compe-se dos volumes de memria secundria discos de cabea
mvel nos quais reside o banco de dados, juntamente com os dispositivos associados de
entrada/sada (unidades de disco, nos casos de discos de cabea mvel), dispositivos de
controle, canais de entrada/sada, e assim por diante. Este livro no se detm muito nos aspectos de hardware do sistema, pelas seguintes razes: primeiramente, esses aspectos
formam, por si mesmos, um tpico maior; segundo, os problemas encontrados nesta rea no
so peculiares aos sistemas de bancos de dados; terceiro, estes problemas esto extensamente
investigados e documentados.
Software
Entre o banco de dados fsico (isto , os dados armazenados) e os usurios do sistema
encontra-se o software, o gerenciador do banco de dados (o gerenciador DB) ou, mais
comumente, sistema gerenciador de banco de dados (DBMS - [conforme iniciais em ingls N.T.]). Todas as solicitaes dos usurios de acesso ao banco de dados so manipuladas pelo
DBMS; os recursos esboados na Seo I.1 referentes criao de arquivos (ou tabelas),
insero de dados, recuperao de dados etc. so todos proporcionados pelo DBMS. Outra
funo do DBMS , pois, isolar os usurios do banco de dados dos detalhes a nvel de
A terceira
3 DADOS OPERACIONAIS
Um dos primeiros textos didticos sobre o assunto, de Engles [1.10], refere-se aos dados de
banco de dados como "dados operacionais", distinguindo-os de dados de entrada, dados de
sada e de outros tipos de dados. Damos abaixo uma verso modificada da definio original
de Engles acerca de banco de dados:
Um banco de dados uma coleo de dados operacionais armazenados, usados pelos
sistemas de aplicaes de uma empresa especfica.
Esta definio requer uma explicao. Primeiramente, "empresa" apenas um termo
genrico e conveniente para designar uma organizao comercial, cientfica, tcnica ou de
outra natureza que seja razoavelmente independente. Uma empresa pode ser um nico
indivduo (com um pequeno banco de dados particular), ou uma organizao de grande porte
ou similar (com um grande banco de dados compartilhado), ou algo entre esses extremos.
Exemplos de empresas:
fbricas;
bancos;
hospitais;
universidades;
departamentos governamentais.
Qualquer empresa deve, necessariamente, manter uma certa quantidade de dados
acerca de suas operaes. So estes os "dados operacionais". Os dados operacionais das
empresas acima provavelmente incluiriam o seguinte:
dados sobre os produtos;
dados contbeis;
dados sobre os pacientes;
dados sobre os estudantes;
dados de planejamento.
O ponto importante dos relacionamentos como ilustrados acima na figura 2 que so tanto
uma parte dos dados operacionais como entidades bsicas. Conseqentemente, devem estar
representadas no banco de dados. Consideremos mais frente as diversas maneiras de fazlo.
A Figura 2 tambm ilustra outros itens.
1. Embora a maioria dos relacionamentos do diagrama envolva dois tipos de entidade - isto ,
sejam relacionamentos binrios -, isto no significa que todos os relacionamentos sejam
necessariamente binrios neste sentido. Temos no exemplo um relacionamento que envolve
trs tipos de entidade (fornecedores, peas e projetos) - um relacionamento ternrio,
interpretado de forma que certos fornecedores forneam certas peas para certos projetos.
Observe-se que este relacionamento ternrio "fornecedores fornecem peas para projetos"
no , em geral, o equivalente combinao dos trs relacionamentos binrios, "fornecedores
fornecem peas", "peas so usadas nos projetos" e "projetos so fornecidos por
fornecedores". A informao, por exemplo, que
a) Smith fornece chaves-inglesas para o projeto Manhattan nos diz mais do que a combinao
b) Smith fornece chaves-inglesas,
c) chaves-inglesas so utilizadas no projeto Manhattan, e
d) o projeto Manhattan abastecido por Smith
No podemos (incontestavelmente!) deduzir: a) se conhecemos somente b), c) e d). Mais
explicitamente, se conhecemos b), c) e d), podemos deduzir que Smith fornece chavesinglesas para algum projeto (digamos, projeto Jz), que algum fornecedor (digamos,
fornecedor Sx) fornece chaves-inglesas para o projeto Manhattan e, que Smith fornece
alguma pea (digamos, pea Px) para o projeto Manhattan -, mas no podemos realmente
concluir que Sx Smith ou que Py sejam chaves-inglesas nem que Jz seja o projeto
Manhattan. Concluses errneas como esta ilustram o que chamamos de armadilha de
conexo.
2. O diagrama mostra tambm uma seta que envolve apenas um tipo de entidades (peas). O
relacionamento indica, neste caso, que certas peas incluem outras peas como componentes
imediatos (o chamado relacionamento "lista de materiais que compem um produto ) - por
exemplo, um parafuso componente de uma dobradia, que tambm considerada uma pea
e que, por sua vez, pode ser um componente de uma pea maior, como uma tampa.
Observemos que ainda se trata de um relacionamento binrio; como dois tipos de entidades
que se ligam entre si (ou seja, peas e peas) so uma s e a mesma.
3. Em geral, um dado conjunto de tipos de entidades pode enlaarse em qualquer nmero de
relacionamentos. No diagrama, projetos e empregados so ligados por duas setas, uma
controle centralizado de seus dados operacionais ( uma de suas propriedades mais teis). Tal
situao contrasta nitidamente com a que vemos na empresa sem sistema de banco de dados,
onde cada aplicao dispe de seus prprios arquivos - muitas vezes tambm suas fitas e
discos particulares - de tal forma que os dados operacionais so muito dispersos, diiicultando
o controle sistemtico.
Vamos aprofundar o conceito de controle centralizado: implica que (numa empresa
com um sistema de banco de dados) exista uma pessoa identificvel detendo a
responsabilidade central sobre os dados operacionais. Esta pessoa o administrador do banco
de dados (DBA); por enquanto; suficiente sabermos que o cargo requer a) um alto grau de
capacitao tcnica, e b) a capacidade de entender e interpretar as necessidades da empresa a
nvel de gerncia executiva. Na prtica, a funo do DBA pode ser desempenhada por um
grupo de pessoas, gerentes e tcnicos, ao invs de apenas um indivduo. Contudo, para
simplificar, partiremos do princpio que o DBA seja na verdade uma nica pessoa.
importante percebermos que a posio do DBA dentro da empresa (ou deveria ser) de alto
nvel gerencial.
Descrevemos a seguir algumas das vantagens que resultam da noes de controle
centralizado:
Pode reduzir a redundncia.
Nos sistemas sem banco de dados, cada aplicao possui seus prprios arquivos. Este fato
costuma provocar uma redundncia considervel nos dados armazenados, com o desperdcio
de espao de armazenamento resultante. Por exemplo, uma aplicao de pessoal e uma
aplicao de registros de educao podem ter, ambas, um arquivo contendo informaes do
departamento relativo aos funcionrios. Como sugerido na Seo 1.2., estes dois arquivos
podem ser integrados, e a redundncia eliminada, se o DBA estiver a par das necessidades de
dados de ambas as aplicaes - isto , se o DBA possuir o necessrio controle global.
No pretendemos sugerir que toda a redundncia deva necessariamente ser eliminada.
Algumas vezes, existem fortes razes, tcnicas ou comerciais, para se manter cpias
mltiplas do mesmo dado. Entretanto sugerimos que a redundncia seja cuidadosamente
controlada - isto , o DBMS deve ter conhecimento da mesma, e assumir a responsabilidade
de "propagar as atualizaes" (vide o item abaixo).
A inconsistncia pode ser evitada (at certo ponto).
Conseqncia natural do item anterior. Suponhamos que um certo fato do mundo real
- digamos, o fato de que o funcionrio E3 trabalha no departamento D8 - representado por
duas entradas distintas no banco de dados, e qu o DBMS no tenha conhecimento desta
duplicidade (i.e., a redundncia no controlada). Haver, ento, ocasies em que as duas
entradas no sero concordes - ou seja, quando apenas uma das duas entradas for atualizada.
Diz-se, ento, que o banco de dados inconsistente. bvio que um banco de dados
considerado inconsistente capaz de fornecer informaes incorretas ao usurio.
Se o fato mencionado estiver representado por uma nica entrada (isto , se a
redundncia
for
removida),
obviamente
tal
inconsistncia
no
poder
ocorrer.
haver exatamente uma "viso interna", representando todo o banco de dados como
armazenado de fato.
O banco
de dados contm,
no
nvel
conceitual,
informaes
referentes
ao tipo de entidade
O usurio de PL/I tem uma viso externa do banco de dados, na qual cada fnncionrio
representado por um registro PL/I, contendo dois campos (os nmeros de departamento no
so do interesse deste usurio, e por isto foram omitidos da viso). O tipo de registro
definido por uma declarao comum de estrutura PL/I, de acordo com as regras normais de
PL/I.
Do mesmo modo, o usurio de COBOL tem uma viso externa, na qual cada funcionrio
representado por um registro COBOL, contendo, novamente, dois campos (desta vez foi
omitido o de salrio). O tipo de registro definido por um registro cornum COBOL, de
acordo com as regras normais do COBOL.
Observemos que objetos correspondentes podem ter nomes diferentes em cada nvel. O
nmero do funcionrio, por exemplo, chamado de EMP # na viso da PL/I, e de EMPNO na
viso COBOL, como EMPLOYEE_NUMBER na viso conceitual e como EMP #
(novamente) na viso interna. O sistema certamente deve estar a par das correspondncias.
Deve ser informado, por exemplo, que o campo COBOL EMPNO deriva do objeto conceitual
EMPLOYEE_NUMBER que, por sua vez, representado no nvel interno pelo campo
armazenado EMP # . Tais concordncias, ou mapeamentos, no so mostradas na Figura 4.
Primeiro, o nvel conceitual em tal sistema ser definitivamente relacional, no sentido
de que os objetos visveis neste nvel sero tabelas relacionais (os operadores tambm sero
operadores relacionais, i.e., operadores que trabalham com tais tabelas). Segundo, uma
determinada viso externa ser igualmente relacional ou algo bem prximo; por exemplo, os
registros PL/I e COBOL podem ser considerados, respectivamente, como as representaes
PL/I e COBOL de (uma linha dentro de) uma tabela relacional. Terceiro, o nvel interno
certamente no ser sempre "relacional", desde que os objetos desse nvel no sero
exatamente tabelas relacionais (armazenadas) - ao contrrio, sero a mesma espcie de objetos encontrados no nvel interno de outros tipos de sistema (a saber, registros armazenados,
ponteiros, ndices, acessos hash etc.). De fato, a teoria relacional como tal no tem nada a
dizer sobre o nvel interno (repetimos, sobre como o banco de dados aparece para o usurio.
Examinaremos agora mais detalhadamente os trs nveis da arquitetura, iniciando com o nvel
externo.
6 - O NVEL EXTERNO
O nvel externo o nvel do usurio individual. Um determinado usurio tanto pode
ser um programador de aplicaes como um usurio de terminal on-line - i.e., um usurio
final - de qualquer grau de sofisticao. O DBA um caso especial importante. (Ao contrrio
dos usurios comuns, o DBA ter de se interessar pelos nveis conceitual e interno tambm.
Cada usurio tem uma linguagem sua disposio:
Esta linguagem, para o programador de aplicao, pode ser uma linguagem
convencional de programao, como COBOL ou PL/I, ou uma linguagem de programao
apropriada, especfica do sistema em questo (sistemas NOMAD, Rdv/VMS ou dBase II).
Para o usurio final, pode ser uma linguagem de consulta ou uma linguagem de
propsitos especiais, talvez baseada em formulrios ou menu, modelada s necessidades do
usurio e suportada por um programa de aplicao on-line.
Para nossos propsitos, o que importa sabermos que todas essas linguagens
incluiro uma sublinguagem de dados - ou seja, um subconjunto de toda a linguagem, voltado
para os objetivos e operaes do banco de dados. A sublinguagem de dados (DSL) embutida
na linguagem hospedeira correspondente, a qual proporciona os diversos recursos noespecficos de banco de dados, tais como variveis locais (temporrias), operaes
computacionais, lgica if-then-else e assim por diante. Um determinado sistema pode suportar mltiplas linguagens hospedeiras e mltiplas sublinguagens de dados.
FIGURA 5 Sistema de Arquitetura detalhado
Observao: Embora seja conveniente diferenciar, na arquitetura, a sublinguagem de
dados e linguagem hospedeira, as duas, em relao ao usurio, podem ser indistinguveis. Se
assim for, ou se s puderem ser separadas com dificuldades, dizemos que so "unidades de
maneira firme". Se as linguagens so fceis e claramente separadas, dizemos que so "unidas
de maneira indefinida". A maioria dos sistemas de hoje suporta apenas a unio indefinida.
Um sistema firmemente unido propiciar um conjunto de recursos mais uniforme para o
usurio, mas obviamente requer maior esforo por parte dos projetistas do sistema (o que
poderia explicar o que temos hoje). Entretanto, parece haver um movimento que,
gradualmente, nos levar a dispor, nos prximos anos, de sistemas com unio mais firme.
funcionrio, mals um campo de cinco dgitos decimals, `salrio', e assim por diante. Alm
disso, deve haver uma definio do mapeamento entre o esquema externo e o esquema
conceitual fundamental
9 - O NVEL CONCEITUAL
A viso conceitual a representao de todo o contedo de informaes do banco de
dados, tambm (como a viso externa) um tanto abstrata quando comparada forma como os
dados so fisicamente armazenados, que tambm pode ser bem diferente da maneira como os
dados so vistos por qualquer usurio em particular. A grosso modo, podemos dizer que a
viso conceitual a viso dos dados "como realmente so", e no como os usurios so
forados a v-los devido s restries (por exemplo) da linguagem ou do hardware utilizados
pelos mesmos.
A viso conceitual consiste em ocorrncias mltiplas de tipos mltiplos de registros
conceituais. A mesma pode consistir, por exemplo, em uma srie de ocorrncias de registros
de departamentos, mais um conjunto de ocorrncias de registros de funcionrios, ou de
fornecedores de peas ... De um lado, um registro conceitual no necessariamente o mesmo
do que um registro externo e, de outro, nem o mesmo que um registro armazenado.
A viso conceitual definida pelo esquema conceitual que inclui definies de todos
os diversos tipos de registros conceitual. O esquema conceitual escrito atravs de outra
linguagem de definio de dados, a DDL conceitual. Para que se possa alcanar a
independncia de dados, essas definies da DDL conceitual no podem conter quaisquer
consideraes sobre a estrutura de armazenamento ou a estratgia de acesso - devem ser
apenas definies das informaes. Assim, no pode haver referncia ao esquema conceitual
para as representaes do campo armazenado, seqncia de registro armazenado, indexao,
acesso hash, ponteiros ou quaisquer outros detalhes de armazenamento/acesso. Se o esquema
conceitual for realmente independente de dados, ento os esquemas externos, que so
definidos em termos do esquema conceitual, tambm sero necessariamente independentes de
dados.
A viso conceitual, ento, a viso do contedo total do banco de dados, e o esquema
conceitual uma definio desta viso. Seria errado, porm, dizer-se que o esquema
conceitual no nada mais do que um conjunto de definies parecidas com simples
definies de registros como encontrados, por exemplo, num programa COBOL. As
definies no esquema conceitual devem incluir uma grande quantidade de aspectos, como
controles de segurana e de integridade. Algumas autoridades na matria ainda vo mais
alm, e sugerem que o objetivo final do esquema concetual descrever toda a empresa - no
somente os dados operacionais, mas tambm como so usados: como transcorre o fluxo em
cada ponto da empresa, como usado em cada ponto, como se aplicam a auditoria ou outros
controles em cada ponto, e assim por diante. Enfatizamos, no entanto, que hoje em dia
nenhum sistema realrnente suporta um nvel conceitual que se aproxime deste grau de
abrangncia; na maioria dos sistemas existentes, o "esquema conceitual" realmente pouco
mais que uma simples unio de todos os esquemas externos e indviduais, com a provvel
ado de alguns controles de segurana e integridade. Mas tudo indica que os sistemas, no
futuro, sero eventualmente mais sofisticados quanto ao suporte do nvel conceitual.
Discutiremos este tpico com mais profundidade no final desse Ivro (vde CaptuIo 25).
10 - O NVEL INTERNO
O terceiro nvel da arquitetura o nvel interno. A viso interna uma pequena representao
de todo o banco de dados; consiste em ocorrncias mltiplas de tipos mltiplos de registros
internos. O "registro interno" termo ANSI/SPARC para a estrutura que temos denominado
de registro armazenado (termo que continuaremos a empregar). A viso interna um tanto
distante do nvel fsico, uma vez que no trabalha em termos de registros fsicos (tambm
chamados pginas ou blocos), nem de consideraes de dispositivos especficos tais como
cilindro ou comprimento de trilha. (A viso interna assume basicamente um espao de
endereamento linear e infinifo. Os detalhes de como este espao de endereamento
mapeado at o armazenamento fsico so altamente especficos a cada sistema, e
deliberadamente omitidos de arquitetura.)
A viso interna descrita por meio do esquema interno, que no s define os vrios
tipos de registros armazenados como tambm especifica os ndices que existem, como os
campos armazenados so representados, a seqncia fsica dos registros armazenados, e
assim por diante. O esquema interno preparado atravs de uma outra linguagem de definio de dados - a DDL interna.
Observamos, parte, que, em certas situaes excepcionais, os programas de aplicao - em
particular, as aplicaes de natureza "utilitria" podem operar diretamente no nvel interno, ao
invs do nvel externo. No necessrio dizer que esta prtica no recomendvel;
representa um risco de segurana (posto que o controle de segurana no observado) e um
risco de integridade (uma vez que os controles de integridade tambm no so observados), e
o programa, alm disso, torna-se dependente de dados, em algumas ocasies, porm esta
poder ser a nica forma de se obter a funo ou a performance nocasria - assim como o
usurio de uma linguagem de programao de alto nvel pode, ocasionalmente, precisar
por exemplo, agrupar os dados de certa maneira ou regenerar espao ocupado por dados que
se tornaram obsoletos).
Rotinas estatsticas (para computar diversos desempenhos estatsticos, tamanhos de arquivos
e distribuio de valores de dados). Rotinas analticas (para analisar as estatsticas
mencionadas). Uma das ferramentas mais importantes do DBA - de muitas maneiras e, de
fato, o corao de todo o sistema, embora no mostrado na Figura 5 - o dicionrio de dados
(conhecido tambm como catlogo do sistema). O dicionrio de dados pode ser considerado
um banco de dados (mas um banco de dados de sistema, e no propriamente um banco de
dados de usurio). O contedo do dicionrio pode ser considerado "dados sobre dados" (s
vezes denominado "metadados") - ou seja, descries de outros objetos no sistema, ao invs
de simples "dados em bruto". Os diversos esquemas e mapeamentos (externo, conceitual
etc.), especialmente, sero fisicamente armazenados, ambos na forma-fonte e na forma
objeto, no dicionrio. Um dicionrio abrangente tambm incluir referncias cruzadas das
informaes, mostrando, por exemplo, que programas utilizam tal parte do banco de dados,
que departamentos necessitam de tais relatrios, que terminais esto conectados ao sistema, e
assim por diante. O dicionrio tambm pode (e deveria) estar integrado ao banco de dados
que descreve, incluindo, portanto, a sua prpria descrio. Deveria ser possvel consultar-se o
dicionrio, tal como qualquer outro banco de dados, de maneira que fosse possvel indicar os
programas e/ou usurios que seriam afetados por eventual mudana no sistema.
13- O SISTEMA DE GERENCIAMENTO DO BANCO DE DADOS.
O sistema de gerenciamento do banco de dados (DBMS) o software que manipula
todos os acessos ao banco de dados. De forma conceitual, acontece o seguinte:
1. O usurio emite uma solicitao de acesso, usando uma sublinguagem especfica de dados
(por exemplo, SQL).
2. O DBMS intercepta a solicitao e analisa-a.
3. O DBMS, por sua vez, inspeciona os esquemas externos para aquele usurio, o
mapeamento externo/conceitual correspondente, o esquema conceitual, o mapeamento
conceitual/interno e a definio da estrutura de armazenamento.
4. O DBMS executa as operaes necessrias no banco de dados armazenado.
2. Buscar as entradas de
Londres no arquivo de
cidades e, para cada uma,
acompanhar o ponteiro ao
registro correspondente no
arquivo de fornecedores. Se a proporo de fornecedores de Londres em relao aos outros
for pequena, provavelmente a segunda estratgia seria mais eficaz do que a primeira, porque
1) o DBMS est a par do seqenciamento fsico do arquivo de cidade (pode parar a busca
naquele arquivo, assim que o mesmo achar uma cidade que suceda Londres na ordem
alfabtica), e 2) mesmo que tenha de empreender uma busca em todo o arquivo de cidades, a
mesma ainda necessitaria de menos entradas/sadas, pois o arquivo de cidades fisicamente
menor do que o de fornecedores (pois os registros so menores).
O arquivo de cidades neste exemplo tido como um ndice para o arquivo de
fornecedores; o arquivo de fornecedores, da mesma forma, tido como indexado pelo
arquivo de cidades. Um ndice uma espcie especial de arquivo armazenado. Para ser mais
especfico, um arquivo no qual cada entrada (i.e., registro) compe-se precisamente de dois
valores, um valor de dados e um ponteiro (RID);
o valor de dados um valor para determinado campo do arquivo indexado, e o
ponteiro identifica um registro daquele arquivo que tenha o valor daquele campo.
A partir deste ponto, passaremos a nos referir ao arquivo de cidades da Figura 6 mais
explicitamente como "o ndice CITY". Um ponto da terminologia: Um ndice de um campo
de chave primria - por exemplo, um ndice no campo S # do arquivo de fornecedores -
chamado de ndice primrio. Um ndice de qualquer outro campo - por exemplo, o ndice
CITY do exemplo - denominado ndice secundrio. Como So Usados os ndices.
A vantagem fundamental do ndice que acelera a recuperao. Entretanto h tambm
uma desvantagem - reduz a velocidade das atualizaes. (Como em muitas outras situaes,
h uma compensao.) Por xemplo, cada vez que se adiciona um novo registro armazenado
ao arquivo indexado, uma nova entrada ter de ser acrescentada ao ndice. Consideremos,
como exemplo mais expecfico, o que o DBMS deve fatter no ndice CITY da Fig. 6 para
mudar o fornecedor S2 de Paris para Londres. A questo que deve ser respondida quando um
campo considerado como candidato indexao : O que seria mais importante, a
recuperao eficiente baseada no valor do campo em questo ou a perda em atualizao, em
funo da recuperao eficiente?
No restante desta seo, passaremos a concentrar-nos especificamente nas operaes
de recuperao.
Os ndices podem ser utilizados, essencialmente, de duas maneiras diferentes. Primeiro,
podem ser utilizados para o acesso seqencial ao rquivo indexado - onde "seqencial"
significa "na seqncia definida pelos valores do campo indexado". Por exemplo, o ndice
CITY no exemplo acima permite que os registros no arquivo de fornecedores sejam
processados na seqncia de cidades. Segundo, os ndices tambm podem ser utilizados para
acesso direto aos registros individuais no arquivo indexado baseado num determinado valor
do campo indexado.
segundo caso.
Os dois meios bsicos de utilizar um ndice podem ser delineados, simplesmente
como:
l. Seqencial: O ndice tambm pode ser til nas consultas de limites - por exemplo, "Achar
os fornecedores cuja cidade se encontre em determinado limite do alfabeto" (isto , inicie-se
com a letra no limite L-R).
2. Direto: O ndice tambm pode ser til nas consultas de lista - por exemplo, "Achar os
fornecedores cuja cidade se encontre em certa lista especfica" (isto , a lista da cidade de
Londres, Paris e Nova York).
H, ainda, certas consultas - basicamente, testes de existncia - que podem ser respondidas
apenas pelo ndice, sem qualquer acesso ao arquivo indexado. Considere como exemplo a
consulta: "H fornecedores em Atenas?".
A resposta claramente "sim" se, e apenas se, existir uma entrada para Atenas no
ndice CITY.
Um determinado arquivo armazenado pode ter qualquer quantidade de ndices. Por exemplo,
o arquivo armazenado de fornecedores pode ter um ndice CITY e um ndice STATUS
(Figura 7). Estes ndices poderiam ento ser utilizados para proporcionarem acesso eficiente
aos registros de fornecedores na base de determinados valores para cada ou ambos os ndices
CITY e STATUS. Como um exemplo do caso "ambos", consideremos a consulta: "Achar os
fornecedores em Paris com status 30". O ndice CITY fornece os RIDs - r2 e r3, digamos para os fornecedores de Paris; da mesma maneira, o ndice STATUS fornece os RIDs - r3 e
r5, digamos - para os fornecedores de status 30. Deduzimos desses dois conjuntos de RIDs
que o nico fornecedor que satisfaz a consulta original o fornecedor com RID igual a r3 (ou
seja, o fornecedor S3). Somente, ento, o DBMS acessa o arquivo de fornecedores em si, a
fim de recuperar o registro desejado.
basicamente, este propsito por meio de ponteiros; e a partir de agora assumimos que todos
os ponteiros so ponteiros de registro (ou seja, RID's). De fato seria suficiente para este
propsito que estes fossem simples ponteiros de pginas (isto , nmeros de pgina).
Realmente, o sistema teria um trabalho adicional para achar um registro numa determinada
pgina, pois precisaria explorar atravs das pginas do armazenamento principal, embora a
quantidade de entradas/sadas permanecessem as mesmas.
Levemos a idia adiante. Lembremo-nos de que qualquer arquivo armazenado tem
uma nica seqncia "fsica", representada pela combinao de 1) seqncia de registros
armazenados em cada pgina e 2) seqncia de pginas dentro do conjunto de pginas.
Suponhamos que o arquivo de fornecedores seja armazenado tal como a seqncia fsica
corresponde seqncia lgica, como definido pelos valores de determinado campo, digamos
o campo de nmero de fornecedores; em outras palavras, o arquivo de fornecedores (Figura
9) agrupado naquele campo. Suponhamos, tambm, que seja necessrio um ndice naquele
campo. No h necessidade de que aquele ndice inclua uma entrada para cada registro
armazenado no arquivo indexado (isto , o arquivo de fornecedores, no exemplo). 'Ido o que
necessrio uma entrada para cada pgina, determinando o nmero mais alto de fornecedor
na pgina e o nmero correspondente da pgina.
Consideremes, como exemplo, o que necessrio para recuperar o fornecedor S3
utilizando este ndice. O sistema primeiramente precisa explorar o ndice, procurando a
primeira entrada com o nmero de fornecedores superior ou igual a S3. O sistema acha a
entrada indexada para o fornecerdor S4, que aponta a pgina p (digamos), recupera-a e explora-a no armazenamento principal, cata do desejado registro armazenado (que neste
exemplo ser encontrado rapidamente).
Um ndice, como o da Fig. 9, denominado no-denso, pois no contm uma entrada
para todo registro armazenado no arquivo indexado. (Todos os ndices at ento discutidos,
pelo contrrio, eram ndices densos.) Uma das vantagens do ndice no-denso que ocupar
menos armazenamento que o ndice denso correspondente, pela bvia razo de que contm
menos entradas. Em conseqncia, a explorao provavelmente ser mais rpida. Como
desvantagem, no possibilitar o desempenho de testes de existncia com base no ndice
apenas.
trs nveis de indexao). Cada nvel de ndice atua como um ndice no-denso para o nvel
inferior (deve ser o no-denso, certamente, pois, de outra maneira, no se realizaria nada - o
nvel n conteria o mesmo nmero de entradas como o nvel n + 1, e o tempo de explorao
permaneceria o mesmo).
Agora podemos discutir a rvore B. A rvore B um tipo especial de ndice
estruturado na forma de rvore, como descrito num texto de Bayer e McCreight, em 1972
[3.10]. Desde ento, diversas variaes foram propostas em relao idia bsica, por Bayer
e outros pesquisadores; como mencionado, as rvores B, de um ou outro modo, so agora
provavelmente a estrutura de armazenamento mais utilizada nos sistemas modernos de banco
de dados (relacionais ou no). Descrevemos a variao realizada por Knuth [3.1].
Mencionamos que a estrutura de ndice do "Mtodo de Acesso Virtual ao Armazenamento"
VSAM da IBM [3.12] muito similar estrutura de Knuth. Contudo a verso VSAM inclui
caractersticas prprias, como a utilizao de tcnicas (vide Seo 3.7). Na realidade, o
precursor da estrutura VSAM j fora descrito por Chang em 1969 [3.13].
Na variao Knuth, o ndice compe-se de duas partes, o conjunto de seqncias e o conjunto
de ndices (terminologia VSAM).
1. O conjunto de seqncias consiste em um ndice de nvel nico aos dados reais; em
geral, denso, mas pode ser no-denso, se o arquivo indexado for agrupado ao campo
indexado. As entradas no ndice so (certamente) agrupadas em pginas, e as pginas so
(certamente) encadeadas, de forma que a ordem lgica representada pelo ndice seja obtida
atravs das entradas em ordem fsica na primeira pgina da cadeia, seguida das entradas na
ordem fsica na segunda pgina da cadeia, e assim por diante. Desta maneira, o conjunto de
seqncia proporciona um rpido acesso seqencial aos dados indexados.
2. O conjunto de ndices, por sua vez, proporciona um rpido acesso direto ao
conjunto de seqncias (e, conseqentemente, aos dados). O conjunto de ndice , na
realidade, um ndice estruturado em forma de rvore B para o conjunto de seqncias; o
conjunto de ndices representa a rvore B. A combinao do conjunto de ndices e do
conjunto de seqncias denominado eventualmente, de "rvore B-plus" (rvore B+). O
nvel superior do conjunto de ndices consiste em um nico n (isto , uma nica pgina, mas
contendo entradas mltiplas de ndice, como todos os outros ns). O n superior
denominado raiz. A Fig. 10 mostra um exemplo simples. A Fig. 10 se exemplifica da seguinte
forma: Os valores 6, 8, 12 ..., 97, 99 so o campo indexado, digamos, F. Consideremos o n
superior, que consiste em dois valores F (50 e 82) trs ponteiros (nmeros de pgina). Os
registros de dados com F menor ou igual a 50 podem ser achados (eventualmente) seguindose o ponteiro esquerdo a partir deste n; da mesma forma, os registros com F, superiores a 50
Alm de mostrar como trabalha o acesso hash, o exemplo tambm demonstra porque
a funo hash necessria. Teoricamente seria possvel usar uma funo hash "identidade".
Isto , usar o valor (numrico) da chave primria para qualquer registro armazenado,
diretamente como o endereo hash. Contudo tal tcnica normalmente ser inadequada na
prtica, porque a margem de valores de chave primria possveis ser, em geral, mais ampla
do que a margem de endereos disponveis. Suponhamos, por exemplo, que os nmeros de
fornecedores tenham, de fato, trs dgitos a mais, como no exemplo acima. Haveria ento
1000 possibilidades de nmeros distintos de fornecedores, enquanto, de fato, existiriam
apenas cerca de 10 fornecedores. Assim, para evitar uma perda considervel de espao de
armazenamento, o ideal seria descobrir uma funo hash que reduza qualquer valor da faixa
de 000-999 para a faixa 0-9 (digamos). Para permitir um pouco de espao para o crescimento
futuro, normal que se aumente a margem em cerca de 20 por cento; foi por isto que
escolhemos uma funo que gera valores na faixa de 0-12, e no 0-9, como no exemplo
acima.
O exemplo tambm ilustra uma das desvantagens do acesso hash: A "seqncia fsica"
de registros no arquivo armazenado no ser certamente a seqncia da chave primria, nem
qualquer outra que tenha qualquer interpretao lgica sensvel. (Ademais, pode haver
espaos vazios de tamanhos arbitrrios entre os registros consecutivos.) De fato, em geral a
seqncia fsica de um arquivo armazenado com estrutura hash (no invariavelmente) tida
como no-representativa de seqncia lgica especfica,b assim, via de regra, arquivo de
acesso hash no tem nenhum agrupamento intra-arquivo - o que de se lamentar, j que o
agrupamento fsico, como mencionado neste captulo, quase sempre seria do maior interesse.
Uma outra desvantagem do acesso hash a possibilidade de colises - isto , de achar dois
registros distintos que indiquem o mesmo endereo. Suponhamos, por exemplo, que o
arquivo de fornecedores (com os fornecedores S100, S200 etc.) tambm inclua um
fornecedorcom nmero de fornecedor S1400. Dada a funo hash "dividir por 13" discutida
acima, aquele fornecedor colidiria (no endereo hash 9) com o fornecedor S 100.
A funo hash, como o exemplo demonstra, inadequada; el deve ser aprofundada
na sentido de lidar com o problema de coliso.
Em nosso exemplo original, uma possibilidade seria tratar o restante da diviso por
13, no como um endereo hash em si, mais como ponto de partida para uma busca
seqencial. Para inserir o fornecedor S1400 (supondo que j existam os fornecedores S100S500), vamos pgina 9 e buscamos frente, a partir desta posio, a primeira pgina livre.
O novo fornecedor ser armazenado na pgina 11. Para depois recuperar este
fornecedor, usaremos um processo similar. Este mtodo de busca linear ser adequado se
(como em geral ocorre na prtica) os registros mltiplos estiverem armazenados em todas as
pginas. Suponhamos que cada pgina possa conter n registros armazenados. Ento, as
primeiras colises n em dado endereo hash p sero armazenadas na pgina p e uma busca
linear atravs dessas colises estar totalmente contida nesta pgina. Entretanto a prxima
coliso - isto , a de nmero (n + 1) - dever ser armazenada em pgina extra, e ser
necessria outra E/S.
Uma outra abordagem ao problema da coliso, talvez mais encontrada na prtica,
seria de tratar o resultado a partir da funo hash, digamos a, como endereo de
armazenamento, no do registro de dados, mas do "ponto ncora". O ponto ncora no
endereo de armazenamento a ento considerado a cabea de uma cadeia de ponteiros (uma
cadeia de colises), unindo todos os registros - ou todas as pginas de registros - que colidem
em a. As colises dentro de uma determinada cadeia de colises sero mantidas em uma
seqncia de campo hash, a fim de simplificarem as buscas subseqentes.
Acesso Hash Extensvel
Uma outra desvantagem, alm daquela descrita acima, a seguinte: como o tamanho
do arquivo de acesso hash cresce, o nmero de colises tambm tende a crescer e,
conseqentemente, o tempo de acesso mdio aumenta de modo correspondente (porque se
gasta cada vez mais tempo na busca atravs dos conjuntos de colises). O acesso hash extensvel uma variao interessante da tcnica bsica, qu minoriza este problema. O acesso
hash extensvel, de fato, garante que a quantidade necessria de acessos em disco para
localizar um registro especfico (isto , o registro com o valor especfico da chave primria)
nunca ser maior do que duas e, normalmente, de apenas uma.
Obs.: Os valores do campo hash devem ser nicos no esquema de acesso hash
extensvel, onde se encontraro naturalmente, se aquele campo for, de fato, a chave primria,
como sugerido no incio desta seo.
O esquema funciona como segue.
1. A funo hash bsica h, e o valor da chave primria de um registro especfico r k. O
acesso hash a k - isto , avaliando-se h(k).
- produz um valor k', denominado de pseudochave de r. As pseudochaves no so
interpretadas diretamente como endereos; ao contrrio, elas conduzem aos locais de
armazenamento de um modo indireto, como descrito abaixo.
2. O arquivo armazenado tem um diretrio associado ao mesmo, tambm, armazenado no
disco. O diretrio consiste em um cabealho, que contm um valor d, denominado
profundidade do diretrio, em conjunto com 2 ponteiros, que so ponteiros para as pginas
de dados, que contm os registros armazenados reais (registros mltiplos por pgina). Um
diretrio de profundidade d, portanto, pode manejar um tamanho mximo de arquivo de 2d de
pginas de dados distintas.
3. Se consideramos os bits-guia d de uma pseudochave como um inteiro binrio sem sinal
algbrico b, ento o ponteiro de nmero i no diretrio (1 < = i < = 2~ indica a pgina que
contm todos os registros para os quais b toma o valor i - 1. Em outras palavras, o primeiro
ponteiro indica a pgina que contm todos os registros para os quais b apenas zero, o
segundo ponteiro indica a pgina onde b 0 ... Ol, e assim por diante. (Esses 2d ponteiros so
todos distintos, ou seja, existiro menos do que 2d pginas de dados distintos. Vide Fig. 12.)
Deste modo, para que possamos achar o registro que tenha o valor k da chave primria,
achamos k via acesso hash para descobrir a pseudochave K' e tirar os primeiros bits d da
pseudochave; se esses bits tiverem o valor numrico i - 1, vamos at o ponteiro de n i no
diretrio (primeiro acesso em disco) e o seguimos at a pgina que contm o registro desejado (segundo acesso em disco).
Obs.: O diretrio ser, na prtica, pequeno o suficiente para ser mantido no armazenamento
principal durante a maior parte de tempo, de modo que os "dois" acessos em disco sero
normalmente reduzidos a um s na prtica.
Neste ponto, a pgina ser fracionada em duas; ou seja, adquire-se uma pgina nova e vazia,
Figura 12
e todos os registros 001 so removidos da pgina antiga para a nova. O ponteiro
001 no
diretrio ser modificado para apontar a nova pgina (o ponteiro 000 continua para a pgina
antiga). A profundidade local p para cada uma das duas pginas ser agora trs, e no mais
dois.
6. Continuando o nosso exemplo, suponhamos que a pgina de dados 000 esteja novamente
cheia e tenha que ser fracionada. O diretrio existente no pode manipular tal fracionamento,
campo cidade como tal foi removido do arquivo de fornecedores. O DBMS, para achar todos
os fornecedores em Londres (digamos), pode pesquisar o arquivo de cidades pela entrada de
Londres e, ento, seguir a correspondente cadeia de ponteiros.
FIGURA 13 Exemplo de uma estrutura pai/filho
Os ponteiros podem ser feitos em sentido duplo. A vantagem que tal varivel simplifica o
ajuste de ponteiro necessrio para a operao de anulao de um registro-filho.
Uma outra ampliao seria a incluso de um ponteiro (um "ponteiro-pai" de cada registrofilho para o pai correspondente); isto reduziria quantidade de passagens na cadeia que so
necessrias para se responder consulta "Achar a cidade para determinado fornecedor"
(observemos, entretanto, que esta ampliao no afeta a necessidade de um acesso hash ou
ndice para auxiliar na resposta consulta).
Uma outra varivel seria no remover o campo do arquivo de fornecedores, mas repetir o
campo nos registros de fornecedores; certas possibilidades de recuperao (por exemplo,
"Achar a cidade do fornecedor S4") torna-se-iam mais eficientes. Observemos, porm, que o
aumento da eficincia no tem nada a ver com a estrutura da cadeia de ponteiros em si - e que
ainda ser provavelmente necessrio um acesso hash ou ndice nos nmeros de fornecedores.
Finalmente, assim como possvel ter quaisquer quantidades de ndices em um
determinado arquivo armazenado, tambm possvel ter quaisquer quantidades de cadeias de
ponteiros em determinado arquivo armazenado. (Ambos tambm so possveis, embora
incomuns na prtica.) A Fig. 14 mostra uma representao de um arquivo de fornecedores que
envolve duas cadeias de ponteiros distintas e, assim, duas estruturas-pai/filho distintas, uma
com o arquivo de cidade como pai (como na Fig. 13) e uma com o arquivo de status como
pai. O arquivo de fornecedores o arquivo-filho para ambas as estruturas.