Algebra relazionale

Da Wikipedia, l'enciclopedia libera.

L'algebra relazionale e il collegato calcolo relazionale fanno parte dell'insieme di linguaggi che permettono di esaminare le query (interrogazioni) da effettuare nell'ambito della gestione di un database. L'algebra relazionale è un linguaggio procedurale, cioè una descrizione della procedura da attuare per ottenere il risultato. Il calcolo relazionale invece è un linguaggio dichiarativo, che permette di descrivere le proprietà del risultato invece che il modo per ottenerlo. Il risultato può essere calcolato sia sulle tuple (i singoli record che compongono la tabella) che sui domini (campo di applicazione della tabella).

L'algebra relazionale è un ramo della logica del primo ordine (e degli insiemi), si occupa di relazioni chiuse e operatori. Gli operatori operano su una o più relazioni e danno sempre come risultato un'altra relazione. L'algebra relazionale fa parte dell'informatica. L'algebra relazionale in matematica è una struttura algebrica, pertinente alla logica e alla teoria degli insiemi.

Operatori dell'algebra relazionale[modifica | modifica wikitesto]

L'algebra relazionale ha 6 operatori di base, nessuno dei quali può essere omesso senza perdere in espressività, e diversi operatori derivati, che possono cioè essere definiti come combinazione di operatori primitivi.

Operatori fondamentali (di base):

  1. Unione (operatore binario)
  2. Differenza (operatore binario)
  3. Prodotto cartesiano (operatore binario)
  4. Selezione (operatore unario)
  5. Proiezione (operatore unario)
  6. Ridenominazione (operatore unario)

Operatori derivati (da quelli di base):

  1. intersezione (operatore binario)
  2. Join (operatore biario) in varie forme (theta-join, natural-join, ecc.)
  3. Divisione (operatore binario)

Indichiamo con r(R), la relazione r definita sullo schema R. R è un insieme di attributi.

Unione, intersezione, differenza[modifica | modifica wikitesto]

Dato che le relazioni sono degli insiemi ha senso definire su di esse gli operatori insiemistici tradizionali come unione, differenza e intersezione. L'unico vincolo è quello di avere delle tuple omogenee cioè definite sugli stessi attributi.

  • l'unione di due relazioni r1 e r2 definite sullo stesso insieme di attributi X è indicata con r1 \cup r2 ed è una relazione ancora su X contenente le tuple che appartengono a r1 oppure a r2,senza ripetizioni delle eventuali tuple ripetute.
  • la differenza di r1(x) e r2(x) è indicata come r1 - r2 ed è una relazione su X contenente le tuple che appartengono a r1 e non appartengono a r2.
  • l'intersezione di r1(X) e r2(X) è indicata con r1 \cap r2 ed è una relazione su X contenente le tuple che appartengono sia a r1 che r2.

Ridenominazione[modifica | modifica wikitesto]

L'operatore di ridenominazione, r, modifica lo schema di una relazione, cambiando i nomi di uno o più attributi. Quest'operazione è molto utile per ottenere delle tuple omogenee quando non lo sono anche se il campo semantico di applicazione della query lo è. Sia r una relazione definita sull'insieme di attributi X e sia Y un (altro) insieme di attributi con ordinamento per gli attributi in X e un ordinamento per quelli in Y. Allora la ridenominazione \rho_{B_1,B_2,\dots,B_k\leftarrow A_1,A_2,\dots,A_k} (r) contiene una tupla t' per ciascuna tupla t in r, definita come segue: t' è una tupla su Y e t'[B_i] = t[A_i], per i = 1, \dots, n. La definizione conferma che ciò che cambia sono i nomi degli attributi, mentre i valori rimangono inalterati e vengono associati ai nuovi attributi.

Prodotto cartesiano[modifica | modifica wikitesto]

