L'algebra relazionale
Operatori relazionali
Gli operatori relazionali agiscono su una o più relazioni per ottenere una nuova relazione (interrogazioni).
- Selezione
- Proiezione
- Congiunzione
Grado e cardinalità della relazione
- Grado: numero delle colonne della tabella.
- Cardinalità: numero delle righe della tabella.
Selezione
La selezione (si indica con Omega e a pedice si indicano gli elementi della cardinalità) seleziona alcune righe della relazione. Genera una nuova relazione costituita solo dalle tuple della relazione di partenza che soddisfano una determinata condizione; vengono cioè selezionate le righe con i valori degli attributi corrispondenti alla condizione prefissata.
Relazione risultante:
- Grado: uguale.
- Cardinalità: minore o uguale a quella di partenza (di solito minore).
In Access si farà: ATTENZIONE: in questo caso la spunta in Mostra di “Città” va tolta perché questo campo è già mostrato nel campo “Clienti.*”.
Proiezione
La proiezione (si indica con Pigreco e a pedice si indicano gli elementi del grado) produce una relazione con un numero inferiore di colonne. Genera una nuova relazione estraendo dalla tabella iniziale una o più colonne corrispondenti agli attributi prefissati.
Relazione risultante:
- Grado: minore o uguale.
- Cardinalità: minore o uguale a quella di partenza (MINIMO 1).
Dopodiché si eliminano tutti i doppioni: il risultato sarà una tabella con grado 2 e cardinalità 7.
Se invece volessi eseguire una proiezione sugli attributi Cognome e Indirizzo: Si eliminano tutti i doppioni: il risultato sarà una tabella con grado 2 e cardinalità 6.
In Access si farà: Si vuole mostrare l’elenco dei nomi e del telefono dei clienti.
Congiunzione
La congiunzione (join) serve a combinare più tabelle aventi uno o più attributi in comune, generando una nuova tabella (relazione) che contiene le righe della prima e della seconda tabella, che possono essere combinate secondo i valori uguali degli attributi comuni.
Relazione risultante:
- Grado: uguale alla somma dei gradi delle relazioni di partenza meno il numero degli attributi in comune.
- Cardinalità: le righe che si combinano (non prevedibile a priori, in quanto si ottengono solo le righe che possono essere combinate).
Come si fa? Ci si posiziona con un righello sulla prima riga di Studente e di Corso. Ci si pone la domanda: “la Matricola di Studente è uguale alla Matricola di Corso?” Se la risposta è SI, si aggiungono i dati alla nuova tabella. Un metodo alternativo è: Fare il prodotto cartesiano delle due tabelle. Ci si colloca su ogni riga e verificare che Matricola=Codice. Se viene soddisfatta si mantengono le righe. Se non viene soddisfatta allora si eliminano le righe. Per finire si eliminano i gradi che si ripetono (Codice).
In Access si farà: Si vuole mostrare I dati dei clienti e dati degli ordini. ATTENZIONE: in Ordini non si può mettere l’* perché altrimenti IDCliente si ripeterebbe due volte. Perciò devo specificare i campi da mettere nella nuova tabella tranne la chiave esterna (IDCliente).
Self-join
È la congiunzione della tabella con sé stessa. Esempio:
- Cittadini e capifamiglia nell’anagrafe.
- Dipendenti e dirigenti di un’azienda. Con questa tabella (Lavoratori) si identificano i lavoratori e i loro rispettivi capi.
Se io volessi individuare per ogni lavoratore qual è il suo capo dovrei:
- Copiare la tabella iniziale con un alias che lo distingui dalla prima tabella (D.Lavoratori).
- Creare la relazione con Lavoratori.Capo = D.Lavoratori.D.Codice.
- In questo modo si estrarranno le informazioni di ogni dipendente e il suo rispettivo capo.
Tipi di congiunzione (join)
- INNER JOIN o EQUI JOIN: corrispondenza dei valori uguali per attributi comuni nelle due tabelle (esempio precedente).
- JOIN ESTERNO (outer join)
- LEFT JOIN: tutte le righe della prima tabella combinate con quelle della seconda. Compresi i valori della prima tabella che non si combinano (valore nullo).
- RIGHT JOIN: tutte le righe della seconda tabella combinate con quelle della prima. Compresi i valori della seconda tabella che non si combinano (valore nullo).
Altri operatori
Per tabelle con struttura omogenea, cioè righe con lo stesso numero di attributi, dello stesso tipo e nello stesso ordine:
- Unione
- Intersezione
- Differenza
Esempio: Per poter eseguire l’unione è necessario che l’ordine dei campi delle tabelle siano uguali (Cognome, Nome). Con l’unione si otterrà l’elenco dei clienti (senza duplicati). Si avrà una cardinalità pari a 5. Con l’intersezione si otterrà l’elenco dei clienti che si servono sia nella macelleria che nella cartoleria. Cardinalità pari a 1. Con la differenza Macelleria - Cartoleria si avranno tutti i clienti che si servono presso la macelleria, ma non presso la cartoleria (si otterrà che Mauri e Zeni non si servono in cartoleria).
Interrogazioni con uso di più operatori
Esercizio 1
Facoltà (CodFac, Descrizione, Città) Studenti (Matricola, Cognome, Nome, Indirizzo, CodFac) Mostrare il Cognome, Nome e Descrizione della facoltà per gli studenti che risiedono a Milano.
- Quali campi devo mostrare? = Cognome, Nome, Descrizione
- Dove devo prendere questi campi? Cognome in Studenti Nome in Studenti Descrizione in Facoltà. In questo caso non c’è confusione su dove devo prendere i campi in quanto non ci sono più campi uguali.
- Ci sono delle condizioni? Se SI, devo porre delle condizioni. Studenti che risiedono a Milano -> Studenti.Indirizzo = Milano
- I campi su cui faccio la proiezione sono tutti in un’unica tabella? Se NO, devo collegare le tabelle. Si prende la chiave esterna di una tabella e si collega alla chiave primaria dell’altra tabella. Studenti.CodFac = Facoltà.CodFac
Esercizio 2
Ogni rivista può essere oggetto di uno o più abbonamenti. Ogni abbonamento deve avere come oggetto una sola rivista. Ogni abbonamento deve essere sottoscritto da un solo abbonato.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.