Architettura standard (ANSI/SPARC) a tre livelli per DBMS. Viste (relazioni derivate) Viste virtuali e materializzate. Viste materializzate

Documenti analoghi
Algebra e Calcolo relazionale. Algebra e calcolo relazionale (parte 2)

Basi di dati ALGEBRA E CALCOLO RELAZIONALE

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, ALGEBRA E CALCOLO RELAZIONALE

Linguaggi per basi di dati. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,

Linguaggi per basi di dati. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw -Hill, ALGEBRA E CALCOLO RELAZIONALE

E. Giunchiglia Basi di dati 1 (trasparenze basate su Atzeni, Ceri, Paraboschi, Torlone: Basi di dati, Capitolo 3)

Fondamenti di Teoria delle Basi di Dati

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a

Linguaggi per basi di dati. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,

Interrogazioni (Query) Esempi. Esempi. Esempi

Equivalenze di espressioni. Equivalenze. Equivalenze. Atomizzazione delle selezioni ( F 2 (E)) Idempotenza delle proiezioni

Corso di Informatica

Un altro operatore algebrico derivato: divisione

Join. il Join è l'operatore più interessante dell'algebra relazionale permette di correlare dati in relazioni diverse 20/03/2006 1

Fondamenti di Teoria delle Basi di Dati

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica I Modulo Basi di dati a.a

Linguaggi per basi di dati. Interrogazione delle basi di dati. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

Algebra con valori nulli

Linguaggi per basi di da6. Linguaggi di interrogazione. Algebra relazionale. Operatori dell'algebra relazionale

ALGEBRA RELAZIONALE Esercizi con RelaX. 21/10/2017 Atzeni - Algebra relazionale - RelaX 1

Dichiarativi : specificano le proprietà del risultato ("che cosa") Procedurali specificano le modalità di generazione del risultato ("come")

Linguaggi per basi di dati

Basi di dati: esercitazione. Paolo Atzeni 10/05/2006

Esempi. Supervisione Impiegato Capo /10/2017 Atzeni-Ceri-Fraternali-Paraboschi-Torlone Basi di dati, Capitolo 3

Il theta-join, espresso come prodotto cartesiano seguito da una selezione, è il tipo di join operativamente più generale. Infatti:

Fa riferimento ad una famiglia di linguaggi dichiarativi, basati sul calcolo dei predicati del primo ordine

Viste (relazioni derivate)

Basi di dati. Modello relazionale dei dati. Prof.ssa Rosalba Giugno

Calcolo relazionale. Dr. C. d'amat

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a

Linguaggi per basi di dati e SQL

Linguaggi per basi di dati. Linguaggi per basi di dati e SQL. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica I Modulo Basi di dati a.a

Fondamenti di Teoria delle Basi di Dati

3 Algebra Relazionale

Linguaggi per basi di dati ALGEBRA RELAZIONALE. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

Viste come strumenti di programmazione

Parte III L algebra relazionale

Modulo 2 Data Base 3

Parte III. L algebra relazionale

Informatica II Basi di Dati (07/08) Parte 2. 4 Accesso ai dati di un DB. Accesso ai dati di un DB. Accesso ai dati di un DB

Algebra Relazionale e Calcolo Relazionale. L. Vigliano

Il linguaggio SQL: le viste

Join esplicito. SELECT con join esplicito, sintassi. Ulteriore estensione: join naturale (meno diffuso) Outer join. Join esterno: "outer join"

Aggiornamenti e Interrogazioni

Vincoli di Integrità Referenziale

Correttezza. Esempi di TRC. AR è esprimibile tramite TRC. AR è esprimibile tramite TRC. AR è esprimibile tramite TRC

Operatori derivati dagli insiemi. Algebra Relazionale. Unione. Operatori derivati dagli insiemi

Algebra Relazionale. Dario Allegra Data Management 1 1

Modulo 2 Data Base 2

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Linguaggi di interrogazione

Basi di dati Algebra relazionale Figure ed esempi

Operatori derivati dagli insiemi. Algebra Relazionale. Unione. Operatori derivati dagli insiemi