È definito solo nel caso in cui le relazioni non abbiano attributi in comune, e al contrario dell'omonimo operatore sugli insiemi, il risultato non è un insieme di tuple, ma un'unica tupla composta dalle due tuple delle relazioni originarie.

Logica proposizionale[modifica | modifica wikitesto]

Selezione[modifica | modifica wikitesto]

È un operatore unitario e restituisce come risultato una relazione.

Chiamiamo "formula relazionale" un'espressione che mette in relazione attributi per mezzo degli operatori =,!= (diverso da),<,>,<=,>=. Sia r(X) una relazione sull'insieme di attributi X, e F una formula relazionale. La selezione di r rispetto a F, denotata da "S" F(r), è una relazione definita su X, contenente le tuple di r che rendono F vera, cioè la selezione da una tabella non è altro che l'insieme di righe che appartengono alla tabella e che soddisfano una serie di condizioni indicate nella selezione stessa.

Proiezione[modifica | modifica wikitesto]

L'operatore di proiezione effettua una modifica al grado della relazione a cui si applica. Il simbolo è \Pi a pedice del quale viene indicata la lista degli attributi che costituiscono la nuova relazione, tali attributi sono un sottoinsieme degli attributi della relazione originale. La proiezione \Pi _{\left (A_1, A_2, ..., A_n\right )}(r) produce una relazione r_p il cui schema è l'insieme degli attributi A_n e la cui istanza è la restrizione delle tuple di r sugli attributi A_n.

Formalmente la proiezione elimina le tuple che dovessero risultare duplicate nella relazione finale, infatti istanze con presenza di tuple duplicate non sono ammesse dal modello relazionale.

Join[modifica | modifica wikitesto]

Il join è un'operazione binaria che si applica a due relazioni R(A_1,A_2,...,A_m) ed S(B_1,B_2,...,B_n). La funzione del join è unire tuple logicamente collegate delle due relazioni in un'unica tupla. La relazione risultante Rj(A_1, A_2, ..., A_m, B_1, B_2, ..., B_n) ha come schema l'insieme degli attributi di R ed S, mentre l'estensione viene espressa come il prodotto cartesiano di R ed S seguito dalla selezione delle tuple che soddisfano la condizione di join. L'operatore di join non è un operatore elementare dell'algebra relazionale ed è definito nel seguente modo: \bowtie_{F \left( R,S \right)} \left( R,S \right )= \sigma _{F \left(R,S \right)} \left( R \times S \right). Per il significato e la sintassi della condizione di selezione F(R,S) vedere l'operatore di selezione.

Nel caso che il criterio di selezione delle tuple sia determinato da un operatore di confronto (<,>,=,ecc.) si può parlare di theta-join. Un caso particolare del theta-join è l'equi-join, in cui si applica l'operatore di uguaglianza.

Nel caso si voglia eseguire un equi-join su attributi con lo stesso nome, si può ricorrere a un'operazione particolare chiamata natural-join. In presenza di due attributi uguali, viene rinominato l'attributo comune in una delle due relazioni, viene eseguito l'equi-join rispetto ai due attributi, e viene eliminata una delle colonne che risultano uguali. Nel natural-join, quindi, la condizione di join è implicita, e lo schema della relazione risultante è l'insieme degli attributi di R ed S meno uno degli attributi uguali.

Divisione[modifica | modifica wikitesto]

La divisione è un'operazione binaria che si applica a due relazioni r ed s, rispettivamente con schemi relazionali R = (A_1,...,A_m) ed S = (A_{i_{1}},...,A_{i_{n}}), dove S è un sottoinsieme proprio di R (e quindi  m - n > 0 sempre).

La relazione risultante, r \div s, è detta il quoziente della divisione di r per s e ha come schema  R - S , cioè l'insieme degli attributi di R non compresi in S. In essa saranno presenti tutte (e solo) le tuple che possano essere combinate con una qualsiasi tupla di s in modo tale che la tupla risultante appartenga ad r.

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica