Ricorsione in SQL-99. Introduzione. Idea di base



Похожие документы
Il linguaggio SQL: query innestate

(anno accademico )

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

GERARCHIE RICORSIVE - SQL SERVER 2008

CONCETTO DI ANNIDAMENTO

SQL - Funzioni di gruppo

Istruzioni DML di SQL

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

Elementi di Algebra Relazionale

SQL seconda parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2012/13

DATABASE RELAZIONALI

4 SQL : Interrogazioni nidificate

SQL/OLAP. Estensioni OLAP in SQL

Operazioni sui database

Introduzione ai database relazionali

Gestione della memoria centrale

SQL IL LINGUAGGIO DI INTERROGAZIONE

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Interrogazioni nidificate, commenti

Strutturazione logica dei dati: i file

Funzioni in C. Violetta Lonati

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Basi Di Dati, 09/12/2003

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

Soluzione dell esercizio del 2 Febbraio 2004

Fondamenti di Teoria delle Basi di Dati

Progettaz. e sviluppo Data Base

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Architettura MVC-2: i JavaBeans

Prova Scritta di Basi di Dati

Ricerca Operativa e Logistica

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Traccia di soluzione dell esercizio del 25/1/2005

Il Modello Relazionale

Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale

Il Modello Relazionale

Il linguaggio SQL: viste e tabelle derivate

per immagini guida avanzata Stampare i fogli di lavoro di Excel Geometra Luigi Amato Guida Avanzata per immagini excel

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Capitolo 13. Interrogare una base di dati

Sistemi Operativi mod. B. Sistemi Operativi mod. B A B C A B C P P P P P P < P 1, >

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Sistemi per la gestione di database: MySQL ( )

Albero semantico. Albero che mette in corrispondenza ogni formula con tutte le sue possibili interpretazioni.

Basi di Dati Corso di Laura in Informatica Umanistica

Corso di Informatica

Tipi MULTISET: accesso

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Macchine sequenziali

PL/SQL PL/SQL. Ordine degli elementi dei triggers di Oracle. Differenze nei triggers. Versione dei trigger e PSM di Oracle

Appunti di informatica. Lezione 2 anno accademico Mario Verdicchio

b i 1,1,1 1,1,1 0,1,2 0,3,4

Macchine a stati finiti G. MARSELLA UNIVERSITÀ DEL SALENTO

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Corrispondenze e funzioni

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

13. Campi vettoriali

Definizione di domini

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo

Le query di raggruppamento

Dati relazionali e XML

Linguaggi. Claudio Sacerdoti Coen 11/04/ : Semantica della logica del prim ordine. Universitá di Bologna

Si formulino le seguenti interrogazioni tramite il linguaggio SQL:

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente

Il seguente esempio ha lo scopo di illustrare i 3 tipi di relazione 1:1,1:N,N:N. Tabella Conto: Tabella Conto:

Lezione 8. La macchina universale

( x) ( x) 0. Equazioni irrazionali

Organizzazione degli archivi

Macchine a stati finiti. Sommario. Sommario. M. Favalli. 5th June 2007

STRUTTURE NON LINEARI

Luigi Piroddi

