SQL 3 Recursão em SQL AULA 7 PGC Sistemas de Banco de Dados

Slides:



Advertisements
Apresentações semelhantes
SISTEMAS DE INFORMAÇÃO BANCO DE DADOS REDES DE COMPUTADORES
Advertisements

O Comando DROP INDEX Para eliminar um índice definido sobre uma tabela, utilize: Drop Index on ; Ex: No Access: Drop Index X on.
AULA 5 PGC Sistemas de Banco de Dados Profa. Sandra de Amo
Otimização de Consultas em SQL Estimativas de Custos
Álgebra Relacional Marcelo Mendes Manaus
Banco de Dados Prof. Antonio.
SQL Avançado Continuação
Eveline Alonso Veloso PUC-MINAS
Banco de Dados Bruno Rafael de Oliveira Rodrigues.
Prof. Bruno Rafael de Oliveira Rodrigues
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone: 9531 – 7555.
Linguagem de Consultas com suporte a Preferências AULA 10 PPG SISTEMAS DE BANCO DE DADOS – Pós-graduação em CC - UFU.
Modelos de Preferências em Inteligência Artificial CP-Nets
Otimização de Consultas em SQL Parte I - Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 19 Profa. Sandra de Amo Programa.
Forma Normal de Chomsky
Cálculo Relacional Datalog não-recursivo
Gerenciamento de Banco de Dados
SQL Exercícios de Revisão
Algoritmos para Seleção Simples AULA 16 Profa. Sandra de Amo GBC053 – BCC
Algoritmos para Seleção com Condições Gerais AULA 17 Profa. Sandra de Amo GBC053 – BCC
Algoritmos para Seleção e Projeção
SQL – Comandos de Agregação
Exercicio – Revisão Método da Resolução e Ponto Fixo
Algoritmos para Operações de Conjuntos AULA 19 Profa. Sandra de Amo GBC053 – BCC
Exercícios para entregar 3 Consultas Recursivas em SQL Profa. Sandra de Amo PPG-CC 2012.
Mais consultas recursivas... Consultas Recursivas em SQL Profa. Sandra de Amo PPG-CC 2012.
Algebra relacional nomeada e não-nomeada
Datalog Recursivo AULA 6 PGC Sistemas de Banco de Dados
Algoritmos para Projeção e Operações de Conjuntos AULA 22 Profa. Sandra de Amo GBC053 – BCC
Otimização de Consultas em SQL Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 24 Profa. Sandra de Amo GBC053 – BCC
Subconsultas ou Consultas Aninhadas
SQL – Consultas Básicas
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
SQL – DML Consulta a dados de uma tabela
Operadores Especiais da SQL
Prof. Carlos H. Marcondes
Banco de dados Profª Kelly Medeiros.
Alocação de Registos (exercício) Compiladores João M. P. Cardoso.
Equipe de monitoria Aula prática 2. Apresentação do caso de estudo Conceitual Lógico Algumas informações iniciais Consultas e exercícios Surpresa... =)
Inteligência Artificial
Monitoria GDI Aula Prática
Otimização de Consultas em SQL Planos Alternativos AULA 24 Profa. Sandra de Amo GBC053 – BCC
SQL Álvaro Vinícius de Souza Coêlho
Design Patterns / Acesso ao banco de dados (java.sql)
Otimização de Consultas em SQL Planos de Execução
Capítulo 3: SQL Korth • Silberschatz • Sundarshan.
Desenvolvendo um script SQL
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
Banco de dados.
Conceitos Programas Programação Linguagens de Programação SQL.
Treinamento PHP Módulo 2 PHP Avançado Waelson Negreiros waelson.com.br “Está conosco o Senhor dos Exércitos”
Comandos SQL.
REVISÃO Comandos SQL - DML SELECT * FROM ?.
Campus de Caraguatatuba Aula 2: Introdução a Tecnologia de BD
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
©Prof. Lineu MialaretAula 14e - 1Banco de Dados I Banco de Dados I – BD I Prof. Lineu Mialaret Aula 14e: Exercícios em SQL (1) Instituto Federal de Educação,
Banco de Dados Dedutivos
AULA DE DÚVIDAS 9 de Abril de Especialização  Simplifica-se quando:  especialização é disjunta e  especialização é total e  não há relações.
Banco de Dados I I Comandos SQL
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Prof. Rebecca Arambasic AGBD LPBD Pesquisa avançada UNION / INTERSECT / EXCEPT Aula 1 / 2010.
Visões Visão tabela derivada a partir das tabelas do BD tabela virtual
Sumário 1 SQL Embutida 2 Processamento de Consultas
Aula 09: Comando SELECT: Ligações entre tabelas e Subconsultas
Daniel Paulo SQL Módulo I Daniel Paulo
UCSal – Bacharelado em Informática
Algoritmos para Seleção AULA 23 Profa. Sandra de Amo GBC053 – BCC.
Banco de Dados Introdução à Linguagem SQL – Junção Manipulação com 3 Tabelas ou + em relacionamentos n/1 Esta aula é baseada em material produzido pelo.
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
Prática de Banco de Dados Créditos: Prof. Jefferson Silva Adaptações: Prof. Nécio de Lima Veras.
Transcrição da apresentação:

