Algebra e calcolo relazionale (parte 2)

Slides:



Advertisements
Presentazioni simili
Informatica II – Basi di Dati (08/09) – Parte 1
Advertisements

Principale limitazione di AR e SQL-92: interrogazioni ricorsive
Algebra Relazionale 3 Università degli Studi del Sannio
Calcolo Relazionale.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Algebra relazionale Presentazione 12.1
Principale limitazione di AR e SQL-92: interrogazioni ricorsive IMPIEGATO NOMENOMECAPO RossiVerdi NeriVerdi DeSio TucciDeSio DeLucaDeSio Lazio selezionare.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Frontespizio Economia Monetaria Anno Accademico
1 la competenza alfabetica della popolazione italiana CEDE distribuzione percentuale per livelli.
I sistemi di riferimento
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
Ordini Parziali - Reticoli
Esercitazioni su circuiti combinatori
La gestione delle controversie interne relatore: Silvio Beorchia.
EIE 06/07 II / 1 Strumenti delle politiche agricole in economia aperta equilibrio di mercato in economia aperta politiche di un paese importatore politiche.
Corso di Informatica (Basi di Dati)
Corso di Informatica (Programmazione)
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
11/10/2001Atzeni-Ceri-Paraboschi-Torlone, Basi di dati, Capitolo 3 1 Viste (relazioni derivate) Rappresentazioni diverse per gli stessi dati (schema esterno)schema.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Algoritmo di Query Optimization
Intelligenza Artificiale
Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJCapo (SELStipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))
Algebra Relazionale Linguaggio procedurale, cioè le operazioni vengono descritte attraverso la descrizione della sequenza di azioni da compiere per ottenere.
Modello Relazionale Definisce tipi attraverso il costruttore relazione, che organizza i dati secondo record a struttura fissa, rappresentabili attraverso.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Normalizzazione Le forme normali certificano che la base di dati soddisfa criteri di qualità che mirano ad evitare le ridondanze e i conseguenti effetti.
Join e proiezioni: problemi ImpiegatoReparto RossiA NeriB BianchiB RepartoCapo BMori CBruni NeriBMori ImpiegatoRepartoCapo BianchiBMori ImpiegatoReparto.
19 Lezione 21/5/04 Composizione dell'immagine 1 COMPOSIZIONE DELLIMMAGINE.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 3: ALGEBRA E CALCOLO RELAZIONALE 10/10/2002.
Basi di dati Claudia Raibulet
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ISOIVA (LOCALE) TO ISOIVA (WEB) RIPARTIZIONE INFORMATICA UFFICIO APPLICATIVI AMMINISTRATIVI 13/04/2011 UNIVERSITÀ DEGLI STUDI DI FERRARA 1.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
TECNOLOGIE DELLINFORMAZIONE E DELLA COMUNICAZIONE PER LE AZIENDE Materiale di supporto alla didattica.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Gerarchie Ricorsive Una gerarchia ricorsiva deriva dalla presenza di una ricorsione o ciclo (un anello nel caso più semplice) nello schema operazionale.
1 Ly-LAB Sistema di gestione dei dati analitici di laboratorio.
Sistemi di Elaborazione delle Informazioni Mod.I.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Basi di dati - Modelli e linguaggi di interrogazione- Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone Copyright © The McGraw-Hill.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,
-17 Aspettative economiche – Europa Settembre 2013 Indicatore > +20 Indicatore 0 a +20 Indicatore 0 a -20 Indicatore < -20 Unione Europea Totale: +6 Indicatore.
SQL Interrogazioni. 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation.
Algebra relazionale (III). Interrogazioni con Algebra Relazionale Dato schema R(Y) di DB, un’interrogazione è una funzione che, per ogni istanza r di.
Informatica Introduzione alle basi di dati Lezione 8 Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
Una convenzione e notazione alternativa per i join Nota: è sostanzialmente l'approccio usato in SQL Ignoriamo il join naturale (cioè non consideriamo implicitamente.
Basi di dati Esercizi su ALGEBRA RELAZIONALE 17/10/2013 Paolo Atzeni 1.
FUNZIONI ESECUTIVE E PRATICA CLINICA
Esercizi su ALGEBRA RELAZIONALE
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
Informatica Introduzione alle basi di dati Lezione 8 (bis) Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
1 Microsoft Access Gruppo di lavoro Alberti, Boldi, Gaito, Grossi, Malchiodi, Mereghetti, Morpurgo, Rosti, Palano, Zanaboni Informatica per laurea triennale.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
ALGEBRA RELAZIONALE. Algebra Relazionale2  Le basi di dati rappresentano le informazioni di interesse per applicazioni che gestiscono i dati  E’ importante.
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
Algebra relazionale (III). Esempi di Interrogazioni: 3 Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di Tutti gli impiegati?
Join Proprietà Il join di r 1 e r 2 contiene un numero di tuple compreso fra zero e il prodotto di |r 1 | e |r 2 | se il join di r 1 e r 2 è completo allora.
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Algebra relazionale (II). Join esterni Per combinare sempre le tuple di due relazioni, anche quando non ci sono corrispondenze tra i valori degli attributi.
Transcript della presentazione:

