Capítulo 7: Outras linguagens! Query-by-Example (QBE)" Datalog"



Documentos relacionados
Query-by-Example (QBE) Datalog

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Universidade da Beira Interior Cursos: Engenharia Informática, Ensino da Informática, Matemática Aplicada e Matemática /Informática

Introdução às Bases de Dados

Comandos de Manipulação

CAP. I ERROS EM CÁLCULO NUMÉRICO

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Tarefa Orientada 14 Subconsultas

BDII SQL Junção Revisão 8

Orientação a Objetos

BANCO DE DADOS aula 6 álgebra relacional -

Prof.: Clayton Maciel Costa

Banco de Dados I Módulo II: Modelagem Entidade- Relacionamento versus Relacional. (Aula 3) Clodis Boscarioli

Roteiro. Modelo de Dados Relacional. Processo de Projeto de Banco de Dados. BCC321 - Banco de Dados I. Ementa. Posicionamento.

Capítulo 1. x > y ou x < y ou x = y

1 Máquina URM, comandos e programas URM

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Computadores e Sistemas de Informação. Bases de Dados Relacionais (linguagem SQL)

Modelagem de Dados. Aula 02 Arquitetura e Álgebra Relacional. Maxwell Anderson

Faculdade Pitágoras 24/10/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Disciplina: Unidade III: Prof.: Período:

SQL DML. Frederico D. Bortoloti

Prof. Marcelo Machado Cunha

NOME SEXO CPF NASCIMENTO SALARIO

SQL: Interrogações simples

Noções de. Microsoft SQL Server. Microsoft SQL Server

Banco de Dados I Módulo III: Linguagens de Consulta. (Aula 2) Clodis Boscarioli

Banco de Dados. Arquitetura e Terminologia. Prof. Walteno Martins Parreira Jr waltenomartins@yahoo.

RELAÇÕES BINÁRIAS Produto Cartesiano A X B

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Tarefa Orientada 10 Obter informação a partir de uma tabela

Disciplina de Banco de Dados Parte V

António Rocha Nuno Melo e Castro

Definida pelo American National Standard Institute (ANSI) em 1986

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

Álgebra Relacional. OBS: as operações Seleção e Projeção são operações unárias porque atuam em relações únicas.

Tarefa Orientada 13 Agrupamento e sumário de dados

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Microsoft Access: Criar consultas para um novo banco de dados. Vitor Valerio de Souza Campos

Banco de dados 1. Linguagem DML SQL Select Avançado. Professor: Victor Hugo L. Lopes

Modelo de Dados. Modelo para organização dos dados de um BD

Módulo III. Folhas de Cálculo

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Conceitos básicos de programação

INSTITUTO TECNOLÓGICO

Lógica Matemática e Computacional 5 FUNÇÃO

Processamento e Otimização de Consultas

APLICAÇÕES DA DERIVADA

Introdução ao SQL. Aécio Costa

Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de

Sumário. INF01040 Introdução à Programação. Elaboração de um Programa. Regras para construção de um algoritmo

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Capítulo 4: SQL! Database System Concepts! Silberschatz, Korth and Sudarshan (modificado)!

Autómatos Finitos Determinísticos

Modelo Relacional - Manipulação

Tarefa Orientada 11 Junção Interna

Microsoft Access Para conhecermos o Access, vamos construir uma BD e apresentar os conceitos necessários a cada momento

Modelos. Comunicação com clientes

SQL UMA ABORDAGEM INTERESSANTE

Índice. Introdução 31. Tutorial 1: O Microsoft Access como Sistema de Gestão de Bases de Dados Relacionais 35

Programação SQL. Introdução

Criação de Consultas e Relatórios no Access CRIAÇÃO DE CONSULTAS E RELATÓRIOS NO ACCESS

GBC043 Sistemas de Banco de Dados. Introdução. Ilmério Reis da Silva UFU/FACOM

Databases. Dependências Funcionais

CAPÍTULO 6 - ESTRUTURA DE SELEÇÃO

Noções elementares sobre conjuntos

Banco de Dados I Linguagem SQL Parte 2. Autor: Prof. Cláudio Baptista Adaptado por: Prof. Ricardo Antonello

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Introdução aos cálculos de datas

SQL Structured Query Language

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

CIn/UFPE Projeto Conceitual de BD - Prof. Robson Fidalgo 1

Banco de Dados. Prof. Antonio

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Microsoft Access INTRODUÇÃO. Sumário INTRODUÇÃO INTRODUÇÃO INTRODUÇÃO INTRODUÇÃO. O que é Banco de Dados?

Fernando Albuquerque - fernando@cic.unb.br. Bancos de Dados. Fernando Albuquerque fernando@cic.unb.br

Engenharia de Software III

Linguagem Lógica Prolog

