algebra relazionale
L' algebra relazionale è un linguaggio di interrogazione nei database relazionali . L'algebra relazionale è stata inventata nel 1970 da Edgar Frank Codd , il direttore della ricerca dell'IBM Center di San José .
Questa è la teoria alla base dei linguaggi di query DBMS , come SQL . Il teorema Codd dice che l'algebra relazionale è equivalente al calcolo relazionale ( logica del primo ordine senza simboli di funzione). È anche equivalente a Datalog non ricorsivo ¬ ( Datalog con negazione). Datalog è un linguaggio di query e regole per database deduttivi.
Secondo Abiteboul et al., l'algebra relazionale è concettualmente un linguaggio "procedurale": le interrogazioni sono infatti sequenze di operazioni che costruiscono la risposta. Questo è in contrasto con linguaggi concettualmente "dichiarativi" come il calcolo relazionale e il Datalog.
Modello relazionale
Nel modello relazionale, i dati vengono archiviati in tabelle, chiamate anche relazioni. Ecco un esempio di relazione:
Più precisamente si costituisce una relazione (ai sensi del modello Codd ):
- di un diagramma, ovvero tutti i nomi dei campi (qui Key, Name, Email), e dei tipi corrispondenti (nell'esempio rispettivamente un intero, quindi due stringhe di caratteri).
- Un'estensione, ovvero il contenuto della tabella, che è un insieme di tuple il cui ordine non ha importanza.
Definizione
Il linguaggio procedurale contiene le operazioni insiemistiche della teoria degli insiemi sulle relazioni così come le operazioni di fusione/progetto di relazioni.
Imposta operatori
Gli operatori di insieme sono l'unione, l'intersezione, la differenza e il prodotto cartesiano.
Unione
L'unione di due relazioni sullo stesso diagramma è la relazione su questo diagramma che contiene esattamente l'unione dei record di queste due relazioni. Formalmente .
R∪S={t:t∈R otu t∈S}{\ displaystyle R \ cup S = \ {t: t \ in R \ o \ t \ in S \} \,}
Dipendenti Renault
Nome |
ID |
Dipartimento
|
---|
Harry |
3415 |
Finanza
|
sortita |
2241 |
Vendita
|
Giorgio |
3401 |
Finanza
|
|
Dipendenti Citroën
Nome |
ID |
Dipartimento
|
---|
Bertrand |
0808 |
Vendita
|
Donald |
0007 |
Vendita
|
|
Dipendenti Renault U Dipendenti Citroën
Nome |
ID |
Dipartimento
|
---|
Harry |
3415 |
Finanza
|
sortita |
2241 |
Vendita
|
Giorgio |
3401 |
Finanza
|
Bertrand |
0808 |
Vendita
|
Donald |
0007 |
Vendita
|
|
Intersezione
L'intersezione di due relazioni sullo stesso schema è la relazione su quello schema che contiene esattamente i record che appaiono in entrambe le relazioni. Formalmente .
R∩S={t:t∈R et t∈S}{\ displaystyle R \ cap S = \ {t: t \ in R \ e \ t \ in S \} \,}
Persone registrate nel calcio
Nome |
ID
|
---|
Harry |
3415
|
sortita |
2241
|
Giorgio |
3401
|
|
Persone iscritte a lezioni di pianoforte
Nome |
ID
|
---|
Harry |
3415
|
Bertrand |
2
|
Giorgio |
3401
|
Yoda |
1000
|
|
Persone iscritte al calcio ∩ Persone iscritte alle lezioni di pianoforte
Nome |
ID
|
---|
Harry |
3415
|
Giorgio |
3401
|
|
Differenza
La differenza di due relazioni sullo stesso schema è la relazione su quello schema che contiene esattamente i record che appaiono nella prima relazione ma non nella seconda. Formalmente . Ad esempio, possiamo calcolare le persone iscritte al calcio ma che non sono iscritte alle lezioni di pianoforte:
R-S={t:t∈R et t∉S}{\ displaystyle RS = \ {t: t \ in R \ e \ t \ non \ in S \} \,}
Persone registrate nel calcio
Nome |
ID
|
---|
Harry |
3415
|
sortita |
2241
|
Giorgio |
3401
|
|
Persone iscritte a lezioni di pianoforte
Nome |
ID
|
---|
Harry |
3415
|
Bertrand |
2
|
Giorgio |
3401
|
Yoda |
1000
|
|
Persone iscritte al calcio - Persone iscritte alle lezioni di pianoforte
Nome |
ID
|
---|
sortita |
2241
|
|
prodotto cartesiano
Con il prodotto cartesiano di due relazioni, copiamo ogni tupla della prima relazione per ciascuna delle tuple della seconda. Formalmente .R×S={(r,S):r∈R et S∈S}{\ displaystyle R \ times S = \ {(r, s): r \ in R \ e \ s \ in S \}}
Persone
Nome |
ID
|
---|
Harry |
3415
|
sortita |
2241
|
|
I regali
genere |
Prezzo
|
---|
consegnato |
10
|
torta |
20
|
computer |
300
|
|
Persone - Regali
Nome |
ID |
genere |
Prezzo
|
---|
Harry |
3415 |
consegnato |
10
|
Harry |
3415 |
torta |
20
|
Harry |
3415 |
computer |
300
|
sortita |
2241 |
consegnato |
10
|
sortita |
2241 |
torta |
20
|
sortita |
2241 |
computer |
300
|
|
Operatori relazionali
Selezione
La selezione (o restrizione) consiste nel conservare solo i record che soddisfano una data condizione. Nell'esempio seguente, teniamo solo i turisti la cui città è Parigi.
- Dati: una relazione e una formula formate da una combinazione di confronti e connettori logici.R{\ stile di visualizzazione R \,}F{\ stile di visualizzazione F \,}
- Risultato: soddisfa la condizione data da , nell'esempio TuristiσF(R)={r∈R:r{\ displaystyle \ sigma _ {F} (R) = \ {r \ in R: r \,}F}{\ stile di visualizzazione F \} \,}σViolle='ParioS'({\ displaystyle \ sigma _ {Città = 'Parigi'} (\,}){\ stile di visualizzazione) \,}
- Equivalente SQL: DOVE
Turisti
idTourist |
NomeT |
città |
Sport
|
---|
1 |
Marc |
Parigi |
Sciare
|
2 |
Jeans |
Tolosa |
Tennis
|
3 |
Franco |
Marsiglia |
Calcio
|
4 |
Thomas |
Lione |
Vela
|
5 |
Max |
Parigi |
Golf
|
|
Selezione di turisti dove la città vale Parigi
idTourist |
NomeT |
città |
Sport
|
---|
1 |
Marc |
Parigi |
Sciare
|
5 |
Max |
Parigi |
Golf
|
|
Proiezione
-
La proiezione consente di mantenere solo determinati attributi. Nell'esempio seguente, manteniamo solo gli attributi NameT e City della relazione Tourist.
- Dati: una relazione e un insieme di attributi diR{\ stile di visualizzazione R \,}A{\ stile di visualizzazione A \,}R{\ stile di visualizzazione R \,}
- Risultato:, che è la Relazione in cui consideriamo solo gli attributi di , ad esempio Turisti TouristπA(R){\ displaystyle \ pi _ {A} (R) \,}R{\ stile di visualizzazione R \,}A{\ stile di visualizzazione A \,}πNONomT,Violle({\ displaystyle \ pi _ {NomeT, Città} (\,}){\ stile di visualizzazione) \,}
- Equivalente SQL: SELECT
Turisti
idTourist |
NomeT |
città |
Sport
|
---|
1 |
Marc |
Parigi |
Sciare
|
2 |
Jeans |
Tolosa |
Tennis
|
3 |
Franco |
Marsiglia |
Calcio
|
4 |
Thomas |
Lione |
Vela
|
5 |
Max |
Parigi |
Golf
|
|
Proiezione della Relazione Turistica sugli attributi NomT e Ville
NomeT |
città
|
---|
Marc |
Parigi
|
Jeans |
Tolosa
|
Franco |
Marsiglia
|
Thomas |
Lione
|
Max |
Parigi
|
|
Rinominare
-
Rinomina :
- Dati: una relazione e un attributo diR{\ stile di visualizzazione R \,}b{\ stile di visualizzazione b \,}R{\ stile di visualizzazione R \,}
- Risultato:, che è il rapporto con rinominatoρa/b(R){\ displaystyle \ rho _ {a / b} (R) \,}R{\ stile di visualizzazione R \,}b{\ stile di visualizzazione b \,}a{\ stile di visualizzazione a \,}
- Equivalente SQL: AS
Aderire
-
Partecipa :
- Dati: due relazioni eR{\ stile di visualizzazione R \,}S{\ stile di visualizzazione S}
- Risultato: R⋈S={(a,b,vs):(a,b)∈R et (b,vs)∈S}{\ displaystyle R \ bowtie S = \ {(a, b, c) :( a, b) \ in R \ e \ (b, c) \ in S \} \,}
- Equivalente SQL: JOIN
Turisti
idTourist |
NomeT |
città |
Sport
|
---|
1 |
Marc |
Parigi |
Sciare
|
2 |
Jeans |
Tolosa |
Tennis
|
3 |
Franco |
Marsiglia |
Calcio
|
4 |
Thomas |
Lione |
Vela
|
5 |
Max |
Parigi |
Golf
|
|
Destinazioni
idTourist |
cittàD
|
---|
1 |
Cannes
|
2 |
Ibiza
|
4 |
Tokyo
|
|
Turisti ⋈ Destinazioni
idTourist |
NomeT |
città |
Sport |
cittàD
|
---|
1 |
Marc |
Parigi |
Sciare |
Cannes
|
2 |
Jeans |
Tolosa |
Tennis |
Ibiza
|
4 |
Thomas |
Lione |
Vela |
Tokyo
|
|
Divisione
-
Divisione : prende come input due relazionie.
R(X1,...,Xm,sì1,...,sìp){\ stile di visualizzazione R (x_ {1}, ..., x_ {m}, y_ {1}, ..., y_ {p}) \,}S(sì1,...,sìp){\ displaystyle S (y_ {1}, ..., y_ {p}) \,}
- Pertanto, qualsiasi tupla può essere suddivisa in due tuple , con schema e schema . e restituisce la tabella dello schema come . La divisione equivale a dare "tutti x tali che per tutti y ..."r∈R{\ displaystyle r \ in R \,}r=(t,S){\ stile di visualizzazione r = (t, s) \,}t=(t1,...,tm){\ displaystyle t = (t_ {1}, ..., t_ {m}) \,}X={X1,...,Xm}{\ displaystyle X = \ {x_ {1}, ..., x_ {m} \} \,}S=(S1,...,Sp){\ displaystyle s = (s_ {1}, ..., s_ {p}) \,}sì={sì1,...,sìp}{\ displaystyle y = \ {y_ {1}, ..., y_ {p} \} \,}X{\ stile di visualizzazione X \,}R/S={t:∀S∈S, (t,S)∈R}{\ displaystyle R / S = \ {t: \ forall s \ in S, \ (t, s) \ in R \} \,}
Espressività
L'algebra SPC (selezione, proiezione e prodotto cartesiano) corrisponde al calcolo congiuntivo (calcolo relazionale senza disgiunzione e senza negazione): è una delle versioni del teorema di Codd . L'algebra SPCU- (l'algebra SPC con l'aggiunta di unione e differenza) corrisponde all'intero calcolo relazionale: è un'altra versione del teorema di Codd . L'equijoin Può essere espresso con un prodotto cartesiano, seguito da una selezione, quindi da una proiezione.
Ottimizzazione
Ecco le regole di riscrittura per trasformare un'espressione di algebra relazionale in un'altra espressione equivalente.
Implementazione
Tuttavia, i database relazionali non funzionano secondo le regole stabilite dell'algebra relazionale. Infatti, se non si definiscono una chiave primaria , è possibile inserire più righe identiche in una tabella , che una prospettiva ensemblist ha alcun significato: un elemento appartiene o meno fa parte di un insieme. Se vogliamo applicare rigorosamente le regole degli insiemi, dobbiamo controllare ogni volta che si aggiunge una tabella che le righe introdotte non siano già presenti.
Oggetti specifici del modello
Si tratta qui di determinare i domini (cioè il tipo atomico):
- Numerico: intero o reale ( SQL : Int, Float, ecc.);
- Stringa di caratteri (SQL: Char (20), VarChar (32), ecc.);
- Data (SQL: DATA, ORA, ANNO, ecc.);
- Tipo enumerato.
Note e riferimenti
-
(in) Fondamenti dei database: il livello logico , Addison-Wesley Longman Publishing Co., Inc.1995, 685 pag. ( ISBN 978-0-201-53771-0 , leggi in linea ) , p. 10
-
(in) Fondamenti dei database: il livello logico , Addison-Wesley Longman Publishing Co., Inc.1995, 685 pag. ( ISBN 978-0-201-53771-0 , leggi online ) , Parte B - Nozioni di base: Relational QueryLanguages - p. 35
-
" Impara database e SQL " , su Developpez.com (consultato il 19 maggio 2019 )
-
http://www.scritube.com/limba/franceza/Aide-mmoire-sur-les-bases-de-d21481108.php
Vedi anche
link esterno
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">