Algebra e calcolo relazionale (parte 2)

Algebra e valori nulli  Età>30 (Persone) Quali ennuple compaiono nel risultato? La prima sì, la seconda no; e la terza?

Una logica a tre valori Vero, Falso, Sconosciuto(U) Tabelle di verità: Una selezione produce come risultato le ennuple per cui il predicato di selezione è vero In molti casi la logica a tre valori produce un risultato “sensato,“ in altri no

Un risultato non desiderabile  Età>30 (Persone)   Età30 (Persone)  Persone Perché? Perché le selezioni vengono valutate separatamente! Ma anche  Età>30  Età30 (Persone)  Persone Perché? Perché anche le condizioni atomiche vengono valutate separatamente!

Soluzione Trattare il valore nullo "sintatticamente," con condizioni atomiche specifiche: A IS NULL A IS NOT NULL A questo punto:  Età>30 (Persone)   Età30 (Persone)   Età IS NULL (Persone) =  Età>30  Età30  Età IS NULL (Persone) = Persone

Viste (relazioni derivate) Possono esistere rappresentazioni diverse per gli stessi dati (cfr. architettura ANSI/SPARC a tre livelli) In una base dei dati relazionale, relazioni derivate: relazioni il cui contenuto è funzione del contenuto di altre relazioni (definito per mezzo di interrogazioni) In contrasto, le relazioni di base hanno un contenuto autonomo Le relazioni derivate possono essere definite su altre derivate, ma a condizione che la definizione non sia ricorsiva (come invece accade in Datalog che vedremo)

Architettura standard (ANSI/SPARC) a tre livelli per DBMS utente utente utente utente utente BD Schema logico Schema esterno Schema interno

Viste virtuali e materializzate Due tipi di relazioni derivate: viste materializzate: relazioni derivate memorizzate nella base di dati; vantaggi: immediatamente disponibili per le interrogazioni svantaggi: appesantiscono gli aggiornamenti; non sono supportate dai DBMS relazioni virtuali (o viste): sono supportate dai DBMS; una interrogazione su una vista viene eseguita "ricalcolando" la vista (o quasi)

Viste, motivazioni Schema esterno o vista d'utente: ogni utente vede solo cio' che gli interessa e nel modo in cui gli interessa, senza essere distratto dal resto ogni utente vede solo cio' che e' autorizzato a vedere (autorizzazioni sulle viste) Strumento di programmazione: con le viste si puo' semplificare la scrittura di interrogazioni; molto utile per espressioni complesse e/o con sottoespressioni ripetute Utilizzo di programmi esistenti su schemi ristrutturati (R(ABC) viene sostuita da R1(AB) ed R2(BC). Posso usare R = R1 ⋈ R2). Importante per l’integrazione dei dati proveniente da sorgenti diverse Inoltre: L'utilizzo di viste non influisce sull'efficienza delle interrogazioni (salvo aspetti trascurabili)

Viste, esempio una vista: Supervisione =  Impiegato, Direttore (Afferenza ⋈ Direzione) un'interrogazione sulla vista Direttore='Leoni' (Supervisione) viene eseguita come Direttore='Leoni' ( Impiegato, Direttore (Afferenza ⋈ Direzione))

Viste come strumento di programmazione Trovare gli impiegati che hanno lo stesso direttore di Rossi. Senza vista:  Impiegato((Afferenza ⋈ Direzione) ⋈ ImpR,RepR  Impiegato,Reparto(Impiegato='Rossi' (Afferenza) ⋈ Direzione)) Con la vista:  Impiegato( Supervisione ⋈ ImpR  Impiegato(Impiegato='Rossi' (Supervisione)))

Viste e aggiornamenti: attenzione Vogliamo inserire, nella vista, il fatto che Mori ha come direttore Lupi; come facciamo? Gli aggiornamenti possibili sulle viste sono limitati

Calcolo relazionale Una famiglia di linguaggi dichiarativi, basati sul calcolo dei predicati del primo ordine Diverse versioni: calcolo relazionale su domini calcolo su tuple con dichiarazioni di range

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“ (con variabili libere) utilizziamo notazione non posizionale

