Modelo Relacional Álgebra Relacional Aulas 1 e 2 12/11/2012 e 13/11/2012 Material original: Raghu Ramakrishnan Tradução : Mario Nascimento University of Alberta (Canada) Alguns slides de autoria de Sandra de Amo foram inseridos no material original traduzido.
O que é SGBD? Uma grande coleção integrada de dados. Modelos do mundo real (enterprise) Entidades ( ex. estudantes, cursos) Relacionamentos (ex., Madonna está tendo CS564) Um Sistema de Gerenciamento de Banco de Dados (SGBD) é um pacote de software designado para guardar e gerenciar banco de dados. 4
Porque usar um SGBD? Acesso independente e eficiente a dados. Redução no tempo de desenvolvimento da aplicação. Integridade e segurança dos dados. Administração uniforme dos dados. Acesso concorrente, recuperação de crashes. 5
Porque estudar Banco de Dados? Mudança da computação para a informação. Em uma ponta: webspace (confuso!) Na outra ponta: aplicações científicas Conjuntos de dados aumentando em diversividade e volume.. Bibliotecas digitais, videos interativos, Projeto de Genoma Humano, projeto EOS,... Necessidade de SGBD cada vez maior SGBD permeia a maior parte da Computação. SOs, linguagens, teoria, IA, multimidia... 6
Usuários leigos (clientes, agentes de viagens) Formulários Internet Front Ends de Aplicações Usuários especializados Interface SQL COMANDO SQL Executor de planos Cálculo dos operadores Parser Otimizador Processador de Consultas Gerenciador de Transações Gerenciador de Lock Controle Concorrência Métodos de Acesso Gerenciador de Buffer Gerenciador de Espaço em Disco Gerenciador de Recuperação De Falhas Arq. de indices Arq. Dados Catálogo Banco de Dados
Modelos de Dados Um modelo de dados é uma coleção de conceitos para descrever dados. Um esquema é uma descrição de uma coleção particular de dados, usando algum modelo de dados. O modelo de dado relacional é o modelo mais usado hoje. Principal conceito: relação, basicamente uma tabela com linhas e colunas. Toda relação tem um esquema, que descreve as colunas, ou campos. 7
Níveis de Abstrações Muitas visões simples, esquema conceitual (lógico)e esquema físico. Visões descreve como usuários vêem o dado. Esquema conceitual define estrutura lógica. Esquema físico descreve o arquivo e indices usados. Visão 1... Visão N Esquema Conceitual Esquema Físico Esquemas são definidos usando uma DDL; Dados são modificados / consultados usando uma DML. 8
Ex.: Banco de Dados de uma Escola Esquema conceitual: Students(sid: string, name: string, login: string, age: integer, gpa:real) Courses(cid: string, cname:string, credits:integer) Enrolled(sid:string, cid:string, grade:string) Esquema Físico: Relações guardadas como arquivos desordenados. Índices na primeira colunas de estudantes. Esquema externo (Visão): Course_info(cid:string,enrollment:integer) 9
Independência dos Dados Uma das maiores vantagens de um SBBD Os 3 níveis de abstração permitem independência lógica e física dos dados. O SGBD isola os programas de aplicações da maneira como os dados são estruturados e armazenados. Independência lógica O nível externo (visões) possibilita que usuários não autorizados não tenham acesso à estrutura lógica global dos dados (esquema conceitual). Independência física O nível conceitual possibilita que usuários não tenham acesso à estrutura física dos dados. Maneira como os dados são armazenados é transparente para estes usuários.
Controle da Concorrência. Execução da concorrência de processos é essencial para uma boa performance do SGBD. Acessos a discos são frequentes e lentos, é importante deixar a CPU alocada a diversos processos concorrentemente. Executar ações de diferentes processos pode levar a contradições: p.ex., o cheque compensado enquanto o saldo é computado. O SGBD evita tais problemas: usuários podem fingir que estão usando um sistema único. 11
Transação: Execução de um programa de BD O conceito chave é transação, uma seqüência atomica de ações no BD (leituras/gravações). Cada transação, executada completamente, deve deixar o BD num estado consistente (se o BD é consistente quando a transação começa). Usuários podem especificar algumas restrições de integridade, e o SGBD reforçará estas restrições. O SGBD não entende a semântica dos dados. Assim, assegurar que a transação preserve a consistência é definitivamente de responsabilidade do usuário! 12
Escalonando Transções Concorrentes SGBD garante que a execução de {T1,..., Tn} é equivalente a alguma execução em série T1...Tn. Antes de ler/escrever um objeto, uma transação requer um lock neste objecto, e espera até o SGBD retornar o lock. Todos os locks são liberados no final da transação. (protocolo 2PL estrito.) Idéia: Se uma ação de Ti, escrevendo X, afeta Tj, que lê X, um deles, digamos Ti, obterá o lock em X primeiro e Tj é forçado a esperar até Ti completar; isto efetivamente ordena as transações. E se Tj já tem um lock em Ye Ti mais tarde requer um lock em Y? (Deadlock!) Ti ou Tj é abortada e reiniciada. 13
BDs fazem estas pessoas felizes... Usuários e fabricantes de BDs Programadores de aplicações em BD Administrador de BD (DBA) Projeta esquema logico e físico Gerencia segurança e autorizações Disponibilidades de dados, recuperação de desastres (crashes) Acerto do BD com o passar do tempo Tem que entender como um SGDB funciona! 16
Resumo SGBD usados para preservar, consultar grande conjuntos de dados. Benefícios: recuperação de crashes, acesso concorrente, agilidade no desenvolvimento, integridade e segurança dos dados, etc. Níveis de abstração independentes dos dados. Um SGBD típico tem uma arquitetura de camadas. Bons DBAs podem ganhar bem! Bastante P&D feita e a se fazer. 18
Álgebra Relacional 1
Linguagens de consultas relacionais Linguagens de consultas: Permitem manipulação e recuperação de dados de um BD. O modelo relacional suporta LCs simples e poderosas: Forte fundamentação teórica baseada em lógica. Permite otimizações. Ling. de consulta ling. de programação LCs não tem a intenção de suportar cálculos complexos. LCs suportam acesso fácil e eficiente a grandes conjuntos de dados. 2
LCs relacionais formais Duas LCs matemáticas formam a base para as LCs reais (p.ex., SQL), e p/ implementação: ❶ Álgebra relacional: Predominantemente operacional, útil para representar planos de execução. ❷ Cálculo Relacional : Permite usuários descreverm o que querem, ao invés de como querem. (nãooperacional, declarativa.) Entender álgebra e cálculo e uma chave para entender SQL e processamento de consultas. 3
Preliminares Uma consulta é aplicada para instâncias de relação, e o resultado de uma consulta é também uma instância de relação. Esquemas de relações para uma consulta são fixadas (mas consultas rodarão independente de exemplos!) O esquema para o resultado de uma propensa consulta é também fixada! Determinada por definição de construção de linguagem de consulta. 4
Esquema de BD dos exemplos Sailors(sid,sname,rating,age) Boat(bid, bname, color) Reserve(sid, bid, day) sid sname bid Sailor Reserve Boat bname age rating day color
Example Instances Relações Sailors e Reserves para nossos exemplos. Usaremos positional ou named field notation, assume que nomes de campos em resultados de consulta são `herdados de nomes de campos em relações de consulta. S1 S2 R1 sid bid day 22 101 10/10/96 58 103 11/12/96 sid sname rating age 22 dustin 7 45.0 31 lubber 8 55.5 58 rusty 10 35.0 sid sname rating age 28 yuppy 9 35.0 31 lubber 8 55.5 44 guppy 5 35.0 58 rusty 10 35.0 5
Algebra Relacional Operações Básicas: σ Selection ( ) Seleciona em sub-conjunto de fileiras da relação. Projection ( π ) Deleta colunas indesejadas da relação. Cross-product ( ) Permite-nos combinar duas relações. Set-difference ( ) Tuplas em reln. 1, mas não em reln. 2. Union( ) Tuplas em reln. 1 e em reln. 2. Operações Adicionais: Intersecção, junção, divisão, renomear Desde que cada operação retorna uma relação, operações podem ser compostas! 6
Projeção Deleta atributos que não estão na lista de projeção. Esquema de resultado contem exatamente o campo na lista de projeção, com os mesmos nomes que eles tinham na (somente) relação gasto. Operador de projeção tem eliminar duplicadas! (Porque??) Note: sistemas reais tipicamente não fazem eliminação duplicada a menos que o usuário explicitamente peça isso.(porque não?) sname rating yuppy 9 lubber 8 guppy 5 rusty 10 π ( S2) sname, rating age 35.0 55.5 π age ( S2) 7
Seleção Seleciona fileiras que satisfazem condição seleção. Não duplica no resultado! (Porque?) Esquema de resultado idêntico para esquema de (somente) relação gasto. Relação de Resultado pode ser usado para outra operação de algebra relacional! π sid sname rating age 28 yuppy 9 35.0 58 rusty 10 35.0 σ rating S >8 ( 2) sname rating yuppy 9 rusty 10 σ ( ( S )) sname, rating rating>8 2 8
União, Intersecção, Diferença de Conjuntos Todas estas operações tomam duas relações de gastos, com os quais tem ser union-compatible: Mesmo número de campos. Campos `correspondentes tem o mesmo tipo. O que é o esquema de resultado? sid sname rating age 22 dustin 7 45.0 S1 S2 sid sname rating age 22 dustin 7 45.0 31 lubber 8 55.5 58 rusty 10 35.0 44 guppy 5 35.0 28 yuppy 9 35.0 S1 S2 sid sname rating age 31 lubber 8 55.5 58 rusty 10 35.0 S1 S2 9
Produto Cartesiano Cada fileira de S1 é combinada com cada fileira de R1. Esquema resultante tem um campo por campo S1 e R1, com nomes campos`herdados se possível. Conflito: Ambos S1 e R1 tem um campo chamado sid. (sid) sname rating age (sid) bid day 22 dustin 7 45.0 22 101 10/10/96 22 dustin 7 45.0 58 103 11/12/96 31 lubber 8 55.5 22 101 10/10/96 31 lubber 8 55.5 58 103 11/12/96 58 rusty 10 35.0 22 101 10/10/96 58 rusty 10 35.0 58 103 11/12/96 Operador renomear: ρ ( C( 1 sid15, sid2), S1 R1) 10
Renomear ρ(r(f), E) E: expressão da álgebra relacional F: um conjunto de especificações do tipo NomeAtributoAntigo NomeAtributoNovo R(F): relação com mesmo esquema de E, exceto para os atributos com NomesAntigos que passam a ter NomesNovos (dados pela especificação F) Exemplo : ρ(r(a C), Π A S x Π B S ) (onde S(A,B)) resulta numa relação com esquema {C,B} e com o mesmo conteúdo que Π A S x Π B S
Junções Condição Junção: R c S = σ c ( R S) (sid) sname rating age (sid) bid day 22 dustin 7 45.0 58 103 11/12/96 31 lubber 8 55.5 58 103 11/12/96 S1. sid < R1. sid S 1 R 1 Result schema o mesmo que do produto cartesiano Poucas tuplas do que produto cartesiano, tem que estar disponíveis para computar mais eficientemente. Algumas vezes chamada um theta-join. 11
Joins Equijoin: Um caso especial de condição junção onde a condição c contem somente igualdades. sid sname rating age bid day 22 dustin 7 45.0 101 10/10/96 58 rusty 10 35.0 103 11/12/96 S1 R1 sid Result schema parecido com produto cartesiano, mas somente uma copia de campos para o qual igualdade é especificada. Natural Join: Equijoin em todos campos iguais. 12
Division Não suportado como um operador primitivo, mas útil para expressar consultas como: Find sailors who have reserved all boats. Seja A com dois campos, x e y; e B com apenas y: A/B = { x x, y A y B} i.e., A/B contém todas as tuplas (sailors) tais que para cada tupla y (boat) em B, há uma tupla xy em A. Ou: Se o conjunto de valores y (boats) associados com um valor x (sailor) em A contem todos os valores y em B, o valor x está em A/B. Em geral x e y podem estar em qualquer listas de campos; y é a lista de campo em B, e x é a lista de campos de A. 13
Examples of Division A/B sno s1 s1 s1 s1 s2 s2 s3 s4 s4 A pno p1 p2 p3 p4 p1 p2 p2 p2 p4 pno p2 B1 sno s1 s2 s3 s4 pno p2 p4 B2 sno s1 s4 pno p1 p2 p4 B3 sno s1 A/B1 A/B2 A/B3 14
Expressando A/B Usando Operadores Básicos Divisão não é operador essencial; só uma útil taquigrafia. Também é o caso de joins, mas joins são tão comuns que muito sistemas o implementam. Idéia: Para A/B, calcule todos valores x que não são disqualificados por algum y em B. x é disqualificado se ao juntar um y de B, obtemos uma tupla xy que não está em A. Disqualified x values: A/B: π x (( π x ( A) B) A) π x ( A) all disqualified tuples 15
Encontre os nomes dos sailors que reservaram o barco # 103 Solução 1: π (( σ Re serves) Sailors) sname bid =103 Solução 2: ρ ( Temp1, σ Re serves) bid =103 ρ ( Temp2, Temp1 Sailors) π sname ( Temp2) Solução 3: πsname( σ (Re serves Sailors)) bid =103 16
Encontre nomes dos sailors que reservaram um barco vermelho Informação sobre cor disponível somente em barcos; assim precisa de uma junção extra: π sname (( σ color = ' red' Boats) Re serves Sailors) Uma solução mais eficiente: π sname ( π π σ sid (( bid color = ' red ' Boats) Re s) Sailors) Um otimizador de consulta pode fazer isso a partir da primeira solução! 17
Encontre nomes dos sailors que reservaram um barco vermelho ou verde Pode identificar todos os barcos vermelhos ou verdes, então achar sailors que tenham reservado um destes barcos: ρ ( Tempboats,( σ )) color = ' red ' color = ' green' Boats π sname ( Tempboats Re serves Sailors) Também pode-se definir Tempboats usando união (?) E se é substituido por nesta consulta? 18
Encontre os sailors que reservaram um barco vermelho e um barco verde Idéia anterior não funciona! Deve-se identificar os sailor que reservaram barcos vermelhos, aqueles que reservaram barcos verdes e encontrar a interseção destes: ρ ( Tempred, π (( σ sid color = ' red ' ρ ( Tempgreen, π (( σ sid color = ' green' Boats) Re serves)) Boats) Re serves)) π sname (( Tempred Tempgreen) Sailors) 19
Encontre sailors que reservaram todos os barcos Usando divisão, esquemas a serem divididos devem ser cuidadosamente escolhidos: ρ ( Tempsids,( π Re serves) / ( π )) sid, bid bid Boats π sname ( Tempsids Sailors) P/ encontrar sailors que reservaram os barcos Interlake :... / π ( σ ) bid bname= ' Interlake' Boats 20