Algebra relazionale #
Il DML (Data Manipulation Language) è la parte del linguaggio SQL che permette di eseguire operazioni su relazioni.
Linguaggi formalmente definiti #
- Calcolo relazionale: dichiarativo, basato sulla logica dei predicati del primo ordine.
- Algebra relazionale: procedurale, di tipo algebrico, i cui operandi sono le relazioni.
Operatore: Selezione #
Simbolo | \(\sigma_F{R}\) |
---|
Caratteristiche #
- Schema: Lo stesso di \(R\) .
- Relazione: Le tuple di \(R\) che soddisfano il predicato \(F\) .
Le tuple sono analizzate una alla volta, e se soddisfano il predicato vengono incluse nella relazione risultante.
Proprietà #
- Idempotenza: \(\sigma_F{\sigma_F{R}} = \sigma_F{R}\)
Operatore: Proiezione #
Simbolo | \(\pi_Y{R}\) |
---|
Caratteristiche #
- Schema: Solo gli attributi indicati.
- Relazione: Le tuple di \(R\) con solo gli attributi indicati.
Proprietà #
La proiezione elimina i duplicati. La cardinalità della relazione risultante è sempre minore o uguale a quella di \(R\) .
Se si proietta su una superchiave la cardinalità del risultato sarà uguale a quella di \(R\) .
Operatore: Join naturale #
Simbolo | \(R \bowtie S\) |
---|
Caratteristiche #
- Schema: Unione degli schemi delle relazioni coinvolte.
- Relazione: Le tuple che hanno gli stessi valori per gli attributi in comune.
Osservazioni #
- Se una tupla di una relazione non ha corrispondenza nella relazione opposta, non viene inserita nella relazione risultante (tupla dangling).
Casi limite #
- Se le due relazioni hanno lo stesso schema, la join naturale equivale all’intersezione (se non sono ammessi valori nulli nello schema).
- Se le due relazioni non hanno attributi in comune, la join naturale equivale al prodotto cartesiano (a differenza di quest’ultimo non è però ordinato).
Proprità #
- Idempotenza: \(R \bowtie S = S \bowtie R \)
- Associatività: \((R \bowtie S) \bowtie T = R \bowtie (S \bowtie T) \)
- Commutatività: \(R \bowtie S = S \bowtie R \)
Operatore: Unione #
Operatore: Differenza #
Operatore: Ridenominazione #
Simbolo | \( \rho_{Y<-X}{(r)} \) |
---|
Operatore: Divisione #
Simbolo | \(R \div S\) |
---|
Caratteristiche #
- Schema: La differenza tra lo schema di \(R\) e quello di \(S\) .
- Relazione: Le tuple di \(R\) , proiettate sullo schema risultante, il cui prodotto cartesiano con \(S\) è contenuto in \(R\) .
\[R \div S = A, \quad A \cdot S \subseteq R \]
La divisione potrebbe quindi essere vista come l’operazione inversa della join naturale.
⚠️ E’ opportuno considerare che, se è necessario cercare “per ognuno” qualcosa di diverso (e non “per tutti” la stessa cosa), la divisione non è sempre la soluzione.