Premessa
Portale di appartenenza: Basi di dati.
Cosa troverai in questa nota:
- Unβintroduzione ai concetti alla base dellβalgebra relazionale.
- Come effettuare la composizione di operatori relazionali.
- Come risolvere le interrogazioni con negazioni essenziali.
- Come usare creativamente lβalgebra relazionale per effettuare determinate operazioni.
Prerequisiti: per comprendere pienamente il contenuto di questa nota, oltre le conoscenze minime che do per scontato che tu sappia giΓ , ti consiglio di aver letto in precedenza queste altre note:
Buona lettura! βοΈπ€
Definizione: algebra relazionale
Lβalgebra relazionale Γ¨ un linguaggio formale di tipo procedurale, formalizzato da Edgar F. Codd per manipolare e interrogare dati nei database basati sul modello relazionale da lui stesso sviluppato attraverso lβuso di operatori relazionali coordinati da predicati.
Definizione: predicato
Un predicato Γ¨ unβespressione booleana costituita da uno o piΓΉ confronti del tipo oppure dove:
Eventuali confronti multipli vengono composti tra di loro attraverso lβuso dei tradizionali connettivi logici come la congiunzione , la disgiunzione o la negazione .
Definizione: operatore relazionale
Notazione: abuso di notazione sulle istanze come argomenti e risultati
Gli operatori relazionali si dividono in operatori di base e operatori derivati da quelli di base attraverso la loro composizione.
1 - Composizione di operatori
Lβalgebra relazionale Γ¨ composizionale, ovvero si possono costruire espressioni di algebra relazionale componendo insieme gli operatori relazionali.
Definizione: composizione di operatori relazionali
Dati due operatori relazionali e , la loro composizione consiste nel dare come argomento dellβoperatore il risultato dellβoperazione di :
Esempio di composizione di due operatori
Supponiamo di avere una relazione e vogliamo estrarre i nomi degli studenti di con meno di anni. Possiamo comporre due operatori:
- Selezione per scegliere solo gli studenti di con meno di anni:
- Proiezione per estrarre i nomi dal risultato della selezione:
La composizione dei due operatori Γ¨ la seguente:
1.1 - Notazione ad albero sintattico
Per visualizzare comodamente unβinterrogazione composta da una composizione di operatori si usa la notazione ad albero sintattico.
Notazione ad albero sintattico di una composizione
Una composizione di operatori relazionali si puΓ² rappresentare attraverso un albero sintattico, ossia un albero utile a visualizzare la sequenza di esecuzione delle operazioni. In particolare:
Esempio di notazione ad albero sintattico di una composizione
Supponiamo di avere una relazione e e vogliamo estrarre le matricole degli studenti che sono iscritti a un corso con una durata superiore a ore. Possiamo comporre gli operatori così:
- Selezione per scegliere i corsi con durata maggiore di ore:
- Theta-join tra e il risultato della selezione dei corsi, utilizzando lβattributo in e il campo in :
- Proiezione per estrarre le matricole dal risultato del theta-join:
La composizione degli operatori Γ¨ quindi la seguente:
Questa interrogazione si puΓ² tradurre nel seguente albero sintattico:
2 - Risoluzione delle interrogazioni con negazione
Riprendiamo lβesempio della base di dati ospedaliera. Per essa, si potrebbe chiedere, per esempio, di:
- Elencare i pazienti non residenti a Torino.
- Elencare i medici non primari.
I due esempi contengono rispettivamente una negazione non essenziale e una negazione essenziale.
2.1 - Interrogazioni con negazioni non essenziali
Lβesempio βelencare i pazienti non residenti a Torinoβ rappresenta unβinterrogazione con negazione non essenziale.
Definizione: negazione non essenziale
In unβinterrogazione, una negazione non essenziale Γ¨ una negazione che puΓ² essere riscritta rendendola positiva senza modificare il significato dellβinterrogazione.
Esempio di negazione non essenziale
Ad esempio, βelencare i pazienti non residenti a Torinoβ si potrebbe riformulare come βelencare i pazienti con residenza diversa da Torinoβ e usare cosΓ¬ una semplice selezione:
2.2 - Interrogazioni con negazioni essenziali
Lβesempio βelencare i medici non primariβ rappresenta unβinterrogazione con negazione essenziale.
Definizione: negazione essenziale
In unβinterrogazione, una negazione essenziale Γ¨ una negazione che non puΓ² essere rimossa senza cambiare il significato dellβinterrogazione.
Per risolvere una negazione essenziale, si segue questo algoritmo.
Algoritmo di risoluzione delle interrogazioni con negazioni essenziali
- Definire lβuniverso del discorso .
- Rispondere alla domanda in forma positiva .
- La risposta che si vuole ottenere Γ¨ data dalla differenza tra e .
Esempio: risoluzione dell'interrogazione "elencare i medici non primari"
Risolviamo lβinterrogazione βelencare i medici non primariβ usando lβalgoritmo di risoluzione delle interrogazioni con negazioni essenziali appena descritto.
- Definire lβuniverso del discorso :
- Rispondere alla domanda in forma positiva (nel nostro caso: βelencare i medici primariβ):
- La risposta che si vuole ottenere Γ¨ data dalla differenza tra e :
Attenzione
Per poter adottare questo algoritmo, gli schemi dellβuniverso e della risposta in forma positiva devono essere uguali, per definizione dellβoperatore relazionale della differenza.
Osservazione: l'algoritmo vale anche per le negazioni non essenziali
Si puΓ² osservare come lβalgoritmo di risoluzione delle interrogazioni con negazioni essenziali si puΓ² usare per risolvere, in generale, qualsiasi tipo di negazione, anche quelle non essenziali. Riprendendo il primo esempio βelencare i pazienti non residenti a Torinoβ, si puΓ² usare lβalgoritmo cosΓ¬:
- Definire lβuniverso del discorso :
- Rispondere alla domanda in forma positiva (nel nostro caso: βelencare i pazienti residenti a Torinoβ):
- La risposta che si vuole ottenere Γ¨ data dalla differenza tra e :
Risulta ovvio perΓ² che, in questo caso, Γ¨ inutilmente dispendioso usare questo algoritmo al posto del metodo specifico delle negazioni non essenziali.
Esempio: risoluzione dell'interrogazione "elencare i pazienti di Torino che non sono stati mai curati dal primario con codice "
Risolviamo lβinterrogazione βelencare i pazienti di Torino che non sono stati mai curati dal primario con codice β usando lβalgoritmo di risoluzione delle interrogazioni con negazioni essenziali.
- Definire lβuniverso del discorso :
- Rispondere alla domanda in forma positiva (nel nostro caso: βelencare i pazienti di Torino che sono stati curati almeno una volta dal primario con codice β):
βRipuliamoβ la relazione da tutti gli attributi che non ci servono che abbiamo ottenuto dalle operazioni di equi-join, lasciando solo gli attributi relativi alla relazione opportunamente rinominati:
- La risposta che si vuole ottenere Γ¨ data dalla differenza tra e :
Attenzione: ambiguitΓ nelle interrogazioni
Spesso, in unβinterrogazione, ci puΓ² essere ambiguitΓ riguardo il suo significato: per esempio, lβinterrogazione βelencare i pazienti di Torino che non sono stati mai curati dal primario con codice β puΓ² essere letta come βelencare i pazienti di Torino ricoverati ma mai presi in cura dal primario con codice β.
Si puΓ² notare come, nel secondo caso, cambi lβuniverso del discorso:
2.3 - Interrogazioni con negazioni nascoste
Esistono interrogazioni che, allβapparenza, non contengono negazioni, ma che in realtΓ ce le hanno. Per esempio, lβinterrogazione βelencare i pazienti con un solo ricoveroβ equivale a βelencare i pazienti ricoverati almeno una volta ma che non hanno subito due o piΓΉ ricoveriβ.
3 - Uso βcreativoβ dellβalgebra relazionale
Lβalgebra relazionale puΓ² essere usata in modi βcreativiβ per compiere operazioni particolari sulle relazioni.
3.1 - Interrogazioni con conteggi
In algebra relazionale non Γ¨ possibile effettuare interrogazioni che prevedano conteggi (per esempio, non Γ¨ possibile sapere quante volte un valore compare in una relazione), perΓ² Γ¨ possibile rispondere a domande in cui si stabilisce un βlimiteβ di conteggio (per esempio, Γ¨ possibile sapere quali valori compaiono piΓΉ o meno di volte in una relazione).
Come confrontiamo piΓΉ record della stessa relazione? Per esempio, consideriamo la seguente relazione con due attributi ( di tipo intero e di tipo carattere) di cui vogliamo sapere quali sono i valori di che compaiono almeno due volte:
Lβidea Γ¨ quella di mettere la relazione in theta-join con se stessa:
Tuttavia, perΓ², Γ¨ necessario distinguere le nuove coppie di e che saranno presenti nel risultato, quindi li rinominiamo:
Il predicato deve selezionare i valori di corrispondenti ma associati a lettere diverse:
Il risultato Γ¨ il seguente:
Adesso ci basterΓ soltanto fare una proiezione su o per far collassare automaticamente le tuple duplicate e ottenere, come risultati, e .
E se volessimo controllare quali valori di compaiono almeno tre volte? In questo caso, dovremmo fare un secondo theta-join al risultato dellβinterrogazione precedente e, nel predicato, associare i numeri corrispondenti a tutti e tre gli attributi ma con lettere diverse:
Il risultato Γ¨ il seguente:
Anche in questo caso ci basterΓ soltanto fare una proiezione su . o per far collassare automaticamente le tuple duplicate e ottenere, come risultato, .
3.2 - Estrazione del massimo (o minimo)
Tramite lβalgebra relazionale, Γ¨ possibile estrarre un valore massimo (o minimo) da una serie di valori di un attributo di tipo intero. Per esempio, consideriamo la seguente relazione con un unico attributo di tipo intero di cui vogliamo estrarre il massimo:
Ricordiamo che il massimo di una sequenza di numeri Γ¨ tale se il numero Γ¨ maggiore o uguale di tutti gli altri: dallβinterrogazione affermativa βestrarre il numero maggiore o uguale di tutti gli altriβ, possiamo ottenere lβinterrogazione con negazione essenziale βestrarre il numero non minore di tutti gli altriβ. Possiamo cosΓ¬ usare lβalgoritmo di risoluzione delle interrogazioni con negazioni essenziali:
- Definiamo lβuniverso del discorso:
- Rispondiamo alla domanda in forma positiva (nel nostro caso: βestrarre tutti i numeri minori di qualche altroβ).
Per fare ciΓ², calcoliamo il prodotto cartesiano per poter costruire un confronto tra i numeri:
Otteniamo la seguente relazione .
Selezioniamo quindi solo i record in cui :
Otteniamo la seguente relazione .
Possiamo notare come nella colonna ci sono effettivamente solo quei numeri minori di qualche altro numero nella sequenza (ossia e ): effettuando una proiezione (e una ridenominazione per rendere lo schema uguale a quello dellβuniverso , possiamo far collassare i valori duplicati:
Otteniamo la seguente relazione .
- La risposta che vogliamo ottenere Γ¨ data dalla differenza tra e , da cui otteniamo lβunico valore che Γ¨ effettivamente il massimo nella sequenza di valori .
Fonti
- π« Lezioni e slide del Prof. Pensa Ruggero Gaetano del corso di Basi di Dati (canale B), Corso di Laurea in Informatica presso lβUniversitΓ di Torino, A.A. 2024-25:
- π« Appunti di Luca Barra del corso di Basi di Dati, Corso di Laurea in Informatica presso lβUniversitΓ di Torino, A.A. 2022-23 (caricati sul repository GitHub del Collettivo Studentesco Informatica).