Banco de Dados. Álgebra Relacional. Prof. Enzo Seraphim

Diagrama de transição de Estados (DTE)

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

Consultas (Queries) ou Interrogações

Desenvolvimento de uma base de dados. Relação. Modelo lógico: SGBD relacional

Descoberta de Conhecimento em Bases de Dados. Classificação

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

Organização e Arquitetura de Computadores I

Tarefa Orientada 15 Manipulação de dados

Administração e Optimização de BDs

Introdução à Lógica de Programação

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

RESUMO 2 - FÍSICA III

Introdução à Linguagem

Transcrição:

Capítulo 7: Outras linguagens! Query-by-Example (QBE)" Datalog" 1!

Query-by-Example (QBE)! Estrutura básica" Perguntas apenas numa relação" Perguntas em várias relações" A Condition Box! Exemplo do Access" 2!

QBE Estrutura de base! Linguagem gráfica de perguntas a bases de dados relacionais" O sistema cria templates de relações solicitadas por utilizadores" As perguntas são feitas com padrões, por exemplo " 3!

Tabelas QBE para o exemplo do banco! 4!

Tabelas QBE (Cont.)! 5!

Perguntas numa só relação! Encontrar todos os números de empréstimos da agência Perryridge" _x é uma variável" P. significa print (display)" os tuplos duplicados são removidos por default" Para reter os duplicados usar P.ALL " 6!

Perguntas numa só relação (Cont.)! Encontrar os números dos empréstimos de valor superior a 700" Nome de agências que não sejam em Brooklyn" 7!

Perguntas numa só relação (Cont.)! Números de empréstimos feitos conjuntamente pelo Smith e o Jones." Todos os clientes que vivem na mesma localidade que o Jones" 8!

Perguntas em várias relações! Nomes de todos os clientes com empréstimos na agência Perryridge" 9!

Condition Box! Permite impor condições extra sobre atributos." " E.g. Números de empréstimos feitos pelo Smith, pelo Jones, ou por ambos" 10!

Condition Box (Cont.)! Números de contas com saldo entre $1,300 e $1,500 " " Agências com activos maiores que pelo menos os de uma agência em Brooklyn" 11!

Outras características! Com o QBE é ainda possível executar ordenação de tuplos, algumas formas de agregação, e modificação de bases de dados." Tudo o que é possível exprimir com o QBE, também o é com SQL"... mas não vice-versa!!" 12!

Microsoft Access QBE! O Microsoft Access suporta uma variante do QBE - Graphical Query By Example (GQBE)" É diferente do QBE em:" Em vez de usar variáveis para dizer que os valores de dois atributos têm que ser iguais, usa linhas a ligar os atributos." Por default, as linhas especificam inner joins. Mas é possível alterar para outer joins." As condições, valores a afixar, etc, são especificados na design grid! 13!

Exemplo em Access QBE! Encontrar os nomes de clientes, saldo e número de conta de todos as contas da agência de Perryridge! 14!

Datalog! Estrutura de Base " Sintaxe de regras Datalog" Semântica de programas não recursivos" Operações relacionais em Datalog" Recursão em Datalog (programas definidos e estratificados)" 15!

Estrutura de Base! Um programa Datalog é um conjunto de regras, que definem relações (vistas). " Exemplo: definir relação (vista) v1 com todos os números de conta e respectivos saldos, para as contas de Perryridge com saldo superior a 700." " "v1(a, B) : account(a, Perryridge, B), B > 700." Qual o saldo da conta A-217 na vista v1?!!!!?- v1( A-217, B).! Quais as contas com saldo superior a 800??- account(a,_,b), B > 800! Permite recursão."! 16!

Exemplos de perguntas! Cada regra define um conjunto de tuplos que pertencem à vista" E.g. v1(a, B) : account(a, Perryridge, B), B > 700 lê-se como" para todo A, B! se (A, Perryridge, B) account e B > 700" então (A, B) v1! O conjunto de tuplos duma view é definido como a união dos conjuntos de tuplos de cada uma das suas regras." Exemplo:" " "interest-rate(n, 5) : account(n,a, B), B < 10000 "interest-rate(n, 6) : account(n,a, B), B >= 10000" 17!

Negação em Datalog! Definir a view c contendo os nomes de todos os clientes que têm pelo menos um depósito mas não têm empréstimos:" " "c(n) : depositor(n, A), not is-borrower(n).!is-borrower(n) : borrower (N,L).! NOTA: usando directamente not borrower (N, L) na 1ª regra dava resultado diferente: clientes N que têm pelo menos um depósito e existe algum empréstimo L que não é de N" Para evitar confusão (e problemas de implementação), é usual exigir-se que as variáveis em literais negados apareçam na cabeça da regra ou em algum literal positivo do corpo da regra." 18!

