Algebra relazionale
Def
- A insieme finito o infinito
- A, in algebra relazionale, è detto
dominio
Def
- n \in \mathbb{N}
- D_1, \ldots, D_n domini
- D_1 \times \ldots \times D_n := \{(v_1,
\ldots, v_n) \mid v_1 \in D_1, \ldots , v_n \in D_n\} è detto
prodotto cartesiano dei domini D_1,
\ldots D_n
Def
- n \in \mathbb{N}
- D_1, \ldots , D_n domini
- k \in [1, n]
- R \subseteq D_1 \times \ldots \times
D_k è detta relazione di grado k
- (t_1, \ldots, t_k) \in R è detta
tupla di cardinalità k
- \forall i \in [1, k] \quad (t_1, \ldots,
t_k)[i] = t_i
- \forall a, b \in [1, k] \mid a \lt b \quad
(t_1, \ldots, t_k)[a, b] = (t_a, \ldots, t_b)
Def
- n \in \mathbb{N}
- D_1, \ldots, D_n domini
- R \subseteq D_1 \times \ldots \times
D_n relazione
- R(A_1, \ldots, A_n) è detto
schema relazionale
- R, in algebra relazionale, è
categorizzata tramite attributi, denotati con A_i, nomi con i quali si etichettano le
colonne della tabella, dunque uno schema relazionale è l’insieme delle
etichette
- \forall i \in [1, n] \quad
\textrm{dom}(A_i) := D_i è detto dominio di A_i
- \forall i \in [1, n] \quad A_i \in
\textrm{dom}(A_i)
- n \in \mathbb{N}
- D_1, \ldots, D_n domini
- k \in [1, n]
- R \subseteq D_1 \times \ldots \times
D_k relazione
- R(A_1, \ldots, A_n) schema
relazionale
- D_1, \ldots , D_k, l’insieme delle
tuple di R, è detta istanza
della relazione R
Operazioni
Def
- n \in \mathbb{N}
- D_1, \ldots, D_n domini
- R \subseteq D_1 \times \ldots \times
D_n relazione
- R(A_1, \ldots, A_n) schema
relazionale
- a, b \in [1, n] \mid a \lt b
- \pi_{A_a, \ldots, A_b}(R) := R(A_a,
\ldots, A_b) è detta proiezione di R, associata ad uno schema
relazionale R(A_a, \ldots, A_b)
- n \in \mathbb{N}
- D_1, \ldots, D_n domini
- R \subseteq D_1 \times \ldots \times
D_n relazione
- R(A_1, \ldots, A_n) schema
relazionale
- C espressione booleana
- r istanza di R
- \sigma_C(r) \subseteq D_1 \times \ldots
\times D_n è detta selezione di r
- corrisponde all’insieme delle righe della tabella che rendono la
condizione C vera
- n \in \mathbb{N}
- D_1, \ldots, D_n domini
- R \subseteq D_1 \times \ldots \times
D_n relazione
- R(A_1, \ldots, A_n) schema
relazionale
- R' = \rho_{A_1' \leftarrow
A_1}(R), dove \rho è detto
operatore di rinominazione
- R' sarà uno schema relazionale
con la stessa istanza di R, ma con
A_1 rinominato con A_1'
- n \in \mathbb{N}
- D_1, \ldots, D_n, D_1' ,\ldots,
D_n' domini \mid \forall i \in [1,
n] \quad D_i = D_i'
- R_1 \subseteq D_1 \times \ldots \times
D_n relazione
- R_2 \subseteq D_1' \times \ldots
\times D_n' relazione
- R_1(A_1, \ldots, A_n) schema
relazionale
- R_2(A_1', \ldots, A_n')
schema relazionale
- r_1 istanza di R_1
- r_2 istanza di R_2
- r_1 \cup r_2 := \{t \mid t \in r_1 \lor t
\in r_2\} è detta unione delle istanze r_1 e r_2
- dunque, l’unione di istanze è definita solamente per istanze con
stesso numero di attributi, e attributi con stesso dominio
- n \in \mathbb{N}
- D_1, \ldots, D_n, D_1' , \ldots ,
D_n' domini \mid \forall i \in [1,
n] \quad D_i = D_i'
- R_1 \subseteq D_1 \times \ldots \times
D_n relazione
- R_2 \subseteq D_1' \times \ldots
\times D_n' relazione
- R_1(A_1, \ldots, A_n) schema
relazionale
- R_2(A_1', \ldots, A_n')
schema relazionale
- r_1 istanza di R_1
- r_2 istanza di R_2
- r_2 - r_1 := \{t \mid t \in r_2 \land t
\notin r_1\} è detta differenza delle istanze r_1 e r_2
- dunque, la differenza di istanze è definita solamente per istanze
con stesso numero di attributi, e attributi con stesso dominio
- n \in \mathbb{N}
- D_1 , \ldots , D_n , D_1' , \ldots ,
D_n' domini \mid \forall i \in [1,
n] \quad D_i = D_i'
- R_1 \subseteq D_1 \times \ldots \times
D_n relazione
- R_2 \subseteq D_1' \times \ldots
\times D_n' relazione
- R_1(A_1, \ldots, A_n) schema
relazionale
- R_2(A_1', \ldots, A_n')
schema relazionale
- r_1 istanza di R_1
- r_2 istanza di R_2
- r_1 \cap r_2 := r_2 - (r_2 - r_1) è
detta intersezione delle istanze r_1 e r_2
- dunque, l’intersezione di istanze è definita solamente per istanze
con stesso numero di attributi, e attributi con stesso dominio
- n \in \mathbb{N}
- D_1 , \ldots , D_n, D_1' , \ldots ,
D_n' domini \mid \forall i \in [1,
n] \quad D_i = D_i'
- R_1 \subseteq D_1 \times \ldots \times
D_n relazione
- R_2 \subseteq D_1' \times \ldots
\times D_n' relazione
- R_1(A_1, \ldots, A_n) schema
relazionale
- R_2(A_1', \ldots, A_n')
schema relazionale
- r_1 istanza di R_1
- r_2 istanza di R_2
- r_1 \times r_2 := \{(t_1, t_2) \mid t_1
\in r_1 \land t_2 \in r_2\} è detto prodotto cartesiano
delle istanze r_2 e r_2
Oss
- Hp
- n \in \mathbb{N}
- D_1 , \ldots, D_B , \ldots , D_n, D_1'
, \ldots , D_B' , \ldots , D_n' domini \mid \forall i \in [1, n] \quad D_i =
D_i'
- R_1 \subseteq D_1 \times \ldots \times D_B
\times \ldots \times D_n relazione
- R_2 \subseteq D_1' \times \ldots
\times D_B' \times \ldots \times D_n' relazione
- R_1(A_1, \ldots, B, \ldots, A_n)
schema relazionale
- R_2(A_1', \ldots, B, \ldots,
A_n') schema relazionale
- r_1 istanza di R_1
- r_2 istanza di R_2
- Th
- r_1 \times r_2 contiene tuple senza
significato
- il prodotto cartesiano cercato è \pi_{A_1,
\ldots, B, \ldots, A_n, A_1', \ldots, \hat B', \ldots,
A_n'}(\sigma_{B=B'}(r_1 \times r_2'))
- Dim
- in questa situazione, si verifica che r_1
\times r_2 conterrà delle tuple senza significato, poiché esiste
un attributo con stesso nome in R_1 e
in R_2, ovvero B
- per risolvere questo problema, spesso l’operatore \times viene utilizzato congiuntamente a
\rho, \sigma e \pi
- infatti, per ottenere un prodotto cartesiano con significato è
necessario prima rinominare l’attributo in comune in uno dei due schemi
relazionali, per differenziarli, e dunque R_2' = \rho_{B' \leftarrow B}(R_2), e
sia r_2' l’istanza di R_2'
- successivamente, facendo r_1 \times
r_2', si otterra un’istanza contenente delle tuple ancora
senza significato, che sarà possibile rimuovere selezionando attraverso
\sigma_{B'=B}(r_1 \times
r_2')
- infine, a questo punto si avranno due colonne perfettamente
identiche, e dunque è sufficiente proiettare prendendo solo una delle
colonne tra B e B', e quindi \pi_{A_1, \ldots, B, \ldots, A_n, A_1', \ldots,
\hat B', \ldots, A_n'}(\sigma_{B=B'}(r_1 \times
r_2')) è il prodotto cartesiano cercato
Def
- n \in \mathbb{N}
- D_1, \ldots, D_n, D_1', \ldots ,
D_n' domini \mid \forall i \in [1,
n] \quad D_i = D_i'
- R_1 \subseteq D_1 \times \ldots \times
D_n relazione
- R_2 \subseteq D_1' \times \ldots
\times D_n' relazione
- R_1(A_1, \ldots, A_n) schema
relazionale
- R_2(A_1', \ldots, A_n')
schema relazionale
- r_1 istanza di R_1
- r_2 istanza di R_2
- r_1 \bowtie r_2 è detto
join naturale di r_1 e r_2 ⚠️ manca
definizione
Oss
- Hp
- n \in \mathbb{N}
- D_1, \ldots, D_n, D_1' , \ldots ,
D_n' domini \mid \forall i \in [1,
n] \quad D_i = D_i'
- R_1 \subseteq D_1 \times \ldots \times
D_n relazione
- R_2 \subseteq D_1' \times \ldots
\times D_n' relazione
- R_1(A_1, \ldots, A_n) schema
relazionale
- R_2(A_1', \ldots, A_n')
schema relazionale
- \nexists A \in \{A_1, \ldots, A_n,
A_1', \ldots, A_n'\} \mid \exists A' \in \{A_1, \ldots, A_n,
A_1', \ldots, A_n'\} : A = A', dunque gli attributi
di R_1 ed R_2 sono tutti distinti
- r_1 istanza di R_1
- r_2 istanza di R_2
- Th
- r_1 \times r_2 = r_1 \bowtie
r_2
- Dim
- poiché non ci sono attributi in comune tra R_1 ed R_2,
di fatto non ci sono né righe né colonne da correggere in r_1 \times r_2, dunque necessariamente r_1 \times r_2 = r_1 \bowtie r_2