Documente Academic
Documente Profesional
Documente Cultură
#*nmero catlogo
*preo atual
*quant. do pacote
*unidade de medida
De acordo com as regras do negcio, cada ITEM CATLOGO tem um nico nmero
catlogo. Ento este deveria ser o UID da entidade ITEM CATLOGO.
51
Resolver Relacionamentos M:M-cont.
Resolver todos os relacionamentos M:M ao fim da fase de Anlise. Essa resoluo
forada pode resultar em uma entidade relacionamento sem atributos.
Exemplo
Na situao da Video Locadora, o seguinte relacionamento M:M foi definido.
FILME
#*id
*ttulo
o categoria
ATOR
#*cdigo
*nome artstico
o nome real
o data de nasc.
estrelado por
a estrela do
Ao fim do estgio de anlise, o usurio no tinha identificado quaisquer atributos
que so associados com o relacionamento M:M. Resolver o relacionamento M:M com
uma entidade interseco sem atributos
para para
FILME
#*id
*ttulo
o categoria
ATOR
#*cdigo
*nome artstico
o nome real
o data de nasc.
ATUAO DA ESTRELA
estrelado por a estrela de
Notas Rpidas
Uma entidade interseco sem atributos apenas uma lista de referncia
cruzada bi-direcional entre as ocorrncias das entidades.
Uma entidade interseco sem atributos uma exceo regra que uma
entidade deve ter atributos para ser uma entidade.
O UID para uma entidade interseco vazia sempre composta das relaes
das duas entidades nas quais ela foi originada.
52
EXERCCIO 4-2
No MER do exerccio Grupo de usurios da apostila anterior, existe um
relacionamento de M:M entre as entidades MEMBRO e REA DE INTERESSE.
Resolva este relacionamento baseado nas seguintes informaes adicionais:
Queremos tambm manter uma pequena descrio do interesse de cada membro
numa rea especfica. Por exemplo, queremos documentar que um membro j tem
um grande sistema financeiro que ele desenvolveu dentro de casa. Pode haver,
porm, algum membro interessado numa certa rea sem que descrevamos seu
interesse.
EXERCCIO 4-3
Resolver o seguinte relacionamento M:M entre CLIENTE e PRODUTO. Adicione os
atributos data do pedido, quantidade e preo.
CLIENTE
#*id
*nome
*sobrenome
PRODUTO
#*nmero
* nome
* unidade de
medida
o solicitante
de
pedido por
53
MODELO DE DADOS HIERRQUICO
Representar os dados hierrquicos como um conjunto de relacionamentos M:1.
Exemplo
Modelar a estrutura de organizao hierrquica como um conjunto de
relacionamentos M:1.
COMPANHIA
DIVISO
DEPARTAMENTO
TIME
TIME
DIVISO
COMPANHIA
DEPARTAMENTO
Modelo de Dados Hierrquico-cont.
O UID para um conjunto de entidades hierrquicas pode ser propagado atravs de
mltiplos relacionamentos.
Exemplo
Quais so os UIDs das entidades ANDAR, SUTE e QUARTO?
54
QUARTO
#*id
SUTE
#*nmero
o inquilino
ANDAR
#*nmero
PRDIO
#*id
*nome
*endereo
dentro
localizado
localizado
sobre
que contm
que contm
que contm
est contido
O UID de QUARTO o id do quarto e a SUTE em que est localizado.
O UID de SUTE o nmero da sute e o andar em que est localizado.
O UID de ANDAR o nmero do andar e o PRDIO em que est localizado.
55
Modelo de Dados Hierrquico-cont.
Considere a criao de atributos artificiais para ajudar a identificar entidades nas
relaes hierrquicas.
Exemplo
Em uma tpica organizao de estrutura, o que poderia unicamente identificar
instncias das entidades DIVISO, DEPARTAMENTO e TIME?
TIME
DIVISO
COMPANHIA
DEPARTAMENTO
Cada TIME deveria ser identificado baseado em seus DEPARTAMENTO, DIVISO,
COMPANHIA.
Ou cada entidade poderia ter um nico, independente e artificial cdigo de
identificao.
Notas Rpidas
Estes nicos, independentes e artificiais codigos de identificao tendem a ser
curtos no tamanho.
Se a estrutura hierrquica muda constantemente, use identificadores
independentes e artificiais.
56
MODELO DE RELACIOINAMENTOS RECURSIVOS
Um Relacionamento Recursivo o relacionamento entre a entidade e ela mesma.
Exemplo
Veja o relacionamento recursivo no seguinte diagrama E-R.
EMPREGADO
#*nmero
*nome
*sobrenome
o trabalho
o salrio
o comisso
gerenciado
por
gerente
de
Cada EMPREGADO pode ser gerenciado por um e somente um EMPREGADO.
Cada EMPREGADO pode ser o gerente de um ou mais EMPREGADOS.
Notas Rpidas
As convenes do diagrama E-R que mostra o relacionamento recursivo
conhecida como orelha de porco.
O loop pode aparecer em qualquer um dos lados do box.
57
Modelo de Relacionamentos recursivos-cont.
Considere a representao hierrquica como um relacionamento recursivo.
Exemplo
Um hierarquia de negcio pode ser desenhada como um relacionamento recursivo.
TIME
DIVISO
COMPANHIA
DEPARTAMENTO
dentro
dentro
feito de
feito de
dentro
feito de
ELEMENTO DA
ORGANIZAO
#*id
*nome
dentro
feito de
Notas Rpidas
Uma nica entidade recursiva deve incluir todos os atributos de cada
entidade individual. Idealmente, as entidades em cada nvel hierrquico
poderiam ter os mesmos atributos.
Um modelo de organizao recursiva pode prontamente acomodar a adio ou
subtrao de organizao de camadas.
Um modelo de organizao recursiva no pode lidar com relaes
obrigatrias. Se cada ELEMENTO DA ORGANIZAO deve estar dentro de
outro ELEMENTO DA ORGANIZAO, a organizao hierrquica teria de
ser infinita.
Um relacionamento recursivo deve ser opcional em ambas direes.
58
Modelo de Relacionamentos Recursivos-cont.
Dados da Conta de Materiais podem ser modelados com vrias entidades para
cada categoria da parte, e um conjunto de relacionamentos entre cada uma destas
entidades.
Exemplo
A organizao da manufatura de um automvel: partes elementares, submontagem,
montagem e produtos. O seguinte diagrama E-R modela estes dados considerando
cada uma destas categorias como uma entidade.
PARTE
SUB-
PRODUTO
MONTAGEM
Amostra de
ventarola,
mdulo de
carburador,
afogador, motor
Amostra de
arruela,
termostato, chip ,
capa do
cinto
Amostra de
sistema de
sistema de
sistema de
motor
Amostra de
carro,
trator,
uma parte de
uma parte de
uma parte de
uma parte de
uma parte de
uma parte de
uma parte de
uma parte de
uma parte de
feito de
feito de
feito de feito de
feito de
feito de
feito de
feito de
feito de
feito de
59
Modelo de Relacionamentos Recursivos-cont.
Modelo de dados Conta de Materiais como um relacionamento M:M recursivo.
Exemplo
Para a organizao da manufatura de automveis, considere todas as partes
elementares, sub-montagem, montagem e produtos como instncias de uma entidade
chamada COMPONENTES. Ento o complexo prvio do modelo E-R pode ser
remodelado como um relacionamento recursivo simples.
COMPONENTE
#*identificador
uma parte de
feito de
Cada COMPONENTE pode ser uma parte de um mais COMPONENTEs.
Cada COMPONENTE pode ser feito de um ou mais COMPONENTEs.
60
Modelo de Relacionamentos Recursivos-cont.
Resolver o relacionamento recursivo M:M com uma entidade interseco e duas
relacionamentos M:1 para diferentes instncias de uma entidade original.
Exemplo
Considere a estrutura do modelo recursivo de Conta de Materiais. Este modelo
traar informaes sobre quais componentes so parte da ventarola. Mas se uma
arruela fizer parte da ventarola, traaremos tambm como vrias arruelas fazem
parte de uma ventarola.
parte de
COMPONENTE
#*identificador
uma parte d
feito de
O atributo quantidade parece estar associado com o relacionamento recursivo.
Resolver este relacionamento M:M recursivo pela adio da entidade interseco
REGRA DE MONTAGEM e duas relaes M:M ligadas entidade COMPONENTE.
REGRA DE MONTAGEM ter um atributo de
quantidade.
para para
COMPONENTE
#*identificador
REGRA DE MONTAGEM
o quantidade
feito de feito de
As duas relaes M:1 vindas da instncia REGRA DE MONTAGEM sero
associadas com diferentes instncias da entidade COMPONENTE. Por exemplo, a
instncia REGRA DE MONTAGEM de arruela a ventarola ter um relacionamento
M:1 com a instncia COMPONENTE para arruela e um segundo relacionamento M:1
com a instncia COMPONENTE para ventarola.
EXERCCIO 4-4
61
Desenvolva dois modelos E-R representando a situao abaixo. Um deles na
estrutura hierrquica e outro na estrutura recursiva.
Nossa companhia vende produtos em todo Brasil. Assim, dividimos o pas em
quatro grandes regies: Sul, SP-Rio, Central e Norte. Cada regio de vendas possui
identificador nico. Cada regio ,por sua vez, est dividida em distritos de vendas.
Por exemplo, a regio Norte engloba os distritos Amaznia, Zona da Mata e
Caatinga. Cada distrito tambm tem um cdigo nico.
Cada distrito composto de territrios de vendas. A Zona da Mata por exemplo,
engloba os territrios: Costa Norte e Costa Leste. J o distrito Amaznia engloba os
territrios: Solimes-Manaus, Par-Norte e Par-Sul.
Cada territrio est dividido em reas de vendas: Por exemplo, Costa Norte engloba
as reas: Grande So Luiz, Grande Fortaleza etc.
Cada vendedor responsvel por uma ou mais reas de vendas, para qual ele possui
uma cota. Tambm temos gerentes responsveis por um ou mais distritos, e diretores
responsveis por uma ou mais regies de vendas. O gerente responsvel por um
distrito tambm responsvel pelos territrios deste distrito.
Ns no sobrepomos as responsabilidades dos funcionrios: uma rea de vendas
sempre da responsabilidade de apenas um vendedor. Alm disso, as
responsabilidades de nossos diretores e gerentes no se sobrepem. As vezes, algum
diretor, gerente ou vendedor est para deixar as empresa ou precisou ficar ausente
por algum motivo. Ns identificamos todos nossos funcionrios pelos seus IDs.
MODELANDO PAPIS COM RELACIONAMENTOS
Ateno com as entidades que representem papis.
Exemplo
No modelo E-R para a Training Company, foi definida uma entidade INSTRUTOR e
uma entidade ALUNO. Este modelo trabalha bem se um INSTRUTOR nunca for um
ALUNO e se um aluno nunca for INSTRUTOR. Mas o que acontece se um
INSTRUTOR tambm um ALUNO?
62
ALUNO
#*id
* sobrenome
*nome
o telefone
CURSO
#*cdigo
*nome
o durao
o taxa
INSTRUTOR
#*id
*sobrenome
*nome
o telefone
MATRCULA
*data da matrcula
o data que completou
o grau
para para
matriculado
em
matriculado
por
lecionado
por
o professor
de
Entidades que representam papis podem dividir instncias sobrepostas.
Modelando Papis com Relacionamentos-cont.
Use relacionamentos para modelar papis. Relacionamentos permitem uma
simples entidade instncia a assumir vrios papis.
Exemplo
Para a Training Company, definir a entidade pessoa que pode suportar os papis de
INSTRUTOR e/ou ALUNO.
63
para
REGRA DE MONTAGEM
o quantidade
para
PESSOA
#*id
*sobrenome
*nome
o telefone
CURSO
#*cdigo
*nome
o durao
o taxa
aluno
de
instrutor
de
lecionado
por
matriculado
por
64
MODELANDO SUBTIPOS
Use subtipos para modelar tipos de entidades exclusivas que tm atributos e
relaes em comum.
Exemplo
Uma empresa definiu dois tipos de funcionrios: privilegiados e no-privilegiados.
Para todos eles, traar cada nmero, nome, sobrenome, e o departamento designado.
Para os privilegiados traar tambm seu salrio. Para os no-privilegiados trace a
quantia horria, a quantia total e membro da unio.
Criar um super tipo FUNCIONRIO com dois subtipos. Cada FUNCIONRIO
tambm um FUNCIONRIO PRIVILEGIADO ou um FUNCIONRIO NO-
PRIVILEGIADO.
FUNCIONRIO #*nmero
*nome
*sobrenome
FUNCIONRIO
PRIVILEGIADO
*salrio
FUNCIONRIO
NO-PRIVILEGIADO
*quantia horria
*quantia total
DEPARTAMENTO UNIO
feitode
feito de
membro
de
designado
a
Nota Rpida
Tome cuidado com as instncias que podem ser os dois subtipos-a construo
subtipo/supertipo incorreta nestas situaes.
65
Modelando Subtipos-cont.
Um supertipo uma entidade que tem subtipos. Um super tipo pode ser dividido
em dois ou mais subtipos exclusivos e mtuos.
Exemplo
Um FUNCIONARIO tambm um FUNCIONRIO PRIVILEGIADO ou um
FUNCIONRIO NO-PRIVILEGIADO, mas no ambos.
Um supertipo pode ter atributos e relacionamentos compartilhados entre seus
subtipos.
Exemplo
Todos FUNCIONRIOs devem ter o atributo nmero, nome, sobrenome. Todos
FUNCIONRIOs devem ser designados a um e somente um DEPARTAMENTO.
Cada subtipo pode ter seus prprios atributos e relacionamentos.
Exemplo
O subtipo FUNCIONRIO PRIVILEGIADO tem um atributo salrio.
O subtipo FUNCIONRIO NO-PRIVILEGIADO tem atributos de quantia horria e
quantia total, e um relacionamento com a entidade UNIO.
Nota Rpida
Um subtipo sem atributos ou relacionamentos prprios pode ser um sinnimo da
entidade supertipo e no um subtipo.
66
Modelando Subtipos-cont.
Todas instncias da entidade supertipo deve pertencer a uma e somente uma
entidade subtipo. Subtipos devem formar um conjunto completo sem
sobreposies.
Exemplo
Geralmente, um trabalho manual ou um trabalho de escritrio, mas devem haver
algumas excees.
TRABALHO
OUTRO
TRABALHO
TRABALHO
MANUAL
TRABALHO DE
ESCRITRIO
Regras de Leitura de Supertipos
Cada entidade supertipo deve ser tambm um subtipo1 ou um subtipo2
Exemplo
Cada TRABALHO deve ser tambm um TRABALHO MANUAL ou um
TRABALHO DE ESCRITRIO, ou OUTRO TRABALHO.
Regras da leitura de subtipos
...subtipo, que um tipo do supertipo,...
Exemplo
...TRABALHO DE ESCRITRIO, que um tipo de TRABALHO,...
Sempre use o termo OUTRO quando no se tem certeza sobre o complemento do
conjunto.
67
Modelando Subtipos-cont.
Subtipos podem ser subtipados adiante. Normalmente dois ou trs nveis
so adequados.
Exemplo
Definir adiante subtipos para a entidade subtipo AVIO.
AERONAVE
AVIO
PLANADOR
PROPULSO
AVIO TURBINADO
AVIO A JATO
OUTROS
AVIES
CARGUEIRO
HELICPTERO
AVIO um subtipo de AERONAVE e um supertipo de AVIO TURBINADO e
PLANADOR.
AVIO A JATO herda os atributos e relaes de AVIO TURBINADO, AVIO E
AERONAVE.
68
MODELANDO RELACIONAMENTOS EXCLUSIVOS
Modelar dois ou mais relacionamentos mutuamente exclusivos vindos da mesma
entidade usando um arco.
Exemplo
Uma CONTA BANCRIA qualquer deve ser apropriada a um INDIVDUO ou
apropriada a uma COMPANHIA. Usar o arco para modelar este relacionamento.
CONTA
BANCRIA
INDIVDUO
COMPANHIA
Adquirida
por a
Adquirida
por
o dono
da
o dono
da
Regras de Leitura das Relaes Exclusivas
Cada entidadeA qualquer entidade1 relacionamento1 ou entidade2
relacionamento2.
Exemplo
Cada CONTA BANCRIA deve ser adquirida por um e somente um INDIVDUO
ou por uma e somente uma COMPANHIA.
Convenes da Modelagem de Arcos
Os relacionamentos em um arco tem frequentemente o mesmo nome.
Os relacionamentos em um arco devem ser todas obrigatrias ou todas opcionais.
Um arco pertence a uma s entidade e devem incluir somente relacionamentos
vindos desta entidade.
Uma entidade deve ter vrios arcos, mas um relacionamento especfico somente
pode participar de um nico arco.
69
Modelando Relacionamenots Exclusivos-cont.
Escolha entre duas convenes para desenhar arcos.
Conveno de Desenho1-Um Arco com Pontos Opcionais
Um ponto no arco usado para significar que um relacionamento pertence ao arco.
Conveno de Desenho2-Um Arco sem Pontos
Qualquer relacionamento cruzado pelo arco pertence a ele. Uma quebra no arco
indica que o relacionamento no est includo no arco.
70
EXERCCIO 4-5
Desenvolva um MER baseado nas seguintes informaes:
A companhia Right-Way Rental Truck aluga pequenos caminhes e trailers para
uso local e/ou one way. Temos 347 pontos de aluguis (escritrios) no Oeste dos
EUA. Nossa frota possui um total de 5780 veculos, incluindo vrios tipos de
caminhes e trailers. Precisamos implementar um sistema para controlar os contratos
de locao e alocao de veculos. Cada escritrio aluga veculos que esto em
estoque para clientes prontos para tomarem posse do veculo. No fazemos reservas
e nem especulamos quando o cliente vai retornar um veculo alugado. A matriz
gerencia a distribuio e direciona a transferncia de veculos de um escritrio a
outro.
Cada escritrio possui um nome e um nmero de trs dgitos que o identifica.
Tambm mantemos o endereo de cada escritrio. Cada escritrio funciona como
uma base para os veculos e cada veculo est baseado em um nico escritrio.
Cada veculo possui um cdigo, situao de registro e nmero de licena. Temos
diferentes tipos de veculos: truck 36, truck 24, truck 10, trailer comum e motorhome.
Usamos cdigos para identificar cada tipo de veculo. Para cada veculo, guardamos
a ltima data de manuteno e a data do vencimento da licena. Com relao aos
caminhes, precisamos guardar quantos quilmetros o odmetro est marcando, a
capacidade do tanque e se o veculo possui ou no um rdio. Para grandes viagens,
os clientes preferem caminhes equipados com rdio. Assim que alugamos um
caminho, guardamos a quilometragem corrente. Este procedimento repetido
quando o caminho devolvido.
A maioria dos contratos de aluguis so para pessoas fsicas, apesar da gente
tambm fazer contratos com empresas. Alugamos uma porcentagem de nossos
caminhes e trailers para empresas. Para cada nova companhia cadastrada,
fornecemos um cdigo e guardamos seu nome e endereo. Para ns da matriz no
nos interessa mais qualquer outras informaes sobre elas.
Para cada cliente pessoa fsica, mantemos seu nome, telefone residencial, endereo,
nmero da carteira de habilitao e a data do vencimento da habilitao. Alm disso,
se o cliente danificou o veculo ou no pagou a conta ns o taxamos de invlido e
nunca mais alugaremos veculos para el outra vez.
Cada contrato de locao feito para apenas um cliente (fsico ou jurdico) e apenas
um veculo. Claro que temos clientes que alugam mais de um veculo ao mesmo
tempo, mas fazemos um contrato para cada locao.
Alis, cada contrato identificado por um nmero de contrato e pelo nmero de
escritrio do qual o veculo foi retirado. Tambm guardamos a data do contrato, a
durao (esperada) da locao, o nmero do escritrio em que o veculo devolvido,
o valor do depsito, a taxa de locao diria e a taxa de quilometragem. Para trailers
no controlamos a quilometragem. IMPORTANTE: no queremos automatizar o lado
financeiro, apenas os contratos de locao.
71
MODELANDO DADOS NO TEMPO
Adicione entidades e relacionamentos ao modelo E-R para acomodar dados
histricos.
Perguntar ao Usurio:
necessrio uma auditoria?
Os valores dos atributos podem mudar no tempo?
As relaes podem mudar no tempo?
Voc precisa examinar dados antigos?
Voc precisa manter verses prvias?
Nota Rpida
Validar quaisquer requerimentos para armazenamento de dados histricos
com o usurio. Armazenar dados histricos desnecessrios pode ser muito
CARO.
72
Modelando Dados no tempo.
Criar uma entidade adicional para mapear o valor de um atributo no tempo.
Exemplo
Uma firma de consultoria precisa manter informaes sobre seus contratos. Cada
contrato tem um nico id de contrato, eles precisam manter a descrio do contrato e
o status do contrato (aberto, fechado, ou suspenso). Inicialmente a seguinte entidade
CONTRATO foi modelada.
CONTRATO
#*id
*descrio
*valor do status
*data efetiva
A entidade CONTRATO acima suporta um nico valor de status corrente para
CONTRATO. A lei da firma quer traar as datas em que cada um foi aberto, foi
fechado e foi suspenso. Para modelar valores de status excedentes, adicione uma
entidade STATUS.
CONTRATO
#*id
*descrio
*valor do status
*data efetiva
STATUS
#*data efetiva
*valor
o estado
de
de
O UID entidade STATUS relacionado ao CONTRATO e a data efetiva.
Nota Rpida
Usar uma nica entidade para gravar os valores no tempo dos vrios atributos
associados com uma entidade (tanto como o CONTRATO).
Modelando Dados no tempo.
Adicione uma nova entidade para comportar um relacionamento que pode mudar
no tempo.
Exemplo:
73
Um proprietario de imveis deseja registrar dados de locao de seus apartamentos.
O modelo abaixo registra apenas o locatrio atual de um apartamento.
Adicione a entidade histrico de alugueis para capturar os valores do
relacionamento de locao no tempo.
Modelando Dados no tempo - cont.
Uma entidade interseco frequentemente usada para guardar informaes sobre
relaes que mudam no tempo.
Exemplo
Uma sociedade profissional quer mapear a relao entre as companhias e seus
membros . H um relacionamento M:M entre cada membro e cada companhia.
APARTAMENTO
#*codigo
*endereo
PESSOA
#*id
*ultimo_nome
*primeiro_nome
PESSOA
#*id
*ultimo_nome
*primeiro_nome
Alugado por O locatrio de
O locatrio de
Histrico de locao
#*da_data_de
0 para_data_de
APARTAMENTO
#*codigo
*endereo
para
para
Locado por
74
MEMBRO
#*id
*sobrenome
*nome
COMPANHIA
#*cdigo
*nome
contratado
por
o contratante
de
Adicione uma entidade interseco, HISTRICO DO EMPREGO, para traar cada
contratao dos empregados no tempo e as datas destes empregos.
para
para
MEMBRO
#*id
*sobrenome
*nome
COMPANHIA
#*cdigo
*nome
empregado
por
contratante
de
HISTRICO DO
DO EMPREGO
#*a partir da data
o at a data
Pela incluso do atributo a partir da data UID de HISTRICO DO EMPREGO,
este modelo traar vrios termos do EMPREGO em uma nica empresa por um
nico empregado.
EXERCCIO 4-6
Modificar o MER do exerccio 3-6 (locadora de vdeo) para acomodar as seguintes
informaes adicionais que seguem:
Ns realmente precisamos manter o histrico de nossos aluguis. Cada vez que um
cliente aluga uma fita queremos manter a data do aluguel e a data do retorno.
Mantendo esse histrico de aluguel, seremos capazes de analisar o padro de nossos
aluguis. Poderemos determinar quantas fitas cada cliente aluga e quantas vezes um
cliente devolveu a fita com atraso. Seremos capazes de saber quantas fitas em
particular foram usadas e ento saberemos quando retirar cada fita. Tambm
seremos capazes de analisar as preferncias de filmes de nossos clientes.
75
para
para
por
FILME
#*id
*ttulo
o categoria
ATOR
#*cdigo
*nome artstico
o nome real
o data de nascimento
estrelado estrelando em
ESTRELA EM CARTAZ
CLIENTE
#*nmero
* nome
* sobrenome
o telefone
FITA
#*nmero
*formato
o locatrio
alugada por
a cpia
de
em
76
MODELANDO RELACIONAMENTOS COMPLEXOS
Ateno aos anis de relacionamentos M:M.
Exemplo
Desenvolver um modelo E-R para o histrico de emprego. Para cada pessoa guarde o
cargo ocupado, companhia em que trabalhou e a data em que cargo foi ocupado.
Uma pessoa pode ocupar vrios cargos dentro de uma empresa ao longo de uma
carreira. Inicialmente o seguinte modelo foi definido.
PESSOA
#*id
*sobrenome
*nome
COMPANHIA
#*cdigo
*nome
POSIO
#*ttulo do trabalho
o descrio
ocupante
de
ocupado
por
contratado
por
o empregado
de
o empregado
de
incluido
no
A data do cargo parece ser um atributo do relacionamento. Ento resolva cada
relao M:M.
PESSOA
#*id
*sobrenome
*nome
COMPANHIA
#*cdigo
*nome
POSIO
#*ttulo do trabalho
o descrio
ocupado
por
o empregado
HISTRIA
HISTRIA
HISTRIA
DO CARGO
ORGANIZAO
COMPANHIA
para
para
para
para para
contratado
em
contratado
em
para para
o empregado
o assunto
de
Os atributos data do cargo pertencem a qual entidade interseco? Todos eles?
Nenhum deles?
Modelando Relacionamentos Complexos-cont.
77
Modelando um relacionamento entre trs ou mais entidades como uma Entidade
Interseco com relacionamento obrigatrios com estas entidades.
Exemplo
O histrico de um emprego de uma pessoa na real um relacionamento de 3 direes
entre entidades PESSOA, COMPANHIA e CARGO. Usar uma nica entidade
interseco chamada HISTRICO DO EMPREGO para modelar este relacionamento.
HISTRICO
DO EMPREGO
#*datado de
* datado para
COMPANHIA
#*cdigo
*nome
CARGO
#*ttulo
*descrio
PESSOA
#*id
*sobrenome
*nome
empregador
de
includo
para
em
em
uma parte
de
Um relacionamento complexo uma relao entre trs ou mais entidades.
Notas Rpidas
Uma entidade interseco em um relacionamento complexo sempre tem relaes
obrigatrias com as entidades que esto relacionadas.
Para uma entidade interseco representar um relacionamento complexo, siga as
regras da modelagem E-R bsica para nomear as entidades e analisar e
modelar
suas relaes, seus atributos e seu UID.
Considerar suas relaes obrigatrias como candidatas incluso no seu UID.
EXERCCIO 4-7
No MER do exercicio 3-10 (grupo de usurios) um relacionamento M:M foi
modelado entre as entidades MEMBRO e PLATAFORMA. Revise o relacionamento
baseando-se nas seguintes informaes:
No, ns realmente no precisamos saber qual plataforma de computador que cada
membro esta usando. Em vez disso, que necessitamos saber quais produtos
ORACLE(RDBMS, POR_C, etc) cada membro esta usando e em quais plataformas de
computador. No necessrio manter a verso especifica de cada produto, seu nome
suficiente.
78
EXERCCIO 4-8
Desenvolva um modelo para o seguinte negcio:
Eu sou o scio senior de uma grande e diversificada empresa de advogacia. Minha
empresa, Bailey e Associados, trata de uma grande variedade de casos, incluindo
trafico, violaes, disputas domesticas, questes civis, e casos de homicidios.
Nos temos pago um administrador de banco de dados para organizar e mapear
vrios dados porque a empresa cresceu mais rpido que imaginavamos e agora h
casos caindo um atras do outro.
Nossa empresa constituida de departamentos como homicidio, roubo, etc, e cada
caso encaminhado para um departamento particular por razes administrativas.
Advogados so tambem lotados em departamentos especficos , mas isto somente
para efeito de apropriao de despesass e pagamento, pois um advogado pode
trabalhar em casos de outros departamentos.
Nos necessitamos uma lista de eventos par um dado caso(essencialmente uma
historia para o caso) que inclua um relao de eventos e a data que cada evento
tornou-se efetivo. Casos tem que ser identificados por um nico numero o qual
aparece numa lista com cada data e descrio do evento. Eventos tem codigos
especiais, como A para abertura, P para perdido, J para julgamento, e deve ali ser
sempre um estado de evento para cada caso.
Ns queremos guardar a trilha de informaes importantes associadas com o caso
incluindo o departamento relacionado e uma breve descrio( com Jones versus
Jones). Aps um caso ter sido fechado, ele pode ser reaberto numa data futura. Ns
atribuimos para casos reabertos novo numero , mas nos precisamos associar o novo
numero com o anterior.
Advogados podem ser envolvidos em vrios casos da mesma maneira varia s
pessoas podem ser envolvidas em vrios casos. Por exemplo, Jones pode ser um Juiz
em um caso e uma testemunha num outro. Nos estamos interessados em guardar as
participaes e os papeis que eles exerceram no contexto de um particular caso.
Envolvimentos devem ser identificados pelo seu nome e a data de nascimento,
atravs de sistema de numerao nica. Os tipos de pessoas que podem ser
MEMBRO
*nome
*sobrenome
0 cargo
0 anuidades
recebidas
* endereo
0 fone
0 tipo
0
PLATAFORMA
#*id
* descrio
Usurio de
Usado por
79
envolvidas nos casos incluem Juizes(JU), Testemunhas oculares (TO),
defensores(DF), e naturalmente Advogados (AD). Por exemplo, nos temos um caso
de assassinato, e estamos trabalhando na defesa. Um advogado designado para o
caso, h um juiz presidindo o caso e tambem uma testemunha ocular.
Ento h quatro pessoas que participam deste caso, e nos precisamos saber tudo a
respeito delas. Neste contexto, estamos vendo o advogado simplesmente como parte
do caso, e no como uma conta.
Para registrar os vrios papis que pessoas podem assumir, considere que elas
podem participar em diferentes papeis em diferentes casos, mas apenas num nico
papel em cada caso .
80
81
Modelo Relacional
O Modelo Relacional (MR) foi inicialmente introduzido por Codd (1977) e representa os dados em um
banco de dados como uma coleo de relaes (tabelas). Observe exemplo na figura 1.
EMPREG
Matrcula Nome Sexo Salrio
111 PEDRO M R$ 1.000,00
222 MARIA F R$ 2.000,00
333 JOAO M R$ 120,00
444 ANA F R$ 120,00
321 CARLOS M R$ 150,00
123 CLAUDIA F R$ 359,00
001 MARCOS M R$ 120,00
Figura 1 Exemplo de relao (tabela)
Cada linha denominada tupla; o nome de uma coluna chamado de atributo; a tabela chamada de
relao.
Um domnio D uma coleo de valores atmicos (que no podem ser divididos). Um domnio est
associado a colunas de tabelas. Considere o seguintes exemplos:
Matrcula: conjunto de valores de trs dgitos, numricos, positivos e inteiros.
Nome: conjunto de nomes de pessoas;
Salrio: conjunto de valores numricos monetrios, entre 120,00 e 2000,00.
Um esquema de relao usado para descrever uma relao. Um esquema de relao R, denotado por
R(A1, A2, ..., An), um conjunto de atributos R = {A1, A2, ..., An}. Cada atributo possui um
domnio denotado por dom(Ai ). Cada atributo Ai o nome do papel de um domnio na relao (por
exemplo, o atributo nome refere-se ao papel do domnio de conjunto de nomes de pessoas). O grau de
uma relao o nmero de atributos n de seu esquema de relao.
A relao EMPREG, que possui 4 atributos (grau = 4), pode ser representada segundo o seguinte
esquema de relao:
EMPREG (Matrcula, Nome, Sexo, Salrio)
Uma relao r (instncia de relao) do esquema de relao R(A1, A2, ..., An), tambm denotado por
r(R), um conjunto de n-tuplas r = {t1, t2, ..., tm}. O esquema da relao descreve a estrutura da
relao; a relao (ou instncia da relao) o conjunto de valores de dados em um determinado
instante do mundo real (Observe que, na definio de relao, no se especifica qualquer ordenao
para as tuplas de uma relao).
Cada n-tupla uma lista ordenada de valores t = <v1, v2, ..., vn>, onde cada valor vi, 1 < i < n, um
elemento de dom(Ai ) ou um valor nulo.
Uma relao r(R) um subconjunto do produto cartesiano dos domnios que definem R (o produto
cartesiano especifica todas as possveis combinaes de valores dos domnios):
r(R) ( dom(A1) X dom(A2) X ...... X dom(An) )
82
Se a cardinalidade de um domnio D | D |, assumindo todos os domnios com finitos, o nmero total
de tuplas do produto cartesiano
| dom(A1) | * | dom(A2) | * ...... * | dom(An) |
A relao, ou instncia da relao, modificada com o tempo, para refletir as alteraes do mundo
real. O esquema de uma relao mais esttico do que a instncia da relao (a alterao do esquema
da relao ocorre, por exemplo, quando um novo atributo adicionado).
Vrios atributos podem ter o mesmo domnio, mas em diferentes papis. Por exemplo, os atributos
telefone residencial e telefone comercial possui o mesmo domnio, mas indicam papis distintos.
Cada valor em uma tupla um valor atmico. Portanto, atributos compostos e multivalorados no so
permitidos. Atributos multivalorados devem ser representados atravs de relaes separadas. Atributos
compostos so representados somente pelos atributos componentes. Adicionalmente, valores nulos so
aplicados em atributos de tuplas nos casos de valores no conhecidos e valores no aplicveis.
2. Atributos Chave de uma Relao
Todas as tuplas de uma relao devem ser distintas. Assim, duas tuplas no podem ter a mesma
combinao de valores para todos os seus atributos.
O subconjunto mnimo de atributos de uma relao onde no existem duas tuplas com a mesma
combinao de valores para tais atributos dito chave da relao ( comum ocorrer vrias chaves
candidatas para chave da relao).
O valor dos atributos chave pode ser usado para identificar unicamente uma tupla em uma relao. Os
atributos chave de uma relao constituem uma propriedade do esquema da relao, e no variam a
medida em que a relao se modifica (incluso e excluso de tuplas).
Os atributos selecionados para constituir a chave de um relao so comumente denominados de chave
primria da relao (primary key - PK); a chave primria identifica cada tupla da relao.
3. Esquema e Instncia de Banco de Dados Relacional
Um esquema de banco de dados relacional S um conjunto de esquemas de relao S = {R1, R2, ...,
Rm} e um conjunto de restries de integridade.
Uma instncia de banco de dados relacional (ou banco de dados relacional) DB de S um conjunto de
instncias de relao DB = {r1, r2, ..., rm}, onde ri uma instncia de Ri, e cada instncia de
relao deve satisfazer as restries de integridade do esquema de banco de dados relacional.
EMPREG
Nome Matric Endereo Sexo Salrio DataNasc NumDepto MatricSuperv
DEPTO
NumDepto NomeDepto
Figura 2 Exemplo de esquema de banco de dados relacional
4. Restries de Integridade em um Esquema de BD Relacional
83
A restrio de integridade de entidade indica que nenhum valor de chave primria pode assumir valor
nulo (adicionalmente, valores para a chave primria devem ser nicos em uma relao), pois a chave
primria utilizada para identificar cada tupla de uma relao.
A restrio de integridade referencial uma restrio que especificada entre duas relaes, sendo
utilizada para manter a consistncia associada a tuplas de duas relaes (uma tupla em uma relao
est relacionada com uma tupla em outra relao).
A integridade referencial entre relaes implementada atravs de chave estrangeira (foreign key -
FK). Considere dois esquemas de relao R1 e R2, onde um conjunto de atributos em R1
denominado chave estrangeira (FK) se satisfaz as seguintes condies:
Os atributos da FK (chave estrangeira) em R1 tem o mesmo domnio dos atributos PK (chave
primria) em R2.
O valor de FK em uma tupla t1 de R1 pode assumir os seguintes valores:
valor de PK de alguma tupla t2 de R2 (t1[FK] = t2[PK]), ou
valor nulo.
Em um banco de dados com muitas relaes, usualmente existiro muitas restries de integridade
referencial. Restries de integridade referencial tipicamente surgem dos relacionamentos associados
s entidades. Como exemplo, observe o atributo NumDepto no esquema de relao EMPREG; este
atributo uma chave estrangeira (FK), que referencia a chave primria (PK) no esquema de relao
DEPTO, e implementa uma associao entre empregado e departamento (um empregado trabalha para
um departamento). Cada tupla de EMPREGADO possui um valor para o atributo NumDepto que
identifica um departamento.
5. lgebra Relacional
A lgebra relacional consiste em um conjunto de operaes utilizadas para manipular relaes. Uma
consulta em um banco de dados que segue o modelo relacional realizada atravs da aplicao de
operaes da lgebra relacional; por exemplo, uma consulta pode selecionar algumas tuplas de uma
relao (os empregados de sexo masculino) e, adicionalmente, combinar tais tuplas com tuplas de
outra relao (os empregados de sexo masculino e seus respectivos dependentes).
Importante
O resultado de cada operao da lgebra relacional uma nova relao, que pode ser manipulada por
outras operaes da lgebra relacional.
Assim, as operaes da lgebra relacional so realizadas sobre relaes inteiras (no em uma tupla
(linha) da relao; o resultado dessas operaes encarado como uma nova relao.
5. Operao de Seleo
A operao de seleo utilizada para selecionar um subconjunto das tuplas de uma relao (linhas de
uma tabela), a partir de uma condio de seleo. A seguinte notao pode ser utilizada, onde a
operao de seleo representada pela letra minscula grega sigma ():
<condio de seleo> (<nome da relao>)
Para selecionar os empregados de sexo masculino, a partir da relao EMPREG da figura 1, aplica-se
Sexo=M (EMPREG)
resultando na relao
Matrcula Nome Sexo Salrio
111 PEDRO M R$ 1.000,00
333 JOAO M R$ 120,00
84
321 CARLOS M R$ 150,00
001 MARCOS M R$ 120,00
Observe que a relao resultante possui os mesmos atributos da relao utilizada na operao.
Na <condio de seleo>, pode-se utilizar os operadores de comparao { = , < , > , , , }.
Outros operadores so tambm utilizados: NOT, AND e OR; a operao
(Sexo=M) AND (Salrio > 120.00) (EMPREG)
resulta na relao
Matrcula Nome Sexo Salrio
111 PEDRO M R$ 1.000,00
321 CARLOS M R$ 150,00
Na verdade, a operao de seleo aplicada para cada tupla (linha) da relao, com o intuito de
compor a relao resultante (conjunto resposta da operao).
A operao de seleo unria; isto , aplicada em uma nica relao. O nmero de tuplas da
relao resultante sempre menor ou igual ao nmero de tuplas da relao utilizada na operao.
A operao de seleo comutativa:
<cond 1> ( <cond 2> (R) ) = <cond 2> ( <cond 1> (R) )
Pode-se combinar operaes em cascata em uma nica operao que utiliza o operador AND:
<cond 1> ( <cond 2> (R) ) = <cond 1> AND <cond 2> (R)
6. Operao de Projeo
A operao de projeo utilizada para selecionar alguns atributos de uma relao (colunas de uma
tabela), descartando os demais atributos. Considere a seguinte notao:
<lista de atributos> (<nome da relao>)
Para selecionar somente o nome e o salrio de empregados, a partir da relao EMPREG da figura 1, a
operao
Nome, Salrio (EMPREG)
resulta na relao
Nome Salrio
PEDRO R$ 1.000,00
MARIA R$ 2.000,00
JOAO R$ 120,00
ANA R$ 120,00
CARLOS R$ 150,00
CLAUDIA R$ 359,00
MARCOS R$ 120,00
A operao de projeo remove implicitamente as tuplas duplicadas presentes na relao resultante; tal
situao pode ocorrer quando no so selecionados os atributos de chave primria da relao (imagine
uma operao de projeo das colunas salrio e sexo).
O nmero de tuplas na relao resultante sempre menor ou igual ao nmero de tuplas da relao
utilizada na operao (devido a eliminao de tuplas duplicadas).
A operao de projeo no comutativa:
<lista 1> ( <lista 2> (R) ) <lista 2> ( <lista 1> (R) )
A operao <lista 1> ( <lista 2> (R) ) ser igual a <lista 1> (R), somente se <lista 2> possui os
atributos de <lista 1>; caso contrrio, um erro caracterizado.
85
A operao
T Nome, Salrio ( Sexo=M (EMPREG) )
resulta na relao T com o nome e o salrio dos empregados de sexo masculino (operaes de seleo
e projeo). A referida operao pode ser apresentada da seguinte forma:
S Sexo=M (EMPREG)
T Nome, Salrio (S)
7. Operao de Produto Cartesiano
A operao de produto cartesiano uma operao binria que combina as tuplas de ambas as relaes
envolvidas (tais relaes no necessitam ser unio-compatveis).
Considere duas relaes R (A1, A2, ..., An) e S (B1, B2, ..., Bm); o resultado do produto cartesiano
consiste em uma relao Q com n + m atributos: Q (A1, A2, ..., An, B1, B2, ..., Bm), nesta ordem. A
relao resultante Q possui uma tupla para cada possvel combinao de tuplas de R e S.
Como exemplo, considere as relaes da figura 3:
EMPREG
Matrc Nome Sexo Salrio Dep
111 PEDRO M R$ 1.000,00 VE
222 MARIA F R$ 2.000,00 EN
123 CLAUDIA F R$ 359,00 VE
001 MARCOS M R$ 120,00 EN
DEPTO
CodDep NomeDep
VE VENDAS
EN ENGENHARIA
Figura 3 Exemplo de banco de dados com 2 tabelas.
O produto cartesiano, denotado por EMPREG X DEPTO, resulta na relao
Matrc Nome Sexo Salrio Dep CodDep NomeDep
111 PEDRO M R$ 1.000,00 VE VE VENDAS
111 PEDRO M R$ 1.000,00 VE EN ENGENHARIA
222 MARIA F R$ 2.000,00 EN VE VENDAS
222 MARIA F R$ 2.000,00 EN EN ENGENHARIA
123 CLAUDIA F R$ 359,00 VE VE VENDAS
123 CLAUDIA F R$ 359,00 VE EN ENGENHARIA
001 MARCOS M R$ 120,00 EN VE VENDAS
001 MARCOS M R$ 120,00 EN EN ENGENHARIA
Observe que a relao resultante no possui significado prtico, pois relaciona cada empregado com
todos os departamentos (inclusive os departamentos que o empregado no est associado). Assim,
necessrio aplicar a operao de seleo na relao resultante do produto cartesiano, relacionando cada
empregado ao seu departamento associado.
Para obter somente dados sobre os empregados e seus respectivos departamentos, pode-se escrever:
Dep = VE AND CodDep = VE (EMPREG X DEPTO)
ou
EMPREG.Dep = VE AND DEPTO.CodDep = VE (EMPREG X DEPTO)
86
8. Operaes de Unio, Interseo e Diferena
As operaes de unio, interseo e diferena so ditas binrias, ou seja, so aplicadas em duas
relaes.
Para entender tais operaes, considere a existncia das relaes R e S, referentes aos alunos
matriculados nos anos de 1996 e 1997, respectivamente.
As relaes que participam de tais operaes devem ser unio-compatveis, significando que as
relaes R (A1, A2, ..., Nn) e S (B1, B2, ..., Bn):
- devem ter a mesma quantidade de atributos; e
- dom(Ai) = dom(Bi), para 1 i n.
A operao de unio, denotada por R S, resulta em uma relao que inclui todas as tuplas das
relaes R e S, onde as tuplas duplicadas sero eliminadas. Assim, R S resulta nos alunos que foram
matriculados em 1996 ou em 1997.
A operao de interseo, denotada por R S, resulta em uma relao que inclui todas as tuplas
presentes em ambas as relaes. Assim, R S resulta nos alunos que foram matriculados em 1996 e
em 1997.
A operao de diferena, denotada por R S, resulta em uma relao que inclui todas as tuplas de R
que no esto presentes em S. Assim, R S resulta nos alunos que foram matriculados em 1996 e que
no se matricularam em 1997.
As operaes de unio e interseo so comutativas:
R S = S R e R S = S R
A operao de diferena no comutativa:
R S S R
Observe que
R S = R (R S)
9. Operao de Renomeao
Para efetuar uma operao binria que envolva duas tabelas iguais, utiliza-se o operador de
renomeao para eliminar possveis ambigidades. A expresso
EMPREG2 (EMPREG)
renomeia a relao EMPREG para EMPREG2.
A consulta qual o empregado de maior salrio ? pode ser solucionada primeiramente buscando o
maior salrio e, ento, pesquisando dados do(s) empregado(s) que possui(em) tal salrio. Na expresso
EMPREG X EMPREG2 (EMPREG)
o operador renomeia EMPREG para EMPREG2 com o intuito de efetuar um produto cartesiano
entre duas imagens da relao empregado. A expresso
EMPREG.Salario < EMPREG2.Salario (EMPREG X EMPREG2 (EMPREG) )
resulta em linhas do produto cartesiano onde o salrio de EMPREG sempre menor que o salrio de
EMPREG2; assim, cada linha de EMPREG combinada com as linhas de EMPREG2 com maior
salrio. Pode-se concluir que no resultado do produto cartesiano no aparecer o maior salrio na
imagem EMPREG, somente na imagem EMPREG2. A expresso
S EMPREG.Salario ( EMPREG.Salario < EMPREG2.Salario (EMPREG X
EMPREG2 (EMPREG) ) )
resulta em uma relao que no inclui o maior salrio (removendo implicitamente linhas duplicadas),
como observado a seguir:
87
Salrio
R$ 1.000,00
R$ 120,00
R$ 150,00
R$ 359,00
Para obter o maior salrio, pode-se utilizar a seguinte operao de diferena
T Salario (EMPREG) - S
Assim, a consulta qual o empregado de maior salrio ? poderia ser solucionada com a expresso:
Matric, Nome ( EMPREG.Salario = T.Salario (EMPREG X T ) )
10. Operao de Juno (Join)
A operao de juno (join) utilizada para combinar tuplas relacionadas de duas relaes. Essa
operao fundamental pois permite processar relacionamentos entre relaes.
Para relacionar cada empregado com o seu departamento associado, a operao de juno (join),
denotada por EMPREG Dep = CodDep DEPTO, a partir da figura 3, resulta na relao
Matrc Nome Sexo Salrio Dep CodDep NomeDep
111 PEDRO M R$ 1.000,00 VE VE VENDAS
222 MARIA F R$ 2.000,00 EN EN ENGENHARIA
123 CLAUDIA F R$ 359,00 VE VE VENDAS
001 MARCOS M R$ 120,00 EN EN ENGENHARIA
De forma didtica, a operao de juno (join) consiste na aplicao da operao de seleo na relao
resultante do produto cartesiano entre relaes. A operao acima poderia ser apresentada como
Dep = CodDep (EMPREG X DEPTO)
Assim, a juno (join) resulta nas combinaes de tuplas que satisfazem a condio, enquanto que o
produto cartesiano resulta em todas as possveis combinaes de tuplas.
Uma operao de juno (join) entre as relaes R e S apresentada como
R <condio> AND <condio> AND ... AND <condio> S
para <condio> igual a Ai Bj
onde: Ai atributo de R
Bj atributo de S
Ai e Bj possuem o mesmo domnio
consiste em uma da operaes { = , < , , > , , }
Um equijoin consiste em um join (juno) que utiliza o operador de igualdade (=) na condio de
juno. O exemplo apresentado acima consiste em um equijoin.
Um natural join consiste em um equijoin sem repetio de colunas envolvidas na condio de juno.
O exemplo acima apresentado no constitui um natural join, pois ocorre tal repetio de condio no
resultado da operao (Dep e CodDep). Para alguns autores, um natural join entre duas relaes R e S
tambm denotado por R S.
Um outer join mantm no resultado da operao as linhas que no satisfazem a condio de um
natural join. Como exemplo, considere a relao abaixo que consiste no resultado de um outer join:
Matrc Nome Sexo Salrio Depto NomeDependente
111 PEDRO M R$ 1.000,00 VE PEDRO FILHO
222 MARIA F R$ 2.000,00 EN < null >
123 CLAUDIA F R$ 359,00 VE < null >
001 MARCOS M R$ 120,00 EN MARCOS JUNIOR
88
A relao acima resultado de um outer join entre as relaes EMPREGADO e DEPENDENTE.
Observe que os empregados 222 e 123, apesar de no possurem dependentes, esto presentes nesta
relao resultante.
11. Operao de Diviso
Considere a consulta: Qual o nome das livrarias que vendem todos os livros da editora LIVROS
MODERNOS ??. A expresso
X NomeEd = LIVROS MODERNOS (EDITORA )
obtm dados da referida editora. A expresso
S ISBN (X LIVRO )
retorna o cdigo dos livros (ISBN) editados pela editora LIVROS MODERNOS.
A expresso
T NomeLivraria, ISBN (LIVRARIA VENDE_LIVRO )
retorna linhas com o nome de livraria e cdigo de livro que vendido por tal livraria.
A expresso T S retorna os nomes de livrarias que vendem todos os livros da editora LIVROS
MODERNOS.
89
Modelo Relacional (cont...)
Neste ponto, apresentaremos de forma sucinta alguns dos passos envolvidos ao mapeamento do
Modelo Entidade Relacionamento para o Modelo Relacional. Os aspectos explorados neste documento
devero ser enriquecidos em anlises complementares. Vale ressaltar que, para melhor entender os
elementos apresentados, deve-se conhecer aspectos tericos dos modelos envolvidos.
1. Para cada tipo de entidade E regular (no fraca) no esquema ER, cria-se uma relao R que inclui
todos os atributos simples de E. Para os atributos compostos, deve-se incluir somente os atributos
simples componentes. Deve-se selecionar um dos atributos chave de E (se existirem vrios
candidatos) como chave primria de R.
2. Para cada tipo de entidade fraca W no esquema ER, com tipo de entidade E que a identifica, cria-
se uma relao R e inclui-se todos os atributos simples de W (e atributos simples componentes)
como atributos de R. Adicionalmente, inclui-se como atributos de chave estrangeira (FK) em R os
atributos de chave primria do tipo de entidade E (que identifica a entidade fraca). A chave
primria (PK) de R combinao da chave primria do tipo de entidade E com a chave parcial do
tipo de entidade fraca W.
3. Para tipo de relacionamento 1:1 binrio R no esquema ER, identificam-se as relaes S e T que
correspondem aos tipos de entidade que participam de R. Escolhe-se uma das relaes e inclui-se
como chave estrangeira (FK) dessa relao a chave primria (PK) da outra relao (por exemplo,
inclui-se como FK em S a PK de T) ( melhor escolher um tipo de entidade com participao total
em R) . Adicionalmente, todos os atributos simples (e atributos simples componentes) do tipo de
relacionamento R devem ser includos em S.
4. Para cada tipo de relacionamento R binrio 1:N, identifica-se a relao S que representa o tipo de
entidade que participa do lado N do tipo de relacionamento. Inclui-se como chave estrangeira (FK)
em S a chave primria da relao T que representa o outro tipo de entidade participante em R.
Adicionalmente, inclui-se quaisquer atributos simples (e atributos simples componentes) do tipo
de relacionamento R como atributo de S.
5. Para cada tipo de relacionamento R binrio M:N, cria-se uma nova relao S para representar R.
Inclui-se como atributos de chave estrangeira (FK) em S as chaves primrias das relaes que
representam os tipos de entidades participantes; tal combinao ir formar a chave primria de S.
Inclui-se quaisquer atributos simples (e atributos simples componentes) de R como atributos de S.
6. Para cada atributo multivalorado A, cria-se uma nova relao R que inclui um atributo
correspondente para A mais o atributo chave primria K da relao que representa o tipo de
entidade ou tipo de relacionamento que tem A como um atributo. A chave primria (PK) de R a
combinao de A e K. Se o atributo multivalorado composto, inclui-se seus atributos
componentes.
7. Para cada tipo de relacionamento R, envolvendo n tipos de entidade, n > 2, cria-se uma nova
relao S para representar R. Inclui-se como atributos de chave estrangeira (FK) em S as chaves
primrias (PK) das relaes que representam os tipos de entidade participantes. Adicionalmente,
inclui-se quaisquer atributos simples de R (e atributos simples componentes) como atributos de S.
A chave primria (PK) de S ser a combinao de todas as chaves estrangeiras que referenciam as
relaes representando os tipos de entidades participantes (observe que se a restrio de
participao (min, max) de um dos tipos de entidade E participante em R for max = 1, ento a
chave primria de S pode ser o nico atributo de chave estrangeira (FK) que referencia tal
relao).
90
Modelo Relacional (cont...)
1. Generalizao/Especializao
Atravs do conceito de generalizao/especializao possvel atribuir propriedades particulares a um
subconjunto das ocorrncias (especializadas) de um tipo de entidade genrico. Observe o diagrama a
seguir, onde um tringulo issceles utilizado para representar o conceito:
Figura 1 Exemplo de generalizao/especializao.
Uma especializao deve ser usada quando sabe-se que as classes especializadas possuem
propriedades (atributos, relacionamentos, generalizaes, especializaes) particulares. Na figura 1,
uma pessoa fsica possui os atributos CPF e Sexo; uma pessoa jurdica possui os atributos CGC e
Ramo de Atividade. Adicionalmente, as entidades especializadas herdam os atributos da entidade
genrica.
Uma forma de traduzir generalizao/especializao para o modelo relacional, consiste em criar uma
relao para o tipo de entidade genrica e, para cada tipo de entidade especializada, criar uma relao
que inclua uma coluna para cada atributo desse tipo de entidade e uma coluna referente ao atributo
chave do tipo de entidade genrica, que ser o atributo chave da relao; tal atributo tambm ser
caracterizada como chave estrangeira. Da figura 1, pode-se obter:
CLIENTE (CodCli, Nome, TipoPes)
PES_FIS (CodCli, CPF, Sexo, DataNasc)
PES_FIS (CodCli) referencia CLIENTE
PES_JUR (CodCli, CGC, RamoAtiv)
PES_JUR (CodCli) referencia CLIENTE
Uma outra alternativa, preferida em generalizao exclusiva (uma entidade genrica est associada a
uma nica entidade especializada) e total (cada entidade genrica deve pertencer a uma entidade
especializada), consiste em criar uma relao para cada tipo de entidade especializada, que inclui os
atributos desse tipo de entidade e do tipo de entidade genrica. Da figura 1, pode-se obter:
PES_FIS (CodCli, Nome, CPF, Sexo, DataNasc)
PES_JUR (CodCli, Nome, CGC, RamoAtiv)
A segunda alternativa preferida em generalizao exclusiva (uma entidade genrica est associada a
uma nica entidade especializada) e total (cada entidade genrica deve pertencer a uma entidade
especializada)
2. Entidade Associativa
CLIENTE
CodCli Nome
PES. FSICA PES. JURDICA
CPF Sexo CGC Ramo DataNasc
91
Em algumas situaes, pode-se concluir que desejvel permitir associao de uma entidade a um
relacionamento. Considere que uma associao entre autor e livro, significando que um livro pode
possui vrios autores e um autor pode possuir a autoria de diversos livros. Ainda, deve-se saber as
referncias bibliogrficas utilizadas por cada autor na autoria de cada livro. Considere o diagrama na
figura 2:
Figura 2 Exemplo de entidade associativa.
Observe que AUTORIA um tipo de relacionamento entre AUTOR e LIVRO. A associao entre
BIBLIOGRAFIA e AUTORIA, atravs do tipo de relacionamento I, trata autoria como um tipo de
entidade; tal caracterstica denominada entidade associativa.
Uma entidade associativa pode ser tratada como uma entidade fraca, simplificando o modelo e
facilitando sua transio para o modelo relacional, conforme a figura 3:
Figura 3 Modelo equivalente figura 2.
Assim, o modelo da figura 3 poderia ser traduzido para o modelo relacional seguindo as regras
anteriormente apresentadas, considerando tipo de entidade fraca e cardinalidade de tipo de
relacionamento.
AUTOR
AUTORIA
LIVRO
BIBLIOGRAFIA
I
AUTOR LIVRO
BIBLIOGRAFIA
I
AUTORIA
II III
92
93
SQL
Uma linguagem procedural fornece uma descrio detalhada de COMO um tarefa realizada,
operando sobre um registro ou uma unidade de dados a cada vez. Exemplos: Pascal, COBOL, etc.
Uma linguagem no procedural uma descrio de O QUE se deseja; o sistema dever determinar a
forma de fazer; a linguagem SQL um exemplo dessa classe de linguagem. O contexto de atuao da
SQL concentra-se em tabelas com as caractersticas:
Dados so gravados em um banco de dados feito de tabelas.
programa pede ao SQL que retorne dados para ele, sem qualquer preocupao com a estrutura
fsica ou localizao dos dados.
A estrutura das tabelas definida dentro do banco de dados, no em cada programa.
A ordem das tabelas dentro do banco de dados no importante,. Elas so identificadas por nome.
A ordem das colunas dentro de uma tabela no importante. Elas so identificadas por nome.
A ordem das linhas dentro de uma tabela no importante. Elas so identificadas pelos valores em
suas colunas (chaves).
Os dados so sempre apresentados como uma tabela, independente da estrutura interna do banco
de dados.
O bom entendimento da lgebra relacional uma questo fundamental no aprendizado de SQL. Uma
consulta complexa pode parecer impossvel, at que um dia voc comece a pensar em operar sobre
conjuntos de dados. Certas descobertas somente ocorrero se voc estiver sensibilizado com a filosofia
relacional.
A SQL surgiu no incio da dcada de 70, por uma iniciativa da IBM. Nos ltimos anos tornou-se a
linguagem mais popular para acesso a bancos de dados, juntamente com a difuso de SGBDs
relacionais. Existem iniciativas de padronizar a SQL, surgindo padres SQL-86, SQL-89 e, mais
recentemente, SQL-92.
De forma geral, os SGBDs implementam padro SQL e acrescentam caractersticas especficas ao
padro; cada SGBD procura incluir elementos que o possam diferenciar de concorrentes. Assim, pode-
se observar diversos nomes para a SQL; por exemplo, Transact SQL para o SQL SERVER e PL SQL
para ORACLE. Em nossa estudo, procuraremos apresentar SQL to portvel quanto possvel, mas as
instrues apresentadas podero ser implementadas no SGBD SQL SERVER.
1. Elementos da SQL
Em oportunidade anterior, vimos que SGBD um software de propsito geral para:
DEFINIO Implementao de esquema de banco de dados; ou seja, gravao da descrio
de dados no banco de dados; ou seja, criao da instncia vazia do banco de dados.
CONSTRUO carga inicial do banco de dados; ou seja, criao da instncia inicial do banco
de dados.
MANIPULAO uso do banco de dados, atravs de operaes de consulta e atualizao do dia-
a-dia.
Para a fase de definio, comandos SQL so responsveis pela criao de tabelas, ndices, regras,
etc. Esta classe de comandos conhecida como DDL (Data Definition Language).
A fase de construo essencialmente aplicada atravs dos comandos de atualizao
(basicamente, comando INSERT). Alguns SGBDs trazem rotinas dedicadas a esta fase, na forma
de programas e utilitrios.
A fase de manipulao aplicada com os comandos de atualizao (INSERT, UPDATE e
DELETE) e consulta (SELECT).
Outros comandos podem ser observados: controle de transao, controle de acesso etc.
94
2. Esquema do Banco de Dados DEMO
Em nosso banco de dados DEMO, o seguinte esquema pode ser caracterizado:
DEPTO ( NumDep, Nome, MatrEmpr, DataInicGer )
DEPTO ( MatrEmpr ) REFERENCIA EMPR ( MatrEmpr )
PROJ ( NumProj, Nome, Local, NumDep )
PROJ ( NumDep ) REFERENCIA DEPTO ( NumDep )
EMPR ( MatrEmpr, PriNome, LetNome, UltNome, Ender, Sexo, Salario, DataNasc, NumDep, MatrSup )
EMPR ( NumDep ) REFERENCIA DEPTO ( NumDep )
EMPR ( MatrSup ) REFERENCIA EMPR ( MatrEmpr )
DEPEND ( MatrEmpr, Nome, Sexo, DataNasc, Parent )
DEPEND ( MatrEmpr ) REFERENCIA EMPR ( MatrEmpr )
TRABALHA_EM ( MatrEmpr, NumProj, Horas )
TRABALHA_EM ( MatrEmpr ) REFERENCIA EMPR ( MatrEmpr )
TRABALHA_EM ( NumProj ) REFERENCIA PROJ ( NumProj )
DEPTO_LOCAL ( NumDep, Local )
DEPTO_LOCAL ( NumDep ) REFERENCIA DEPTO ( NumDep )
Figura 1 Esquema do banco de dados DEMO
3. Exemplo de Criao de Tabelas (DDL)
TIPOS DE DADOS
Cada SGBD implementa um conjunto de tipos de dados para a definio de atributos. Por exemplo, no
SQL SERVER alguns dos tipos de dados so:
Classe de Valores Tipo de Dado
Valores Binrios binary (n) varbinary (n)
Cadeia de Caracteres char (n) varchar (n)
Data e Hora Datetime smalldatetime
Valores Numricos Exatos decimal (p[,s]) numeric (p[,s])
Valores Numricos Aproximados float (n) real
Valores Inteiros int smallint tinyint
Valores Monetrios money smallmoney
Valores de Imagem e Texto text image
Dados Especiais bit timestamp
Figura 2 Alguns tipos de dados do SQL SERVER
CRIAO DA TABELA EMPR
Alternativa 1:
CREATE TABLE EMPR (
MatrEmpr char(06) NOT NULL
,PriNome varchar(30) NOT NULL
,LetNome char(01) NULL
,UltNome varchar(30) NOT NULL
,Ender varchar(40) NULL
,Sexo char(01) NOT NULL
CHECK (Sexo = M OR Sexo = F)
,Salario smallmoney NULL
,DataNasc smalldatetime NOT NULL
,NumDep smallint NOT NULL
,MatrSup char(10) NULL
,PRIMARY KEY (MatrEmpr)
,FOREIGN KEY (NumDep) REFERENCES DEPTO (NumDep)
,FOREIGN KEY (MatrSup) REFERENCES EMPR (MatrEmpr)
)
Alternativa 2:
95
CREATE TABLE EMPR (
MatrEmpr char(06) NOT NULL
,PriNome varchar(30) NOT NULL
,LetNome char(01) NULL
,UltNome varchar(30) NOT NULL
,Ender varchar(40) NULL
,Sexo char(01) NOT NULL
CHECK (Sexo = M OR Sexo = F)
,Salario smallmoney NULL
,DataNasc smalldatetime NOT NULL
,NumDep smallint NOT NULL
,MatrSup char(10) NULL
,PRIMARY KEY (MatrEmpr)
)
ALTER TABLE EMPR ADD FOREIGN KEY (NumDep) REFERENCES DEPTO (NumDep)
ALTER TABLE EMPR ADD FOREIGN KEY (MatrSup) REFERENCES EMPR (MatrEmpr)
Observaes:
A sentena CHECK (Sexo = M OR Sexo = F) restringe o conjunto de valores para o dado Sexo.
A alternativa 2 utiliza a instruo ALTER TABLE para definir chaves estrageiras.
CRIAO DA TABELA DEPTO
CREATE TABLE DEPTO (
NumDep smallint NOT NULL
,Nome char(30) NOT NULL
,MatrEmpr char(06) NOT NULL
,DataInicGer smalldatetime NOT NULL
DEFAULT getdate()
,PRIMARY KEY (NumDep)
,FOREIGN KEY (MatrEmpr) REFERENCES EMPR (MatrEmpr)
)
Observaes:
A sentena DEFAULT getdate() atribui um valor default para o dado DataInicGer; um valor default
aquele que assumido quando nenhum outro valor for explicitamente atribudo. No SQL
SERVER, a funo getdate() retorna a data e hora atuais; no ORACLE, tal funo chama-se
SYSDATE.
96
SQL (2)
1. Consulta de Dados Estrutura Bsica
A consulta em bancos de dados efetuada atravs do comando SELECT. Uma sintaxe simplificada
para este comando :
SELECT lista-de-dados
FROM lista-de-tabelas
WHERE condio-de-seleo
Onde: lista-de-dados = refere-se s colunas que existiro no conjunto resposta da consulta.
lista-de-tabelas = refere-se s tabelas que sero utilizadas como fonte de dados para a consulta.
condio-de-seleo = ser utilizada para a seleo de linhas da(s) tabela(s) consultada(s).
A consulta
SELECT *
FROM EMPR
retorna todas as linhas da tabela EMPR (todas as colunas). O uso de * (asterisco) aps a clusula
SELECT implica que alteraes na estrutura de uma tabela podem modificar o resultado da consulta;
por exemplo, se uma nova coluna includa em uma tabela, o resultado da consulta ir incluir a nova
coluna.
A consulta
SELECT *
FROM EMPR
WHERE Sexo = M AND Salario > 500
retorna todas as linhas da tabela EMPR onde a condio composta Sexo = M AND Salario > 500
satisfeita (todas as colunas).
A consulta
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE Sexo = M AND Salario > 500
retorna todas as linhas da tabela EMPR onde a condio composta Sexo = M AND Salario > 500
satisfeita; somente as colunas MatrEmpr, PriNome e UltNome esto presentes no resultado da
consulta. Esta construo para o comando SELECT seleciona as colunas de uma consulta, e define a
seqncia de apresentao dessas colunas.
A consulta Qual a matrcula dos empregados sem endereo cadastrado ? poderia ser implementada
pelo comando
SELECT MatrEmpr
FROM EMPR
WHERE Ender = NULL
Observe que na clusula WHERE existe uma condio que referencia explicitamente um valor nulo
(NULL).
97
2. Consulta de Dados Breves Dicas
Inicie com a clusula SELECT, e escreva uma lista do que voc necessita para o conjunto
resposta. Isso fornece a voc uma meta e constitui o que deve ser apresentado ao usurio.
Ponha todas as tabelas contendo as tabelas necessrias para complementar a lista SELEC dentro da
clusula FROM. Excessos podem ser removidos adiante. Todo o trabalho est na clusula
WHERE.
Pense sobre a soluo do problema em termos de conjuntos. As vezes, inverter a ordem da
palavras ajuda; por exemplo, em vez de D-me os carros de cor vermelha, diga Vermelha a
cor de todos os carros que eu preciso.
As vezes, negar o que se deseja pode ajudar; por exemplo, em vez de D-me os carros que
atendem a todos os requisitos de teste, diga Eu no quero aqueles carros que falharam em
quaisquer dos critrios de teste.
Esteja atento a sua lgica. Diferentemente de linguagens procedurais, SQL requer que todos o
trabalho seja feito em uma nica expresso, que pode ser complexa.
Lembre-se que valores nulos (NULLS) podem ocorrer em todos os possveis lugares.
3. Consulta de Dados Alterao de Identificao de Colunas
A consulta
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE Sexo = M AND Salario > 500
poderia retornar o seguinte conjunto resposta, onde os nomes de coluna so os mesmos da tabela de origem:
MatrEmpr PriNome UltNome
981234 JOSE SILVA
981232 LEO CARDOSO
981212 PAULO VIEIRA
A consulta
SELECT MatrEmpr Matricula, PriNome Primeiro Nome, UltNome Ultimo Nome
FROM EMPR
WHERE Sexo = M AND Salario > 500
retorna o seguinte conjunto resposta, que possui novos nomes de coluna:
Matricula Primeiro Nome Ultimo Nome
981234 JOSE SILVA
981232 LEO CARDOSO
981212 PAULO VIEIRA
OBSERVAES:
A primeira coluna do conjunto resposta teve seu nome modificado de MatrEmpr para Matricula. Esta
mudana poderia ser efetuada de 4 formas distintas:
(I) MatrEmpr Matricula
(II) MatrEmpr Matricula
(III) Matricula = MatrEmpr
(IV) Matricula MatrEmpr
As alternativas (II) e (IV) somente podem ser utilizadas se o novo nome de coluna for um identificador;
por exemplo, a expresso PriNome Primeiro Nome no pode ser utilizada, mas a expresso PriNome
Primeiro_Nome possivel, alterando o nome de coluna de PriNome para Primeiro_Nome.
98
4. Consulta de Dados Incluso de Valores Constantes
A consulta
SELECT Os dados do empregado so:, MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE Sexo = M AND Salario > 500
poderia retornar o seguinte conjunto resposta, onde a primeira coluna possui um valor constante:
MatrEmpr PriNome UltNome
Os dados do empregado so: 981234 JOSE SILVA
Os dados do empregado so: 981232 LEO CARDOSO
Os dados do empregado so: 981212 PAULO VIEIRA
5. Consulta de Dados Computao de Valores
A consulta
SELECT MatrEmpr, PriNome, UltNome, Salario, Salario * 1.1 NovoSavario
FROM EMPR
WHERE Sexo = M AND Salario > 500
poderia retornar o seguinte conjunto resposta, onde a coluna NovoSalario possui o valor do salrio
original acrescido de 10 %:
MatrEmpr PriNome UltNome Salario NovoSalario
981234 JOSE SILVA 600 660
981232 LEO CARDOSO 700 770
981212 PAULO VIEIRA 800 880
OBSERVAES:
Se a computao envolver algum operador com valor nulo, o resultado da operao tambm ser
nulo.
A ordem de precedncia envolve inicialmente as operaes de multiplicao (*), diviso (/) e
mdulo (%), seguidas das operaes de adio (+) e subtrao (-); o uso de parntesis na
expresso aritmtica pode alterar essa ordem de precedncia.
6. Consulta de Dados Computao na Seleo de Linhas
A consulta
SELECT MatrEmpr, PriNome, UltNome, Salario, Salario * 1.1 NovoSavario
FROM EMPR
WHERE Sexo = M AND Salario > 500 AND (Salario + 60) < (Salario * 1.1)
poderia retornar o seguinte conjunto resposta, onde a condio de seleo de linhas possui uma
computao de valores:
MatrEmpr PriNome UltNome Salario NovoSalario
981232 LEO CARDOSO 700 770
981212 PAULO VIEIRA 800 880
99
SQL (3)
1. Seleo de Linhas Atravs de Operadores de Comparao
A clusula WHERE especifica um critrio para a seleo de linhas. Os seguintes operadores de
comparao esto disponveis:
Operador Descrio
= igual a
> maior do que
< menor do que
>= maior ou igual a
<= menor ou igual a
<> diferente de
!> no maior do que
!< no menor do que
OBSERVAES:
A clusula NOT pode ser utilizada para negar o valor da condio; por exemplo:
WHERE NOT Sexo = M
2. Seleo de Linhas Atravs de Faixa de Valores
A clusula BETWEEN especifica um critrio para a seleo de linhas, atravs da definio de uma
faixa de valores.
SINTAXE:
SELECT lista-de-colunas
FROM tabela
WHERE expresso [ NOT ] BETWEEN expresso AND expresso
O comando
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE Salario BETWEEN 500 AND 1000
seleciona a matrcula, primeiro nome e ltimo nome dos empregados com salrio entre 500 e 1000,
inclusive.
OBSERVAES:
A faixa de valores definida por BETWEEN e AND inclui os valores limites da faixa;
O uso de
expresso BETWEEN x AND y
no possui a mesma semntica de
expresso > x AND expresso < y
pois a clusula BETWEEN define uma faixa de valores, onde os valores limites dessa
faixa esto includos no intervalo;
A clusula NOT pode ser utilizada para negar o valor da condio.
100
3. Seleo de Linhas Atravs de Lista de Valores
No presente contexto, a clusula IN permite a seleo linhas a partir da comparao de um valor com
um conjunto de valores presentes em uma lista.
SINTAXE:
SELECT lista-de-colunas
FROM tabela
WHERE expresso [ NOT ] IN lista-de-valores
O comando
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE Salario IN (500, 600, 700)
seleciona a matrcula, primeiro nome e ltimo nome dos empregados com salrio igual a 500, 600 ou
700.
OBSERVAES:
A clusula NOT pode ser utilizada para negar o valor da condio.
4. Seleo de Linhas Atravs de Padres de Caracteres
A clusula LIKE pode ser utilizada para selecionar linhas atravs de combinao de padres de
caracteres. Os seguintes caracteres especiais so utilizados na definio de padres de caracteres:
Caracteres Especiais Descrio
% qualquer string (cadeia) de zero ou mais caracteres
_ qualquer caractere (um nico caractere)
[ ] define uma lista de valores para um nico caractere, para observar se um caractere est
presente nessa lista
[ ^ ] define uma lista de valores para um nico caractere, para observar se um caractere no
est presente nessa lista
Para um melhor entendimento, considere os exemplos abaixo:
P% cadeia que inicia com o caractere P
%P cadeia que termina com o caractere P
%P% cadeia que possui o caractere P
_P% cadeia cujo segundo elemento o caractere P
[CP]% cadeia que inicia com os caracteres C ou P
[^CP]% cadeia que no inicia com os caracteres C ou P
%SILVA% cadeia que possui a seqncia SILVA
SINTAXE:
SELECT lista-de-colunas
FROM tabela
WHERE { expresso [ NOT ] LIKE expresso |
[ NOT ] expresso LIKE expresso }
O comando
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE PriNome LIKE R%O
seleciona a matrcula, primeiro nome e ltimo nome dos empregados cujo primeiro nome inicia com a
letra R e termina com a letra O.
OBSERVAES:
A clusula NOT pode ser utilizada para negar o valor da condio.
101
5. Eliminao de Linhas Duplicadas
A clusula DISTINCT elimina linhas duplicadas no resultado de uma consulta, caso existam.
SINTAXE:
SELECT [ DISTINCT | ALL ] lista-de-colunas
FROM tabela
WHERE condio
O comando
SELECT DISTINCT MatrEmpr
FROM DEPEND
retorna a matrcula dos empregados que possuem dependentes; observe que se um empregado possui
mais de um empregado, sua matrcula aparece uma nica vez no resultado da consulta.
OBSERVAES:
Uma duplicao de linha somente caracterizada se todos as colunas da referida linha so iguais
s colunas de alguma linha j existentes na tabela;
A clusula ALL especifica que todas as linhas do resultado de uma consulta sero consideradas,
independentes de ocorrncias de duplicao; essa conduta default para o comando SELECT;
No contexto de eliminao de linhas duplicadas, uma ocorrncia de valor nulo considerado igual
a outro valor nulo.
6. Ordenao do Resultado de uma Consulta
A clusula ORDER BY ordena o resultado de uma consulta de acordo com uma ou mais colunas.
SINTAXE:
SELECT [ DISTINCT | ALL ] lista-de-colunas
FROM tabela
WHERE condio
ORDER BY coluna [ ASC | DESC ] [ , coluna [ ASC | DESC ] ... ]
O comando
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
ORDER BY PriNome, UltNome
apresentada uma relao de empregados, ordenada pelo primeiro nome e ltimo nome.
OBSERVAES:
A clusula ASC determina a ordenao ascendente a partir da coluna especificada; a conduta dessa
clusula encarada como default;
A clusula DESC determina a ordenao descendente a partir da coluna especificada;
Se mais de uma coluna especificada aps a clusula ORDER BY, a ordenao ser aninhada;
A posio relativa de uma coluna aps a clusula SELECT pode ser usada na referncia de colunas
para ordenao; no exemplo
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
ORDER BY 2, 3
a ordenao ser efetuada a partir das colunas PriNome e UltNome, nessa ordem.
102
SQL (4)
1. Consulta de Dados em Vrias Tabelas: Produto Cartesiano
O comando SELECT permite que uma consulta solicite dados de vrias tabelas; inmeras
composies podem ser realizadas a partir de dados de vrias tabelas. Este item concentra-se em uma
operao denominada Produto Cartesiano, conforme sintaxe abaixo:
SINTAXE:
SELECT lista-de-colunas
FROM tabela [ , tabela ... ]
Considere as seguintes tabelas:
DEPTO
NumDep Nome MatrEmpr DataInicGer
01 VENDAS 981222 01/10/1998
02 ENGENHARIA 981234 01/11/1998
PROJ
NumProj Nome Local NumDep
P01 DRENAGEM Plano Piloto 02
P03 JUROS ZERO Toda Cidade 01
P02 PAVIMENTACAO Planaltina 02
O comando
SELECT *
FROM DEPTO, PROJ
resulta em
NumDep Nome MatrEmpr DataInicGer NumProj Nome Local NumDep
01 VENDAS 981222 01/10/1998 P01 DRENAGEM Plano Piloto 02
01 VENDAS 981222 01/10/1998 P03 JUROS ZERO Toda Cidade 01
01 VENDAS 981222 01/10/1998 P02 PAVIMENTACAO Planaltina 02
02 ENGENHARIA 981234 01/11/1998 P01 DRENAGEM Plano Piloto 02
02 ENGENHARIA 981234 01/11/1998 P03 JUROS ZERO Toda Cidade 01
02 ENGENHARIA 981234 01/11/1998 P02 PAVIMENTACAO Planaltina 02
Vale ressaltar que a coluna NumDep na tabela PROJ determina o departamento que controla um
projeto. No conjunto de dados resultante, observa-se que cada linha da tabela DEPTO concatenada
com cada linha da tabela PROJ; assim, o conjunto resultante possui Ne x Nj linhas, onde Ne e Nj
constituem a quantidade de linhas das tabelas DEPTO e PROJ, respectivamente. Embora o usurio que
realizou a consulta possa ter tido a inteno de associar cada projeto com o departamento que o
controla, a construo do exemplo no adequada para tal necessidade.
OBSERVAES:
possvel qualificar o nome de uma coluna, atravs da construo tabela.coluna.
Exemplo 1:
SELECT DEPTO.NumDep, DEPTO.Nome, PROJ.NumProj, PROJ.Nome
FROM DEPTO, PROJ
103
Exemplo 2 (equivalente ao exemplo 1; apenas atribui sinnimo (alias) para cada tabela: D
e P para as tabelas DEPTO e PROJ, respectivamente):
SELECT D.NumDep, D.Nome, P.NumProj, P.Nome
FROM DEPTO D, PROJ P
Na prtica, a operao de produto cartesiano pouca utilizada.
2. Consulta de Dados em Vrias Tabelas: Juno (Join)
Um Join (Juno) entre tabelas consiste, basicamente, na seleo de algumas linhas resultantes do
produto cartesiano entre essas tabelas. Essa seleo consiste na utilizao da clusula WHERE,
conforme sintaxe abaixo:
SINTAXE:
SELECT lista-de-colunas
FROM tabela [ , tabela ... ]
WHERE condio
O comando
SELECT *
FROM DEPTO D, PROJ P
WHERE D.NumDep = P.NumDep
resulta em
NumDep Nome MatrEmpr DataInicGer NumProj Nome Local NumDep
01 VENDAS 981222 01/10/1998 P03 JUROS ZERO Toda Cidade 01
02 ENGENHARIA 981234 01/11/1998 P01 DRENAGEM Plano Piloto 02
02 ENGENHARIA 981234 01/11/1998 P02 PAVIMENTACAO Planaltina 02
No conjunto de dados resultante, observa-se que as linhas resultantes satisfazem a condio de juno:
D.NumDep = P.NumDep (ou seja, um subconjunto do resultado do produto cartesiano).
OBSERVAES:
Simplificando, o relacionamento entre tabelas implementado atravs da presena de dados de
coluna(s) de outra(s) tabela(s) no elenco de colunas de uma tabela; por exemplo, os dados da
coluna NumDep da tabela DEPTO est presente na tabela PROJ em uma coluna tambm
denominada NumDep. Aplicando boas regras de projeto, chamadas de regras de normalizao,
possvel utilizar operaes de join de forma eficiente;
Qualquer operador de comparao pode ser utilizado na aplicao de um join.
3. Equijoin e Natural Join
Um equijoin consiste em um join onde utiliza-se o operador de igualdade na comparao de colunas, e
todas as colunas das tabelas envolvidas so includas no conjunto resposta da consulta.
EXEMPLO DE EQUIJOIN:
SELECT *
FROM DEPTO D, PROJ P
WHERE D.NumDep = P.NumDep
No exemplo acima, a coluna NumDep aparece duas vezes no elenco de colunas resultantes, pois esta
coluna est presente nas tabelas DEPTO e PROJ.
Um natural join consiste em um equijoin sem qualquer repetio de colunas. A seguir, o exemplo de
equijoin alterado para caracterizar um exemplo de natural join.
EXEMPLO DE NATURAL JOIN:
SELECT D.NumDep, D.Nome, P.NomProj, P.Nome, P.Local
FROM DEPTO D, PROJ P
WHERE D.NumDep = P.NumDep
104
OBSERVAES:
O utilizao de natural joins um recurso para explorar a integridade referencial entre tabelas. Nos
exemplos, o relacionamento entre as tabelas DEPTO e PROJ implementado atravs da chave
estrangeira NumDep na tabela PROJ.
4. Self-join
Um Self-join um join onde somente uma tabela est envolvida. Considere a tabela:
EMPR
MatrEmpr PriNome LetNome UltNome Ender Sexo Salario DataNasc NumDep MatrSup
981222 JOSE M SILVA CENTRO M 500.00 01/12/1979 01 981225
981225 LIA H NEVES BARRA F 1200.00 01/12/1975 01 981230
981230 JOAO Null CHAVES PRAIA M 1600.00 01/10/1981 02 null
981250 ANA Null CARDOSO CENTRO F 1000.00 12/12/1976 01 981225
O comando
SELECT E.MatrSup, E.PriNome, E.UltNome, E.MatrSup, S.PriNome SupPriNome, SultNome SupUltNome
FROM EMPR E, EMPR S
WHERE E.MatrSup = S.MatrEmpr
resulta em
MatrEmpr PriNome UltNome MatrSup SupPriNome SupUltNome
981222 JOSE SILVA 981225 LIA NEVES
981225 LIA NEVES 981230 JOAO CHAVES
981250 ANA CARDOSO 981225 LIA NEVES
A consulta associa dados de um empregado com dados de seu supervisor. Observe que as instncias da
tabela EMPR so referenciadas como E e S (E est associada ao empregado e ao supervisor). Em
nosso contexto, um alias consiste em um sinnimo dado a uma tabela para referenciar cada instncia
envolvida. Observe que o empregado 981230 no aparece no resultado da consulta, pois ele no possui
supervisor direto.
5. Join em Mltiplas Tabelas
A operao de join pode ser aplicada em diversas tabelas. Considere a tabela TRABALHA_EM, que
implementa a associao de empregados a projetos (cardinalidade N:N):
TRABALHA_EM
MatrEmpr NumProj Horas
981222 P01 6
981225 P02 5
981222 P02 8
981250 P01 4
981250 P03 4
O comando
SELECT E.MatrEmpr, E.PriNome, E.UltNome, P.NumProj, P.Nome, EP.Horas
FROM EMPR E, PROJ P, TRABALHA_EM EP
WHERE E.MatrEmpr = EP.MatrProj AND J.NumProj = EP.NumProj
resulta em
MatrEmpr PriNome UltNome NumProj Nome Horas
981222 JOSE SILVA P01 DRENAGEM 6
981225 LIA NEVES P02 PAVIMENTACAO 5
981222 JOSE SILVA P02 PAVIMENTACAO 8
981250 ANA CARDOSO P01 DRENAGEM 4
981250 ANA CARDOSO P03 JUROS ZERO 4
105
No exemplo, so consultados dados de empregado e de projetos em que este empregado trabalha.
Observe que apesar de nenhuma coluna da tabela TRABALHA_EM estar presente no resultado da
consulta, esta tabela utilizada na operao de join.
6. Outer Join
Em uma operao de equijoin, somente so includas as linhas que satisfazem a condio especificada
na clusula WHERE. Entretando, pode ser desejvel que o contedo das colunas de uma tabela seja
includo no resultado da consulta. O comando
SELECT E.MatrSup, E.PriNome, E.UltNome, E.MatrSup, S.PriNome SupPriNome, SultNome SupUltNome
FROM EMPR E, EMPR S
WHERE E.MatrSup *= S.MatrEmpr
resulta em
MatrEmpr PriNome UltNome MatrSup SupPriNome SupUltNome
981222 JOSE SILVA 981225 LIA NEVES
981225 LIA NEVES 981230 JOAO CHAVES
981230 JOAO CHAVES Null Null Null
981250 ANA CARDOSO 981225 LIA NEVES
A consulta associa dados de um empregado com dados de seu supervisor. Observe a presena do
operador *=, indica que todos os dados solicitados da tabela EMPR (instncia de empregado, no de
supervisor) sero includos no resultado da consulta, independente se o empregado possui supervisor.
Um outer join implementado atravs dos operadores =* e *=, onde a posio do asterisco indica qual
tabela exibir todos os dados selecionados, independente da condio que implementa o join ser
avaliada como verdadeira ou falsa.
106
SQL (5)
1. Funes Agregadas - Sumrio de Dados
Funes agregadas so utilizadas para obter informaes resumidas sobre a(s) tabela(s)
consultada(s). As seguintes funes esto disponveis:
Funo Parmetros Comentrio
AVG [ ALL | DISTINCT ] expresso mdia das ocorrncias de valores de uma expresso
COUNT [ ALL | DISTINCT ] expresso nmero de ocorrncias de valores de uma expresso
COUNT * nmero de linhas selecionadas
MAX expresso maior valor dentre as ocorrncias de uma expresso
MIN expresso menor valor dentre as ocorrncias de uma expresso
SUM [ ALL | DISTINCT ] expresso soma das ocorrncias de valores de uma expresso
O comando
SELECT COUNT(*), AVG(Salario), MAX(Salario), COUNT(MatrSup)
FROM EMPR
resulta em
4 1075.00 1600.00 3
onde solicitada quantidade de empregados, o salrio mdio dos empregados, o maior salario e a
quantidade de empregados que possuem supervisor direto (MatrSup <> null).
OBSERVAES:
A clusula DISTINCT denota que ocorrncias de valores repetidos no sero consideradas na
aplicao da funo agregada; ou seja, COUNT (DISTINCT Salrio) informa a quantidade de
faixas salariais (quantidade de salrios distintos).
Somente um nica retornada quando se utiliza funo agregada.
2. Agrupamento de Dados
Uma tabela pode ser dividida em grupos de acordo com algum critrio. Por exemplo, os empregados
podem ser agrupados por sexo.
A clusula GROUP BY divide uma tabela em grupos. Funes agregadas so comumente utilizadas
em agrupamento de dados, produzindo um valor para cada grupo.
SINTAXE:
SELECT lista-de-colunas
FROM tabela
WHERE condio
GROUP BY [ ALL ] expresso [ , expresso ]
[ HAVING condio ]
O comando
SELECT Sexo, COUNT(*), SUM(Salario), AVG(Salario)
FROM EMPR
GROUP BY Sexo
resulta em
Sexo
F 2 2200.00 1100.00
M 2 2100.00 1050.00
No exemplo, so apresentados o sexo de empregado e, para cada sexo, a quantidade de empregados, o
somatrio de salrios e a mdia de salrio.
Considere a tabela de dependentes:
DEPEND
107
MatrEmpr Nome Sexo DataNasc Parent
981222 MARIA F 01/01/1989 FILHO
981225 JOANA F 01/01/1990 FILHO
981222 PEDRO M 12/12/1998 FILHO
981225 MARIA F 11/11/1995 FILHO
981250 PAULO M 10/10/1996 FILHO
A consulta Quais os empregados que possuem mais de 1 dependente ? poderia ser respondida pelo
comando
SELECT MatrEmpr, COUNT(*) QtdeDepend
FROM DEPEND
GROUP BY MatrEmpr
HAVING COUNT(*) > 1
resulta em
MatrEmpr QtdeDepend
981222 2
981225 2
No exemplo, a tabela dividida em grupos, onde cada grupo deve possuir linhas com o mesmo valor
de MatrEmpr (ou seja, separa em cada grupo as linhas de cada empregado). A expresso SELECT
MatrEmpr, COUNT(*) computa a quantidade de linhas em cada grupo (ou seja, a quantidade de
dependentes para cada empregado) e a expresso HAVING COUNT(*) > 1 seleciona os grupos que
possuem mais de uma linha.
OBSERVAES:
Para fins didticos, considere a sequncia a seguir:
1) se a clusula WHERE for utilizada, a consulta se inicia pela seleo de linhas solicitadas;
2) as linhas selecionadas so agrupadas, segundo os argumentos associados clusula GROUP
BY;
3) se a clusula HAVING for utilizada, a condio associada a essa clusula avaliada para a
seleo de grupos;
4) as informaes solicitadas na clusula SELECT so extradas de cada grupo selecionado, e
fornecidas para o usurio;
Expresses associadas s clusulas GROUP BY e WHERE no devem possuir funes
agregadas;
A clusula ALL inclui todos os grupos da consulta, independente da condio associada
clusula HAVING.
108
SQL (6)
1. Subconsultas
Uma subconsulta consiste em um comando SELECT posicionado dentro de um outro comando SQL.
Em alguns casos, uma consulta pode requerer dados de uma outra consulta para ser processada.
EXEMPLO 1:
Como exemplo, considere a questo: Que empregado possui o maior salrio ? Esta simples pergunta
pode ser respondida atravs do seguinte comando SQL:
SELECT MatrEmpr, PriNome, UltNome, Salario
FROM EMPR
WHERE Salario = <valor do salrio mais alto>
Observe que a informao <valor do salrio mais alto> est indefinida, sendo necessrio consult-la
no banco de dados; nesse caso, o maior valor para a coluna Salrio da tabela EMPR pode ser obtido
atravs do comando:
SELECT MAX(Salario)
FROM EMPR
A construo sinttica resultante, com um comando SELECT embutido em outro comando SELECT,
alcanada a partir da instruo:
SELECT MatrEmpr, PriNome, UltNome, Salario
FROM EMPR
WHERE Salario = (SELECT MAX(Salario) FROM EMPR)
EXEMPLO 2:
Qual o percentual de salrio de cada empregado, em relao a soma geral de salrios de todas os
empregados ?
SELECT MatrEmpr, PriNome, UltNome, Salario, 100 * Salario / (SELECT SUM(Salario) FROM EMPR)
FROM titles
Neste exemplo, pode-se observar que a consulta mais interna est associada clusula SELECT,
diferentemente do exemplo anterior. Para cada empregado, calculado um percentual de salrio a
partir da consulta mais interna, a qual informa o salrio total de todas os empregados.
OBSERVAES:
Instrues SELECT que possuem uma ou mais subconsultas so freqentemente denominadas
consultas aninhadas;
Os resultados da consulta mais externa so baseados nos resultados da consulta mais interna;
Uma subconsulta que retorna um conjunto de valores somente pode ser usada se associada
clusula WHERE (diferentemente de subconsultas que retornam somente um valor).
109
Neste ponto, exploraremos as palavras IN, ANY, ALL e EXISTS, presentes na clusula WHERE.
SINTAXE PARA CLUSULA WHERE:
WHERE expresso [ NOT ] IN ( subconsulta )
WHERE expresso operador-de-comparao [ ANY | ALL ] ( subconsulta )
WHERE [ NOT ] EXISTS ( subconsulta )
EXEMPLO 3:
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE MatrEmpr IN
(SELECT DISTINCT MatrEmpr
FROM DEPTO)
O exemplo acima seleciona os dados dos empregados que gerenciam algum departamento. O uso da
clusula IN resulta em observar se o que valores do atributo MatrEmpr da tabela EMPR esto
presentes na lista resultante da subconsulta.
EXEMPLO 4:
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE EXISTS
(SELECT MatrEmpr
FROM DEPTO
WHERE DEPTO.MatrEmpr = EMPR.MatrEmpr)
O exemplo acima semanticamente idntico ao exemplo 3, ou seja, produz o mesmo conjunto
resposta da consulta do exemplo 3. A clusula EXISTS testa se a subconsulta produz alguma linha; se
isso ocorrer, a condio avaliada como verdadeira.
OBSERVAES:
A clusula IN associada a uma subconsulta resulta em testar se um valor est presente entre os
valores produzidos pela subconsulta; se isso ocorrer a condio avaliada como verdadeira, e,
em caso contrrio, a condio avaliada como falsa;
A clusula ANY possui semntica similar clusula IN, onde a condio ser verdadeira se pelo
menos um elemento da lista satisfizer a comparao;
A uso da clusula ALL difere do uso da clusula ANY, pois a condio somente ser verdadeira
se a comparao for satisfeita para todos os elementos da lista;
Com a clusula EXISTS, a condio ser verdadeira se a subconsulta retornar algum valor (pelo
menos um elemento ser produzido);
A clusula NOT pode ser utilizada para negar o valor da condio.
110
2. Subconsultas Correlatas
Em muitos casos, a implementao de subconsultas resulta na execuo da subconsulta e,
posteriormente, o comando SQL que possui a subconsulta realizado. Pode ocorrer que a subconsulta
utilize dados do comando SQL mais externo em sua sintaxe; neste caso, diz-se que a execuo da
subconsulta depende do comando SQL mais externo, caracterizando uma subconsulta correla.
EXEMPLO:
SELECT MatrEmpr, PriNome, UltNome
FROM EMPR
WHERE 1 <
(SELECT COUNT(*)
FROM TRABALHA_EM
WHERE TRABALHA_EM.MatrEmpr = EMPR.MatrEmpr)
O comando acima solicita a relao de empregados que trabalham em mais de um projeto. A
subconsulta apresentada no pode ser executada independentemente do comando SQL a que pertence.
A informao EMPR.MatrEmpr necessria para a realizao da subconsulta, e essa informao ser
diferente para cada linha da tabela EMPR. Para cada linha da tabela EMPR ocorre a execuo da
subconsulta, que necessria clusula WHERE do comando SQL mais externo.
OBSERVAES:
A avaliao da consulta mais interna depende da consulta mais externa, pois a primeira
referencia dados da segunda.
111
SQL (7)
1. Atualizao de Dados
A atualizao de dados envolve a incluso, remoo e modificao dos dados de uma tabela,
respectivamente atravs dos comandos INSERT, DELETE e UPDATE.
Uma questo envolvida em atualizao de dados a manuteno da consistncia do banco de dados.
Por exemplo, uma manuteno em uma tabela pode requerer a atualizao de dados em outra(s)
tabela(s), significando que a consistncia de dados s ser alcanada com a atualizao em conjunto
das tabelas.
As regras de integridade definidas no banco de dados constituem uma poderosa ferramenta para a
manuteno da consistncia de dados, impedindo a atualizao de dados que no sigam as regras
definidas.
Outro recurso importante para a manuteno de consistncia de dados refere-se definio de
transaes de atualizao. Por default, cada comando de atualizao (INSERT, DELETE ou
UPDATE) encarado como uma nica transao. A SQL fornece suporte para a definio de
transaes atravs do agrupamento de vrios comandos de atualizao.
Permisses para atualizao de dados podem ser atribudas aos usurios do banco de dados. Assim,
usurios no autorizados ficam impedidos de modificar o banco de dados, evitando as atualizaes
indevidas e conservando a consistncia de dados.
Nesta seo introduzimos os comandos de atualizao de dados, e esses comandos devem ser
utilizados de acordo com as polticas de consistncia de dados do banco de dados envolvido.
2. Incluso de Dados
A adio de dados em uma tabela envolve o uso do comando INSERT. Basicamente, duas formas
esto disponveis para a insero de dados: o usurio referencia explicitamente os dados que devem ser
inseridos em uma tabela, ou os dados a serem inseridos sero fornecidos a partir de uma subconsulta.
SINTAXE 1:
INSERT [ INTO ] tabela [ ( coluna [ , coluna ... ] ) ]
VALUES ( expresso [ , expresso ... ] )
EXEMPLO 1:
INSERT INTO PROJ (NumProj, Nome, Local, NumDep)
VALUES (P01, DRENAGEM, BARRA, 2)
No exemplo, inserida uma linha na tabela PROJ, onde so referenciadas as colunas NumProj,
Nome, Local e NumDep; as demais colunas, se existirem, iro assumir o valor NULL ou, se
especificado na definio de dados, valores default sero assumidos.
SINTAXE 2:
INSERT [ INTO ] tabela [ ( coluna [ , coluna ... ] ) ]
subconsulta
EXEMPLO 2:
Considere a existncia de uma tabela denominada EMPR_NOVOS, a qual possui dados de novos
empregados:
INSERT INTO EMPR
SELECT * FROM EMPR_NOVOS
112
No exemplo, o resultado da subconsulta constitui o conjunto de dados a serem inseridos. Assim, todas
as linhas da tabela EMPR_NOVOS so includas na tabela EMPR.
OBSERVAES:
O conjunto de dados a serem inseridos deve obedecer as restries de integridades definidas,
incluindo colunas obrigatrias, compatibilidade de tipos de dados e valores valores permitidos.
Tal observao aplica-se referncia explcita de valores e ao uso de subconsultas.
3. Excluso de Dados
A excluso de dados em uma tabela envolve o uso do comando DELETE. Para efetuar essa operao,
deve-se especificar que conjunto de linhas ser afetado pelo comando.
SINTAXE:
DELETE tabela
[ FROM tabela [ , tabela ... ]
[ WHERE condio ]
EXEMPLO 1:
DELETE EMPR
WHERE MatrEmpr = 981212
No exemplo, removida a(s) linha(s) da tabela EMPR, onde a condio MatrEmpr = 981212 for
avaliada como verdadeira.
EXEMPLO 2:
DELETE EMPR
FROM EMPR, DEPTO
WHERE EMPR.MatrEmpr = DEPTO.MatrEmpr AND DEPTO.MatrEmpr = 981212
No exemplo, uma operao de join est embutida no comando DELETE, envolvendo as tabelas EMPR
e DEPTO; essa operao utilizada na seleo de linhas a serem removidas. O comando acima exclui
do banco de dados quaisquer informaes de empregados que trabalhem para o departamento
gerenciado pelo empregado de matrcula igual a 981212.
OBSERVAES:
O uso da clusula WHERE determina que linhas de uma tabela sero removidas;
SE A CLUSULA WHERE NO FOR UTILIZADA, TODAS AS LINHAS DA TABELA
ENVOLVIDA SERO REMOVIDAS;
O uso das clusula FROM e WHERE implementa uma operao de join que ser utilizada para
determinar as linhas afetadas pela operao.
4. Modificao de Dados
A modificao dos dados de uma tabela realizada atravs do comando UPDATE. Para efetuar essa
operao deve-se especificar que conjunto de linhas ser afetado pelo comando.
SINTAXE:
UPDATE tabela
SET coluna = expresso [ , coluna = expresso ... ]
[ FROM tabela [ , tabela ... ]
[ WHERE condio ]
EXEMPLO 1:
UPDATE EMPR
SET MatrSup = NULL
WHERE Salario > 1900.00
113
No exemplo, so alteradas linhas da tabela EMPR, atribuindo NULL para a matrcula do supervisor
direto; somente so modificados os dados de empregados onde Salario > 1900,00.
EXEMPLO 2:
UPDATE EMPR
SET Salario = Salario * 1.1
FROM EMPR, DEPTO
WHERE DEPTO.MatrEmpr = EMPR.MatrEmpr
No exemplo, uma operao de join est embutida no comando UPDATE, envolvendo as tabelas
EMPR e DEPTO; essa operao utilizada na seleo de linhas a serem alteradas. O comando acima
altera a tabela EMPR, adicionando 10% ao salrio (SET Salario = Salario * 1.1), considerando
somente os empregados que gerenciam departamentos.
OBSERVAES:
O uso da clusula WHERE determina que linhas de uma tabela sero modificadas;
SE A CLUSULA WHERE NO FOR UTILIZADA, TODAS AS LINHAS DA TABELA
ENVOLVIDA SERO ALTERADAS;
O uso das clusula FROM e WHERE implementam uma operao de join que ser utilizada
para determinar as linhas afetadas pela operao.
114
ARQUITETURAS DO SISTEMA DBMS
O tipo de sistema computador no qual rodam os banco de dados, pode ser dividido em quatro
categorias ou plataformas: Centralizada, PC, Cliente/Servidor e Distribudo. Os quatro diferem ,
principalmente no local onde realmente ocorre o processamento dos dados. A arquitetura do prprio
DBMS no determina, necessariamente, o tipo de sistema computador no qual o banco de dados
precisa rodar; contudo, certas arquiteturas so mais convenientes(ou mais comuns) para algumas
plataformas do que para outras.
Plataformas Centralizadas
Em um sistema centralizado, todos os programas rodam em um computador "hospedeiro"
principal, incluindo o DBMS, os aplicativos que fazem acesso ao banco de dados e as facilidades de
comunicao que enviam e recebem dados dos terminais dos usurios.
Os usurios tm acesso ao banco de dados atravs de terminais conectados localmente ou
discados(remotos), conforme aparece na figura 1.
Minicomputador
ou Mainframe
Terminais Locais
Terminal
Remoto
Modem
Modem
Geralmente os terminais so "mudos", tendo pouco ou nenhum poder de processamento e
consistem somente de uma tela, um teclado e do hardware para se comunicar com o hospedeiro. O
advento dos microprocessadores levou ao desenvolvimento de terminais mais inteligentes, onde o
terminal compartilham um pouco da responsabilidade de manipular o desenho da tela e a entrada do
usurio. Embora os sistemas de mainframe e de minicomputador sejam as plataformas principais para
sistemas de banco de dados de grandes empresas, os baseados em PC tambm se podem se comunicar
com sistemas centralizados atravs de combinaes de hardware/software que emulam(imitam) os
tipos de terminais utilizados com um hospedeiro em particular.
Todo o processamento de dados de um sistema centralizado acontece no computador
hospedeiro e o DBMS deve estar rodando antes que qualquer aplicativo possa ter acesso ao banco de
dados. Quando um usurio liga um terminal, normalmente v uma tela de log-in; o usurio introduz
um ID de conexo e uma password, a fim de ter acesso aos aplicativos do hospedeiro. Quando o
aplicativo de banco de dados inicializado, ele envia a informao de tela apropriada para o terminal e
115
responde com aes diferentes, baseadas nos toques de tecla dados pelo usurio. O aplicativo e
DBMS, ambos rodando no mesmo hospedeiro, se comunicam pela rea de memria compartilhada ou
de tarefa do aplicativo, que so gerenciadas pelo sistema operacional do hospedeiro. O DBMS
responsvel pela movimentao dos dados nos sistemas de armazenamento de disco, usando os
servios fornecidos pelo sistema operacional. A figura 2 apresenta um modo possvel de interao
desses aplicativos: os aplicativos se comunicam com os usurios pelos terminais e com o DBMS; o
DBMS se comunica com os dispositivos de armazenamento (que podem ser discos rgidos, mas no
esto limitados a isso) e com os aplicativos.
116
O DBMS que roda no sistema hospedeiro pode ser baseado em qualquer um dos quatro
modelos. Contudo, os modelos hierrquico e relacional so os mais comuns. Nos mainframes, o
DBMS normalmente baseado no IMS da IBM, que um banco de dados hierrquico. Recentemente ,
entretanto, mais e mais mainframes esto rodando DBMSs baseados no modelo relacional,
principalmente o DB2 da IBM.
As principais vantagens de um sistema centralizado so a segurana centralizada e a
capacidade de manipular enormes quantidades de dados em dispositivos de armazenamento. Os
sistemas centralizados tambm podem suportar vrios usurios simultaneamente; comum, para um
banco de dados em um mainframe IBM, suportar at 1000 usurios de uma vez. As desvantagens
geralmente esto relacionadas aos custos de aquisio e manipulao desses sistemas. Os grandes
sistemas de mainframe e de minicomputadores exigem facilidades de suporte especficas, como o
habitual centro de dados com pisos elevados, sistemas de refrigerao e grandes sistemas de controle
climtico. Normalmente necessrio um staff de operadores e programadores altamente treinados para
manter o sistema ativo e funcionando, com considervel custos adicionais de pessoal. Finalmente , o
Para/de terminais
Sistema operacional (I.e., UNIX)
Aplicativo de banco de dados
DBMS
Aplicativo de banco da dados
Outros aplicativos
.
.
.
Disk
Disk
Disk
Para/de terminais
Fluxo de dados
Comunicao entre os aplicativos
Mem
ria do
compu
tador
Para
armazenamento
em disco
117
preo de aquisio de hardware de grandes sistemas centralizados freqentemente atinge milhes de
dlares e a manuteno tambm onerosa.
Atualmente , as empresas tm optado cada vez mais por minicomputadores dimensionados
para departamento, como o Micro Vax da DEC e o AS/400 da IBM, pois no custam tanto e so bem
suportados como sistemas centralizados, e , geralmente, no exigem um ambiente especial. Esses
sistemas so mais convenientes para pequenas empresas com poucos usurios(no mais do que 200)
ou para aplicativos de banco de dados que s interessam a um nico departamento de uma grande
empresa (isto um minicomputador que roda aplicativos de engenharia s pode interessar ao
departamento de projetos). Os computadores menores tambm pode ser colocado em rede com outros
minicomputadores e mainframes, para que todos os computadores possam compartilhar dados.
Sistemas de Computador Pessoal
Os computadores pessoais (PCs) apareceram no final dos anos 70 e revolucionaram a maneira
de ver e utilizar computadores. Um dos primeiros sistemas operacionais de sucesso para PCs foi c
CP/M(Control Program for Microcomputers), da Digital. O primeiro DBMS baseado em PC de
sucesso , dBase II, da Ashtan-Tate, rodava sob CP/M. Quando a IBM lanou o primeiro PC baseado
no MS-DOS, em 1981, a Ashton-Tate portou o dBASE para o novo sistema operacional. Desde ento,
o dBASE gerou verses mais novas, compatveis e parecidas e DBMSs competitivos que tm provado,
comunidade de processamento de dados, que os PCs podem executar muitas das tarefas dos grandes
sistemas.
Quando um DBMS roda em um PC, este atua como computador hospedeiro e terminal. Ao
contrrio dos sistemas maiores, as funes do DBMS e do aplicativo de banco de dados so
combinadas em um nico aplicativo. Os aplicativos de banco de dados em um PC, manipulam a
entrada do usurio, a sada da tela e o acesso aos dados do disco. Combinar essas diferentes funes
em uma unidade, d ao DBMS muito poder, flexibilidade e velocidade; contudo, normalmente ao
custo da diminuio da segurana e da integridade dos dados. Os PCs originaram-se como sistemas
stand-alone, mas, recentemente, muitos tm sido conectados em redes locais (LANs). Em uma LAN,
os dados, e normalmente os aplicativos do usurio, residem no servidor de arquivo um PC que roda
um sistema operacional de rede (NOS) especial, como o NetWare da Novell ou o LAN Manager da
Microsoft. O servidor de arquivo gerencia o acesso aos dados compartilhados pelos usurios da rede
em seus discos rgidos e, freqentemente, da acesso a outros recursos compartilhados, como
impressoras .
Embora uma LAN permita aos usurios de bancos de dados baseados em PC, compartilhar
arquivos de dados comuns, ela no muda o funcionamento do DBMS significativamente. Todo o
processamento de dados real ainda executado no PC que roda o aplicativo de banco de dados. O
servidor de arquivo somente procura em seus discos os dados necessrios para o usurio e envia esses
dados para o PC, atravs do cabo da rede. Os dados so, ento, processados pelo DBMS que est
rodando no PC e quaisquer mudanas no banco de dados exige, do PC, o envio de todo o arquivo de
dados de volta ao servidor de arquivo, para ser novamente armazenado no disco. Essa troca esta
mostrada na figura 3. Embora o acesso de vrios usurios a dados compartilhados seja uma vantagem,
existe uma desvantagem significativa, de um DBMS baseado em LAN, relativa rapidez ou ao poder
do servidor de arquivo, terem seu desempenho limitado pelo poder do PC que est rodando o DBMS
real. Quando vrios usurios esto tendo acesso ao banco de dados, os mesmos arquivos precisam ser
enviados do servidor para cada PC que est tendo acesso a eles. Esse trfego ampliado pode diminuir a
velocidade da rede.
118
Arquivo de dados alterado enviado ao Servidor
Arquivo de dados enviado ao PC
pc pc
pc
Servidor de
Arquivos
cabo de Rede
A nica melhoria necessria para um DBMS multiusurio, em relao a um monousurio, a
capacidade de manipular, simultaneamente, as alteraes dos dados realizados por vrios usurios.
Normalmente isso feito por algum tipo de esquema de bloqueio, no qual o registro ou o arquivo de
dados que um usurio est atualizando ou alterando, bloqueado para evitar que os outros usurios
tambm o alterem. A maioria dos DBMSs, baseada em LAN, disponvel hoje em dia, so
simplesmente verses multiusurios de sistemas de banco de dados stand-alone comuns, contudo, os
tipos de esquemas de bloqueio variam bastante e podem afetar significativamente o desempenho de
um banco de dados multiusurio.
A maioria dos DBMSs baseada em PC projetada no modelo relacional, mas o fato de o
DBMS no estar separado do aplicativo de banco de dados significa que muitos (seno a maioria) dos
princpios relacionais no esto implementados. Os componentes ausentes mais notveis so os que
tratam da integridade dos dados. A maior parte dos bancos de PC permite acesso direto aos arquivos
de dados, fora do DBMS que os criou. Isso cria uma situao, na qual podem ser feitas alteraes nos
arquivos, violadores Das regras pelas quais o aplicativo assegura a integridade dos dados. Tal
violao pode at tornar ilegvel o arquivo de dados para o DBMS. Por essa razo os bancos de dados
de PC baseados num modelo relacional, so descritos mais precisamente, como semi-relacionais.
Alguns dos bancos de dados de PC semi-relacionais mais comuns, disponveis hoje em dia, incluem o
R:Base da Microrim, o dBASE IV da Borland (a Borland adquiriu a Ashton-Tate no final de 1991) e
seus muitos "clones", como o FoxPro da Microsoft, o Paradox da Borland, o DataEase da DataEase
International e o Advanced Revelation, da Revelation Technologies.
Conforme mencionado anteriormente, os bancos de dados de PC mais limitados, normalmente
so baseados no modelo do sistema de gerenciamento de arquivo. Tambm existem DBMSs, baseados
em PC, derivados do modelo em rede como o DataFlex, da Data Access Corporation e o db- Vista III,
da Raima Corporation.
A maioria dos sistemas de banco de dados multiusurio baseado em PC, manipula o mesmo
nmero de usurios dos sistemas centralizados menores. Entretanto, os problemas decorrentes da
manipulao de vrias transaes simultneas, do aumento no trfego da rede e do limite do poder de
processamento dos PCs que rodam o DBMS, provocam o aumento da complexibilidade e a
degradao no desempenho, medida que o nmero de usurios se multiplica. A soluo desenvolvida
para essas limitaes o sistema de banco de dados Cliente/Servidor.
BANCOS DE DADOS CLIENTE/SERVIDOR
Na sua forma mais simples, um banco de dados Cliente/Servidor (C/S) divide o processamento
de dados em dois sistemas: o PC cliente, que roda o aplicativo de banco de dados, e o servidor, que
roda totalmente ou parte do DBMS real. O servidor de arquivo da rede local continua a oferecer
recursos compartilhados, como espao em disco para os aplicativos e impressoras. O servidor de
119
banco de dados pode rodar no mesmo PC do servidor de arquivo ou (como mais comum) em seu
prprio PC. O aplicativo de banco de dados do PC cliente, chamado sistema front-end, manipula toda
a tela e o processamento de entrada/sada do usurio. O sistema back-end do servidor de banco de
dados manipula o processamento dos dados e o acesso ao disco. Por exemplo, um usurio do front-end
gera um pedido (consulta) de dados do servidor de banco de dados, e o aplicativo front-end envia, para
o servidor, o pedido pela rede. O servidor de banco de dados executa a pesquisa real e retorna somente
os dados que respondem a pergunta do usurio, conforme aparece na figura 4.
pc pc
pc
cabo de Rede
Servidor de
Banco de Dados
Consulta
Resultado da consulta
A vantagem imediata de um sistema C/S bvia: dividir o processamento entre dois sistemas
reduz a quantidade do trfego de dados no cabo da rede.
Em um dos casos tipicamente confusos sobre o significado de um mesmo termo que s vezes
encontramos no campo da computao, a definio de Cliente/Servidor aparentemente o contrrio
dos sistemas baseados em UNIX, rodando a interface grfica X-Windows. A diviso no
processamento a mesma do sistema C/S baseado em PC, mas o front-end chamado servidor no X-
Windows, pois fornece os servios de apresentao e de interface do usurio. O sistema back-end, no
qual roda o DBMS, referido como cliente dos servios fornecidos pelo sistema front-end.
O nmero de sistemas C/S est aumentando rapidamente-novos sistemas esto sendo
projetados e divulgados quase mensalmente. Embora os sistemas clientes normalmente rodem em PC,
o sevidor do banco de dados pode rodar de um PC a um mainframe. Mais e mais aplicativos de front-
end esto aparecendo, incluindo desde os que ampliam o escopo dos DBMSs baseados em PC
tradicionais, at os servidores de banco de dados.
A maior desvantagens dos sistemas de bancos de dados descritos at aqui que eles exigem o
armazenamento dos dados em um nico sistema. Isso pode ser um problema para empresas grandes
que precisam suportar usurios do banco de dados espalhados em uma rea geogrfica extensa ou que
precisem compartilhar parte de seus dados departamentais com outros departamentos ou com um
hospedeiro central. necessrio um modo de distribuir os dados entre os vrios hospedeiros ou
localidades, o que levou ao desenvolvimento dos sistemas de processamento distribudo.
120
Como Selecionar APIS
API significa Aplication Program Interface. um protocolo de comunicao entre o front-
end ou a lgica de negcio e o banco de dados.
Os fornecedores de Servidores de Banco de Dados costumam prover uma interface de mais
alto nvel para comunicao com seus servidores.
Estas APIs so especficas para cada produto.
Exemplos : SQL Net da Oracle
DB/Library da Microsoft/Sybase.
Como cada servidor, geralmente, possui sua prpria API, quando uma aplicao cliente quer
acessar servidores diferentes preciso escolher entre as seguintes alternativas:
APIs especficas para cada SGBD.;
Interface comum;
Gateway.
Acessando servidores diferentes com APIS especficas para cada SGBD
uma alternativa que prev que a utilizao de uma API especfica para cada servidor
diferente que vier a ser acessado pela aplicao cliente. Se precisar acessar banco de dados diferentes,
necessitar carregar na memria APIs diferentes.
Vantagens:
Performance
Tuning individual
Desvantagens
Incompatibilidade de transaes
Necessidade de mais de uma API cliente
Acessando servidores diferentes com interface comum
uma alternativa onde uma API, situada no lado cliente, prov um protocolo nico para
acesso aos diferentes servidores.
Esta API ir carregar os drives especficos de cada servidor para estabelecer a comunicao.
Exemplo : ODBC(Open DataBase Comunication) da Microsoft.
121
Vantagens:
O cliente s fala a lingua, ODBC, que traduz os comandos para cada API cliente
Desvantagens:
Tuning individual impossvel;
Desempenho. A Microsoft admite uma perda de 30% utilizando ODBC
Acessando servidores diferentes com gateways
Os gateways so produtos que possibilitam a comunicao entre uma aplicao cliente,
desenvolvida para um certo servidor, com outro servidor especfico, sem que a aplicao cliente seja
modificada..
Exemplos : MicroDecision Ware, Gupta SQLHost, Oracle Gateway.
Vantagens:
S uma API cliente
Desempenho bom
Desvantagens:
Tuning para apenas um servidor
Gateways custam caro
ODBC (Open DataBase Comunication) Conectividade de Banco de Dados Aberto
ODBC uma API da Microsoft que facilita a interoperabilidade entre o Windons e outros
bancos de dados.
Para usar o ODBC as ferramentas de aplicao devem ser habilitadas para aceitar este padro.
Os servidores de banco de dados por outro lado deve aceitar chamadas no pado ODBC.
Para que um aplicativo possa acessar vrios servidores de bancos de dados, vrios esforos
foram feitos.
Um dos mais bem sucedidos resultou na criao, pela Microsoft, do ODBC -Open Data Base
Connectivity.
122
Usando um drive ODBC, um programa escrito em qualquer linguagem de programao pode
acessar uma enorme variedade de servidores de banco de dados. Alm disso, o programador no
precisa se preocupar com os comandos especficos de consulta base de dados. Ele deselvolve seu
aplicativo e o ODBC se encarrega de encaminhar as consultas.
Devido a facilidade do padro ODBC, a maioria dos produtores de software oferece
conectividade por meio dele.
O ODBC foi baseado nas especificaes do SQL Access Group e do X Open, duas
organizaes que estabelecem padres tcnicos de conectividade.
Desenvolvido inicialmente para Windows, ele foi lanado em 1992 e, hoje, se encontra na
terceira gerao. A arquitetura ODBC tem quatro componentes bsicos. O primeiro o prprio
aplicativo, que executa o processamento no cliente e emite as chamadas de consulta aos dados.
O gerenciador de drives, um arquivo do tipo DLL que a Microsoft fornece com seus sistemas
operacionais, carrega os controladores de acordo com a solicitao da aplicao.
O terceiro elemento o drive ODBC, que processa as chamadas de funo, submete
requisies SQL a fonte de dados e remete o resultado ao aplicativo. A estrutura se completa com
fonte de dados, a origem das informaes que o usurio quer acessar, normalmente um banco de dados
relacional.
Existem dois tipos de drives ODBC - monocamada e multicamadas. O drive do tipo
monocamada processa as chamadas do ODBC e os comandos SQL. Ele assume, assim, parte da
funcionalidade que caberia, em princpio, fonte de dados.
Esse tipo de driver normalmente utilizado para acessar bases de dados que no sejam
compatveis com o padro SQL, como as do tipo xBase. Os comandos SQL so processados pelos
prprios drives, que transmitem a consulta ao gerenciador de banco de dados na forma de uma
operao bsica de arquivo. Um driver do tipo multicamadas envia as requisies diretamente ao
servidor, que se encarrega de process-las: Esse driver permite que a aplicao, o gerenciador de
drives e o prprio controlador ODBC fiquem em uma mquina cliente, enquanto o gerenciador de
banco de dados roda em outra mquina - o servidor.
Quando o banco de dados compatvel com SQL, o driver apenas repassa, a ele, comandos
nessa linguagem. No caso de sistemas no compatveis, o gerenciador de banco de dados ter fazer um
trabalho extra de traduo dos comandos. Alm dos fabricantes de banco de dados, surgiram diversas
empresas especializadas em driveers ODBC.
Embora os produtos de todas essas companhias atendem s mesmas especificaes, cada um
deles pode apresentar melhor ou pior desempenho que os demais. Observa-se, tambm que h outros
123
fatores, alm do driver ODBC, que tm grande influncia no desempenho do sistema. Entre esses
fatores esto o protocolo de rede, o gerenciador de banco de dados e o hardware. Apesar da sua ampla
aceitao, o ODBC ganhou a fama de ser um mtodo muito lento de acesso aos dados. Por isso, muitas
empresas preferem construir aplicativos usando os comandos nativos do gerenciador de banco de
dados para comunicao entre o cliente e o servidor.
Recentes testes foram realizados por uma empresa americana Resource Group, sob a liderana
de Ken Norht, autor do livro Windows Multi-DBMS Programing.
Nessa avaliao, foram usados os mesmos micros clientes, servidores, rede, tabelas e
declaraes SQL para avaliar o desempenho do ODBC e compar-los com o acesso em modo nativo.
Comparaes - Um exame dos resultados dos 27 testes revela que, em 11 deles, o drive
nativo se saiu melhor. Nas outras 16 operaes, a vitria foi do ODBC. Desses 16 testes em que o
ODBC foi melhor do que o acesso nativo, a diferena foi maior que 10% em 7 Dos 11 testes em que o
acesso foi mais rpido, em apenas 2 a diferena foi maior que 10%. No Oracle 7 o tempo de acesso via
ODBC foi 2% mais rpido que o acesso nativo.. No Informix, o ODBC foi 1% mais rpido em mdia.
No Sybase a diferena foi de 13% a fovor do ODBC.
Com estes nmeros acaba o mito do mau desempenho do ODBC. O uso do driver ODBC pode
economizar muito tempo e dinheiro no desenvolvimento de aplicativos multiplataformas. O sucesso
dessa implementao vai depender no s do uso do driver correto, mas de um conjunto de escolhas
acertadas de hardware e software.
Interfaces Grficas (GUIs)
As interfaces grficas(GUIs) contriburam para os sistemas cliente/servidor porque os
tornaram mais fceis de serem usados e aumentaram a produtividade. Os recursos de GUI, como
multitarefa, cumutao de tarefas e intercmbio de dados entre aplicativos, tambm contriburam para
que esses sistemas ficassem mais atraentes. Um sistema no precisa ter GUI para ser classificado
como um sistema cliente/servidor - no qual um mdulo cliente conectado por rede a um mdolo
servidor constitui os componentes essenciais. No entanto, as GUIs so usadas com freqncia em
sistemas cliente/servidor, devido os seus benefcios.
Os gastos associados s GUIs incluem treinamento de usurios finais e custos da construo
de uma GUI. Se uma empresa quiser uma GUI personalizada para uma aplicativo interno, seus
analistas de desenvolvimento e programadores devem constru-la.
O desenvolvimento de uma GUI consiste em programao direcionada por eventos, na qual os
programas reagem s aes de usurios finais. Isso diferente do cdigo gerado por programao
124
sequencial tradicional. H vrias abordagens diferentes para desenvolvimento de interfaces grficas
internas.
Dez Consideraes Importantes sobre GUIs
A) As GUIs podem aumentar a produtividade tornando os sistemas mais fceis de usar o
oferecendo recursos como multitarefa e intercmbio de dados entre os aplicativos.
B) A facilidade de uso no automtica; alguns treinamentos preparatrios para os usurios
sero necessrios.
C) As GUIs podem levar bastante tempo para serem construdas - usar ferramentas de
contruo de GUIs acelera o processo.
D) Falta de consistncia nas GUIs pode confundir, irritar e frustar os usurios finais.
E) Um guia de estilos confere a uma GUI sua aparencia visual.
F) Padres internos devem ser adotados para garantir que um guia de estilo escolhido ou um
estilo desenvolvido pela empresa esteja obedecido.
G) Transformar um sistema existente em front-end com uma GUI - embora seja uma tcnica
que gera controvsias - pode ser til em sistemas de utilizao complexa.
H) O software GUI do Windows da Microsoft e do Presentation Maneger da IBM reside em
um plataforma de cliente; mas, no sistema X Windows para UNIX, um servidor oferece
gerenciamento de vdeo para a GUI.
I) H ferramentas disponveis para construir interfaces genricas que so portveis para
uma ampla variedade de estruturas.
J) Os usurios finais podem ter diferentes GUIs, como X Windows e Windows da Microsoft, operando
simultaneamente em seus micros.
SISTEMAS DE PROCESSAMENTO DISTRIBUDO
Uma forma simples de processamento distribudo j existe a alguns anos. Nessa forma
limitada, os dados so compartilhados entre vrios sistemas hospedeiros, atravs de atualizaes
enviadas pelas conexes diretas (na mesma rede) ou por conexes remotas, via telefone ou via linhas
de dados dedicadas. Um aplicativo rodando em um ou mais dos hospedeiros, extras a parte dos dados
alterados durante um perodo de tempo definido pelo programador e, ento, transmite os dados para
um hospedeiro centralizado ou para outros hospedeiros do circuito distribudo. Os outros bancos de
dados so, ento, atualizados para que todos os sistemas estejam sincronizados. Esse tipo de
processamento de dados distribudo normalmente ocorre entre computadores departamentais ou entre
125
LANs e sistemas hospedeiros. Aps o dia de trabalho, os dados vo para um grande microcomputador
central ou para um hospedeiro mainframe.
Embora esse sistema seja ideal para compartilhar parte dos dados entre diferentes hospedeiros, ele no
responde ao problema do acesso, pelo usurio, aos dados no armazenados em seus hospedeiros
locais. Os usurios devem mudar suas conexes para os diferentes hospedeiros, a fim de ter acesso aos
vrios bancos de dados, lembrando-se, entretanto, de onde est cada banco. Combinar os dados dos
bancos de dados existentes em hospedeiros, tambm apresenta alguns srios desafios para os usurios
e para os programadores. H ainda, o problema dos dados duplicados; embora os sistemas de
armazenamento em disco tenham diminudo de preo atravs dos anos, fornecer vrios sistemas de
disco para armazenar os mesmos dados pode ficar caro. Manter todos os conjuntos de dados
duplicados em sincronismo, aumenta a complexidade do sistema.
A soluo para esses problemas est emergindo da tecnologia do acesso "sem costura" a
dados, denominada processamento distribudo. No sistema de processamento distribudo o usurio
pede dados do hospedeiro local; se este informar que no possui os dados, sai pela rede procurando o
sistema que os tenha. Em seguida, retorna os dados ao usurio, sem que este saiba que foram trazidos
de um sistema desconhecido exceto, talvez, por um ligeiro atraso na obteno dos dados. A figura 5
ilustra uma forma de sistema de processamento distribudo.
Primeiramente, o usurio cria e envia uma busca de dados para o servidor do banco de dados
local. O servidor, ento, envia, para o mainframe (possivelmente atravs de um gateway ou de um
sistema de ponte que une as duas redes), o pedido dos dados que no possui. Ele responde consulta.
Finalmente, o servidor do banco de dados local combina esse resultado com os dados encontrados em
seu prprio disco e retorna a informao ao usurio.
O ideal que esse sistema distribudo tambm possa funcionar de outro modo: os usurios de
terminal conectado diretamente ao mainframe podem ter acesso aos dados existentes nos servidores de
arquivos remotos. O projeto e a implementao dos sistemas de processamento distribudo um
campo muito novo. Muitas partes ainda no esto no lugar e as solues existentes nem sempre so
compatveis uma com as outras.
126
BIBLIOGRAFIA
.ELMASRI, Ramez e NAVATHE, ShamKant B. Sistemas de Banco de Dados - Fundamentos
e Aplicaes. Ed. LTC. Rio de Janeiro, 2000.
.KORTH, Henry F. & SILBERSCHATZ, Abraham. Sistemas de Bancos de Dados, So
Paulo. Ed. Makron Books, 1999.
.DATE, C.J., Introduo a Sistemas de Bancos de Dados, Rio de Janeiro. Ed. Campus, 1991.
.BOCHENSKI, Barbara. Implementando Sistemas Cliente/Servidor de Qualidade, So Paulo.
Ed. Makron Books, 1995.
.CHEN, P.; Modelagem de Dados: A abordagem em entidade-relacionamento para projeto
lgico. So Paulo. Ed. McGraw-Hill, 1990.