Regras por camadas (views sobre views)! Quais os juros de cada uma das contas de Perryridge" interest(a, l) : perryridge-account(a,b),!!!interest-rate(a,r), l = B * R/100.! perryridge-account(a,b) : account(a, Perryridge, B).! interest-rate(n,0) : account(n, A, B), B < 2000." interest-rate(n,5) : account(n, A, B), B >= 2000." Camadas das várias views:" 19!

Recursão em Datalog! Considere a relação:" precedencia(x, Y)! "contendo pares X, Y de cadeiras onde X dá precedência directa para Y." Cada cadeira pode dar precedência para outras, directa ou indirectamente" Uma cadeira X dá precedência indirectamente a Y, se dá precedência directa a uma cadeira Z, que por sua vez dá precedência para Y" Encontrar todas as cadeiras que dão precedência (directa ou indirecta) a Bases de Dados. Podemos escrever o seguinte programa Datalog recursivo:" precbd(x) :- precedencia(x, BD ).! precbd(x) :- precedencia(x, Y), precbd(y).! 20!

Recursão em Datalog (Cont.)! De forma mais geral: criar view precs com todos os pares (X, Y) onde X dá precedência directa ou indirecta para Y:! " "precs(x, Y) : precedencia(x, Y).!precs(X, Z) : precs(x,y), precs(y,z).! Quais as cadeiras que dão precedência a BD"!!!?- precs(x, BD )." 21!

Exemplo de pergunta complexa! Questão 28 da ficha de problema SQL:" Quais os nomes dos alunos que não seguiram pelo menos uma das precedências (directas) aconselhadas, e em que cadeiras não as seguiram?" nao_fez(naluno,ccurso,ccadeira) :- curso_cadeira(ccurso,ccadeira,_semestre),!!! not esta_inscrito(naluno,ccurso,ccadeira).! esta_inscrito(na,ccr,ccd) :- inscricoes(na,ccr,ccd,_din,_dav,_nt).! query(nome,cadeira) :- alunos(num,nome,_l,_dt,_sx,_cr),!!!! inscricoes(num,ccurso,ccadeira,_din,_dav,nt),!!! precedencias(ccurso,ccadeira,cadp),!!!! nao_fez(num,ccurso,cadp),!!!!! cadeiras(ccadeira,cadeira,_c,_d).! query(nome,cadeira) :- alunos(num,nome,_l,_dt,_sx,_cr),!!!! inscricoes(num,ccurso,ccadeira,din,_dav,_nt),!!! precedencias(ccurso,ccadeira,cadp),!!!! inscricoes(num,ccurso,cadp,_din,dav,_nt),!!!! DAv > Din,!!!!!!! cadeiras(ccadeira,cadeira,_c,_d).! E se fossem precedências indirectas, bastava substituir precedencias por precs.! 22!

Sintaxe de regras Datalog! Um literal positivo (ou átomo) tem a forma" " "p(t 1, t 2..., t n )" p é o nome da relação, com n atributos" cada t i é uma constante ou uma variável" Um literal negativo (ou por default) tem a forma " " "not p(t 1, t 2..., t n )! Operadores de comparação são entendidos como predicados " E.g. X > Y é entendido como o átomo >(X,Y)" Conceptualmente > define uma relação (infinita) contendo todos os pares (X,Y) onde X é maior que Y." Operações aritméticas são entendidas como predicados" E.g. A is B + C é entendido como +(B, C, A), onde a relação (infinita) + tem todos os triplos em que o 3º valor é igual à soma dos primeiros 2." 23!

Sintaxe de regras Datalog (Cont.)! Regras são da forma:"!!p(t 1, t 2,..., t n ) : L 1, L 2,..., L m.! cada L i é um literal (positivo ou negativo)" cabeça átomo p(t 1, t 2,..., t n ) " corpo literais L 1, L 2,..., L m " A uma regra com corpo vazio chama-se um facto:" " "p(v 1, v 2,..., v n ).! afirma que o tuplo (v 1, v 2,..., v n ) pertence à relação p! Um programa Datalog é um conjunto (finito) de regras" Um programa diz-se definido, se nenhuma das suas regras contém literais negativos (i.e. se not não aparece no programa)." 24!

Semântica duma regra! Uma instância duma regra é o resultado de substituir cada uma das variáveis da regra por alguma constante." Eg. Sendo v1" " " v1(a,b) : account (A, Perryridge, B), B > 700." Uma instância de v1 é:" " v1( A-217, 750) : account( A-217, Perryridge, 750), 750 > 700." O corpo duma instância duma regra R é satisfeito num conjunto de factos I (interpretação, ou instância da base de dados) sse" 1. "Para cada átomo q i (v i,1,..., v i,ni ) R, l contem q i (v i,1,..., v j,ni ).! 2. "Para cada literal not q j (v j,1,..., v j,ni ) R, l não contem q j (v i,1,..., v j,ni ).! 25!

