Cunoștințe, prelegere, mijloace de bază de manipulare a codurilor relaționale de algebră relațională

Așa cum am menționat în capitolul anterior, în componenta de manipulare a modelului de date relaționale definite prin două mecanisme de bază de manipulare a datelor relaționale - bazate pe teoria mulțimilor și algebra relațională bazată pe logica matematică (sau, mai degrabă, în primul predicatelor de ordinul calculului) Calculul relațional. La rândul său. există de obicei două tipuri de calcul relațional - calculul tuplilor și calculul domeniilor.







Toate aceste mecanisme au o proprietate importantă: ele sunt închise în raport cu noțiunea de relație. Aceasta înseamnă că exprimarea algebra relațională și formule de calcul relațional definit pe relația bazelor de date relaționale și rezultatul „computing“ lor este, de asemenea, relația (desigur, aceasta se referă la valorile, atitudinile). Drept rezultat, orice expresie sau formulă poate fi interpretată ca o relație, care vă permite să le folosiți în alte expresii sau formule.

După cum vom vedea, algebra si calcule au o mare putere expresivă: un foarte complex interogări de baze de date se poate exprima printr-o expresie de algebra relațională și relațională formule de calcul unul. Din acest motiv, astfel de mecanisme sunt incluse în modelul de date relațional. Limbajul specific de manipulare a bazelor de date relaționale se numește relațional complet. dacă există o cerere formulată cu ajutorul unei expresii a algebrei relaționale sau a unei formule a calculului relațional. pot fi formulate cu ajutorul unui singur operator al acestei limbi.

Cunoscut (și noi nu vom demonstra) că mecanismele de algebra relațională și calculul relațional sunt echivalente, adică. E., Pentru orice expresii admisibile ale algebrei relaționale pot construi echivalentul (t. E. Producerea același rezultat) formule de calcul relațional și vice-versa. De ce există ambele mecanisme în modelul de date relaționale?

De fapt, acestea diferă în ceea ce privește nivelul procedurii. Expresiile algebrei relaționale sunt construite pe baza operațiilor algebrice (nivel înalt), și așa cum sunt interpretate expresiile aritmetice și logice. Expresia algebricii relaționale are și o interpretare procedurală. Cu alte cuvinte, cererea. reprezentată în limba algebrică relațională. pot fi calculate pe baza unor operații algebrice elementare, ținând cont de prioritatea lor și de posibila prezență a parantezelor. Pentru o formulă de calcul relațional, o interpretare computațională unică. în general, este absent. Formula stabilește numai condițiile pe care trebuie să le satisfacă tuplurile relației rezultate. Prin urmare, limbile calculului relațional sunt în cea mai mare parte non-procedurale sau declarative.

Deoarece mecanismele de algebră relațională și calcul relațional sunt echivalente, într-o situație particulară, oricare dintre aceste mecanisme poate fi folosit pentru a testa gradul de relaționalitate al unei limbi DB.

Rețineți că, foarte rar, algebra sau calculul sunt acceptate ca bază completă a oricărei limbi de baze de date. De obicei (de exemplu, în cazul SQL), limba se bazează pe un amestec de construcții algebrice și logice. Cu toate acestea, cunoașterea bazelor algebrice și logice ale limbilor de baze de date este adesea folosită în practică.

Pentru a economisi timp și spațiu, nu vom introduce nicio construcție sintactică strictă, dar, practic, ne vom limita la material la nivelul conținutului.

O revizuire a algebrei relaționale Codd

Ideea de bază a algebra relațională este că, atâta timp cât relațiile sunt seturi, manipularea de relații se poate baza pe operațiunile tradiționale set teoretic, completate de anumite operațiuni speciale specifice bazei de date relațională.

Există multe abordări ale definiției algebrei relaționale. care diferă în seturi de operațiuni și metode de interpretare a acestora, dar, în principiu, sunt mai mult sau mai puțin echivalente. În această secțiune, descriem o versiune inițială ușor extinsă a algebrei. care a fost propus de Codd (îl vom numi "algebra Codd"). În această variantă, setul de operații algebrice de bază constă în opt operații, care sunt împărțite în două clase - operații set-teoretice și operații relaționale speciale. Setul de operațiuni set-teoretice include operațiuni:

  • asocierea relațiilor;
  • traversarea relației;
  • luând diferența de relații;
  • luând produsul cartezian al relațiilor.






Operațiile relaționale speciale includ:

  • restricționarea relației;
  • proiecția relației;
  • conectarea relațiilor;
  • împărțirea relațiilor.

În plus, o operație de asignare este inclusă în compoziția algebrei. permițând salvarea în baza de date a rezultatelor calculului expresiilor algebrice și operarea redenumizării atributelor. permițând formarea corectă a antetului (anteturilor) relației rezultate.

Interpretarea generală a operațiunilor relaționale