Operatori derivati dagli insiemi

Fondamenti di Teoria delle Basi di Dati

Basi di dati. Giuseppe De Giacomo. Dipartimento di Informatica e Sistemistica Antonio Ruberti SAPIENZA Università di Roma

Università di Roma La Sapienza Laurea in Ingegneria Informatica. Basi di Dati. Anno Accademico 2003/2004 Canale M-Z.

Linguaggi per Basi di Dati - 1. Algebra Relazionale. Algebra Relazionale. Linguaggi per Basi di Dati - 2. Operatori Insiemistici.

Structured Query Language

Esercitazioni Basi di dati e web Dario Facchinetti

SQL. SQL: "storia. Sviluppato nella metà degli anni settanta (1974) presso il laboratorio di ricerca IBM di S.Josè. Dal 1983 ca. "standard di fatto"

View-based query answering

Linguaggi di interrogazione per basi di dati relazionali

Basi di dati. Maurizio Lenzerini Dipartimento di Ingegneria Informatica Automatica e Gestionale Antonio Ruberti Università di Roma La Sapienza

Progettazione Concettuale/1

SQL: "storia" 31/05/2006 2

Basi di dati Maurizio Lenzerini Dipartimento di Informatica e Sistemistica Antonio Ruberti Università di Roma La Sapienza

Basi di dati. Linguaggi di interrogazione

Prefazione. Parte Prima Basi di dati relazionali: modello e linguaggi 15

Logica booleana. Bogdan Maris ( )

L algebra relazionale in RA

Logica: materiale didattico

Linguaggi di interrogazione per basi di dati geografiche

Interrogazioni complesse. SQL avanzato 1

Tipi di operatori. Gli operatori dell algebra relazionale sono classificabili nelle seguenti categorie:

(anno accademico )

IL MODELLO RELAZIONALE

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Algebra relazionale: operazioni

Algebra Relazionale.

SQL Esempi. 24/10-7/11/2016 Basi di dati - SQL 1

Fondamenti di Informatica 2

Calcolo Relazionale Basi di dati e sistemi informativi 1. Calcolo Relazionale. Angelo Montanari

Logica per la Programmazione

Progettazione logica 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/2013

Corso sul linguaggio SQL

Modello Relazionale. Schemi. Schemi. Schemi. In ogni base di dati si possono distinguere: Es. (relazioni INSEGNAMENTO e MANIFESTO)

Prof. Alberto Postiglione Dipartimento di Scienze della Comunicazione Università degli Studi di Salerno

Logica per la Programmazione

Prerequisiti Matematici

Basi di dati - Laboratorio

Introduzione. Ricorsione in SQL-99. Esempio. Idea di base. Esempio (continua) SQL-99 - comando WITH

Algebra Relazionale.

Logica per la Programmazione

Il modello relazionale

DOCENTE PROF. ALBERTO BELUSSI. Anno accademico 2010/11

SQL Esempi /10/2017 Basi di dati - SQL 1

Transcript:

Viste (relazioni derivate) Rappresentazioni diverse per gli stessi dati (schema esterno) Relazioni derivate: relazioni il cui contenuto è funzione del contenuto di altre relazioni (definito per mezzo di interrogazioni) Relazioni di base: contenuto autonomo Le relazioni derivate possono essere definite su altre derivate, ma 1 Architettura standard (ANSI/SPARC) a tre livelli per DBMS Schema esterno Schema esterno Schema logico Schema interno BD Schema esterno 2 Viste virtuali e materializzate Due tipi di relazioni derivate: viste materializzate relazioni virtuali (o viste) Viste materializzate relazioni derivate memorizzate nella base di dati vantaggi: immediatamente disponibili per le interrogazioni svantaggi: ridondanti appesantiscono gli aggiornamenti non sono supportate dai DBMS 3 4 Viste virtuali Viste, esempio relazioni virtuali (o viste): sono supportate dai DBMS una interrogazione su una vista viene eseguita "ricalcolando" la vista (o quasi) Afferenza Impiegato Reparto Direzione A Reparto Capo B A Mori Bianchi B B Bianchi B B una vista: Supervisione = PROJ Impiegato, Capo (Afferenza JOIN Direzione) 5 6 1