Attributi e domini. A per {A}; XY per X Y (pertanto A 1 A 2 A 3 denota

LE FUNZIONI A DUE VARIABILI

Sistema operativo: Gestione della memoria

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

ALGEBRA RELAZIONALE RIEPILOGO

9. Urti e conservazione della quantità di moto.

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Dimensione di uno Spazio vettoriale

SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

User Tools: DataBase Manager

Corso di Basi di Dati A.A. 2014/2015

Esercizio data base "Biblioteca"

Транскрипт:

Ricorsione in SQL-99 Introduzione In SQL2 non è possibile definire interrogazioni che facciano uso della ricorsione Esempio Voli(lineaAerea, da, a, parte, arriva) non è possibile esprimere l interrogazione che ritrova tutte le città raggiungibili l una dall altra, con un numero arbitrario di tappe intermedie per risolvere queste interrogazioni con SQL2, è necessario utilizzare SQL da programma in SQL-99 è stata aggiunta la possibilità di esprimere interrogazioni ricorsive Idea di base Base teorica: basi di dati deduttive Uso regole logiche eventualmente ricorsive per definire il contenuto delle relazioni i predicati rappresentano le relazioni le variabili rappresentano attributi la virgola rappresenta AND (join) Definizioni multiple per la stessa relazione rappresentano un OR (unione) 1

Esempio Relazione estensionale Voli(lineaAerea, da, a, parte, arriva) Voli e memorizzata su disco Relazione intensionale 1. Raggiunge(da,a) Voli(lineaAerea, da, a, parte, arriva) 2. Raggiunge(da,a) Voli(lineaAerea, da, citta1, parte, arriva), Raggiunge(citta1,a) Raggiunge è una vista, cioè una relazione intensionale, la cui definizione dipende da se stessa e dalla relazione Voli Ricorsione Esempio (continua) Raggiunge e definita dall unione di due interrogazioni 1. Proiezione (da,a) da Voli R1= da,a (Voli) 2. (i) Join tra Voli e Raggiunge sulla base del campo citta1, che rappresenta una citta intermedia (ricorsione) e (ii) proiezione su (da,a) R2 = da,a (Voli x a = da Raggiunge) 3. Raggiunge = R1 U R2 Una volta definita, la relazione intensionale Raggiunge puo essere utilizzata nel contesto di una interrogazione SQL-99 - comando Supporta il comando per definire relazioni intensionali le relazioni intensionali definite con il comando non diventano parte dello schema ma rappresentano solo dichiarazioni di relazioni da utilizzare nel contesto dell interrogazione l interrogazione può poi essere usata in un qualunque contesto in cui sia possibile utilizzare un interrogazione SQL 2

SQL-99 - comando R 1 AS <definizione di R 1 >,... R n AS <definizione di R n >, Definizione <interrogazione che coinvolge R 1,, R n > Uso SQL-99 - comando ogni dichiarazione può essere ricorsiva e le relazioni possono essere mutuamente ricorsiva ogni relazione coinvolta in una ricorsione deve essere preceduta dalla parola chiave RECURSIVE la definizione per la relazione R i consiste in parola chiave opzionale RECURSIVE il nome della relazione che si sta definendo parola chiave AS interrogazione che definisce R i e può fare riferimento a R 1,, R i-1 l interrogazione finale che può far riferimento a tutte le relazioni definire in precedenza Esempio (continua) predicato Raggiunge (lineare) RECURSIVE Raggiunge(da,a) AS (SELECT da,a FROM Voli) UNION (SELECT R1.da, R2.a FROM Voli AS R1, Raggiunge AS R2 WHERE R1.a = R2.da) SELECT * FROM Raggiunge; Definizione Uso 3

Esempio (continua) predicato Raggiunge (lineare), definizione alternativa Coppie AS SELECT da,a FROM Voli, RECURSIVE Raggiunge(da,a) AS Coppie UNION (SELECT Coppie.da, Raggiunge.a FROM Coppie, Raggiunge WHERE Coppie.a = Raggiunge.da) SELECT * FROM Raggiunge; SQL-99 - restrizione la ricorsione deve essere lineare nella definizione di una relazione R, R può comparire una sola volta Esempio ricorsione non lineare Relazione estensionale Voli(lineaAerea, da, a, parte, arriva) Relazione intensionale 1. Raggiunge(da,a) Voli(lineaAerea, da, a, parte, arriva) 2. Raggiunge(da,a) Raggiunge(da, citta1), Raggiunge(citta1,a) 4

Esempio ricorsione non lineare (non corretto in SQL-99) predicato Raggiunge non lineare RECURSIVE Raggiunge(da,a) AS (SELECT da,a FROM Voli) UNION (SELECT R1.da, R2.a FROM Raggiunge AS R1, Raggiunge AS R2 WHERE R1.a = R2.da) SELECT * FROM Raggiunge; SQL-99 - comando le definizioni all'interno del comando sono disponibili solo all'interno del comando e non possono essere usate al di fuori di questo tali tabelle sono comunque create e memorizzate temporaneamente (per tutta la durata del comando) nel comando si possono definire viste invece che tabelle la differenza sintattica è che si usa la parola chiave VIEW nella definizione della relazione Esempio VIEW Coppie AS SELECT da, a FROM Voli se si definisce Coppie come vista, tale relazione non viene effettivamente generata, ma il suo uso nella costruzione di Raggiunge viene sostituito dall'uso delle componenti dalle tuple di Voli 5

SQL-99 - semantica La semantica delle interrogazioni ricorsive è definita mediante la nozione di punto fisso si costruisce una sequenza R i di relazioni tali che: R 0 è la relazione vuota R i, 1 i, viene ottenuta applicando la definizione della relazione a R i-1 quando, per un certo i, si ha che R i = R i-1 ci si ferma e tale relazione è il risultato dell'interrogazione Esempio Determinare i cammini di un grafo dati gli archi Supponiamo di partire da una relazione Arco(da,a) Cammino(da,a) Arco(da,a) Cammino(da,a) Arco (da,nodo), Cammino(nodo,a) RECURSIVE Cammino(da,a) AS (SELECT da,a FROM Arco) UNION (SELECT R1.da, R2.a FROM Arco AS R1, Cammino AS R2 WHERE R1.a = R2.da); SELECT * FROM Cammino; Esempio (continua) Arco Cammino 0 = { }; Cammino 1 = 6

Esempio - semantica Cammino 2 = Cammino 1 Cammino 3 = Cammino 2 Cammino 4 = Cammino 3 punto fisso e risultato Ricorsione e negazione In alcuni casi è necessario utilizzare la negazione nella definizione di un predicato ricorsivo EXCEPT, INTERSECT NOT IN, NOT EXISTS in presenza di ricorsione, questo può però dare luogo a problemi nel definire la semantica Esempio errato P(X) R(X), NOT Q(X) Q(X) R(X), NOT P(X) P = R - Q Q = R P RECURSIVE P(X) AS (SELECT * FROM R) EXCEPT (SELECT * FROM Q), RECURSIVE Q(X) AS (SELECT * FROM R) EXCEPT (SELECT * FROM P) SELECT * FROM P; 7

Esempio errato (continua) se R contiene solo la tupla 0, l'interrogazione ha due possibili risposte: {R(0), P(0)} {R(0), Q(0)} ma non c è modo di scegliere tra le due al contrario, SQL-99 vuole garantire una semantica deterministica alle interrogazioni Esempio corretto Non sempre l uso di costrutti negativi porta al non determinismo Si vogliono determinare le città: raggiungibili una dall altra anche in più voli della United Airlines (UA) non raggiungibili una dall altra anche in più voli della American Airlines (AA) In questo esempio la negazione e utilizzata nell interrogazione finale e non interviene nella ricorsione Esempio corretto (continua) Triple AS SELECT lineaaerea, da, a FROM Voli, RECURSIVE Raggiunge(lineaAerea,da,a) AS Triple UNION (SELECT Triple.lineaAerea, Triple.da, Raggiunge.a FROM Triple, Raggiunge WHERE Triple.a = Raggiunge.da AND Triple.lineaAerea = Raggiunge.lineaAerea) (SELECT da,a FROM Raggiunge WHERE lineaaerea = 'UA') EXCEPT (SELECT da,a FROM Raggiunge WHERE lineaaerea = 'AA'); 8

Esempio corretto (continua) Esempio corretto (continua) La prima sottointerrogazione restituisce le seguenti coppie la seconda sottointerrogazione restituisce le seguenti coppie Esempio corretto (continua) Il risultato è la differenza tra questi insiemi di coppie 9

Stratificazione Per evitare i problemi dovuti all'uso della ricorsione attraverso la negazione, ci si restringe alla ricorsione in cui la negazione è stratificata la nozione di negazione stratificata permette di limitare l uso della ricorsione a interrogazioni la cui semantica è ben definita quando la negazione è stratificata esiste un algoritmo per calcolare un particolare minimo punto fisso, che corrisponde al contenuto informativo "intuitivo" Stratificazione - grafo Grafo i cui nodi corrispondono alle relazioni definite nella clausola arco dal nodo A al nodo B etichettato da - se nella definizione di A compare B negato arco dal nodo A al nodo B se nella definizione di A compare B non-negato se il grafo ha un ciclo che contiene uno o più archi negativi la ricorsione non è stratificata, altrimenti la ricorsione è stratificato Esempio negazione non stratificata P(X) R(X), NOT Q(X) Q(X) R(X), NOT P(X) P = R - Q Q = R - P P - R Negazione non stratificata - Q 10

Stratificazione Se la ricorsione e stratificata, i predicati intensionali possono essere raggruppati in strati lo strato di un predicato A è il più grande numero di archi negativi su un cammino che comincia da A In questo caso, e possibile calcolare il contenuto delle relazioni in accordo alla semantica di punto fisso nell'ordine dei loro strati, partendo dal più basso Esempio negazione stratificata P(X) R(X), NOT Q(X) Q(X) R(X), T(X) T(X) Q(X), NOT S(X) T(X) R(X) P - R Q T - S P = R Q Q = R X T T = (Q S) U R Non ci sono cicli con archi negativi quindi e stratificato Esempio (continua) R 0 2 P - Q 1 Lo strato dei predicati estensionali e sempre 0 T 1 - S 0 11

Esempio (continua) P = R Q Q = R X T T = (Q - S) U R Strato 0: R = {0,1}, S = {1} Strato 1: applico algoritmo punto fisso per calcolare la semantica dei predicati con strato pari a 1 (T e Q) Tale semantica dipendera solo da predicati con strato pari a 0 (semantica gia calcolata), che vengono considerati come estensionali, utilizzando la loro semantica come estensione Risultato: T 0 = {}, Q 0 = {} T 1 = {0,1}, Q 1 = {} T 2 = {0,1}, Q 2 = {0,1} T 3 = {0,1}, Q 3 = {0,1} punto fisso Esempio (continua) P = R Q Q = R X T T = (Q - S) U R Strato 2: applico algoritmo punto fisso per calcolare la semantica dei predicati con strato pari a 2 (P) Tale semantica dipendera solo da predicati con strato pari a 0 oppure 1 (semantica gia calcolata), che vengono considerati come estensionali, utilizzando la loro semantica come estensione Risultato: P 0 = {} P 1 = {} punto fisso Risultato: R = {0,1}, S= {1}, T = {0,1}, Q = {0,1}, P = {} Stratificazione Si noti che la query che utilizza le relazioni definite nella clausola non puo mai generare problemi di stratificazione Assumendo di assegnarle un nome e di inserire il nodo corrispondente nel grafo Ci possono essere archi uscenti da tale nodo, dati dalle relazioni utilizzate per la sua definizione Non ci possono essere archi entranti Quindi non puo esistere un ciclo che contiene il nodo che rappresenta l interrogazione finale 12

Stratificazione In SQL-99 viene richiesta la stratificazione anche rispetto ad altri costrutti non monotoni, ad esempio aggregati Vale tutto quanto detto per la negazione, in questo caso un arco negato rappresenta una funzione di aggregazione Esempio RECURSIVE P(X) AS (SELECT * FROM R) UNION (SELECT * FROM Q), RECURSIVE Q(X) AS SELECT SUM(X) FROM P SELECT * FROM P; Esempio (continua) R = {12, 34} P 0 = { }, Q 0 = { } P 1 = {12, 34}, Q 1 = {46} P 2 = {12, 34, 46}, Q 2 = {92} P 3 = {12, 34, 92}, Q 3 = {138} Non si raggiunge mai un punto fisso 13

Esempio (continua) P R - Q Comando in Oracle Si puo utilizzare, con la stessa sintassi vista per SQL-99 Non e pero possibile definire relazioni ricorsive Serve quindi solo per definire delle relazioni da utilizzare eventualmente piu volte nel contesto di una interrogazione 14