DCC011
Introdução a Banco de Dados
Álgebra Relacional
Álgebra Relacional
Mirella M. MoroDepartamento de Ciência da Computação Universidade Federal de Minas Gerais
mirella@dcc.ufmg.br
Programa
• Introdução
• Conceitos básicos, características da abordagem de banco de dados, modelos de dados, esquemas e instâncias, arquitetura de um sistema de banco de dados, componentes de um sistema de gerência de banco de dados.
• Modelos de dados e linguagens
• Modelo entidade-relacionamento (ER), modelo relacional,álgebra • Modelo entidade-relacionamento (ER), modelo relacional,álgebra
relacional, SQL.
• Projeto de bancos de dados
• Fases do projeto de bancos de dados, projeto lógico de bancos de dados relacionais, normalização.
• Novas Tecnologias e Aplicações de Banco de Dados
DCC011 - profa. Mirella M. Moro 2
Correção de Exercícios
Autor (CodAutor, NomeAutor, CodEndereco, CodInst) (CodEndereco) referencia Endereco (CodInst) referencia Instituicao
Artigo (CodArtigo, Titulo, AnoPublicacao)
AutorArtigo (CodAutor, CodArtigo) (CodAutor) referencia Autor , (CodArtigo) referencia Artigo
Instituicao (CodInst, NomeInst, CodEndereco)
(CodEndereco) referencia Endereco
Endereco (CodEndereco, Rua, Numero, Bairro, Cidade, Estado, Pais, Cep)
1) Obter os títulos dos artigos seguidos do nome seus autores.
πTitulo, NomeAutor(Autor ⋈ AutorArtigo ⋈ Artigo)
OU Autor A, AutorArtigo AA, Artigo R
πTitulo, NomeAutorσA.Codautor=AA.CodAutor ^ R.CodArtigo=AA.CodArtigo(A × AA × R) OBS: junção natural de três tabelas funciona desde que tenham um atributo em comum para
dois pares delas. Nesse caso, a condição implícita da junção é
Autor.CodAutor = AutorArtigo.CodAutor ^ AutorArtigo.CodArtigo = Artigo.CodArtigo 2) Obter os nomes dos autores que publicaram artigos em 1998 e 1999.
(πNomeAutorσAnoPublicacao=1998(Autor ⋈ AutorArtigo ⋈ Artigo)) ∩
(πNomeAutorσAnoPublicacao=1999(Autor ⋈ AutorArtigo ⋈ Artigo)) OBS: Não pode ser
(πNomeAutorσAnoPublicacao=1998 ^ AnoPublicacao=1999 (Autor ⋈ AutorArtigo ⋈ Artigo))
POR QUÊ?!?!?!?!?!?!?
DCC011 - profa. Mirella M. Moro 3
REVISÃO operadores básicos da
REVISÃO operadores básicos da
álgebra relacional
DCC011 - profa. Mirella M. Moro 4
Álgebra Relacional: Revisão
• Dadas duas relações R1 e R2 • Operações Básicas
• Selection (
σ
) Seleciona em sub-conjunto de tuplas da relação • Projection (π
) Apaga colunas indesejadas da relação • Cross-product (×
×
×
×
) Permite combinar R1 e R2 • Set-difference () Tuplas em R1, mas não em R2 • Set-difference () Tuplas em R1, mas não em R2 • Union (∪∪∪∪) Tuplas em R1 e em R2• Operações Adicionais:
• Intersecção, junção, divisão, renomear
Desde que cada operação retorna uma relação, operações podem ser compostas !
σ
mantém
as colunas
Álgebra Relacional: Seleção
Relation Sells:
bar beer price
Joe’s Bud 2.50
Joe’s Miller 2.75
Sue’s Bud 2.50
Sue’s Miller 3.00 Sue’s Miller 3.00
JoeMenu
σ
bar=“Joe’s”(Sells):bar beer price
Joe’s Bud 2.50 Joe’s Miller 2.75
σ
seleciona
linhas de
acordo
com condição
Álgebra Relacional: Projeção
Relation Sells:
bar beer price
Joe’s Bud 2.50 Joe’s Miller 2.75 Sue’s Bud 2.50 Sue’s Miller 3.00 MUITO MUITO MUITO MUITO IMPORTANTE IMPORTANTE IMPORTANTE IMPORTANTE ÁLGEBRA ÁLGEBRA ÁLGEBRA ÁLGEBRA ELIMINA ELIMINA ELIMINA ELIMINA DUPLICATAS DUPLICATAS DUPLICATAS DUPLICATAS
π mantém
colunas
conforme
definido
DCC011 - profa. Mirella M. Moro 7Adaptado de Jeff Ullman – CS145, aut07 Sue’s Miller 3.00
Prices
π
beer,price(Sells):beer price
Bud 2.50
Miller 2.75 Miller 3.00
Álgebra Relacional: Prod. Cartesiano
R1( A, B ) 1 2 3 4 R2( B, C ) 5 6 R3( A, R1.B, R2.B, C ) 1 2 5 6 1 2 7 8 1 2 9 10 3 4 5 6
R3
R1 Χ R2
DCC011 - profa. Mirella M. Moro 8
Adaptado de Jeff Ullman – CS145, aut07
5 6 7 8 9 10 3 4 5 6 3 4 7 8 3 4 9 10
PRODUTO CARTESIANO: funciona exatamente igual ao produto cartesiano de conjuntos da matemática PORÉM cada elemento é uma LINHA INTEIRA
Número de colunas = #colunas em R1 x #colunas em R2 sempre
Se tiver duas colunas com nome igual (B) o resultado fica NomeTabela.NomeColuna
Álgebra Relacional: Junção
Sells( bar, beer, price ) Bars( name, addr )
Joe’s Bud 2.50 Joe’s Maple St. Joe’s Miller 2.75 Sue’s River Rd. Sue’s Bud 2.50
Sue’s Coors 3.00
Funciona como uma projeção seguido de uma seleção cuja condição é especificada junto ao operador
Condição de junção
DCC011 - profa. Mirella M. Moro 9
Adaptado de Jeff Ullman – CS145, aut07 BarInfo Sells
⋈
⋈
⋈
⋈
Sells.bar = Bars.nameBarsBarInfo( bar, beer, price, name, addr )
Joe’s Bud 2.50 Joe’s Maple St. Joe’s Miller 2.75 Joe’s Maple St. Sue’s Bud 2.50 Sue’s River Rd. Sue’s Coors 3.00 Sue’s River Rd.
Condição de junção
Álgebra Relacional: Junção Natural
Sells( bar, beer, price ) Bars( bar, addr )
Joe’s Bud 2.50 Joe’s Maple St. Joe’s Miller 2.75 Sue’s River Rd. Sue’s Bud 2.50
Sue’s Coors 3.00 BarInfo := Sells
⋈
BarsCondição de junção implícita = conjunção da igualdade de todos os pares de colunas de mesmo nome
DCC011 - profa. Mirella M. Moro 10
Adaptado de Jeff Ullman – CS145, aut07 BarInfo := Sells
⋈
BarsNote: Bars.name agora é Bars.bar para fazer junção natural
BarInfo( bar, beer, price, addr )
Joe’s Bud 2.50 Maple St. Joe’s Milller 2.75 Maple St. Sue’s Bud 2.50 River Rd. Sue’s Coors 3.00 River Rd.
de todos os pares de colunas de mesmo nome
No resultado: para os pares de colunas de mesmo, apenas uma cópia é considerada
Álgebra Relacional
Álgebra Relacional
1. Divisão2. Regras de Precedência
3. Junção: Natural, EquiJoin, OuterJoin, SelfJoin 4. Esquemas resultantes
1. Divisão
Divisão de duas relações R e S
• Os valores de um atributo (ou mais) de R que se
relacionam com todos os valores de um atributo (ou
mais) de S
• Utilizada para consultas que incluam o termo para
todos ou em todos
• Utilizada para consultas que incluam o termo para
todos ou em todos
• Requer que R tenha mais atributos que S e pelo
menos um atributo em comum
Divisão: Exemplos
• Quais pessoas possuem contas bancárias em TODOS os bancos estatais do país?
• Não se sabe quantos bancos são ou quais são, então não é possível fazer uma condição de seleção primeiro
• Quais pessoas possuem cartão de fidelidade para TODAS as companhias aéreas brasileiras?
• Quais estudantes se matricularam em TODAS as disciplinas • Quais estudantes se matricularam em TODAS as disciplinas
ofertadas pela profa Mirella?
• Quais estudantes se matricularam em TODAS as disciplinas de primeiro semestre oferecidas em 20172?
• Quais meninas se matricularam em TODAS as disciplinas nas quais o príncipe William se matriculou?
• Quais genomas possuem TODAS as características presentes na proteína X?
DCC011 - profa. Mirella M. Moro 13
Outro Exemplo: Liste os códigos dos clientes que já
foram atendidos por todos os vendedores.
Esquema:
DCC011 - profa. Mirella M. Moro 14 Fonte: Profa. Cristina Ciferri, ICMC/USP São Carlos
Se o cliente foi atendido apenas por um dos vendedores, não entra no resultado. É necessário ter sido atendido por todos os dois.
Exemplos de A ÷ B (ou A/B)
DCC011 - profa. Mirella M. Moro 15 Database Management Systems, R. Ramakrishnan (tradução, autorizada, de Anna & Mario Nascimento)
AS σσσσsexo=F(ALUNOS)
Matr Nome Sexo Cr
1 A F CC
4 D F MC
7 G F SI
8 H F SI
Matr Disc Sem
1 DCC011 20162 M ππππMatr,Disc,Sem (MATRICULAS ALUNAS)
Alunas que se matricularam em todos os semestres a. AS ÷÷÷÷M
NÃO FUNCIONA (sem denominador comum)
b. ππππMatr,NomeAS ÷÷÷÷ ππππSemM
NÃO FUNCIONA (sem denominador comum)
c. ππππMatr,SemM ÷÷÷÷ ππππSemM
Retorna Matr de todos os semestres
d. ππππNome (AS (ππππMatr,SemM ÷÷÷÷ ππππSemM) )
Retorna Nome matriculado em todos semestres
Alunas matriculadas nas mesmas disciplinas de “1”
DCC011 - profa. Mirella M. Moro 16
1 DCC011 20162 1 DCC851 20162 1 DCC834 20161 4 DCC011 20162 4 DCC851 20162 7 DCC011 20162 7 DCC851 20161 7 DCC834 20171 8 DCC011 20161 8 DCC254 20162 8 DCC234 20171 8 DCC851 20172
Alunas matriculadas nas mesmas disciplinas de “1” a. ππππMatr,DiscM ÷÷÷÷ ππππDiscσσσσMatr=1 (M)
Agora, no mesmo semestre b. ππππMatr,DiscM ÷÷÷÷ ππππDisc,SemσσσσMatr=1 (M)
NÃO FUNCIONA (sem denominador comum)
c. ππππMatr,Disc,SemM ÷÷÷÷ ππππDisc,SemσσσσMatr=1 (M)
Divisão: Exemplos
R (matr, disc) ÷ S (disc) os números de matrícula em R que se relacionam com todos os valores de disciplina em S. O resultado é apenas a coluna matr (pense que na divisão tem disc no numerador e no denominador, então corta ☺).
Traduzindo para expressões algébricas:
Esquema: MATRICULAS (matr, disc, sem) Esquema: MATRICULAS (matr, disc, sem) ALUNOS (matr, nome, curso)
1.(πmatr, discMATRICULAS) ÷ (πdiscσsem=20172MATRICULAS) número
de matrícula dos alunos matriculados em todas as disciplinas oferecidas no semestre de 20172
2.((πmatr, disc(MATRICULAS (σcurso=CCALUNOS))) ÷
(πdiscσsem=20172MATRICULAS) número de matrícula
dos alunos da Computação matriculados em todas as
2. Regras de Precedência
• Precedência dos operadores relacionais:
1.[σ, π, ρ] (mais alta)
2.[
Χ, ⋈]
3.∩
4.[∪, —]
4.[∪, —]
3. Junção:
Natural, EquiJoin, OuterJoin, SelfJoin
• Produz uma tabela composta de duas outras que se
relacionam
• A operação de junção deriva da combinação das
operações de produto cartesiano e seleção, sendo
executadas conjuntamente.
Também chamada de “Join”
• Também chamada de “Join”
DCC011 - profa. Mirella M. Moro 19
Junção Natural
• Conecta duas relações R e S:
• Conjunção da igualdade de pares de atributos de mesmo nome
• Projeta uma cópia de cada par dos atributos igualados
• Notação: R ⋈ S
• Notação: R ⋈ S
DCC011 - profa. Mirella M. Moro 20
Junção Natural
R ⋈ S
DCC011 - profa. Mirella M. Moro 21
EquiJoin / EquiJunção
• Junção em que a condição da junção tem a forma
R. nome1 = S. nome2
• Teste de igualdade em dois campos com nomes
diferentes (um campo de cada relação)
• Notação: R ⋈
R.nome1=S.nome2S
• Notação: R ⋈
R.nome1=S.nome2S
• Resultado: nome1 e nome2 estarão no esquema
final
DCC011 - profa. Mirella M. Moro 22
OuterJoin / Junção Externa
• Para junções naturais, apenas as tuplas de R que
também estão em S e vice-versa, são selecionadas.
• OuterJoin: Permite que tuplas fora da junção sejam
selecionadas com valores nulos para seus atributos
1. Realiza a junção normal entre as duas relações 2. Adiciona as linhas que ficaram de fora (do resultado da 2. Adiciona as linhas que ficaram de fora (do resultado da
junção natural) preenchendo os valores de fora da junção com NULL
• Notação: R
R.nome1=S.nome2S
OuterJoin à esquerdaR S
OuterJoin natural à direita (condição implícita tal como junção natural)DCC011 - profa. Mirella M. Moro 23
Junção Natural, EquiJoin, OuterJoin
A B X 1 Y 2 Z 3 B C 1 D 5 E 6 F C D D a E b G c T1 T2 T3
Junção Natural, EquiJoin, OuterJoin
A B X 1 Y 2 Z 3 B C 1 D 5 E 6 F C D D a E b G c T1 T2 T3 A B C X 1 D A B B C X 1 1 DDCC011 - profa. Mirella M. Moro 25
A B C X 1 D Y 2 Z 3 A B C X 1 D 5 E 6 F A B C X 1 D Y 2 Z 3 5 E 6 F A B C D X 1 D a Y 2 Z 3 5 E b 6 F G c Todas as tuplas de T1 que satisfazem ou não a junção Todas as tuplas de T2 que satisfazem
ou não a junção Ambos os lados também é possível
SelfJoin
• Usando Sells(bar, beer, price), encontre os bares
que vendem dois tipos diferentes de cerveja a
mesmo preço
• Estratégia
: usando renomeação, definir uma cópia
de Sells
S(bar, beer1, price)
S (bar,beer1,price)
Sells
S (bar,beer1,price)
Sells
σ
beer<>beer1
(S Sells)
A junção natural de Sell e S consiste de (bar, beer,
beer1, price), tal que o bar vendo as mesmas
cervejas a mesmo preço
DCC011 - profa. Mirella M. Moro 26
Adaptado de Jeff Ullman – CS145, aut07
4. Esquemas Resultantes
• União, intersecção e diferença
• Os esquemas dos dois operandos devem ser o mesmo, e o resultante é o mesmo também
• Seleção
• O esquema resultante é o mesmo do esquema do operando
operando
• Projeção
• A lista de atributos informa o esquema
DCC011 - profa. Mirella M. Moro 27
Adaptado de Jeff Ullman – CS145, aut07
Esquemas Resultantes
• Produto
• O esquema é formado pelos atributos das duas relações • Usa R.A, etc., para distinguir atributos com nome A
• Join
• Mesmo que produto
• Natural join
• Natural join
• União dos atributos das duas relações
• Renaming
• O operador define o esquema
DCC011 - profa. Mirella M. Moro 28
Adaptado de Jeff Ullman – CS145, aut07
Paciente PacientePaciente
Paciente (CodPac,NomePac,DataNascPac) Internação
InternaçãoInternação
Internação (CodPac,NumeroIntern, DtHBaixa,DtHAlta) CodPac referencia Paciente Leito
Leito Leito
Leito (NoLeito,CodigoQuarto,TipoLeito) OcupaLeito
OcupaLeito OcupaLeito
OcupaLeito (CodPac, NumeroIntern, NoLeito, DataHoraInic, DataHoraFim) (CodPac,NumeroIntern) referencia Internação; NoLeito referencia Leito Parto
Parto Parto
Parto (CodPac, HoraNasc, TipoParto, CodPacMae, NumeroIntern)
CodPac referencia Paciente; CodPacMae,NumeroIntern referencia Internação
1. Obter uma tabela com as Datas de Nascimento e as Data/Hora das internações (baixas) dos pacientes de nome “José” e que ocuparam o leito número 06.
2. Faça uma consulta que retorne uma tabela com os nomes dos pacientes, as respectivas Data/Hora das baixas e números dos leitos ocupados. Se um respectivas Data/Hora das baixas e números dos leitos ocupados. Se um paciente foi internado mas não precisou usar um leito, seu nome e respectiva Data e Hora da internação devem aparecer na tabela resultante seguido do respectivo campo NoLeito em branco
3. O hospital está sendo processado por troca de bebês na maternidade. O ministério público solicitou uma tabela com duas colunas, onde na primeira aparece o nome dos bebês nascidos no hospital e na Segunda coluna o nome das respectivas mães. Faça uma consulta que retorne essa tabela.
4. Obtenha os códigos de pacientes que foram internados no hospital que nunca foram mães no hospital (nunca tiveram bebês no hospital).
Primeiro de tudo
P ← Paciente
I ← Internação
L ← Leito
O ←OcupaLeito
O ←OcupaLeito
A ← Parto
1
1
1
1 Obter uma tabela com as Datas de Nascimento e as
Data/Hora das internações (baixas) dos pacientes de nome
“José” e que ocuparam o leito número 06.
DCC011 - profa. Mirella M. Moro 31
P ← Paciente I ← Internação L ← Leito O ←OcupaLeito A ← Parto
2
2
2
2 Faça uma consulta que retorne uma tabela com os nomes
dos pacientes, as respectivas Data/Hora das baixas e números
dos leitos ocupados. Se um paciente foi internado mas não
precisou usar um leito, seu nome e respectiva Data e Hora da
internação devem aparecer na tabela resultante seguido do
respectivo campo NoLeito em branco
DCC011 - profa. Mirella M. Moro 32
P ← Paciente I ← Internação L ← Leito O ←OcupaLeito A ← Parto
3
3
3
3 O hospital está sendo processado por troca de bebês na
maternidade. O ministério público solicitou uma tabela com
duas colunas, onde na primeira aparece o nome dos bebês
nascidos no hospital e na Segunda coluna o nome das
respectivas mães. Faça uma consulta que retorne essa tabela.
DCC011 - profa. Mirella M. Moro 33
P ← Paciente I ← Internação L ← Leito O ←OcupaLeito A ← Parto
4
4
4
4 Obtenha os códigos de pacientes que foram internados no
hospital que nunca foram mães no hospital (nunca tiveram
bebês no hospital).
DCC011 - profa. Mirella M. Moro 34
P ← Paciente I ← Internação L ← Leito O ←OcupaLeito A ← Parto
5
5
5
5 Obter os nomes dos pacientes que nunca foram internados.
DCC011 - profa. Mirella M. Moro 35
P ← Paciente I ← Internação L ← Leito O ←OcupaLeito A ← Parto