Interrogazioni sulle viste Sono eseguite sostituendo alla vista la sua definizione: SEL Capo='Leoni' (Supervisione) viene eseguita come SEL Capo='Leoni' ( PROJ Impiegato, Capo (Afferenza JOIN Direzione)) Viste, motivazioni Schema esterno: ogni vede solo ciò che gli interessa e nel modo in cui gli interessa, senza essere distratto dal resto ciò che e' autorizzato a vedere (autorizzazioni) Strumento di programmazione: si può semplificare la scrittura di interrogazioni: espressioni complesse e sottoespressioni ripetute Utilizzo di programmi esistenti su schemi ristrutturati Invece: L'utilizzo di viste non influisce sull'efficienza delle interrogazioni 7 8 Viste come strumento di programmazione Trovare gli impiegati che hanno lo stesso capo di Senza vista: PROJ Impiegato (Afferenza JOIN Direzione) JOIN REN ImpR,RepR Imp,Reparto ( SEL Impiegato='' (Afferenza JOIN Direzione)) Con la vista: PROJ Impiegato (Supervisione) JOIN REN ImpR,RepR Imp,Reparto ( SEL Impiegato='' (Supervisione)) 9 Viste e aggiornamenti, attenzione Afferenza Direzione Impiegato Reparto Reparto Capo A A Mori B B Verdi A BC Supervisione Impiegato Verdi Vogliamo inserire, nella vista, il fatto che ha come capo ; oppure che Belli ha come capo Falchi; come facciamo? Capo Mori Mori 10 Viste e aggiornamenti "Aggiornare una vista": modificare le relazioni di base in modo che la vista, "ricalcolata" rispecchi l'aggiornamento L'aggiornamento sulle relazioni di base corrispondente a quello specificato sulla vista deve essere univoco In generale però non è univoco! Ben pochi aggionamenti sono ammissibili sulle viste Calcolo relazionale Una famiglia di linguaggi dichiarativi, basati sul calcolo dei predicati del primo ordine Diverse versioni: calcolo relazionale su domini calcolo su ennuple con dichiarazioni di range 11 12 2

Calcolo su domini, sintassi e semantica Le espressioni hanno la forma: { A 1 : x 1,, A k : x k f } f e' una formula (con connettivi booleani e quantificatori) A 1 : x 1,, A k : x k "target list": A 1,, A k attributi distinti (anche non nella base di dati) x 1,, x k variabili distinte Semantica: il risultato e' una relazione su A 1,, A k che contiene ennuple di valori per x 1,, x k che rendono vera la formula f Commenti Differenze rispetto al calcolo dei predicati (per chi lo conosce): simboli di predicato relazioni nella base di dati predicati "standard" predefiniti (=, >,...) non ci sono "simboli di funzione" interessano (quasi) solo "formule aperte" utilizziamo notazione non posizionale 13 14 Base di dati per gli esempi Esempio 0a Impiegati(Matricola,Nome, Età, Stipendio) Supervisione(Capo, Impiegato) Trovare matricola, nome, età e stipendio degli impiegati che guadagnano più di 40 milioni SEL Stipendio>40 (Impiegati) { Matricola: m, Nome: n, Età: e, Stipendio: s Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) s > 40 } 15 16 Esempio 0b Esempio 1 Trovare matricola, nome ed età di tutti gli impiegati PROJ Matricola, Nome, Età (Impiegati) s (Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)} } Trovare matricola, nome ed età degli impiegati che guadagnano più di 40 milioni PROJ Matricola, Nome, Età (SEL Stipendio>40 (Impiegati)) s > 40 } 17 18 3

