Programa DCC011 Introdução a Banco de Dados Álgebra Relacional Mirella M. Moro Departamento de Ciência da Computação Universidade Federal de Minas Gerais mirella@dcc.ufmg.br 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 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 AutorA, AutorArtigoAA, ArtigoR π 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)) REVISÃO operadores básicos da álgebra relacional OBS: Nãopodeser (π NomeAutor σ AnoPublicacao=1998 ^ AnoPublicacao=1999 (Autor AutorArtigo Artigo)) POR QUÊ?!?!?!?!?!?!? DCC011 - profa. Mirella M. Moro 3 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 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! Database Management Systems, R. Ramakrishnan (tradução, autorizada, de Anna & Mario Nascimento) DCC011 - profa. Mirella M. Moro 5 Álgebra Relacional: Seleção Relation Sells: bar beer price Joe s Bud 2.50 Sue s Miller 3.00 JoeMenu σ bar= Joe s (Sells): bar beer price Joe s Bud 2.50 σ mantém as colunas σ seleciona linhas de acordo com condição DCC011 - profa. Mirella M. Moro 6
Álgebra Relacional: Projeção Relation Sells: bar beer price Joe s Bud 2.50 Sue s Miller 3.00 MUITO IMPORTANTE ÁLGEBRA ELIMINA DUPLICATAS Prices π beer,price (Sells): beer price Bud 2.50 Miller 2.75 Miller 3.00 π mantém colunas conforme definido DCC011 - profa. Mirella M. Moro 7 Álgebra Relacional: Prod. Cartesiano R1( A, B ) 1 2 3 4 R2( B, C ) 5 6 7 8 9 10 R3 R1 Χ R2 R3( A, R1.B, R2.B, C ) 1 2 5 6 1 2 7 8 1 2 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 DCC011 - profa. Mirella M. Moro 8 Álgebra Relacional: Junção Funciona como uma projeção seguido de uma seleção cuja condição é especificada junto ao operador Álgebra Relacional: Junção Natural Sells( bar, beer, price ) Bars( name, addr ) Joe s Bud 2.50 Joe s Maple St. Sue s River Rd. Sue s Coors 3.00 Condição de junção BarInfo Sells Sells.bar = Bars.name Bars BarInfo( bar, beer, price, name, addr ) Joe s Bud 2.50 Joe s Maple St. Joe s Maple St. Sue s River Rd. Sue s Coors 3.00 Sue s River Rd. DCC011 - profa. Mirella M. Moro 9 Sells( bar, beer, price ) Bars( bar, addr ) Joe s Bud 2.50 Joe s Maple St. Sue s River Rd. Sue s Coors 3.00 Condição de junção implícita= conjunção da igualdade de todos os pares de colunas de mesmo nome BarInfo := Sells Bars Note: 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. River Rd. Sue s Coors 3.00 River Rd. No resultado: para os pares de colunas de mesmo, apenas uma cópia é considerada DCC011 - profa. Mirella M. Moro 10 1. Divisão Álgebra Relacional 1. Divisão 2. Regras de Precedência 3. Junção: Natural, EquiJoin, OuterJoin, SelfJoin 4. Esquemas resultantes 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 Requer que R tenha mais atributos que S e pelo menos um atributo em comum DCC011 - profa. Mirella M. Moro 12
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 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: Se o cliente foi atendido apenas por um dos vendedores, não entra no resultado. É necessário ter sido atendido por todos os dois. Fonte: Profa. Cristina Ciferri, ICMC/USP São Carlos DCC011 - profa. Mirella M. Moro 14 Exemplos de A B (ou A/B) Database Management Systems, R. Ramakrishnan (tradução, autorizada, de Anna & Mario Nascimento) DCC011 - profa. Mirella M. Moro 15 AS σ sexo=f (ALUNOS) Matr Nome Sexo Cr 1 A F CC 4 D F MC 7 G F SI 8 H F SI M π Matr,Disc,Sem (MATRICULAS ALUNAS) Matr Disc Sem 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 que se matricularam em todos os semestres a. AS M NÃO FUNCIONA (sem denominador comum) b. π Matr,Nome AS π Sem M NÃO FUNCIONA (sem denominador comum) c. π Matr,Sem M π Sem M Retorna Matr de todos os semestres d. π Nome (AS (π Matr,Sem M π Sem M) ) Retorna Nome matriculado em todos semestres Alunas matriculadas nas mesmas disciplinas de 1 a. π Matr,Disc M π Disc σ Matr=1 (M) Agora, no mesmo semestre b. π Matr,Disc M π Disc,Sem σ Matr=1 (M) NÃO FUNCIONA (sem denominador comum) c. π Matr,Disc,Sem M π Disc,Sem σ Matr=1 (M) DCC011 - profa. Mirella M. Moro 16 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) ALUNOS (matr, nome, curso) 1.(π matr, disc MATRICULAS) (π disc σ sem=20172 MATRICULAS) número de matrícula dos alunos matriculados em todas as disciplinas oferecidas no semestre de 20172 2.((π matr, disc (MATRICULAS(σ curso=cc ALUNOS))) (π disc σ sem=20172 MATRICULAS) número de matrícula dos alunos da Computação matriculados em todas as disciplinas oferecidas no semestre 20172 DCC011 - profa. Mirella M. Moro 17 2. Regras de Precedência Precedência dos operadores relacionais: 1.[σ, π, ρ] (mais alta) 2.[Χ, ] 3. 4.[, ] DCC011 - profa. Mirella M. Moro 18
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 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 DCC011 - profa. Mirella M. Moro 19 DCC011 - profa. Mirella M. Moro 20 Junção Natural R S 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.nome2 S Resultado: nome1 e nome2 estarão no esquema final DCC011 - profa. Mirella M. Moro 21 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 forada 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 junção natural) preenchendo os valores de fora da junção com NULL Notação: R R.nome1=S.nome2 S OuterJoin à esquerda R S OuterJoin natural à direita (condição implícita tal como junção natural) Junção Natural, EquiJoin, OuterJoin T1 T2 T3 A B X 1 B C 1 D C D D a E b G c DCC011 - profa. Mirella M. Moro 23 DCC011 - profa. Mirella M. Moro 24
Junção Natural, EquiJoin, OuterJoin T1 T2 T3 A B X 1 Todas as tuplas de T1 que satisfazem ou não a junção B C 1 D C D D a E b G c Todas as tuplas de T2 que satisfazem ou não a junção Ambos os lados também é possível A B B C X 1 1 D D a b G c DCC011 - profa. Mirella M. Moro 25 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 σ beer<>beer1 (S Sells) A junção natural de Selle 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 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 Projeção A lista de atributos informa o esquema 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 União dos atributos das duas relações Renaming O operador define o esquema DCC011 - profa. Mirella M. Moro 27 DCC011 - profa. Mirella M. Moro 28 Paciente(CodPac,NomePac,DataNascPac) Internação(CodPac,NumeroIntern, DtHBaixa,DtHAlta) CodPac referencia Paciente Leito (NoLeito,CodigoQuarto,TipoLeito) OcupaLeito (CodPac, NumeroIntern, NoLeito, DataHoraInic, DataHoraFim) (CodPac,NumeroIntern) referencia Internação; NoLeito referencia Leito 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 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). 5. Obter os nomes dos pacientes que nunca foram internados. Primeiro de tudo DCC011 - profa. Mirella M. Moro 30
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 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 31 DCC011 - profa. Mirella M. Moro 32 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). DCC011 - profa. Mirella M. Moro 33 DCC011 - profa. Mirella M. Moro 34 5 Obter os nomes dos pacientes que nunca foram internados. DCC011 - profa. Mirella M. Moro 35