Come in algebra possono essere definite operazioni sulle relazioni. Ci sono operatori tipici dei database relazionali e quelli dell' insiemistica. Un operatore relazionale opera una trasformazione su una relazione e produce unaltra relazione: operatore unario (come loperatore di selezione); oppure un operatore relazionale opera una trasformazione su due tabelle o relazioni e produce una relazione: operatore binario (operatore congiunzione).
Opera su due tabelle che hanno la stessa struttura e produce una terza tabella che contiene lunione delle righe delle due tabelle eliminando quelle doppie: infatti abbiamo visto che nelle relazioni tutte le righe devono essere distinte.
TCLIENTI (codcli, nome, indirizzo, cap, citta, codfisc)
TFORNITORI (codfor, nome, indirizzo, cap, citta, codfisc)
Hanno entrambe la stessa struttura. Le due tabelle sono definite sugli stessi insiemi dominio. Non è il fatto che i nomi degli attributi siano uguali a renderli compatibili, ma il fatto che provengono dallo stesso insieme di definizione. Lunione di queste due tabelle produrrà una terza tabella che chiamerò CLIFOR con la seguente struttura:
TCLIFOR (codice, nome, indirizzo, cap, citta, codfisc).
Questa notazione si usa per descrivere le tabelle nei database relazionali: allinizio viene il nome della tabella e tra parentesi vengono elencati i suoi attributi; la chiave primaria va indicata per prima e sottolineata.
N.B.: la cardinalità della relazione ottenuta è <= a quella della relazione di origine, il grado è =
Anche questo operatore è definito su due relazioni che devono avere la stessa struttura. Loperatore intersezione produce una relazione che contiene sono le T-ple che compaiono in entrambe le relazioni dorigine. Se ci rifacciamo allesempio precedente, l'intersezione delle due tabelle CLIENTI e FORNITORI contiene solo quei clienti della ditta che sono anche fornitori.
N.B. La cardinalità della relazione ottenuta è < della minima tra le cardinalità delle due relazioni di origine, il grado è =.
Questo operatore è un operatore binario e si applica sempre a relazioni che hanno la stessa struttura. La differenza di due relazioni contiene linsieme delle T-ple che compaiono nella prima relazione e non compaiono nella seconda.
R1= Differenza (TCLIENTI, TFORNITORI)
La relazione R1 contiene tutti i clienti che non sono anche fornitori.
N.B: la cardinalità della relazione risultato è <= a quella della prima relazione, il grado è =.
Operatore unario che opera su una relazione e produce unaltra relazione che è sottoinsieme della prima. Quindi esprimendo una certa condizione, loperatore di selezione costruirà una tabella formata dallinsieme delle T-ple che soddisfano quella condizione.
TARTICOLI (codice, tipo, descrizione, prezzo)
R2 = SELEZIONE (TARTICOLI, tipo = Lavatrice)
La relazione R2 contiene tutte le lavatrici del magazzino
N.B.: la selezione influisce sulla cardinalità di una relazione: la relazione risultato ha sempre una cardinalità <= a quella di partenza, e lo stesso grado
E un operatore unario che agisce su una relazione producendo una relazione che contiene un sottoinsieme degli attributi della relazione originale. Quindi ha la proprietà di modificare la struttura della tabella, mentre quelli che abbiamo visto finora la lasciano inalterata. Qualora nella relazione risultato ci fossero delle T-ple uguali queste vengono eliminate. Gli attributi da mantenere vengono elencati al posto della condizione.
TARTICOLI (codice, tipo, descrizione, prezzo)
QLISTINO = PROIEZIONE (TARTICOLI, descrizione, prezzo).
N.B.: la proiezione influisce sul grado di una relazione: la relazione risultato ha sempre un grado < di quello di partenza, e cardinalità = o < (se ci sono righe doppie da eliminare).
E un operatore binario che agisce su due relazioni producendo una relazione che contiene tutti gli attributi delle due relazioni originali. Perchè la congiunzione abbia un senso, le due relazioni devono avere un attributo in comune, cioè devono essere state poste in relazione tra loro mediante una chiave primaria = chiave esterna.
Ci sono diversi tipi di JOIN a seconda di come l'attributo in comune viene definito:
NATURAL JOIN: quando le due chiavi (chiave primaria e chiave esterna) hanno lo stesso nome
EQUI JOIN quando sono definite da una condizione tipo chiave primaria = chiave esterna
L' equi Join si suddivide a sua volta in tre tipi:
INNER JOIN la relazione risultato esclude tutte le T-ple per cui non viene trovata una corrispondenza nell'altra tabella
LEFT JOIN la relazione risultato comprende tutte le T-ple della prima relazione, anche se non hanno corrispondenti nella seconda
RIGHT JOIN la relazione comprende tutte le T-ple della seconda relazione anche se non hanno corrispondenti nella prima
TARTICOLI (codice, tipo, descrizione, prezzo, fornitore)
TFORNITORI (codfisc, nome, indirizzo)
R3 = INNER JOIN (TFORNITORI, TARTICOLI, fornitore = codfisc).
Fornisce l'elenco degli articoli con i relativi fornitori: gli articoli senza fornitore e i fornitori senza articoli non sono riportati
R4 = LEFT JOIN (TFORNITORI, TARTICOLI, fornitore = codfisc).
Fornisce l'elenco di tutti i fornitori (anche quelli senza articoli) con i relativi articoli
R5 = RIGHT JOIN (TFORNITORI, TARTICOLI, fornitore = codfisc).
Fornisce l'elenco di tutti gli articoli (anche quelli senza fornitore) con i relativi fornitori
N.B.: la relazione risultante avrà una cardinalità <= alla massima tra le due cardinalità delle relazioni di origine, e il grado sarà = alla somma dei gradi - 1 (l' attributo in comune)
Gli operatori relazionali si formalizzano in questo modo:
RISULTATO = OPERATORE ((Relazione1, Relazione2) , (Condizioni)).
|
|
|
|