Esempio 2 Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (Supervisione JOIN Impiegato=Matricola (SEL Stipendio>40 (Impiegati))) { Capo: c Supervisione(Capo:c,Impiegato:m) s > 40 } 19 Esempio 3 Trovare nome e stipendio dei capi degli impiegati che guadagnano più di 40 milioni PROJ NomeC,StipC (REN MatrC,NomeC,StipC,EtàC Matr,Nome,Stip,Età (Impiegati) JOIN MatrC=Capo (Supervisione JOIN Impiegato=Matricola (SEL Stipendio>40 (Impiegati)))) { NomeC: nc, StipC: sc s > 40 Supervisione(Capo:c,Impiegato:m) Impiegati(Matricola:c, Nome:nc, Età:ec, Stipendio: sc) } 20 Esempio 4 Trovare gli impiegati che guadagnano più del rispettivo capo, mostrando matricola, nome e stipendio di ciascuno di essi e del capo PROJ Matr,Nome,Stip,MatrC,NomeC,StipC (SEL Stipendio>StipC (REN MatrC,NomeC,StipC,EtàC Matr,Nome,Stip,Età(Impiegati) JOIN MatrC=Capo (Supervisione JOIN Impiegato=Matricola ( (Impiegati)))) { Matr: m, Nome: n, Stip: s, MatrC: c, NomeC: nc, StipC: sc Supervisione(Capo:c,Impiegato:m) Impiegati(Matricola: c, Nome: nc, Età: ec, Stipendio: sc) s > sc} Esempio 5 Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di 40 milioni. PROJ Matricola,Nome (Impiegati JOIN Matricola=Capo (PROJ Capo (Supervisione) - PROJ Capo (Supervisione JOIN Impiegato=Matricola ( SEL Stipendio 40 (Impiegati)))) {Matricola: c, Nome: n Impiegati(Matricola: c, Nome: n, Età: e, Stipendio: s) Supervisione(Capo:c, Impiegato:m) m'( n'( e'( s'(impiegati(matr: m', Nome: n', Età: e', Stip: s') Supervisione(Capo:c, Impiegato:m') s' 40))))} 21 22 Quantificatori esistenziali o universali? Calcolo su domini, discussione Sono intercambiabili, per le leggi di De Morgan: {Matricola: c, Nome: n Impiegati(Matricola: c, Nome: n, Età: e, Stipendio: s) Supervisione(Capo:c, Impiegato:m) m'( n'( e'( s'(impiegati(matr: m', Nome: n', Età: e', Stip: s') Supervisione(Capo:c, Impiegato:m') s' 40))))} {Matricola: c, Nome: n Impiegati(Matricola: c, Nome: n, Età: e, Stipendio: s) Supervisione(Capo:c, Impiegato:m) m'( n'( e'( s'( (Impiegati(Matr:m', Nome:n', Età:e', Stip:s') Supervisione(Capo:c, Impiegato:m')) s' > 40))))} Pregi: dichiaratività Difetti: "verbosità": tante variabili! espressioni senza senso: { A: x R(A: x) } { A: x, B: y R(A: x) } { A: x, B: y R(A: x) y=y } queste espressioni sono "dipendenti dal dominio" e vorremmo evitarle; nell'algebra espressioni come queste non sono formulabili: l'algebra è indipendente dal dominio 23 24 4

Calcolo e algebra Calcolo e algebra sono "equivalenti" per ogni espressione del calcolo relazionale che sia indipendente dal dominio esiste un'espressione dell'algebra relazionale equivalente a essa per ogni espressione dell'algebra relazionale esiste un'espressione del calcolo relazionale equivalente a essa (e di conseguenza indipendente dal dominio) Calcolo su ennuple con dichiarazioni di range Per superare le limitazioni del calcolo su domini: dobbiamo "ridurre" le variabili; un buon modo: una variabile per ciascuna ennupla far si' che i valori provengano dalla base di dati Il calcolo su ennuple con dichiarazioni di range risponde ad entrambe le esigenze 25 26 Calcolo su ennuple con dichiarazioni di range, sintassi Le espressioni hanno la forma: { TargetList RangeList Formula } RangeList elenca le variabili libere della Formula ognuna con il relativo campo di variabilità (una relazione) TargetList ha elementi del tipo Y: x.z (oppure x.z o anche x.*) Formula ha: atomi di confronto x.a ϑ c, x.a ϑ y.b connettivi quantificatori che associano un range alle variabili x(r)(...) x(r)(...) 27 Esempio 0a Trovare matricola, nome, età e stipendio degli impiegati che guadagnano più di 40 milioni SEL Stipendio>40 (Impiegati) { Matricola: m, Nome: n, Età: e, Stipendio: s s > 40 } { i.* i(impiegati) i.stipendio > 40 } 28 Esempio 0b Trovare matricola, nome ed età di tutti gli impiegati PROJ Matricola, Nome, Età (Impiegati) } { i.(matricola,nome,età) i(impiegati) } Esempio 1 Trovare matricola, nome ed età degli impiegati che guadagnano più di 40 milioni PROJ Matricola, Nome, Età (SEL Stipendio>40 (Impiegati)) s > 40 } { i.(matricola,nome,età) i(impiegati) i.stipendio > 40 } 29 30 5

