Faculdade IED Curso Superior de Tecnologia em Banco de Dados Disciplina: Projeto de Banco de Dados Relacional Prof.: Fernando Hadad Zaidan Unidade Álgebra Relacional 2 Leitura Obrigatória ELMASRI, R.; AVATHE, S. B. Sistemas de bancos de dados: fundamentos e aplicações. 4. ed. São Paulo: Pearson Education, 2005. Para Saber Mais DATE, C. J. Introdução a sistemas de banco de dados. Rio de Janeiro: Elsevier, 2003. Leitura adicional para desenvolvimento das aulas SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHA, S. Sistema de banco de dados. Tradução da 5ª Edição. São Paulo: Campus, 2006. 3
Álgebra Relacional. Conceitos Iniciais.2 Projeção e seleção.3 Junções.4 Outras operações 4 PACIETE cod-pac nome-pac sexo data-nasc nro-convenio COSULTA EXAME COVEIO nro-convenio nro-consulta cod-pac crm-medico data MEDICO crm nro-consulta cod-exame data-exame resultado TIPO-EXAME codexame tipo descrcao nome 5 PACIETE cod-pac nome-pac sexo data-nasc nro-convenio COSULTA Fulano M 0/0/980 05 22222 Beltrana F 5/04/794 0 33333 Ciclano M 22/06/960 05 nro-consulta cod-pac crm-medico data 0000 33333 3456 02/0/2008 00002 33333 6766 03/0/2008 00003 3456 3/03/2008 00004 22222 3456 3/03/2008 00005 6766 3/03/2008 COVEIO nro-convenio descricao 0 Unimed 02 Santa Casa 05 Cobre Tudo EXAME nro-consulta cod-exame data-exame resultado 0000 0-2 03/0/2008 Positivo 00003 02-3/03/2008 Acima de 00 00003 02-2 3/03/2008 Abaixo de 0 00005 0-3/03/2008 Positivo 00005 0-2 3/03/2008 egativo MEDICO crm nome 3456 Dr. José 6766 Dra. Maria 8976 Dr. Cura Tudo TIPO-EXAME cod-exame tipo preco 0- Urina Cultura 23,44 0-2 Urina Rotina 5,55 02- Sangue- xxx 60,50 02-2 Sangue-yyy 35,00 6 2
Operadores fundamentais Seleção Projeção Produto Cartesiano União Diferença Definição das operações 7 Seleção aplicada a um Produto Cartesiano A operação de junção é bastante comum em consultas a bancos de dados relacionais, pois permite estabelecer relação entre tuplas de relações distintas para a formação de uma única relação. Pode ser entendida como uma seleção aplicada a um produto cartesiano. 8 Produto Cartesiano Cross Product ou Cross Join; Operação binária; Permite combinar informações de duas relações (combinações de cada tupla de uma relação com cada tupla da outra relação). Formato: R R2 Considerando-se que: R é uma relação com m colunas e n linhas; R2 é uma relação com m2 colunas e n2 linhas; A relação resultante terá (m + m2) colunas e (n * n2) linhas 9 3
Produto Cartesiano - Exemplo Sejam as relações R e S abaixo; Calcular o produto cartesiano R S: R A B C a b c a2 b c S D B C % & @ # $! R X S A R.B R.C D S.B S.C a b c % & @ a b c # $! a2 b c % & @ a2 b c # $! 0 Produto Cartesiano O resultado do produto cartesiano de duas tabelas é uma terceira tabela contendo todas as combinações possíveis entre os elementos das tabelas originais. COVEIO MEDICO nro-convenio descricao crm nome 0 Unimed 3456 Dr. José 02 Santa Casa 6766 Dra. Maria 05 Cobre Tudo 8976 Dr. Cura Tudo Produto Cartesiano Convenio X Medico nro-convenio descricao crm nome 0 Unimed 3456 Dr. José 0 Unimed 6766 Dra. Maria 0 Unimed 8976 Dr. Cura Tudo 02 Santa Casa 3456 Dr. José 02 Santa Casa 6766 Dra. Maria 02 Santa Casa 8976 Dr. Cura Tudo 05 Cobre Tudo 3456 Dr. José 05 Cobre Tudo 6766 Dra. Maria 05 Cobre Tudo 8976 Dr. Cura Tudo A operação JOI é representada por ; Usada para combinar tuplas relacionadas de relações em uma única tupla; Esta operação é muito importante para bancos de dados relacionais; Permite processar relacionamentos entre relações. A operação junção pode ser definida por um produto cartesiano seguido por uma operação SELEÇÃO. 2 4
COSULTA nro-consulta cod-pac crm-medico data 0000 33333 3456 02/0/2008 00002 33333 6766 03/0/2008 00003 3456 3/03/2008 00004 22222 3456 3/03/2008 00005 6766 3/03/2008 MEDICO crm nome 3456 Dr. José 6766 Dra. Maria 8976 Dr. Cura Tudo Suponha que se deseja recuperar os nomes dos médicos de cada consulta. 3 Para obter o nome dos médicos, é necessário combinar cada tupla de consulta com tuplas de medicos; Cujo valor crm-medico da tupla consulta seja igual ao valor de crm na tupla medico. Isto é feito usando a operação JOI; Então, projeta-se o resultado sobre aqueles atributos necessários. Atributos (colunas) em duplicidade são eliminados. 4 Suponha que se deseja recuperar os nomes dos médicos de cada consulta. Cons-Med consulta crm-medico=crm medico Cons_Med nro-consulta cod-pac crm-medico data crm nome 0000 33333 3456 02/0/2008 3456 Dr. José 00002 33333 6766 03/0/2008 6766 Dra. Maria 00003 3456 3/03/2008 3456 Dr. José 00004 22222 3456 3/03/2008 3456 Dr. José 00005 6766 3/03/2008 6766 Dra. Maria Resultado π nro-consulta, nome (Cons-Med) Resultado nro-consulta nome 0000 Dr. José 00002 Dra. Maria 00003 Dr. José 00004 Dr. José 00005 Dra. Maria 5 5
A forma geral da operação JOI sobre duas relações R(A, A2,..., An) e R2(B, B2,..., Bm) é: R <condição join> R2 O resultado de JOI é uma relação S com n+m atributos S(A, A2,..., An, B, B2,..., Bm) nesta ordem; S tem um tupla para cada combinação de tuplas uma de R e uma de R2 onde quer que a combinação satisfaça a condição join. 6 Esta é a principal diferença entre Produto Cartesiano e ; Em, apenas combinações de tuplas que satisfazem a condição join é que aparecerá no resultado; Já no Produto Cartesiano, todas as combinações de tuplas são incluídas no resultado. A condição join é especificada sobre atributos de R e de R2, e é avaliada para cada combinação de tuplas. 7 Equijunção Encontra-se mais freqüentemente que envolva condições com apenas a comparação de igualdade. Uma que apenas o operador de comparação = é utilizado é chamado EQUIJUÇÃO. o resultado de uma EQUIJUÇÃO sempre terá um ou mais pares de atributos que tem valores idênticos em todas as tuplas. 8 6
Equijunção o nosso exemplo, os atributos crm-medico e crm são idênticos em todas as tuplas de Cons-Med; A condição de de igualdade foi especificada para estes atributos. t A duplicação destes atributos na relação Cons-Med é desnecessária; 9 atural Foi criada então uma nova operação chamada atural. Basicamente é uma EQUIJUÇÃO seguido da remoção de atributos desnecessários. O símbolo é * Cons-Med consulta * crm-medico,crm medico Forma geral: S R * lista,lista2 R2 onde lista = atributos 20 atural Se os atributos já tem o mesmo nome nas duas relações (no caso, nro-convenio das relações paciente e convenio), pode-se tirar a totalmente e usar a expressão abaixo: RESULTADO paciente * convenio RESULTADO cod-pac nome-pac sexo data-nasc nro-convenio descricao Fulano M 0/0/980 05 Cobre Tudo 22222 Beltrana F 5/04/794 0 Unimed 33333 Ciclano M 22/06/960 05 Cobre Tudo 2 7
atural Caso os atributos não tenham o mesmo nome, e deseje usar a junção natural, cria-se uma relação intermediária, renomeando o atributo (), e depois utiliza-se a junção natural. Ou, faz-se na própria expressão (2). crm-medico da tupla consulta e crm na tupla medico ) TEMP ρ crm-medico,nome medico Cons-Med consulta * temp 2) Cons-Med consulta * ρ crm-medico,nome medico Cons_Med nro-consulta cod-pac crm-medico data nome 0000 33333 3456 02/0/2008 Dr. José 00002 33333 6766 03/0/2008 Dra. Maria 00003 3456 3/03/2008 Dr. José 00004 22222 3456 3/03/2008 Dr. José 00005 6766 3/03/2008 Dra. Maria 22 Externa Até o momento, as junções vistas casam as tuplas que satisfizerem a condição de junção junções internas (inner joins); Ex.: Para uma junção natural R * S, apenas as tuplas de R que correspondem as tuplas de S ( e vice-versa), aparecem no resultado; Logo, as tuplas sem uma tupla correspondente (ou relacionada) são eliminadas do resultado; Também as tuplas de valores null são eliminadas; 23 Externa Se pensarmos em um relatório com todas as informações das relações componentes, podemos entender isto como uma perda de informação; As junções externas (ou outer joins) é uma saída quando queremos manter todas as tuplas em R, ou todas em S, ou todas de ambas as relações, independentemente se elas têm ou não tuplas correspondentes nas relações; 24 8
Externa externa à esquerda (left outer join): mantém no resultado todas as tuplas da primeira relação; externa à direita (rigth outer join): mantém no resultado todas as tuplas da segunda relação; externa total (full outer join): mantém no resultado todas as tuplas de ambas as relações (esquerda e direita); Valores null são preenchidos caso não se encontre tuplas correspondente à esquerda ou à direita; 25 Externa Esquerda Exemplo à esquerda do nro-convenio das relações paciente e convenio. RESULTADO paciente nro-convenio=nroconvenio convenio PACIETE cod-pac nome-pac sexo data-nasc nro-convenio Fulano M 0/0/980 05 22222 Beltrana F 5/04/794 0 25252 Paulo M 23/05/976 03 33333 Ciclano M 22/06/960 05 45454 Marta F 4/09/950 06 COVEIO nro-convenio descricao 0 Unimed 02 Santa Casa 05 Cobre Tudo RESULTADO cod-pac nome-pac sexo data-nasc nro-convenio descricao Fulano M 0/0/980 05 Cobre Tudo 22222 Beltrana F 5/04/794 0 Unimed 25252 Paulo M 23/05/976 03 null 33333 Ciclano M 22/06/960 05 Cobre Tudo 45454 Marta F 4/09/950 06 null 26 Questão para discussão - Toda junção pode ser representada por um produto cartesiano seguido de uma seleção? 2 - Quando fazemos consultas a bancos de dados relacionais i utilizando a linguagem SQL, muitas vezes utilizamos junções à direita ou à esquerda. Esse tipo de operação possui operação correspondente na álgebra relacional? 27 9