Calcolo su domini: sintassi e semantica Le espressioni hanno la forma: { A1: x1, …, Ak: xk | f } f e' una formula (con connettivi booleani e quantificatori) A1: x1, …, Ak: xk "target list": A1, …, Ak attributi distinti (anche non nella base di dati) x1, …, xk variabili distinte Semantica: il risultato e' una relazione su A1, …, Ak che contiene ennuple di valori per x1, …, xk che rendono vera la formula f

Base di dati per gli esempi Impiegati(Matricola,Nome, Età, Stipendio) Supervisione(Capo, Impiegato)

Stipendio>40(Impiegati) Esempio 0 Trovare matricola, nome, età e stipendio degli impiegati che guadagnano più di 40 milioni Stipendio>40(Impiegati) { Matricola: m, Nome: n, Età: e, Stipendio: s | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40 }

Esempio 1 Trovare matricola, nome ed età degli impiegati che guadagnano più di 40 milioni Matricola, Nome, Età(Stipendio>40(Impiegati)) { Matricola: m, Nome: n, Età: e | s (Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40) } oppure più semplicemente { Matricola: m, Nome: n, Età: e | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40 }

Esempio 2 Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni Capo (Supervisione ⋈ Impiegato=Matricola (Stipendio>40(Impiegati))) { 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,StipC (MatrC,NomeC,StipC,EtàC  Matr,Nome,Stip,Età(Impiegati) ⋈ MatrC=Capo (Supervisione ⋈ Impiegato=Matricola (Stipendio>40(Impiegati)))) { NomeC: nc, StipC: sc | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40  Supervisione(Capo:c,Impiegato:m)  Impiegati(Matricola: c, Nome: nc, Età: ec, Stipendio: sc) }

Esempio 4 Trovare gli impiegati che guadagnano più del rispettivo capo, mostrando matricola, nome e stipendio di ciascuno di essi e del capo Matr,Nome,Stip,MatrC,NomeC,StipC (Stipendio>StipC(MatrC,NomeC,StipC,EtàC  Matr,Nome,Stip,Età(Impiegati) ⋈ MatrC=Capo (Supervisione ⋈ Impiegato=Matricola ( (Impiegati)))) { Matr: m, Nome: n, Stip: s, MatrC: c, NomeC: nc, StipC: sc | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  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. Matricola,Nome (Impiegati ⋈ Matricola=Capo (Capo (Supervisione) - Capo (Supervisione ⋈ Impiegato=Matricola (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: c', Nome: n', Età: e', Stip: s')  Supervisione(Capo:c, Impiegato:m')  s'  40}

Quantificatori esistenziali o universali? 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: c', 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:c', Nome:n', Età:e', Stip:s')  Supervisione(Capo:c, Impiegato:m'))  s' > 40}

Calcolo su domini, discussione 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

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) non si considerano i valori nulli

Calcolo su tuple con dichiarazioni di range Per superare le limitazioni del calcolo su domini: dobbiamo "ridurre" le variabili; un buon modo: una variabile per ciascuna tupla far si' che i valori provengano dalla base di dati Il calcolo su tuple con dichiarazioni di range risponde ad entrambe le esigenze

Calcolo su tuple 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.*) (con Y e Z attributi ed x variabile) Formula ha: atomi di confronto x.A  c, x.A  y.B connettivi quantificatori che associano un range alle variabili x(R)(...) x(R)(...)

Esempio 0 Trovare matricola, nome, età e stipendio degli impiegati che guadagnano più di 40 milioni Stipendio>40(Impiegati) { Matricola: m, Nome: n, Età: e, Stipendio: s | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40 } { i.* | i(Impiegati) | i.Stipendio > 40 }

Esempio 1 Trovare matricola, nome ed età degli impiegati che guadagnano più di 40 milioni Matricola, Nome, Età(Stipendio>40(Impiegati)) { Matricola: m, Nome: n, Età: e | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40 } { i.(Matricola,Nome,Età) | i(Impiegati) | i.Stipendio > 40 }

Esempio 2 Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni Capo (Supervisione ⋈ Impiegato=Matricola (Stipendio>40(Impiegati))) { Capo: c | Supervisione(Capo:c,Impiegato:m)  Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40 } { s.Capo | i(Impiegati) , s(Supervisione) | i.Matricola=s.Impiegato  i.Stipendio > 40 }

Esempio 3 Trovare nome e stipendio dei capi degli impiegati che guadagnano più di 40 milioni NomeC,StipC (MatrC,NomeC,StipC,EtàC  Matr,Nome,Stip,Età(Impiegati) ⋈ MatrC=Capo (Supervisione ⋈ Impiegato=Matricola (Stipendio>40(Impiegati)))) { NomeC: nc, StipC: sc | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40 Supervisione(Capo:c,Impiegato:m)  Impiegati(Matricola: c, Nome: nc, Età: ec, Stipendio: sc) } { NomeC,StipC: i'.(Nome,Stip) | i'(Impiegati), s(Supervisione), i(Impiegati) | i'.Matricola=s.Capo  i.Matricola=s.Impiegato  i.Stipendio > 40 }

Esempio 4 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 | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s) 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 }

{ i.(Matricola, Nome) | s(Supervisione), i(Impiegati) | Esempio 5 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: c', 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))) }

Attenzione! Il calcolo su ennuple con dichiarazioni di range non permette di esprimere alcune interrogazioni importanti, in particolare le unioni: R1(AB)  R2(AB) Quale potrebbe essere il range per una variabile? Per questa ragione SQL (che è basato su questo calcolo) prevede un operatore esplicito di unione, ma non tutte le versioni prevedono intersezione e differenza

Calcolo e algebra relazionale: limiti Calcolo e algebra sono sostanzialmente equivalenti: l'insieme di interrogazioni con essi esprimibili è quindi significativo 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 tupla o di singolo valore (conversioni di unità di misura, calcolo di somme, differenze, etc.) su insiemi di tuple (calcolo di valori aggregati: somme, medie, etc.) le estensioni sono ragionevoli, le vedremo in SQL interrogazioni inerentemente ricorsive, come la chiusura transitiva

Chiusura transitiva, come si fa? Per ogni impiegato, trovare tutti i superiori. Basterebbe il join della relazione con se stessa, previa opportuna ridenominazione Ma su questa:

Chiusura transitiva, esempio Per ogni impiegato, trovare il capo ed il capo del capo CapoC, Imp (CapoC,ImpC  Capo,Imp(Supervisione) ⋈ ImpC=Capo (Supervisione))  CapoC,Imp Capo,Imp(Supervisione) Per ogni impiegato, trovare il capo del capo del capo, il capo del capo occorre usare un altro join Servono quindi due join! In generale quanti? Non c'è limite!

Chiusura transitiva, impossibile! Non esiste in algebra e calcolo relazionale la possibilità di esprimere l'interrogazione che, per ogni relazione binaria, ne calcoli la chiusura transitiva Nota: per ciascuna relazione, è possibile calcolare la chiusura transitiva, ma con un'espressione ogni volta diversa (quanti join servono? Non c'è limite al numero dei join) Per ovviare a questo problema e’ stato introdotto il Datalog

Datalog: sintassi 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 che sono utilizzate per "definire" i predicati intensionali Regole: testa  corpo testa è un predicato atomico (intensionale) corpo è una congiunzione di condizioni atomiche Le interrogazioni sono specificate per mezzo di predicati atomici (convenzionalmente preceduti da "?")

? Impiegati(Matricola: m, Nome: n, Età: 30, Stipendio: s) Esempio 1 Trovare matricola, nome, età e stipendio degli impiegati che hanno 30 anni { Matricola: m, Nome: n, Età: e, Stipendio: s | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  e= 30 } ? Impiegati(Matricola: m, Nome: n, Età: 30, Stipendio: s)

? ImpRicchi(Matricola: m, Nome: n, Età: 30, Stipendio: s) Esempio 2 Trovare matricola, nome, età e stipendio degli impiegati che guadagnano più di 40 milioni { Matricola: m, Nome: n, Età: e, Stipendio: s | Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s)  s > 40 } Serve un predicato intensionale definito mediante regole Datalog ImpRicchi(Matricola: m, Nome: n, Età: e, Stipendio: s)  Impiegati(Matricola: m, Nome: n, Età: e, Stipendio: s), s >40. ? ImpRicchi(Matricola: m, Nome: n, Età: 30, Stipendio: s)

Esempio 3 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 } CapiDeiRicchi (Capo:c)  ImpRicchi(Matricola: m, Nome: n, Età: e, Stipendio: s), Supervisione (Capo:c,Impiegato:m). ? CapiDeiRicchi (Capo:c)

Esempio 4 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)

Esempio 5 Per ogni impiegato, trovare tutti i superiori. Serve la ricorsione Superiore (Impiegato: i, SuperCapo: c)  Supervisione (Impiegato: i, Capo: c). Supervisione (Impiegato: i, Capo: c'), Superiore (Impiegato: c', SuperCapo: c). ? Superiore (Impiegato: i, SuperCapo: c)

Datalog: semantica 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