SQL 3 Recursão em SQL AULA 7 PGC 107 - Sistemas de Banco de Dados Profa. Sandra de Amo Pós-graduação em Ciência da Computação – UFU 2012-2

Recursão em SQL 3 Definição de relações intensionais: WITH R1 AS < regras que definem R1 > , RECURSIVE R2 AS <regras que definem R2> < consulta SQL envolvendo R > R = predicado intensional que define a consulta

Recursão em SQL3 A cláusula WITH tem a seguinte forma: A palavra chave WITH Uma ou mais definições de relações, separadas por vírgulas Se a relação sendo definida é recursiva, preceder a definição pela palavra chave RECURSIVE. Nome da relação sendo definida Palavra chave AS Uma consulta final (não ligada por vírgula com a precedente), que pode se referir às relações definidas anteriormente, e que forma o resultado da consulta especificada pela cláusula WITH

Exemplo WITH RECURSIVE Conecta(O,D) AS (SELECT O, D FROM Voos) UNION (SELECT R1.O, R2.D FROM Conecta AS R1, Conecta AS R2 WHERE R1.D = R2.O) SELECT * FROM Conecta WHERE O = ‘SP’ OR D = ‘SP’

Recursão Linear Uma única ocorrência na cláusula FROM da definição da relação recursiva WITH RECURSIVE R AS (.... SELECT FROM R...) Alguns SGBDs não suportam consultas com recursão não-linear

Exemplo (Corrigindo o código do exemplo anterior) WITH RECURSIVE Conecta(O,D) AS (SELECT O, D FROM Voos) UNION (SELECT Voos.O, Conecta.D FROM Voos, Conecta WHERE Voos.D = Conecta.O) SELECT * FROM Conecta WHERE O = ‘SP’ OR D = ‘SP’

Exemplo (Corrigindo o código do exemplo anterior) WITH Pairs AS SELECT O,D FROM Voos, RECURSIVE Conecta(O,D) AS Pairs UNION (SELECT Pairs.O, Conecta.D FROM Pairs, Conecta WHERE Pairs.D = Conecta.O ) SELECT * FROM Conecta WHERE O = ‘SP’ OR D = ‘SP’

Negação estratificada em SQL3 Definições de relações com dependência negativa devem ser estratificadas Exemplo Dê os pares de cidades (x,y) para as quais é possível ir de x para y com a companhia UA, mas não com a companhia AA.

Exemplo With Triples AS SELECT C, O, D FROM Voos, RECURSIVE Conecta(C,O,D) AS Triples Union (Select Triples. C, Triples.O, Conecta.D FROM Triples, Conecta WHERE Triples.D = Conecta.O AND Triples.C = Conecta.C) (SELECT O, D FROM Conecta WHERE C = ‘UA’) EXCEPT (SELECT O, D FROM Conecta WHERE C = ‘AA’)

Consulta incorreta (não estratificada ! ) WITH RECURSIVE P(x) AS (SELECT * FROM R) EXCEPT (SELECT * FROM Q), RECURSIVE Q(x) AS (SELECT * FROM P) SELECT * FROM P