Esempio 2 Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni { Capo: c Supervisione(Capo:c,Impiegato:m) Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) s > 40 } Esempio 3 Trovare nome e stipendio dei capi degli impiegati che guadagnano più di 40 milioni { NomeC: nc, StipC: sc s > 40 Supervisione(Capo:c,Impiegato:m) Impiegati(Matricola:c, Nome:nc, Età:ec, Stipendio:sc) } { s.capo i(impiegati), s(supervisione) i.matricola=s.impiegato i.stipendio > 40 } 31 { NomeC,StipC: i'.(nome,stip) i'(impiegati), s(supervisione), i(impiegati) i'.matricola=s.capo i.matricola=s.impiegato i.stipendio > 40 } 32 Esempio 4 Esempio 5 Trovare gli impiegati che guadagnano più del rispettivo capo, mostrando matricola, nome e stipendio di ciascuno di essi e del capo { Matr: m, Nome: n, Stip: s, NomeC: nc, StipC: sc Supervisione(Capo:c,Impiegato:m) Impiegati(Matricola: c, Nome: nc, Età: ec, Stipendio: sc) s > sc} { i.(nome,matr,stip), NomeC,MatrC,StipC: i'.(nome,matr,stip) i'(impiegati), s(supervisione), i(impiegati) i'.matricola=s.capo i.matricola=s.impiegato i.stipendio > i'.stipendio } Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di 40 milioni. {Matricola: c, Nome: n Impiegati(Matricola: c, Nome: n, Età: e, Stipendio: s) Supervisione(Capo:c, Impiegato:m) m'( n'( e'( s'(impiegati(matr: m', Nome: n', Età: e', Stip: s') Supervisione(Capo:c, Impiegato:m') s' 40} { i.(matricola, Nome) s(supervisione), i(impiegati) i.matricola=s.capo ( i'(impiegati)( s'(supervisione) (s.capo=s'.capo s'.impiegato=i'.matricola i'.stipendio 40)))} 33 34 Attenzione! Il calcolo su ennuple con dichiarazioni di range non permette di esprimere alcune interrogazioni importanti, in particolare le unioni: R 1 (AB) R 2 (AB) Quale potrebbe essere il range per una variabile? Oppure due variabili? Nota: intersezione e differenza sono esprimibili Per questa ragione SQL (che è basato su questo calcolo) prevede un operatore esplicito di unione, ma non tutte le versioni prevedono intersezione e differenza 35 Calcolo e algebra relazionale: limiti Calcolo e algebra sono sostanzialmente equivalenti: l'insieme di interrogazioni con essi esprimibili è quindi significativo; il concetto è robusto Ci sono però interrogazioni interessanti non esprimibili: calcolo di valori derivati: possiamo solo estrarre valori, non calcolarne di nuovi; calcoli di interesse: a livello di ennupla o di singolo valore (conversioni somme, differenze, etc.) su insiemi di ennuple (somme, medie, etc.) le estensioni sono ragionevoli, le vedremo in SQL interrogazioni inerentemente ricorsive, come la chiusura transitiva 36 6

Chiusura transitiva Chiusura transitiva, come si fa? Supervisione(Impiegato, Capo) Per ogni impiegato, trovare tutti i superiori (cioè il capo, il capo del capo, e cosi' via) Impiegato Capo Mori Falchi Impiegato Superiore Mori Falchi Falchi Nell'esempio, basterebbe il join della relazione con se stessa, previa opportuna ridenominazione Ma: Impiegato Superiore Impiegato Capo Mori Mori Falchi Falchi Falchi Falchi Leoni Leoni Leoni 37 38 Chiusura transitiva, impossibile! Datalog Non esiste in algebra e calcolo relazionale la possibilità di esprimere l'interrogazione che, per ogni relazione binaria, ne calcoli la chiusura transitiva Per ciascuna relazione, è possibile calcolare la chiusura transitiva, ma con un'espressione ogni volta diversa: quanti join servono? non c'è limite! Un linguaggio di programmazione logica per basi di dati derivato dal Prolog Utilizza predicati di due tipi: estensionali: relazioni della base di dati intensionali: corrispondono alle viste Il linguaggio è basato su regole utilizzate per "definire" i predicati estensionali 39 40 Datalog, sintassi Esempio -1 Regole: testa corpo testa è un predicato atomico (intensionale) corpo è una lista (congiunzione) di predicati atomici Le interrogazioni sono specificate per mezzo di predicati atomici (convenzionalmente preceduti da "?") Trovare matricola, nome, età e stipendio degli impiegati che hanno 30 anni { Matricola: m, Nome: n, Età: e, Stipendio: s s = 30 }? Impiegati(Matricola: m, Nome: n, Età: 30, Stipendio: s) 41 42 7

Esempio 0a Esempio 0b Trovare matricola, nome, età e stipendio degli impiegati che guadagnano più di 40 milioni { Matricola: m, Nome: n, Età: e, Stipendio: s s > 40 } Serve un predicato intensionale ImpRicchi(Matricola: m, Nome: n, Età: e, Stipendio: s), s >40? ImpRicchi(Matricola: m, Nome: n, Età: e, Stipendio: s) Trovare matricola, nome ed età di tutti gli impiegati PROJ Matricola, Nome, Età (Impiegati) } InfoPubbliche(Matricola: m, Nome: n, Età: e), s >40? InfoPubbliche(Matricola: m, Nome: n, Età: e) 43 44 Esempio 2 Esempio 5 Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni { Capo: c Supervisione(Capo:c,Impiegato:m) s > 40 } CapiDeiRicchi (Capo:c) ImpRicchi(Matricola: m, Nome: n, Età: e, Stipendio: s), Supervisione (Capo:c,Impiegato:m)? CapiDeiRicchi (Capo:c) Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di 40 milioni. serve la negazione CapiDiNonRicchi (Capo:c) Supervisione (Capo:c,Impiegato:m), Impiegati (Matricola: m, Nome: n, Età: e, Stipendio: s), s 40 CapiSoloDiRicchi (Matricola: c, Nome: n) Impiegati (Matricola: c, Nome: n, Età: e, Stipendio: s), Supervisione (Capo:c,Impiegato:m), not CapiDiNonRicchi (Capo:c)? CapiSoloDiRicchi (Matricola: c, Nome: n) 45 46 Esempio 6 Datalog, semantica Per ogni impiegato, trovare tutti i superiori. Serve la ricorsione Superiore (Impiegato: i, SuperCapo: c) Supervisione (Impiegato: i, Capo: c) Superiore (Impiegato: i, SuperCapo: c) Supervisione (Impiegato: i, Capo: c'), Superiore (Impiegato: c', SuperCapo: c) 47 La definizione della semantica delle regole ricorsive è delicata (in particolare con la negazione) Potere espressivo: Datalog non ricorsivo senza negazione è equivalente al calcolo senza negazione e senza quantificatore universale Datalog non ricorsivo con negazione è equivalente al calcolo e all'algebra Datalog ricorsivo senza negazione e calcolo sono incomparabili Datalog ricorsivo con negazione è più espressivo di calcolo e algebra 48 8