Dacă nu intrăm în niște subtilități, pe care le vom lua în considerare în secțiunile următoare, atunci pentru aproape toate operațiile setului sugerat mai sus există o interpretare evidentă și simplă.

  • Când realizăm funcționarea UNION a două relații cu aceleași anteturi, se face o relație care include toate tuplurile care intră în cel puțin una dintre relațiile de operand.
  • Funcționarea intersecției (INTERSECT) a două relații cu anteturi identice produce o relație care include toate tuplurile care intră în ambele relații de operand.
  • Raportul, care este diferența (MINUS) două relații cu aceleași poziții, cuprinde toate tuple incluse în raportul primul operanzi astfel încât nici una dintre ele nu este inclusă în raportul, care este al doilea operand.
  • Atunci când se intersectează cele două produse carteziane (TIMES) ale celor două relații, intersecția dintre anteturile lor este goală, se face o relație, ale cărei nopți sunt produse prin combinarea tuplurilor primului și al doilea operand.
  • Rezultatul constrângerii (WHERE) a unei relații cu o anumită condiție este relația care cuprinde tuplurile relației deschise care satisface această condiție.
  • Atunci când o proiecție (PROIECT) a unei relații cu un anumit subset al mulțimii de atribute este executată, se face o relație, ale cărei nopți sunt subseturile corespondente ale nuplurilor relației -operator.
  • Când compusul (TE) două relații pe o anumită condiție se formează raportul rezultat, tuple ale căror tuple sunt realizate prin combinarea primul și al doilea și raporturile satisfac această condiție.
  • Într-o operație de diviziune relațională (DIVIDE BY), doi operanzi sunt o relație binară și unară. Relația rezultată constă din tuple unare incluzând prima valoare a atributului primelor tuplele operanzilor astfel încât valorile setate ale doilea atribut (pentru o valoare fixă ​​a primului atribut) include o multitudine de valori ale doilea operand.
  • Operația de redenumire (RENAME) produce o relație al cărei corp este același ca și operand, dar numele de atribute sunt schimbate.
  • Funcția de asignare (= =) vă permite să salvați rezultatul calculului expresiei relaționale în relația de bază existentă.

Ca rezultat orice operațiuni relaționale (cu excepția operației de atribuire. Ceea ce nu produce valori) este un anumit raport, expresia relațională poate fi formată, în care în locul unei operațiuni relațională raportul operanzi este încorporat expresie relațională. Toate operațiile relaționale pot participa la construirea unei expresii relaționale. cu excepția operațiunii de atribuire. Interpretarea computațională a unei expresii relaționale este dictată de prioritățile stabilite ale operațiunilor:

RENAME> = WHERE = PROIECTUL = = TIMES = JOIN = INTERSECT = DIVIDE BY> = UNIUNEA = MINUS

Într-o altă formă, prioritățile de operare sunt prezentate în Fig. 3.1. Expresia este evaluată de la stânga la dreapta, luând în considerare prioritățile operațiilor și paranteze.


Fig. 3.1. Tabelul de priorități pentru operațiile de algebră relațională tradițională

Închiderea algebrei relaționale și operația de redenumire

Așa cum am observat în cursul anterior, fiecare relație de valoare este caracterizată printr-un antet (sau o schemă) și un corp (sau un set de tupluri). Prin urmare, dacă avem într-adevăr nevoie de algebră. ale căror operațiuni sunt închise cu privire la conceptul de relație, atunci fiecare operație trebuie să producă o relație în sensul complet, adică trebuie să posede atât un corp, cât și un titlu. Numai în acest caz va fi posibil să se construiască expresii imbricate.

Antetul relației este un set de perechi <имя-атрибута, имя-домена>. Dacă vă uitați la prezentarea generală a operațiilor relaționale din subsecțiunea precedentă, puteți vedea că domeniile atributelor relației rezultate sunt determinate în mod unic de domeniile din relațiile de operand. Cu toate acestea, cu numele atributelor rezultatului, nu este întotdeauna atât de simplu.

De exemplu, imaginați-vă că relațiile de operand dintre o operație carteziană a produsului au aceleași atribute cu aceleași domenii. Care ar fi titlul relației rezultate? Deoarece acest set, nu ar trebui să conțină aceleași elemente. Dar pierderea atributului ca rezultat este inacceptabilă. Și acest lucru înseamnă că în acest caz este imposibil să efectuați corect operația carteziană.

Probleme similare pot apărea și în cazul altor operații bipartite. Pentru a rezolva problemele, o operație de redenumire este introdusă în numărul de operații algebre relationale. Ar trebui să fie folosit în cazul în care există un conflict de denumire a atributului în operanzii relații ale unei operații relaționale. Apoi, unul dintre operanzi este aplicat pentru prima operație de redenumire. și apoi operația principală este efectuată fără probleme. Mai strict definim operația de redenumire în capitolul următor, dar acum doar rețineți că rezultatul acestei operații este atitudinea pentru a se potrivi în jurul valorii cu raportul operand, cu excepția faptului că a numelui atributului specificat este schimbat la numele specificat.

În cele ce urmează, vom presupune utilizarea operației de redenumire în toate situațiile de conflict.

În acest caz, este totul corect?

(TE PROIECTE ANGAJAȚI UNDE (SLU_IMYA = PRO_ZARP> 18000.00) PROEKT_RUK SI) PROIECT (SLU_IMYA, SLU_NOM)

efectua equi-se alăture relațiile cu angajații și proiectul privind starea SLU_IMYA = PROEKT_RUK;

limita raportul obținut de condiția PRO_ZARP> 18000.00;
proiectați rezultatul operației anterioare pe atributul SLD_IM, SLU_NOM

Probabil că așa va fi corect, pe baza cursurilor anterioare ale acestui curs.
să echipeze relațiile dintre angajați și PROIECTE
raportul obținut prin (SLU_IMYA = PROEKT_RUK) ȘI îngustarea (PRO_ZARP> 18000.00)
proiectați rezultatul operației anterioare pe atributul SLD_IM, SLU_NOM

În cazul în care, ca urmare a funcționării proiectului SLUZHASCHIE_V_PROEKTE_1 ORI în Talitsa finală există dovezi ale relației SLUZHASCHIE_V_PROEKTE_2.







Trimiteți-le prietenilor: