Algebra relațională este un sistem închis de operații asupra relațiilor într-un model de date relaționale . Operațiile de algebră relațională se mai numesc și operații relaționale .
Setul inițial de 8 operații a fost propus de E. Codd în anii 1970 și a inclus atât operațiuni care sunt încă în uz ( proiecție , îmbinare etc.), cât și operațiuni care nu au intrat în uz (de exemplu, diviziunea relațiilor).
În dezvoltarea teoriei și practicii relaționale, au fost propuse mai multe operații relaționale noi, cum ar fi semi-join ( SEMI-JOIN ) și semi-diferență sau anti-semi-join ( ANTI-SEMI-JOIN ) [1] [2 ] , CROSS APPLY și OUTER APPLY , închidere tranzitivă ( TCLOSE ) etc.
Deoarece multe operații sunt exprimabile unele prin altele, ca parte a algebrei relaționale, se pot distinge mai multe variante ale bazei (un set de operații prin care toate celelalte sunt exprimabile). Cea mai faimoasă și strict definită bază ( algebra A ) a fost propusă de Christopher Date și Hugh Darwen [3] .
Algebra relațională și calculul relațional sunt echivalente în puterea lor expresivă [4] . Există reguli pentru conversia cererilor între ele.
Principala aplicație a algebrei relaționale este de a oferi un cadru teoretic pentru bazele de date relaționale , în special limbaje de interogare pentru astfel de baze de date, printre care principalul este SQL .
Algebra relațională este un set de operații pe relații astfel încât rezultatul fiecăreia dintre operații este și o relație. Această proprietate a unei algebre se numește închidere .
Operațiile pe o relație se numesc unare , pe două relații - binare , pe trei - ternare (acestea sunt practic necunoscute).
Un exemplu de operație unară este o proiecție, un exemplu de operație binară este o unire.
O operație relațională N -ar f poate fi reprezentată printr-o funcție care returnează o relație și ia n relații ca argumente:
Deoarece algebra relațională este închisă, alte expresii de algebră relațională (adecvate pentru tip) pot fi înlocuite ca operanzi în operațiile relaționale:
În expresiile relaționale, puteți utiliza expresii imbricate ale unei structuri arbitrar complexe.
Unele operații relaționale, în special uniunea , intersecția și scăderea , necesită ca relația să aibă anteturi (scheme) care se potrivesc (aceleași). Aceasta înseamnă că numărul de atribute, numele atributelor și tipul ( domeniul ) atributelor cu același nume sunt aceleași.
Unele relații nu sunt compatibile formal din cauza diferențelor în numele atributelor, dar devin astfel după aplicarea operației de redenumire a atributelor.
Operația de produs cartezian necesită ca relațiile de operanzi să nu aibă atribute cu același nume. Se spune că relațiile sunt compatibile prin luarea produsului cartezian extins dacă intersecția mulțimilor de nume de atribute luate din schemele lor de relații este goală.
Următoarele sunt câteva operații de algebră relațională care sunt de interes istoric sau practic. Este imposibil să enumerați toate operațiile, deoarece orice operație care satisface definiția relațională face parte din algebra relațională.
Rezultatul aplicării operației de redenumire a atributelor este o relație cu numele atributelor schimbate.
Sintaxa :
R RENUMIRE Atr 1 , Atr 2 , … AS NewAtr 1 , NewAtr 2 , …Unde
O relație cu același titlu ca relațiile compatibile cu tipul A și B și un corp format din tupluri aparținând fie lui A , B , fie ambelor.
Sintaxă:
O relație cu același titlu ca relațiile A și B și un corp format din tupluri aparținând ambelor relații A și B în același timp .
Sintaxă:
O relație cu același titlu ca relațiile compatibile cu tipul A și B și un corp format din tupluri care aparțin relației A și nu aparțin relației B.
Sintaxă:
Operatorul de atribuire (:=) vă permite să stocați rezultatul evaluării unei expresii relaționale într-o relație existentă.
O relație al cărei titlu ( A 1 , A 2 , …, A n , B 1 , B 2 , …, B m ) este concatenarea titlurilor relațiilor A ( A 1 , A 2 , …, A n ) și B ( B 1 , B 2 , …, B m ), iar corpul este format din tupluri care sunt toate combinații de tupluri ale relațiilor A și B : ( a 1 , a 2 , …, a n , b 1 , b 2 , … , b m ),
astfel încât
( a 1 , a 2 , …, a n ) ∈ A , ( b 1 , b 2 , …, b m ) ∈ B .Sintaxă:
A ORI BO relație cu același titlu ca și relația A și un corp format din tupluri ale căror valori de atribut se evaluează la TRUE atunci când sunt substituite în condiția c . c este o expresie booleană care poate include atribute ale relației A și/sau expresii scalare.
Sintaxă:
Eșantionul este scris ca sau unde:
Proiecția este o operație unară care vă permite să obțineți un subset „vertical” al unei anumite relații , sau tabel, adică un astfel de subset care se obține prin selectarea atributelor specificate , urmată de eliminarea, dacă este necesar, a tuplurilor duplicate redundante. . Să fie dat un tabel cu nume de atribute , adică un subset al setului de nume de atribute . Rezultatul unei proiecții de tabel pe numele atributelor selectate este un nou tabel obținut din tabelul original prin ștergerea atributelor care nu sunt incluse în setul selectat, urmată de posibila eliminare a tuplurilor duplicate redundante.
La implementarea unei proiecții, este necesar să se precizeze relația proiectată și un anumit set de atribute ale acesteia, care va deveni titlul celei rezultate.
Când proiecția este efectuată, o tăietură „verticală” a relației operandului este alocată cu distrugerea naturală a tuplurilor duplicate potențiale.
Sintaxă:
sau
Operația de unire a relațiilor A și B prin predicatul P este echivalentă logic cu aplicarea secvențială a produsului cartezian al lui A și B și selecția prin predicat P . Dacă în relații există atribute cu aceleași nume, atunci înainte de a efectua unirea, aceste atribute trebuie redenumite.
Sintaxă:
( A ORI B ) UNDE PO relație cu un antet (X 1 , X 2 , …, X n ) și un corp care conține un set de tupluri (x 1 , x 2 , …, x n ) astfel încât pentru toate tuplurile (y 1 , y 2 , … , y m ) ∈ B în raport cu A(X 1 , X 2 , …, X n , Y 1 , Y 2 , …, Y m ) există un tuplu (x 1 , x 2 , …, x n , y 1 , y 2 , …, y m ) .
Sintaxă:
A DIVIDEDE BUnii dintre operatori relaționali pot fi exprimați în termenii altor operatori relaționali.
Alăturați-vă operatoruluiOperatorul de unire este definit în termeni de produs cartezian și selectează operatori după cum urmează:
(A ORI B) UNDE X=Y unde X și Y sunt atribute respectiv ale relațiilor A și B cu nume inițial egale. Operator de intersecțieOperatorul de intersecție este exprimat prin scădere după cum urmează:
A INTERSECT B = A MINUS (A MINUS B) operator de divizieOperatorul de împărțire este exprimat în termeni de scădere, produs cartezian și operatori de proiecție, după cum urmează:
A DIVIDEBY B = A[X] MINUS ((A[X] ORI B) MINUS A)[X]Primul limbaj de interogare bazat pe algebra lui Codd a fost Alpha, dezvoltat de Codd însuși. Ulterior, a fost creat ISBL, iar această lucrare de pionierat a fost lăudată de multe autorități [5] ca arătând o modalitate de a transforma ideea lui Codd într-un limbaj util. Business System 12 a fost un SGBD relațional de scurtă durată care a urmat exemplul ISBL.
În 1998 , Christopher Date și Hugh Darwen au propus un limbaj numit Tutorial D pentru a fi utilizat în predarea teoriei bazelor de date relaționale, acest limbaj de interogare a fost, de asemenea, bazat pe idei din ISBL. Rel este o implementare a Tutorialului D.
Chiar și limbajul de interogare SQL se bazează vag pe algebră relațională, deși operanzii din SQL ( tabele ) nu sunt exact relații și câteva teoreme utile de algebră relațională nu sunt valabile în SQL (poate în detrimentul optimizatorilor și/sau utilizatorilor). Modelul tabelului SQL este un multiset , nu un set . De exemplu, o expresie este o teoremă a algebrei relaționale pe mulțimi, dar nu algebrei relaționale pe mulțimi; pentru studiul algebrei relaționale pe multiseturi, vezi capitolul 5 al manualului „Complete” de Garcia-Molina , Ullman și Widom [6] .
Bază de date | |
---|---|
Concepte |
|
Obiecte |
|
Chei | |
SQL |
|
Componente |