Premessa

Portale di appartenenza: Basi di dati.

Cosa troverai in questa nota:

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:

  • e sono attributi di uno schema .
  • Γ¨ un operatore matematico di confronto nell’insieme .

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

Un operatore relazionale Γ¨ un operatore matematico che riceve, come argomenti, una o piΓΉ relazioni e producono, in uscita, sempre relazioni, attraverso l’uso di predicati che ne regolano il comportamento.

Notazione: abuso di notazione sulle istanze come argomenti e risultati

In alcuni casi, quando si opererΓ  con istanze che fanno esplicitamente riferimento ognuna a una determinata relazione , si potrΓ  passare come argomento all’operatore l’istanza stessa e si considererΓ , come risultato dell’operazione, non una relazione ma un’altra istanza.

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 :

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:

  • Sul nodo radice viene posto l’operatore eseguito per ultimo nella composizione.
  • Sui nodi foglia vengono poste le relazioni di partenza su cui vengono eseguite le operazioni.
  • Ogni nodo interno rappresenta uno degli operatori della composizione applicato al risultato del nodo figlio.

2 - Risoluzione delle interrogazioni con negazione

Riprendiamo l’esempio della base di dati ospedaliera. Per essa, si potrebbe chiedere, per esempio, di:

  1. Elencare i pazienti non residenti a Torino.
  2. 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.

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

  1. Definire l’universo del discorso .
  2. Rispondere alla domanda in forma positiva .
  3. 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Γ¬:

  1. Definire l’universo del discorso :
  1. Rispondere alla domanda in forma positiva (nel nostro caso: β€œelencare i pazienti residenti a Torino”):
  1. 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.

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:

  1. Definiamo l’universo del discorso:
  1. 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 .

  1. 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