Quando lavoriamo con il modello relazionale, abbiamo 2 gruppi di operazioni che possiamo usare.
Il primo si chiama algebra relazionale ed è un linguaggio procedurale .
Questo è ciò su cui si basa SQL e, in quanto tale, è molto importante da imparare, poiché SQL è lo standard de facto per lavorare con i database relazionali.
Il secondo è chiamato calcolo relazionale e invece di essere procedurale, è un linguaggio dichiarativo . È una differenza fondamentale nel modo in cui interagiamo con i database, perché non dici al software del database cosa fare , devi solo dirgli cosa vuoi e lascia che risolva i dettagli su come farlo.
Questa è una distinzione comune tra i linguaggi di programmazione. Nel frontend moderno, diciamo che l'interazione con il DOM in React è dichiarativa. L'uso di JavaScript vanilla per modificare il DOM è procedurale.
Linguaggi come Datalog, QBE e QUEL hanno come base il calcolo relazionale. Non parlerò di questo perché penso che sia un modo molto più di nicchia di fare le cose rispetto all'approccio più pratico seguito da SQL, ma puoi guardarlo se vuoi.
Data questa introduzione, andiamo avanti con l'algebra relazionale .
Abbiamo 2 tipi di operazioni:
- operazioni primarie
- unire operazioni
Operazioni primarie in algebra relazionale
Le operazioni primarie sono:
- unione per ottenere dati da due tabelle, generando una somma delle tuple, purché le due tabelle abbiano le stesse colonne e gli stessi tipi di attributi (dominio).
- differenza ottenere i dati contenuti nella prima tabella ma non nella seconda, generando una differenza delle tuple, purché le due tabelle abbiano le stesse colonne e gli stessi tipi di attributi (dominio).
- prodotto cartesiano per ottenere i dati da due tabelle e generare un'unica tabella che combina i dati di esse, in base al valore di un attributo.
- seleziona per estrarre solo alcune delle tuple (righe) contenute in una tabella in base a determinati criteri.
- progetto per generare una nuova tabella contenente solo uno o più attributi (colonne) di una tabella esistente
- rinomina utilizzato per rinominare un attributo, utilizzato per prevenire conflitti quando più tabelle hanno lo stesso nome per dati diversi
Operazioni di join nell'algebra relazionale
I join sono probabilmente le operazioni più potenti che puoi eseguire con l'algebra relazionale. Si basano sulle operazioni primarie e consentono di correlare i dati contenuti in diverse relazioni (tabelle).
Nota:parlerò presto di join in pratica in un DBMS, questa è principalmente teoria.
Abbiamo 2 versioni principali di join:natural join e theta join . Tutte le altre versioni sono estratte da quelle 2.
Partecipa naturale
Adesione naturale mette in correlazione due relazioni (tabelle) e crea una nuova tabella basata sugli stessi valori di un attributo.
Per prima cosa abbiamo bisogno di due relazioni con lo stesso nome di attributo (colonna). Quindi se i valori negli attributi nella relazione A non hanno corrispondenza negli attributi nella relazione B, la riga non fa parte del risultato, viene ignorata.
Esempio:
Relazione A
ID dipendente | Nome |
---|---|
1 | Segna |
2 | Tony |
3 | Rick |
Relazione B
Nome allenatore | ID dipendente |
---|---|
Todd | 1 |
Alberto | 2 |
Possiamo eseguire un join naturale per ottenere il nome del capo per ogni dipendente:
ID dipendente | Nome | Nome manager |
---|---|---|
1 | Segna | Todd |
2 | Tony | Alberto |
Poiché le relazioni hanno in comune il nome dell'attributo ID dipendente, è presente solo una volta nel risultato, non 2 volte.
Il dipendente n. 3 presente nella relazione A, Rick, non è incluso in questa tabella, perché non esiste una voce corrispondente nella relazione B.
Theta-join
Un theta-join consente di eseguire un join in base a qualsiasi criterio per confrontare due colonne in due relazioni diverse, non solo l'uguaglianza come fa il join naturale.
Esegue un prodotto cartesiano di due tabelle e filtra i risultati in base alla selezione che vogliamo effettuare.
Equi-join
L'equi-join è un join theta, in cui la selezione si basa sull'uguaglianza tra i valori degli attributi nelle due diverse tabelle.
La differenza con il join naturale è che possiamo scegliere quali nomi di attributi (colonne) vogliamo confrontare.
Parleremo molto di più dei join in seguito, quando verrà introdotto SQL, in modo da poterli utilizzare in pratica.