Elementi di Algebra Relazionale

Note dalle lezioni di
INFORMATICA
(per gli allievi della classe quinta - indirizzo MERCURIO)
“Elem enti di Algebra Relazionale”
prof. Stefano D.L.Campanozzi
I.T.C. “Giulio Cesare” – Bari - a.s. 2008-2009
S.D.L. Campanozzi – “Note di Algebra relazionale”
§ 1 – Introduzione
Il modello logico relazionale è, di fatto, un modello matematico dei dati, pertanto un
qualunque approccio volto alla manipolazione di questo modello e, in particolare, alla sua
interrogazione, per apparire naturale, deve avere natura matematica. In questa ottica due sono gli
approcci fondamentali:
1. Approccio algebrico, in cui il risultato di una interrogazione è una relazione ottenuta dalla
valutazione di una espressione costruita mediante operatori di un’algebra relazionale
2. Approccio logico, in cui il risultato di una interrogazione viene descritto come una relazione
soddisfacente una formula di un linguaggio logico del primo ordine (calcolo relazionale)
I due approcci sono equivalenti per semantica sia denotazionale, sia operazionale; nondimeno
il primo approccio appare più accessibile, richiedendo soltanto la conoscenza di nozioni elementari
della teoria degli insiemi; tale approccio sarà oggetto di studio in queste pagine.
§ 2 – Cosa è l’Algebra Relazionale
In matematica con il termine algebra si denota ogni coppia (A, O) dove A è l’insieme di
sostegno, ovvero un insieme di valori (operandi), mentre O è un insieme di operazioni su A. Esempi
noti sono le algebre dei numeri (e.g.: algebra degli interi, dei reali) e le algebre di Boole.
Nel caso dell’algebra relazionale i valori sono le relazioni; le operazioni, agendo su relazioni,
restituiscono relazioni. Queste ultime sono “anonime” nel senso che il loro schema ha un nome non
definito in modo esplicito dall’utente. Alcune operazioni, di natura insiemistica, agiscono sulle
relazioni quali insiemi di tuple, quindi a livello estensionale; altre operazioni, di natura più
specifica, operano invece a livello intensionale e, eventualmente, anche a livello estensionale.
Inoltre è possibile che operazioni più complesse non siano definite come primitive, ma in forma
derivata per composizione di operazioni primitive. Infine, ogni insieme di operatori relazionali deve
essere funzionalmente completo, deve cioè consentire la stessa capacità espressiva esibita
dall’approccio logico. Un insieme funzionalmente completo è il seguente insieme di operatori:
O : = {Unione, Differenza, Prodotto, Proiezione, Restrizione, Ridenominazione}
Componendo questi operatori è possibile formulare ogni interrogazione sul modello
relazionale dei dati. E’ tuttavia opportuno introdurre altre due operazioni che, pur potendo essere
derivate da quelle di base, consentono, se assunte come primitive, di scrivere formule più semplici e
sintetiche. In definitiva si assume perciò il seguente insieme di operatori:
2
S.D.L. Campanozzi – “Note di Algebra relazionale”
O’: = O ∪ { Intersezione, Giunzione }
Prima di procedere alla descrizione delle singole operazioni, formuliamo la seguente
definizione, particolarmente utile nel prosieguo:
Definizione: Due relazioni si dicono compatibili se hanno lo stesso grado e se gli attributi in
posizioni corrispondenti sono dello stesso tipo o di tipi compatibili. In particolare due relazioni con
lo stesso schema sono compatibili.
§ 3 – Operatori dell’Algebra Relazionale
3.1 Operatori primitivi
Differenza di relazioni
Date due relazioni compatibili R e S, la differenza di R con S è la relazione, compatibile con R e S,
ottenuta dalla differenza insiemistica sulle estensioni delle due relazioni nell’ordine assegnato.
In simboli:
Difference (R, S) = R - S = {t | t ∈ R ∧ t ∉ S}
dove il simbolo t indica una generica tupla.
Osservazioni
1) Non vale la proprietà commutativa: R - S ≠ S - R !
2) L’operatore Difference agisce esclusivamente a livello estensionale.
Si ha inoltre:
•
Grado(R - S) = Grado(R) = Grado(S)
•
0 ≤ Cardinalità(R - S) ≤ Cardinalità(R)
Intersezione di relazioni
Date due relazioni compatibili R e S, la intersezione di R e S è la relazione, compatibile con R e S,
ottenuta dalla intersezione insiemistica sulle estensioni delle due relazioni.
In simboli:
Intersection (R, S) = R ∩ S = {t | t ∈ R ∧ t ∈ S}
dove il simbolo t indica una generica tupla.
3
S.D.L. Campanozzi – “Note di Algebra relazionale”
Osservazioni
1) L’operatore Intersection è derivabile dalla Differenza di relazioni: R ∩ S = R - (R - S)
2) L’operatore Intersection agisce esclusivamente a livello estensionale.
Si ha inoltre:
•
Grado(R ∩ S) = Grado(R) = Grado(S)
•
0 ≤ Cardinalità(R ∩ S) ≤ min {Cardinalità(R), Cardinalità(S)}
Unione di relazioni
Date due relazioni compatibili R e S, l’unione di R e S è la relazione, compatibile con R e S,
ottenuta dalla unione insiemistica sulle estensioni delle due relazioni.
In simboli:
Union (R, S) = R ∪ S = {t | t ∈ R ∨ t ∈ S}
dove il simbolo t indica una generica tupla.
L’operatore Union agisce esclusivamente a livello estensionale.
Si ha inoltre:
•
Grado(R∪S) = Grado(R) = Grado(S)
•
Cardinalità(R∪S) = Cardinalità(R) + Cardinalità(S) - Cardinalità(R∩S)
Prodotto cartesiano di due relazioni
Siano A1, A2,....An1 e B1, B2,......,Bn2 gli attributi, fra loro tutti diversi, di due relazioni qualunque
R ed S, rispettivamente di grado n1, n2, e di cardinalità c1, c2. Il prodotto (cartesiano) di R e S è la
relazione di attributi A1, A2,....An1, B1, B2,......,Bn2 di grado n1+n2 e di cardinalità c1 x c2 le cui
tuple si ottengono concatenando ciascuna tupla di R con ciascuna tupla di S.
In simboli:
R x S = {t | t = r conc s ∧ r ∈ R ∧ s ∈ S}
dove l’espressione t = r conc s sta ad indicare che la generica tupla t del prodotto è, appunto,
generata concatenando una tupla r di R e una tupla s di S. Più precisamente, il concetto di
concatenazione è il seguente:
date le tuple
r = (x1, x2, ....., x n1) e
s = (y1, y2, ....., yn2)
risulta
r conc s = (x1, x2, ....., x n1, y1, y2, ....., yn2)
4
S.D.L. Campanozzi – “Note di Algebra relazionale”
Osservazioni
1) Non vale la proprietà commutativa: R x S ≠ S x R !
2) Se nelle due relazioni R ed S implicate nel prodotto figurano due attributi di uguale nome è
necessario procedere alla ridenominazione di uno di essi per evitare ambiguità nella relazione
prodotto.
3) Il prodotto cartesiano, a differenza degli operatori fin qui esaminati, genera una relazione che ha
un chiaro significato dal punto di vista “costruttivo” insiemistico, ma la cui interpretazione è
oscura o del tutto assente nel contesto del micromondo rappresentato dal modello relazionale. In
effetti, accade in genere che il prodotto cartesiano fornisca, nell’algebra relazionale, non il
risultato ultimo di
una elaborazione, ma solo un risultato intermedio all’interno di una
elaborazione complessa (cfr. Giunzione).
Proiezione di una relazione
Sia R una relazione con insieme di attributi A = { A1, A2,...., An } e sia A’ = { Ai 1 , Ai 2 ,..., Ai k }
un sottoinsieme di A arbitrariamente scelto. Si definisce proiezione di R sull’insieme di attributi A’
la relazione di grado k che si ottiene da R ignorando le colonne relative agli attributi che non
appartengono ad A’, ed eliminando poi le eventuali tuple duplicate (in conformità ai vincoli del
modello relazionale).
In simboli:
Π A’ (R)
oppure
project R on Ai 1 , Ai 2 , ...., Ai k
Osservazione
La proiezione agisce prevalentemente a livello intensionale e, eventualmente anche a livello
estensionale.
Restrizione di una relazione
Sia R una relazione con insieme di attributi A = { A1, A2,...., An }, sia A’ = { Ai 1 , Ai 2 ,..., Ai k } un
sottoinsieme di A arbitrariamente scelto e sia P un predicato sugli attributi in A’. Si definisce
restrizione di R a P (Ai 1 , Ai 2 ,..., Ai k ) la relazione di grado n costituita da tutte la tuple di R che
soddisfano P.
In altre parole la operazione di restrizione (o selezione) consente di estrarre delle tuple dalla
relazione R in base al criterio P stabilito.
In simboli:
5
S.D.L. Campanozzi – “Note di Algebra relazionale”
σP (R)
oppure
restrict R where P
Osservazioni
1) La restrizione agisce esclusivamente a livello estensionale. Si ha in particolare:
0 ≤ Cardinalità (σ
σP (R)) ≤ Cardinalità (R)
2) Il predicato che definisce la restrizione può essere sia semplice, sia composto per mezzo degli
operatori logici And, Or, Not. Inoltre nella espressione del predicato figurano, oltre alle variabili
degli attributi Ai 1 , Ai 2 ,..., Ai k , (e agli operatori di confronto: >, <, =, ≤ , ≥ , ≠ ) anche
costanti compatibili con il tipo degli attributi.
Esempi: N_Figli > 0;
Cognome = ‘Rossi’ And Nome ≠ ‘Antonio’
Ridenominazione
Si considera tra le operazioni primitive la ridenominazione di un attributo di una relazione,
operazione non significativa in sè, ma a volte indispensabile per evitare conflitti di sinonimia
conseguenti ad altre operazioni.
Sia R una relazione avente un attributo A. Rinominare A come B in R significa generare una nuova
relazione identica a R sia intesionalmente, sia estensionalmente, con la sola eccezione dell’attributo
A rinominato come B.
In simboli:
rename A as B in R
3.1 Operatori derivati
Giunzione interna di relazioni
Fra le operazioni derivate, quelle di maggiore utilità sono le operazioni di giunzione interna (“inner
join” in inglese) che permettono di generare una nuova relazione, a partire da due relazioni
assegnate, applicando uno specifico criterio di restrizione sul loro prodotto cartesiano. In base alla
natura specifica del criterio si distinguono diversi tipi di giunzione interna.
a) Equigiunzione (Equijoin)
L’equigiunzione (equijoin) di due relazioni R ed S, rispetto a un attributo A di R ed un attributo
B di S, è la relazione che si ottiene dal prodotto di R ed S selezionando le tuple in cui sono
uguali i valori degli attributi A e B.
In simboli:
6
S.D.L. Campanozzi – “Note di Algebra relazionale”
><| S : = σ A = B (R x S)
R |>
A=B
Osservazioni
1) Il grado della relazione ottenuta con equijoin di R ed S è uguale al grado di R x S, quindi
pari a Grado(R) + Grado(S), mentre la cardinalità è compresa tra zero e Grado(R) x
Grado(S).
2) Nella relazione ottenuta per equijoin di R ed S le due colonne A e B sono identiche.
b) θ -join
Con il termine θ – join si denota una operazione definita in tutto come l’equijoin, ad eccezione
del predicato di restrizione sugli attributi A e B. Fra i due attributi si può porre non solo il
vincolo di uguaglianza, ma una qualunque condizione data dagli operatori di confronto: >, <, =,
≤ , ≥ , ≠. L’equijoin è quindi un caso particolare di θ – join.
In simboli:
R |>
>< | S : = σ A
AθB
θB
(R x S)
ove θ ∈ { >, <, =, ≤ , ≥ , ≠ }
c) Giunzione naturale (natural join)
La giunzione naturale (natural join) di due relazioni R ed S richiede l’ipotesi che esista un
attributo A comune alle due relazioni. Il natural join delle relazioni R e S è una relazione che ha
nello schema tutti gli attributi di R e S, ma l’attributo comune A figura una sola volta; nella
relazione di natural join le tuple si ottengono per concatenazione delle tuple di R con le tuple di
S sotto la condizione di uguaglianza dell’attributo comune A. E’ possibile quindi pensare al
natural join come a un operatore costruito con una ridenominazione, un equijoin e una
proiezione nel modo seguente:
R |>
><| S := Π
<t ut t i gl i a tt ri but i t r an ne B >
( R |>
><| (rename A as B in S))
A=B
Il grado della relazione ottenuta con natural join di R ed S è uguale a Grado(R x S) -1, quindi
pari a Grado(R) + Grado(S) - 1, mentre la cardinalità è compresa tra zero e Grado(R) x
Grado(S).
7
S.D.L. Campanozzi – “Note di Algebra relazionale”
d) Semi-giunzione (semi-join)
La semi-giunzione (semi-join) di due relazioni R ed S è definita operativamente in modo quasi
identico alla giunzione naturale, con l’unica differenza che la proiezione finale viene eseguita
solo sugli attributi di R; ciò significa, in pratica, che si ottiene una relazione con lo schema di R,
e con le sole tuple di R che partecipano alla giunzione naturale di R e S.
In simboli:
>< S := Π
R |>
<t utt i gl i at t ri b uti di R >
><| S)
( R |>
Giunzione esterna di relazioni
Comunemente si annoverano fra gli operatori di giunzione e, quindi, fra gli operatori derivati, le
cosiddette giunzioni esterne (“outer join” in inglese). Esse sono apparentemente affini alle giunzioni
interne, ma, a differenza di quelle, non sono esprimibili in termini di operatori primitivi. Tuttavia,
poichè le giunzioni esterne sono assai utili nelle applicazioni, esse sono ormai considerate “de
facto” una estensione della giunzione interna.
Si segnalano tre forme di giunzione esterna, estensioni della giunzione naturale: consentono di
congiungere le due relazioni R ed S conservando nella relazione risultante anche le tuple di R e/o di
S che non sono state coinvolte in operazioni di concatenazione.
Left outer join
R ]>
>< | S
Si conservano, anche se non concatenate, le tuple di R.
Right outer join
R |>
><[ S
Si conservano, anche se non concatenate, le tuple di S.
Full outer join
R ]><[ S
Si conservano, anche se non concatenate, sia le tuple di R, sia le tuple di S.
8