Index
Related
Proiezione
Definizione
La Proiezione consente di effettuare un “taglio verticale” su una relazione, cioè di selezionare solo alcune colonne (attributi).
Dove:
- è una relazione
- sono gli attributi della relazione che vogliamo selezionare.
Esempio
Cliente
Nome C# Città Rossi C1 Roma Rossi C2 Milano Bianchi C3 Roma Verdi C4 Roma Query
Output
Nome Rossi Bianchi Verdi oss: I doppioni vengono tagliati Se vogliamo conservare i clienti omonimi dobbiamo aggiungere un ulteriore attributo, in questo caso la «chiave» (il codice)
Selezione
Definizione
LA Selezione consente di effettuare un “taglio orizzontale” su una relazione, cioè di selezionare solo le righe (tuple) che soddisfano una data condizione.
Dove:
- è una condizione (ovvero un espressione booleana composta da operatori booleani e attributi con stesso dominio)
- una relazione
- = le tuple di che soddisfano la condizione
Esempio
Clienti
Nome C# Città Rossi C1 Roma Rossi C2 Milano Rossi C3 Roma Bianchi C4 Roma Verdi C5 Roma Query 1
Output:
Nome C# Città Rossi C1 Roma Rossi C3 Roma Bianchi C4 Roma Verdi C5 Roma Query 2
Output:
Nome C# Città Rossi C1 Roma Rossi C3 Roma
Unione
Definizione
L’unione costruisce una relazione che contiene tutte le ennuple appartengono ad almeno uno dei due operandi.
Union Compatible
L’ operazione di unione può essere utilizzata soltanto su operandi union compatible cioè tali che:
hanno lo stesso numero di attributi.
gli attributi (nell’ordine) sono definiti sullo stesso dominio.
oss: non è necessario che gli attributi abbiano lo stesso nome, ma ovviamente il risultato ha senso se hanno un significato omogeneo.
Esempio 1
Supponiamo di avere due relazioni:
Column
Relazione R
Nome Età Mario 25 Luca 30 Giovanni 35 Relazione S
Nome Età Mario 25 Luca 30 Francesco 20 L’operazione di unione tra R e S, denotata come R ∪ S, restituisce una nuova relazione che contiene tutte le tuple presenti in R o in S.
R ∪ S
Nome Età Mario 25 Luca 30 Giovanni 35 Francesco 20 In questo esempio, la relazione R ∪ S contiene tutte le tuple presenti in R e S, senza duplicati. Le tuple (Mario, 25) e (Luca, 30) sono presenti in entrambe le relazioni, quindi sono incluse solo una volta nella relazione di unione.
Esempio 2
Column
Docenti
Nome CodDoc Dipartimento Rossi D1 Matematica Rossi D2 Lettere Bianchi D3 Matematica Verdi D4 Lingue Amministrativi
Nome CodAmm Mansioni Esposito A1 Contabilità Riccio A2 Didattica Pierro A3 Segreteria Bianchi A4 Didattica Problema
docenti
edamministrativi
perché anno dei domini diversi.In questo caso non possiamo fare l’Unione tra
Soluzione Proiezione su gli elementi comuni:
Column
Proiezione Docenti
Nome CodDoc Rossi D1 Rossi D2 Bianchi D3 Verdi D4 Proiezione Amministrativi
Nome CodAmm Esposito A1 Riccio A2 Pierro A3 Bianchi A4 Personale
Nome CodAmm Rossi D1 Rossi D2 Bianchi D3 Verdi D4 Esposito A1 Riccio A2 Pierro A3 Bianchi A4
Differenza
Definizione
La differenza costruire una relazione contenente tutte le tuple che appartengono al primo operando e NON appartengono al secondo operando.
Union Compatible
Anche la gli operandi della differenza devono essere union compatible.
Esempio
Supponiamo di avere due relazioni:
Column
Relazione R
Nome Età Mario 25 Luca 30 Giovanni 35 Relazione S
Nome Età Mario 25 Luca 30 Francesco 20 L’operazione di differenza tra R e S, denotata come R - S, restituisce una nuova relazione che contiene solo le tuple presenti in R ma non in S.
R - S
Nome Età Giovanni 35 In questo esempio, la relazione R - S contiene solo la tupla (Giovanni, 35) perché essa è presente in R ma non in S. Le tuple (Mario, 25) e (Luca, 30) sono presenti in entrambe le relazioni, quindi non sono incluse nella relazione di differenza.
Intersezione
Definizione
L’intersezione costruisce una relazione contenente tutte le tuple che appartengono ad entrambi gli operandi.
Union Compatible
Anche la gli operandi dell’intersezione devono essere union compatible.
Correlazione con Differenza
Esempio
Supponiamo di avere queste due relazioni, e di voler creare una tabella che ci mostri il personale che è sia un docente e amministrativo, mostrando anche i ruoli.
Column
Docenti
Nome CodDoc Dipartimento Rossi D1 Matematica Rossi D2 Lettere Bianchi D3 Matematica Verdi D4 Lingue Amministrativi
Nome CodAmm Mansioni Esposito A1 Contabilità Riccio A2 Didattica Piero A3 Segreteria Bianchi A4 Didattica Step 1
CodDoc
eCodAmm
(che anno significati analoghi) in modo da avere una colonna comune. Possiamo fare questo utilizzando l'operatore di rinominazione (ρ).Column
Docenti_Rinominati
Nome Codice Dipartimento Rossi D1 Matematica Rossi D2 Lettere Bianchi D3 Matematica Verdi D4 Lingue Amministrativi_Rinominati
Nome Codie Mansioni Esposito A1 Contabilità Riccio A2 Didattica Pierro A3 Segreteria Bianchi A4 Didattica Step 2
Dipartimento
eManzione
(non fanno parte dello stesso dominio) facendo una proiezione () suNome
eCodice
.
Nome Codice Bianchi D3 Bianchi A4
Prodotto Cartesiano
Definizione
Il prodotto cartesiano costruisce una relazione che contiene tutte le possibili combinazioni di tuple dai due operandi.
Esempio Base
Column
RelazioneA
Colore Dimensione Rosso Grande Blu Piccolo RelazioneB
Forma Materiale Quadrato Legno Cerchio Metallo Prodotto Cartesiano
Colore Dimensione Forma Materiale Rosso Grande Quadrato Legno Rosso Grande Cerchio Metallo Blu Piccolo Quadrato Legno Blu Piccolo Cerchio Metallo
Esempio Con Complicazioni
Abbiamo due Relazioni una che rappresenta i
clienti
l’altra che rappresenta gliordini
fatti dai clienti.In particolare ogni cliente ha un codice univoco
C#
che presente anche nell’ordine (sotto forma diCC#
) per risalire al cliente che ha fatto l’ordine.Query: Creare una tabella che mette in relazione i dati dei clienti e i dati degli ordini.
Column
Clienti
Nome C# Città Rossi C1 Roma Rossi C2 Milano Bianchi C3 Roma Verdi C4 Roma Ordini
O# CC# A# N-pezzi O1 C1 A1 100 O2 C2 A2 200 O3 C3 A2 150 O4 C4 A3 200 O1 C1 A2 200 O1 C1 A3 100 Prodotto Cartesiano
Nome C# Città O# CC# A# N-pezzi Rossi C1 Roma O1 C1 A1 100 Rossi C1 Roma O2 C2 A2 200 Rossi C1 Roma O3 C3 A2 150 Rossi C1 Roma O4 C4 A3 200 Rossi C1 Roma O1 C1 A2 200 Rossi C2 Milano O1 C1 A1 100 … … … … … … … Bianchi C3 Roma O3 C1 A1 100 … … … … … … … Verdi C4 Roma O4 A3 200 … … … … … … … ERRORE
#C
) non combacia sempre con il codice cliente del ordine (#CC
) per queste casistiche non è ottimale utilizzare il prodotto cartesiano, ma conviene utilizzar Join-Naturale o il Theta-Join.Come è possibile notare il codice cliente (