Restrições nas variáveis! É possível escrever regras com um nº infinito de soluções. " "maior(x, Y) : X > Y!not-in-loan(B, L) : not loan(b, L)! Para evitar este problema, em Datalog:" Toda a variável que apareça na cabeça duma regra tem que aparecer também no corpo dessa regra, e num átomo que não seja expressão aritmética." Toda a variável que apareça num literal negativo no corpo duma regra tem que aparecer também num átomo do corpo dessa mesma regra." 26!

Semântica de Programas Definidos! Seja I uma interpretação (conjunto de factos). Define-se, para um programa definido P:" T P (I) = {p(t 1, t 2,..., t n ) : existe uma instância R duma regra R de P com cabeça p(t 1, t 2,..., t n ) cujo corpo está satisfeito em I}" A semântica (significado) de um programa definido P sobre uma instância duma base de dados I é o resultado do menor pontofixo da sequência:" I 0 = I I n+1 = T P (I n )" "(sendo P definido, esta sequência é não decrescente)" O resultado duma vista v com k argumentos, num programa P e base de dados I é o conjunto de todos os factos v(t 1, t 2,..., t k ) pertencentes ao ponto-fixo." 27!

Monotonicidade! Uma vista V é monotónica se para qualquer par de conjunto de factos I 1 e I 2 tais que l 1 I 2, se tem E v (I 1 ) E v (I 2 ), onde E v é a expressão que define V.! Um programa Datalog P é monotónico sse para todo o I 1 e I 2 : l 1 I 2 implica T P (I 1 ) T P (I 2 ), " Vistas de álgebra relacional que usem os operadores, σ,,, e ρ (bem como outros e.g. joins definidos à custa destes) são monotónicas. " Views de álgebra relacional com podem não ser monotónicas." Da mesma forma, programas Datalog definidos são monotónicos, mas programas Datalog com negação podem não o ser." 28!

Não-monotonicidade! A semântica à custa do operador T P só funciona em programas monotónicos." Algumas conclusões numa iteração, podem deixar de o ser numa iteração posterior possibilidade de não convergência para um ponto fixo. E.g. other_accounts(num) :- not perryridge_account(num).! perryridge_account(n) : account(num, Perryridge, _B).! Na 1ª iteração uma conta doutra sucursal aparece na view other_accounts mas desaparece na 2ª iteração." Pode-se estender a iteração do T P para lidar com negação em programas estratificados (i.e. sem recursão sobre negação)" 29!

Programas Estratificados! Um programa Datalog é estratificado se cada um dos seus predicados pode ser colocado num estrato de tal forma que:" 1. Para cada literal positivo q no corpo duma regra com cabeça p p(..) :-., q(..), o estrato de p é maior ou igual do que o estrato de q" 2. Dada uma regra com um literal negativo no corpo p(..) :-, not q(..), o estrato de p é estritamente maior que o estrato de q" Por outras palavras, recursão e negação não se misturam" 30!

Programas Estratificados! A semântica dum programa estratificado é definida estrato a estrato, começando pelo menor deles (que não tem negação)." Em cada estrato usa-se a iteração T P " Calculado o resultado final da iteração de T P num estrato n, usase para nos livrarmos da negação no estrato n+1:" Seja not q um literal negativo que aparece no corpo duma instância duma regra do estrato n+1:" Se q T P dum estrato anterior apague-se a instância" Caso contrário apague-se o not q do corpo dessa instância" Como os estratos inferiores são calculados antes, os seus factos não mudam. Logo, os resultados de cada estrato são monotónicos, se fixados os resultados dos estratos anteriores." 31!

Operações Relacionais em Datalog! Projecção do atributo account-name de account:" " "query(account-name) : account(account-name, N, B).! Produto cartesiano das relações r 1 e r 2." " "query(x 1, X 2,..., X n, Y 1, Y 2,..., Y m ) : " "r 1 (X 1, X 2,..., X n ), r 2 (Y 1, Y 2,..., Y m ).! União das relações r 1 e r 2."!! query(x 1, X 2,..., X n ) : r 1 (X 1, X 2,..., X n ). " query(x 1, X 2,..., X n ) : r 2 (X 1, X 2,..., X n ). " Selecção de tuplos de r 1 que obedecem a condição cond."!! query(x 1,..., X n ) : r 1 (X 1,..., X n ), cond(x 1,..., X n ). " Diferença entre r 1 e r 2." " "query(x 1, X 2,..., X n ) : r 1 (X 1, X 2,..., X n ), " " not r 2 (X 1, X 2,..., X n ). " 32!