Exercícios Encontrar as cidades para as quais é possível ir, saindo de SP e voando pela mesma companhia aérea. Quais os horários de partida de voos da American Airlines, saindo de São Paulo e chegando em Miami ? É possível ir para Paris, saindo de São Paulo, sem passar por nenhum voo da TAM ? Forneça os horários de partida e chegada nestes casos. É possível ir para Paris, saindo de São Paulo, passando por algum voo da TAM ? Forneça os horários de partida e chegada nestes casos. Para Casa: Quais os roteiros com menor número de conexões entre São Paulo e Paris ?

Outras consultas incorretas (não estratificadas) WITH RECURSIVE P(x) AS (SELECT x FROM R WHERE x NOT IN Q ), RECURSIVE Q(x) AS (SELECT x FROM R WHERE x NOT IN P ) SELECT * FROM P

Por que consultas não estratificadas são problemáticas ? Resultado da consulta é ambíguo WITH RECURSIVE P(x) AS (SELECT x FROM R WHERE x NOT IN Q ), RECURSIVE Q(x) AS (SELECT x FROM R WHERE x NOT IN P ) SELECT * FROM P Relações extensionais = R Relações intencionais = P, Q Cálculo do ponto fixo: T0 = {R(a), R(b)} T1 = {P(a), P(b), Q(a), Q(b)} T2 = { } T3 = {P(a), P(b), Q(a), Q(b)} T4 = { } ......

Problemas com a agregação WITH RECURSIVE P(x) AS (SELECT * FROM R) UNION (SELECT * FROM Q), RECURSIVE Q(x) AS (SELECT SUM(x) FROM P) SELECT * FROM P P(x) :- R(x) P(x) :- Q(x) Q(x) :- R(x) Q(x) :- P(x) Estratificável Porém fazendo a agregação sobre P, ponto fixo não converge !

Problemas com a agregação T0 = {R(12), R(34)} T1 = T0 U{P(12),P(34)} T2 = T0 U {P(12),P(34),Q(46)} T3 = T0 U {P(12),P(34),P(46),Q(46)} T4 = T0 U {P(12),P(34),P(46),Q(92)}, T5 = T0 U {P(12),P(34),P(92),Q(92)} .....

Portanto Em SQL3, agregação só é permitida na definição de relações, se a agregação é feita sobre uma relação já completamente definida no estrato precedente.

Diferenças entre consultas incorretas Recursão não linear : só uma questão de implementação – pode ser implementada em alguns SGBDs Consulta não-estratificada: problema conceitual, resposta não está bem definida Não é possivel de ser implementada.

Observações finais Por que no cálculo do ponto fixo, a cada iteração os valores das relações aparecendo no corpo das regras são sempre aqueles definidos na iteração precedente ? O que aconteceria se os valores das relações do corpo das regras fossem sendo atualizados durante uma mesma iteração ?

Exemplo Cálculo do ponto fixo dependeria da ordem das regras: WITH RECURSIVE P(x) AS (SELECT x FROM R WHERE x NOT IN Q ), RECURSIVE Q(x) AS (SELECT x FROM R WHERE x NOT IN P ) SELECT * FROM P Cálculo do ponto fixo dependeria da ordem das regras: Caso 1 : T0 = {R(a), R(b)} T1 = {P(a), P(b)} T2 = {P(a), P(b)} Caso 2 : T1 = {Q(a), Q(b)} T2 = {Q(a), Q(b)}

Exercício Cálculo do ponto fixo dependeria da ordem das regras: WITH RECURSIVE P(x) AS (SELECT * FROM R) UNION (SELECT * FROM Q), RECURSIVE Q(x) AS ((SELECT SUM(x) FROM P) SELECT * FROM P Cálculo do ponto fixo dependeria da ordem das regras: Caso 1 : T0 = {R(12), R(34)} T1 = {P(12), P(34),Q(46)} T2 = {P(12),P(34),P(46),Q(92)},.... Caso 2 : T1 = {P(12),P(34)} T2 = {Q(46), P(12),P(34),P(46)} T3 = {Q(92), P(12),P(34),P(92)},...