Algebra relațională
Algebra relațională este un limbaj de interogare în baze de date relaționale . Algebra relațională a fost inventată în 1970 de Edgar Frank Codd , directorul de cercetare al Centrului IBM din San José .
Aceasta este teoria din spatele limbajelor de interogare DBMS , cum ar fi SQL . Teorema Codd a spus algebra relațională este echivalent cu calculul relațională ( logica primei ordine fără simboluri funcționale). De asemenea, este echivalent cu Datalog non-recursiv ¬ ( Datalog cu negație). Datalog este un limbaj de interogare și regulă pentru baze de date deductive.
Potrivit lui Abiteboul și colab., Algebra relațională este conceptual un limbaj „procedural”: într-adevăr, interogările sunt secvențe de operații care construiesc răspunsul. Acest lucru este în contrast cu limbajele „declarative” conceptuale, cum ar fi calculul relațional și Datalog.
Modelul relațional
În modelul relațional, datele sunt stocate în tabele, numite și relații. Iată un exemplu de relație:
Mai precis, o relație (în sensul modelului Codd ) este constituită:
- a unei diagrame, adică toate numele câmpurilor (aici Cheie, Nume, E-mail) și a tipurilor corespunzătoare (în exemplu, respectiv un număr întreg, apoi două șiruri de caractere).
- O extensie, adică conținutul tabelului, care este un set de tupluri a căror ordine nu contează.
Definiție
Limbajul procedural conține operațiile de seturi ale teoriei de seturi asupra relațiilor, precum și operațiile de fuzionare / relații de proiectare.
Set operatori
Operatorii de set sunt uniunea, intersecția, diferența și produsul cartezian.
Uniune
Unirea a două relații pe aceeași diagramă este relația din această diagramă care conține exact unirea înregistrărilor acestor două relații. În mod formal .
R∪S={t:t∈R otu t∈S}{\ displaystyle R \ cup S = \ {t: t \ in R \ sau \ t \ in S \} \,}
Angajații Renault
Numele de familie |
ID |
Departament
|
---|
Harry |
3415 |
Finanţa
|
Sally |
2241 |
Vânzare
|
George |
3401 |
Finanţa
|
|
Angajații Citroën
Numele de familie |
ID |
Departament
|
---|
Bertrand |
0808 |
Vânzare
|
Donald |
0007 |
Vânzare
|
|
Angajații Renault U Angajații Citroën
Numele de familie |
ID |
Departament
|
---|
Harry |
3415 |
Finanţa
|
Sally |
2241 |
Vânzare
|
George |
3401 |
Finanţa
|
Bertrand |
0808 |
Vânzare
|
Donald |
0007 |
Vânzare
|
|
Intersecție
Intersecția a două relații pe aceeași schemă este relația pe acea schemă care conține exact înregistrările care apar în ambele relații. În mod formal .
R∩S={t:t∈R et t∈S}{\ displaystyle R \ cap S = \ {t: t \ în R \ și \ t \ în S \} \,}
Persoane înregistrate în fotbal
Numele de familie |
ID
|
---|
Harry |
3415
|
Sally |
2241
|
George |
3401
|
|
Oameni înscriși la lecții de pian
Numele de familie |
ID
|
---|
Harry |
3415
|
Bertrand |
2
|
George |
3401
|
Yoda |
1000
|
|
Persoane înregistrate la fotbal ∩ Persoane înregistrate la lecții de pian
Numele de familie |
ID
|
---|
Harry |
3415
|
George |
3401
|
|
Diferență
Diferența dintre două relații pe aceeași schemă este relația pe acea schemă care conține exact înregistrările care apar în prima relație, dar nu în a doua. În mod formal . De exemplu, putem calcula persoanele înregistrate în fotbal, dar care nu sunt înregistrate la lecțiile de pian:
R-S={t:t∈R et t∉S}{\ displaystyle RS = \ {t: t \ în R \ și \ t \ not \ în S \} \,}
Persoane înregistrate în fotbal
Numele de familie |
ID
|
---|
Harry |
3415
|
Sally |
2241
|
George |
3401
|
|
Oameni înscriși la lecții de pian
Numele de familie |
ID
|
---|
Harry |
3415
|
Bertrand |
2
|
George |
3401
|
Yoda |
1000
|
|
Persoane înregistrate la fotbal - Persoane înregistrate la lecțiile de pian
Numele de familie |
ID
|
---|
Sally |
2241
|
|
produs cartezian
Cu produsul cartezian din două relații, copiem fiecare tuplu al primei relații pentru fiecare dintre tuplurile celei de-a doua. În mod formal .R×S={(r,s):r∈R et s∈S}{\ displaystyle R \ times S = \ {(r, s): r \ în R \ și \ s \ în S \}}
oameni
Numele de familie |
ID
|
---|
Harry |
3415
|
Sally |
2241
|
|
Cadouri
Tip |
Preț
|
---|
livrat |
10
|
tort |
20
|
calculator |
300
|
|
Oameni - Cadouri
Numele de familie |
ID |
Tip |
Preț
|
---|
Harry |
3415 |
livrat |
10
|
Harry |
3415 |
tort |
20
|
Harry |
3415 |
calculator |
300
|
Sally |
2241 |
livrat |
10
|
Sally |
2241 |
tort |
20
|
Sally |
2241 |
calculator |
300
|
|
Operatori relaționali
Selecţie
De selecție (sau restricția) constă în a reține numai înregistrările care îndeplinesc o condiție dată. În exemplul de mai jos, păstrăm doar turiști al căror oraș este Paris.
- Date: O relație și o formulă formate dintr-o combinație de comparații și conectori logici.R{\ displaystyle R \,}F{\ displaystyle F \,}
- Rezultat: îndeplinește condiția dată de , în exemplul TuriștiσF(R)={r∈R:r{\ displaystyle \ sigma _ {F} (R) = \ {r \ în R: r \,}F}{\ displaystyle F \} \,}σVeulle=′Plareus′({\ displaystyle \ sigma _ {City = 'Paris'} (\,}){\ displaystyle) \,}
- Echivalent SQL: UNDE
Turisti
idTourist |
NumeT |
Oraș |
Sport
|
---|
1 |
Marc |
Paris |
Schi
|
2 |
Blugi |
Toulouse |
Tenis
|
3 |
Franc |
Marsilia |
Fotbal
|
4 |
Thomas |
Lyon |
Naviga
|
5 |
Max |
Paris |
Golf
|
|
Selecție de turiști unde orașul merită Parisul
idTourist |
NumeT |
Oraș |
Sport
|
---|
1 |
Marc |
Paris |
Schi
|
5 |
Max |
Paris |
Golf
|
|
Proiecție
-
Proiecția face posibilă menținerea numai anumite atribute. În exemplul de mai jos, păstrăm numai atributele NameT și City ale relației turistice.
- Date: O relație și un set de atribute aleR{\ displaystyle R \,}LA{\ displaystyle A \,}R{\ displaystyle R \,}
- Rezultat:, care este relația în care luăm în considerare doar atributele , de exemplu, turiștiiπLA(R){\ displaystyle \ pi _ {A} (R) \,}R{\ displaystyle R \,}LA{\ displaystyle A \,}πNUomT,Veulle({\ displaystyle \ pi _ {NameT, City} (\,}){\ displaystyle) \,}
- Echivalent SQL: SELECT
Turisti
idTourist |
NumeT |
Oraș |
Sport
|
---|
1 |
Marc |
Paris |
Schi
|
2 |
Blugi |
Toulouse |
Tenis
|
3 |
Franc |
Marsilia |
Fotbal
|
4 |
Thomas |
Lyon |
Naviga
|
5 |
Max |
Paris |
Golf
|
|
Proiecția relației turistice pe atributele NomT și Ville
NumeT |
Oraș
|
---|
Marc |
Paris
|
Blugi |
Toulouse
|
Franc |
Marsilia
|
Thomas |
Lyon
|
Max |
Paris
|
|
Redenumire
-
Redenumire :
- Date: O relație și un atribut deR{\ displaystyle R \,}b{\ displaystyle b \,}R{\ displaystyle R \,}
- Rezultat:, care este relația cu redenumitρla/b(R){\ displaystyle \ rho _ {a / b} (R) \,}R{\ displaystyle R \,}b{\ displaystyle b \,}la{\ displaystyle a \,}
- Echivalent SQL: AS
A te alatura
-
Alăturați-vă :
- Date: două relații șiR{\ displaystyle R \,}S{\ displaystyle S}
- Rezultat: R⋈S={(la,b,vs.):(la,b)∈R et (b,vs.)∈S}{\ displaystyle R \ bowtie S = \ {(a, b, c) :( a, b) \ în R \ și \ (b, c) \ în S \} \,}
- Echivalent SQL: JOIN
Turisti
idTourist |
NumeT |
Oraș |
Sport
|
---|
1 |
Marc |
Paris |
Schi
|
2 |
Blugi |
Toulouse |
Tenis
|
3 |
Franc |
Marsilia |
Fotbal
|
4 |
Thomas |
Lyon |
Naviga
|
5 |
Max |
Paris |
Golf
|
|
Destinații
idTourist |
OrașD
|
---|
1 |
Cannes
|
2 |
Ibiza
|
4 |
Tokyo
|
|
Turisti ⋈ Destinatii
idTourist |
NumeT |
Oraș |
Sport |
OrașD
|
---|
1 |
Marc |
Paris |
Schi |
Cannes
|
2 |
Blugi |
Toulouse |
Tenis |
Ibiza
|
4 |
Thomas |
Lyon |
Naviga |
Tokyo
|
|
Divizia
-
Împărțire : ia ca intrare două relațiiși.
R(X1,...,Xm,y1,...,yp){\ displaystyle R (x_ {1}, ..., x_ {m}, y_ {1}, ..., y_ {p}) \,}S(y1,...,yp){\ displaystyle S (y_ {1}, ..., y_ {p}) \,}
- Astfel, orice tuplu poate fi descompus în două tupluri , cu schemă și schemă . și returnează tabelul schemei, cum ar fi . Împărțirea înseamnă a da „toate x astfel încât pentru toate y ...”r∈R{\ displaystyle r \ in R \,}r=(t,s){\ displaystyle 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}) \,}y={y1,...,yp}{\ displaystyle y = \ {y_ {1}, ..., y_ {p} \} \,}X{\ displaystyle X \,}R/S={t:∀s∈S, (t,s)∈R}{\ displaystyle R / S = \ {t: \ forall s \ in S, \ (t, s) \ in R \} \,}
Expresivitate
Algebra SPC (selecție, proiecție și produs cartezian) corespunde calculului conjunctiv (calcul relațional fără disjuncție și fără negație): este una dintre versiunile teoremei lui Codd . SPCU-algebra (algebra SPC cu adunarea de uniune și diferență) corespunde întregului calcul relațional: este o altă versiune a teoremei lui Codd . Echijoin Poate fi exprimat cu un produs cartezian, urmat de o selecție, apoi o proiecție.
Optimizare
Iată reguli de rescriere pentru transformarea unei expresii de algebră relațională într-o altă expresie echivalentă.
Implementare
Cu toate acestea, bazele de date relaționale nu funcționează în conformitate cu regulile stabilite ale algebrei relaționale. Într-adevăr, dacă nu se definește o cheie primară , este posibil să se introducă mai multe rânduri identice într-un tabel , pe care un ansamblu de perspectivă nu are sens: un element aparține sau nu face parte dintr-un set. Dacă dorim să aplicăm strict regulile seturilor, trebuie să verificăm de fiecare dată când se adaugă un tabel dacă liniile introduse nu sunt deja prezente.
Obiecte specifice modelului
Este vorba aici de determinarea domeniilor (de exemplu, tip atomic):
- Numeric: întreg sau real ( SQL : Int, Float etc.);
- Șir de caractere (SQL: Char (20), VarChar (32) etc.);
- Data (SQL: DATE, TIME, YEAR etc.);
- Tipul enumerat.
Note și referințe
-
(în) Bazele bazelor de date: Nivelul logic , Addison-Wesley Longman Publishing Co., Inc.1995, 685 p. ( ISBN 978-0-201-53771-0 , citit online ) , p. 10
-
(în) Bazele bazelor de date: Nivelul logic , Addison-Wesley Longman Publishing Co., Inc.1995, 685 p. ( ISBN 978-0-201-53771-0 , citiți online ) , Partea B - Noțiuni de bază: interogare relațională - p. 35
-
„ Aflați baze de date și SQL ” , pe Developpez.com (accesat la 19 mai 2019 )
-
http://www.scritube.com/limba/franceza/Aide-mmoire-sur-les-bases-de-d21481108.php
Vezi și tu
linkuri externe
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">