Model de date revoluționar. Baze de date relaționale. Atribute, schema de relații, schema bazei de date

Modelul de date relaționale (RDM) a fost dezvoltat de angajatul IBM E.F. Codd (Edgar Frank Codd) în 1969-1970. bazată pe teoria matematică a relaţiilor. În prezent, este cel mai comun model de date utilizat de SGBD-urile comerciale.

Modelul de date relaționale are avantajele și dezavantajele sale. Avantajele modelului includ următoarele:

  • prezența unui set mic de abstractizări care fac posibilă modelarea relativ simplă a unei părți semnificative a domeniului problemei și permit definiții formale precise, rămânând în același timp intuitive;
  • prezența unui aparat matematic simplu și în același timp puternic, bazat în principal pe teoria mulțimilor și logica matematică și care oferă baza teoretică pentru abordarea relațională a implementării bazei de date;
  • posibilitatea manipulării datelor non-navigaționale, eliminând necesitatea cunoașterii organizării fizice specifice a bazei de date în memoria externă.

Dezavantajele modelului sunt:

  • unele limitări atunci când sunt utilizate în aplicații care necesită structuri de date extrem de complexe (de exemplu, în sistemele de proiectare asistată de computer);
  • incapacitatea de a afișa în mod adecvat semantica materiei.

Ca oricare altul, un model de date relaționale definește o parte structurală și integrală. Aparatul matematic care stă la baza RMD a făcut posibilă determinarea părții de manipulare. În consecință, pentru a descrie structura și restricțiile impuse structurii, este utilizat un limbaj de descriere a datelor (DDL); Limbajul de manipulare a datelor (DML) este folosit pentru a manipula datele.

Caracteristici ale modelului de date relaționale care îl deosebesc de modelele entitate-relație:

  • este definită partea de manipulare - un set specific de operații, funcționalitate;
  • există limbaje specifice pentru descrierea datelor, constrângerile impuse datelor și manipularea datelor;
  • SGBD-urile relaționale moderne folosesc un singur limbaj - SQL, care combină atât IOD, cât și YaMD.

COMPONENTELE STRUCTURALE DE BAZĂ ALE MODELULUI DE DATE RELAȚIONALE

Componentele structurale de bază ale RMD sunt:

  • domenii și atribute;
  • relaţie;
  • comunicatii.

Domenii, atribute și relații

Definiție. Domeniu- multe elemente de același tip.

E.F. Codd a definit un domeniu simplu, ale cărui elemente au valori simple (atomice) și un domeniu compus, ale cărui elemente reprezintă relații construite pe domenii simple.

Exemple de domenii simple:

AN = (1985, 2003, 2000);

BANI = (500, 1000,850).

Un exemplu de domeniu compus construit pe domeniile simple AN și BANI:

În acest exemplu, valoarea unui element dintr-un domeniu compus este un set de perechi ale formei

O relație model relațional este definită conform definiției sale în teoria mulțimilor.

Definiție. Să fie dată o colecție de mulțimi O p E 2, ..., E p, nu neapărat diferite. Atunci relația K definită pe aceste mulțimi este mulțimea de tupluri ordonate astfel încât

În modelul de date relaționale, mulțimile sunt domenii.

Exemplu: date fiind două domenii E, = (a, b, c) și E 2 = (1,2). O relație construită pe aceste domenii poate fi = (, ). O altă relație construită pe aceleași domenii: I 2 = (, ).

Proprietățile relației:

  • tuplurile relației nu sunt ordonate;
  • domeniile din cadrul tuplurilor sunt ordonate.

Definiție. Atribute specificați cum este utilizat domeniul într-o relație.

În legătură cu introducerea conceptului de atribut în modelul de date relațional, este introdus conceptul de schemă de relație.

Definiție. Diagrama relațiilor este o colecție numită de perechi

O schemă de relație reprezintă intensitatea unei relații.

Să ne uităm la un exemplu. Să fie date două domenii: NUMBER și STRING. În legătură cu DEPARTAMENT, domeniul NUM este folosit pentru a specifica numărul departamentului - introduceți atributul numărul departamentului, iar domeniul STRING este folosit pentru a seta numele departamentului - atribut Nume. Atunci relația DEPARTAMENT corespunde următoarei diagrame de relații:

DEPARTAMENT (Numărul departamentului: NUMĂR, Nume: LINIA).

În general, după cum sa menționat mai sus, poate exista un domeniu compozit. În conformitate cu definiția sa, un domeniu compus este o relație care este construită și pe domenii simple. Dar într-o astfel de relație nu apar atribute. Să revenim la domeniul ISTORIC SALARII. Este construit pe domeniile simple AN și BANI și poate fi specificat după cum urmează:

ISTORIC SALARIAL (AN, BANI).

Domeniile compuse pot fi, de asemenea, utilizate pentru a defini o schemă de relație. Luați în considerare relația ANGAJAT. Atributele sale pot fi Numar de angajati(definit pe domeniul NUMER), Nume(pe domeniul STRING) și Salariu, definit pe domeniul ISTORIC SALARII:

ANGAJAT (Numar de angajati: NUMĂR, Nume: LINIA, Salariu: ISTORIC SALARIAL).

O implementare specifică (extensională) a acestei relații poate avea forma prezentată în Fig. 5.1.

Orez. 5.1. Un exemplu de reprezentare a relației ANGAJAT

Cerința fundamentală a modelului de date relaționale este: toate relațiile trebuie normalizate.

Definiție. Atitudine normalizată este o relație în care fiecare valoare de atribut este atomică.

Cu alte cuvinte, doar domeniile simple pot fi folosite într-o relație normalizată. Prin această definiție, exemplul dat (vezi Figura 5.1) reprezintă o relație nenormalizată, care nu este permisă în modelul de date relaționale.

Relațiile nenormalizate sunt foarte ușor de transformat în relații normalizate. Pentru a face acest lucru, în schema relației, domeniul compus este înlocuit cu domeniile sale simple constitutive, iar în implementarea relației, valorile atributelor definite pe alte domenii sunt repetate pentru fiecare tuplu al domeniului compus. Astfel, normalizarea raportului de mai sus va da următorul raport - normalizat, prezentat în Fig. 5.2.

Orez. 5.2. Atitudine normalizată a ANGAJATULUI

Proprietățile unui model de date relaționale.

  • 1. Fiecare atribut de relație are un nume care este unic în această relație.
  • 2. Fiecare atribut este definit pe un singur domeniu.
  • 3. Mai multe atribute pot fi definite pe același domeniu.
  • 4. Numele atributului poate fi același cu numele domeniului.
  • 5. Nu este stabilită ordinea atributelor (atributele din definiția schemei de relații nu sunt ordonate).
  • 6. Nu există tuplu care se potrivesc în relație (fiecare tuplu este unic).
  • 7. Nu se stabilește ordinea tuplurilor (nu sunt ordonate tuplurile din relație).
  • 8. O relație are un nume care este diferit în schema bazei de date de numele tuturor celorlalte relații.

Notă: adesea seturi intuitive sunt folosite ca domenii: de exemplu, în exemplul anterior este intuitiv clar că numărul departamentului - acesta este un număr și Nume este o sfoară. În consecință, numele de domeniu este adesea omis din schema relației:

DEPARTAMENT (Numărul departamentului, Nume).

Într-un model de date relaționale, o relație este o singură componentă structurală folosită pentru a reprezenta atât o entitate, cât și o relație.

Vizualizare entitate

Reprezentarea entității înseamnă capacitatea de a identifica în mod unic fiecare tuplu individual al unei relații prin valorile atributelor sale. Deoarece nu există tuplu duplicat într-o relație, fiecare tuplu este unic și poate fi identificat prin valorile tuturor atributelor sale. Cu toate acestea, de regulă, în tupluri este posibil să se distingă un anumit subset de atribute ale căror valori sunt unice pentru toate implementările relației - prezent, trecut și viitor. Astfel de subseturi de atribute sunt chei.

Definiție. Cheie este un set de atribute care identifică în mod unic fiecare tuplu dintr-o relație dată.

Cheia poate conține atribute suplimentare care nu sunt necesare pentru a identifica unic tuplu. Prin urmare, RMD introduce conceptul de cheie primară, constând doar din acele atribute care sunt cu adevărat necesare pentru identificarea unică a unui tuplu.

Definiție. Cheia principala(PK - Primary Key) - un set neredundant de atribute ale căror valori definesc în mod unic relația tuplu.

O cheie primară nu este redundantă dacă:

  • a) constă dintr-un singur atribut;
  • b) constă din mai multe atribute, dar niciunul dintre aceste atribute nu este de prisos pentru a identifica în mod unic fiecare tuplu (dacă o cheie este formată din mai multe atribute, se numește compus).

Astfel, conform definiției, cheia primară a unei relații are următoarele două proprietăți:

  • unic - fiecare tuplu dintr-o relație este identificat în mod unic prin valoarea sa cheie;
  • ireductibilitate - niciun subset propriu al unei chei nu are proprietatea unicității.

O relație poate avea o singură cheie primară. Dacă într-o relație pot fi identificate mai multe seturi de atribute, fiecare dintre ele identificând în mod unic și neredundant fiecare tuplu al relației, atunci unul dintre ele este selectat ca cheie primară, iar toate celelalte sunt chei alternative (AK - Cheie alternativă ). De exemplu, în legătură cu

DEPARTAMENT ( Numărul departamentului, Nume)

fiecare dintre atribute identifică în mod unic fiecare tuplu. Dacă atributul este selectat ca cheie primară Numărul departamentului, apoi atributul Nume este o cheie alternativă.

În diagrama relațiilor, vom sublinia cheia primară, iar după cheile alternative vom adăuga abrevierea AK:

DEPARTAMENT ( Numărul departamentului. Nume(AK)).

Conexiuni

Relațiile dintre entități reflectă relațiile dintre anumite instanțe ale entităților. Aceste relații sunt reprezentate folosind chei străine.

Definiție. Cheie externă(FK - Cheie străină) este un atribut sau un anumit set de atribute ale relației R1, care nu sunt propriile atribute ale relației R1, dar valoarea lor coincide cu valorile cheii primare ale unei relații R2 ( nu este exclusă posibilitatea identității lui R1 și R2).

Atributele cheii străine sunt niște atribute suplimentare care nu definesc entitatea în sine, dar vă permit să stabiliți asocieri cu o altă entitate.

Principalele tipuri de relații între entități sunt relațiile 1:p și p:p. Să luăm în considerare reprezentarea acestor conexiuni. Să începem cu o conexiune 1:p.

Luați în considerare următoarele relații:

  • ANGAJAT cu atribute Numar de angajati(cheia principala), NumeȘi Anul nașterii;
  • DEPARTAMENT cu atribute Numărul departamentului(cheia primară) și Nume.

Între aceste relații este definită o relație 1:n - fiecare angajat lucrează într-un anumit departament și mulți angajați lucrează în fiecare departament. În fig. Figura 5.3 prezintă diagrama entitate-relație corespunzătoare în notația propusă de P. Chen.

Această relație este definită de atributul cheie externă din relația ANGAJAT: cheia externă este inclusă în această relație Numărul departamentului, ale căror valori se potrivesc cu valorile cheii primare Numărul departamentului DEPARTAMENTUL de relaţii În diagrama relațiilor, vom marca atributele cheii străine cu abrevierea FK. Diagramele de relații vor arăta astfel:

DEPARTAMENT (Numărul departamentului. Nume(AK));

ANGAJAT (Numar de angajati. Nume, Anul nașterii,

Numărul departamentului(FK)).

Orez. 5.3. Reprezentarea unei conexiuni de tip 1:n într-o diagramă P. Chen

Implementările care satisfac aceste modele de relație sunt prezentate în Fig. 5.4.

Orez. 5.4. Exemplu de reprezentare a conexiunii de tip 1: n în RMD

În acest exemplu, un tuplu poate apărea în relația ANGAJAT, dar nu poate apărea un tuplu, deoarece în acest tuplu valoarea „5” a cheii străine a relației ANGAJAT nu corespunde cu nicio valoare a cheii primare a relației DEPARTAMENT. .

Astfel, relațiile de tip 1:n nu sunt reprezentate în mod specific în niciun fel; doar în relația de pe partea „multe” apar atribute cheie străină.

Trebuie remarcat faptul că notația IDEFlx corespunde pe deplin reprezentării comunicării în RMD (Fig. 5.5).

Departament / E1 Angajat / E2


Orez. 5.5. Reprezentarea unei relații de tip 1: n în notația IDEF1 x

Să considerăm reprezentarea unei conexiuni n:n. De exemplu, o relație de FURNIZOR cu atribute Numarul furnizorului(cheia principala), NumeȘi Abordare si relatia DETALIU cu atribute Număr de detaliu(cheia principala), NumeȘi Preț.Între aceste relații este definită o relație n:n - fiecare furnizor furnizează multe părți, iar fiecare parte este furnizată de mulți furnizori. Diagrama entitate-relație corespunzătoare în notația propusă de P. Chen este prezentată în Fig. 5.6.


Orez. 5.6. Reprezentarea conexiunii de tip n:n în diagrama P. Chen

În acest caz, în RMD, relația SUPPLY (FURNIZOR, PARTEA) este reprezentată ca relație proprie, care va avea atribute de cheie străină care se referă la relațiile FURNIZOR și PARTEA. Aceste atribute pot face parte din cheia primară a unei relații. În plus, o relație de relație poate avea propriul atribut. Diagramele de relații vor arăta astfel:

FURNIZOR ( Numarul furnizorului. Nume, Adresă)",

DETALIU ( Număr de detaliu. Nume, preț)",

LIVRARE ( Numarul furnizorului (bKI. Numărul piesei (LK2).

Cantitate).

Un exemplu de implementare a acestor relații este prezentat în Fig. 5.7.

Și în acest caz, notația SEE1x corespunde pe deplin cu RMD. În primele etape de proiectare pot apărea conexiuni de tip n:n, care în etapele următoare sunt înlocuite cu o relație de entitate suplimentară și două conexiuni de tip 1: n (Fig. 5.8). Prin urmare, în viitor, notația JEE1x va fi folosită pentru a ilustra diagrame de relații și conexiuni dintre relații.

Orez. 5.7. Exemplu de reprezentare a tipului de conexiune p:p în RMD

Partea /E2

Furnizor/E1

Provizii/_

furnizate

a) legătură incertă

Furnizor / E1

Partea /E2

execută

Număr piesă (EK2)

Cantitate

  • -participă la- 1
  • b) transformarea într-o legătură specifică

Orez. 5.8. Conversia unei relații n:p într-o relație de tip 1:p în notația UEP1x

O PARTE INTEGRALĂ A MODELULUI DE DATE RELAȚIONALE

Modelul de date relaționale definește două cerințe de bază de integritate care sunt suportate de orice SGBD relațional:

  • cerința de integritate a entității;
  • cerința integrității referențiale sau a integrității referențiale.

Integritatea entității

Un obiect sau o entitate din lumea reală dintr-o bază de date relațională are un tuplu de relație. Cerința de integritate pentru entități este următoarea: orice tuplu al oricărei relații trebuie să fie distins de orice alt tuplu al aceleiași relații.

Această cerință înseamnă că fiecare relație trebuie să aibă o cheie primară. Această cerință este îndeplinită automat dacă proprietățile de bază ale relațiilor nu sunt încălcate în sistem.

În plus, pot fi stabilite următoarele restricții:

  • unicitatea valorilor atributelor; definește chei de relație alternative;
  • sens obligatoriu; la introducerea elementelor de relație noi sau modificarea existente, trebuie specificate valorile atributelor corespunzătoare;
  • admisibilitatea valorilor atributelor; valorile introduse trebuie să îndeplinească o anumită condiție specificată.

Integritate referenţială

Constrângerile de integritate referenţială în modelul de date relaţionale sunt condiţii impuse coexistenţei tuplurilor în relaţii înrudite. După cum sa discutat mai devreme, într-o bază de date relațională, relațiile dintre relații sunt reprezentate folosind chei străine. Să revenim la exemplul în care a fost luată în considerare relația DEPARTAMENT și ANGAJAT (vezi Fig. 5.5):

DEPARTAMENT (Numărul departamentului. Nume(AK));

ANGAJAT (Numar de angajati . Nume, Anul nașterii,

Numărul departamentului(EK)).

Atribut cheie străină Numărul departamentuluiîn raport cu ANGAJAT vă permite să obțineți informații complete despre departamentul specific în care lucrează un anumit angajat.

De obicei, se apelează relația în care este definită o cheie străină relație cu copilul iar relația la care face referire cheia străină este atitudinea părintească. Deci, în exemplul nostru, relația ANGAJAT este o relație copil, iar relația DEPARTAMENT este o relație părinte.

Cerința integrității referențiale este ca valoarea unui atribut cheie străină în orice tuplu al unei relații copil trebuie să se potrivească cu valoarea unui atribut cheie primară într-un tuplu al relației părinte.

Cu alte cuvinte, cerința de integritate referențială înseamnă că ceea ce ne referim trebuie să existe.

La efectuarea operațiunilor legate de modificarea relațiilor (operații de inserare și ștergere a tuplurilor, modificarea valorii cheii corespunzătoare), este necesară monitorizarea cerințelor de integritate (Fig. 5.9).

Relația cu părinții Relația cu copilul

Comunicare......a

  • - inserare - inserare
  • - ștergere - ștergere
  • - modificarea Republicii Kazahstan - modificarea Republicii Kazahstan

Orez. 5.9. Operațiuni de modificare a relațiilor dintre părinți și copii

Să luăm în considerare caracteristicile efectuării acestor operații.

  • 1. Toate operațiunile cu o relație copil trebuie să îndeplinească cerințele de integritate referențială:
    • La inserarea unui element nou, acel element trebuie să aibă o valoare de atribut de cheie externă validă;
    • ștergerea elementului se realizează fără restricții;
    • Când modificați cheia externă a unui element, acel element trebuie să primească o valoare validă pentru atributele cheii externe.
  • 2. Operațiunile cu relația părinte se efectuează în conformitate cu următoarele reguli:
    • inserarea unui nou element se realizează fără restricții;
    • Eliminarea unui element nu ar trebui să ducă la o încălcare a integrității referențiale. Dacă există un element într-o relație copil care face referire la un element din relația părinte care este șters, ce ar trebui să facem cu el? Există trei abordări posibile aici:
      • a) ștergerea unui element dintr-o relație părinte nu se efectuează dacă există cel puțin un element în relația copil care se referă la cel care este șters;
      • b) odată cu elementul relației părinte se șterg toate elementele relației copil care o fac referire;
      • c) atributelor cheii străine ale relației copil li se atribuie o valoare goală (fiecare SGBD folosește propriul mod de a atribui o valoare goală); Această abordare este posibilă dacă atributele cheii externe ale relației copil nu au o constrângere de valoare necesară;
    • De asemenea, modificarea valorii cheii primare a unui element existent nu trebuie să conducă la o încălcare a integrității referențiale. Aceleași trei abordări sunt posibile și aici:
      • a) modificarea cheii primare a unui element din relația părinte nu se efectuează dacă în relația copil există cel puțin un element care se referă la cel în curs de modificare;
      • b) odată cu elementul relației părinte, se modifică valorile atributelor cheii străine ale tuturor elementelor relației copil care o fac referire;
      • c) atributelor cheii străine ale relaţiei copil li se atribuie o valoare goală; Această abordare este posibilă dacă atributele cheii externe ale relației copil nu au o constrângere de valoare necesară.

MANIPULARE PARTEA DIN MODELUL DE DATE RELAȚIONALE

caracteristici generale

Modelul de date relaționale se bazează pe unele secțiuni ale teoriei matematice a relațiilor și logicii matematice. Această bază teoretică matematică permite crearea unor limbaje de interogare eficiente pentru bazele de date relaționale.

Partea de manipulare a modelului de date relaționale constă din operatori de specificație care sunt naturali modelului de date și se bazează pe conceptele teoriei mulțimilor.

În general, limbajele de interogare în modelul de date relaționale sunt împărțite în două clase:

  • limbaje algebrice (algebră relațională), care permit exprimarea interogărilor folosind operatori speciali aplicați relațiilor;
  • limbaje de calcul predicat (calcul relațional), în care interogările descriu setul necesar de tupluri prin specificarea unui predicat pe care acele tupluri trebuie să-l satisfacă.

Din definiția de mai sus rezultă:

  • Limbile de algebră relațională arată cum să obțineți rezultatul;
  • Limbile de calcul relațional arată ce trebuie obținut.

Limbajele de calcul relațional, la rândul lor, sunt împărțite în două clase - în funcție de care sunt obiectele primitive ale calculului - tupluri sau elemente de domeniu, care sunt valorile unor atribute.

Astfel, pentru a rezuma cele de mai sus, putem defini trei tipuri de limbaje de interogare:

  • limbaje de algebră relațională;
  • limbaje de calcul relațional cu variabile - tupluri;
  • Limbaje de calcul relațional cu variabile de domeniu.

Limbile de algebră relațională permit exprimarea interogărilor în termeni de operații specializate aplicate relațiilor.

Limbajele de calcul relațional permit exprimarea interogărilor prin specificarea unui predicat pe care tuplurile (calcul variabilei tuple) sau elementele de domeniu (calcul variabilei de domeniu) trebuie să-l satisfacă.

Astfel de limbaje de interogare teoretice sunt reperul pentru evaluarea limbajelor de interogare din viața reală. Au fost propuși de E.F. Codd pentru a prezenta capabilitățile minime ale oricărui limbaj de interogare relațională pentru modelul relațional. În ceea ce privește expresivitatea (din punctul de vedere al obținerii informațiilor necesare dintr-o bază de date relațională), toate cele trei tipuri de limbaje de interogare sunt echivalente între ele.

Limbajele reale de interogare oferă funcțiile limbajului teoretic corespunzător sau combinarea acestora și, în plus, implementează unele operații suplimentare (aritmetice și altele).

Algebra relațională. caracteristici generale

Algebra relațională oferă un mijloc de scriere și interpretare a expresiilor. O expresie algebrică are structura obișnuită: un set de operanzi separați prin semne de operație. Rezultatul unei expresii este determinat de operanzii și operațiile utilizate în ea. Algebra relațională reprezintă un set de operații care folosesc relații ca operanzi și returnează, de asemenea, o relație ca rezultat, i.e. reprezinta operatii asupra relatiilor:

eu optaȘI. ȘI..

E.F. Codd a definit un set minim de operații asupra relațiilor; Toate operațiunile incluse în acest set pot fi împărțite în două grupuri.

  • 1. Operatii teoretice multimi - operatii traditionale pe multimi, definite de teoria multimilor; Acestea includ:
    • Uniune;
    • scădere;
    • intersecție;
  • 2. Operații relaționale speciale; Acestea includ:
    • alegere (selecție);
    • proiecție;
    • compus;
    • Divizia.

O atenție deosebită trebuie acordată operațiunii de redenumire, care aparține celui de-al doilea grup de operațiuni.

Din raționamentul de mai sus se pot trage două concluzii importante.

1. Operanzii operaţiilor relaţionale sunt relaţii; rezultatul este și atitudinea. Această proprietate se numește proprietatea de inchidere. Permite ca rezultatul unei operații să fie utilizat ca intrare (operand) pentru alta.

Prin urmare, putem scrie expresii imbricate, adică expresii în care operanzii sunt reprezentați nu prin simple nume de relații, ci prin alte expresii:

LA, optează] eu 2 optiunea 2 ...

  • 2. Folosind termenul atitudine, Trebuie amintit că avem de-a face de fapt cu două concepte:
    • schema de relatii (intensiune);
    • instanță (realizare) a unei relații (extensiune).

Deoarece o operație relațională are ca rezultat o relație, ea va avea prin urmare, împreună cu o implementare, o schemă de relație.

Deoarece o schemă de relație este o colecție numită de nume de atribute, operațiile relaționale sunt definite reguli pentru moștenirea numelor de atribute, pe baza căruia se determină schema relației care este rezultatul operației relaționale. Aceste reguli de moștenire vă permit să preziceți numele atributelor în rezultatul operației.

O condiție prealabilă pentru definirea unei scheme de relații este unicitatea numelor de atribute din schemă. Pentru ca relația rezultată să aibă schema corectă care conține numele atributelor corecte (unice în schema dată), un operatie de redenumire permițându-vă să redenumiți un atribut într-o schemă de relație. De remarcat că operația de redenumire schimbă doar schema relației; implementarea relației rezultate este exact aceeași cu implementarea relației originale.

Să ne uităm la un exemplu. Să existe o relație cu circuitul 8 (A, B, C) și o implementare:

Puteți utiliza, de exemplu, următoarea operație de redenumire:

B: redenumiți C la 8C.

Ca rezultat, obținem o relație cu următorul circuit 81 (A, B, 8C) și aceeași implementare:

Operațiile de redenumire nu vor fi utilizate în mod explicit în expresiile de algebră relațională, dar acolo unde este necesar, operația de redenumire va fi referită pentru a defini schema de relație de rezultat adecvată.

Operații teoretice de mulțimi

După cum sa spus mai devreme, operațiile teoretice ale mulțimilor sunt operații tradiționale de mulțimi definite de teoria mulțimilor; Acestea includ:

  • Uniune;
  • scădere;
  • intersecție;
  • produs direct (cartezian).

Dar trebuie remarcat faptul că operațiile relaționale au o diferență semnificativă față de cele clasice definite în teoria mulțimilor.

Să ne uităm la această diferență folosind exemplul unei operațiuni de unire. Operația de unire în teoria mulțimilor este definită după cum urmează.

Definiție. Sunt date două seturi - 81 și 82. Unirea acestor seturi este setul 8, ale cărui elemente aparțin primului set 81 și (sau) celui de-al doilea set 82:

8 = 81 și 82 = (5|5e 81 și/sau să fie 82).

Grafic, aceasta poate fi reprezentată după cum urmează (Fig. 5.10).

set 1

set 2

unire de seturi

Orez. 5.10. Unirea seturi

Modelul de date relațional are în vedere uniunea mulțimilor - domenii și/sau relații.

Îmbinarea domeniilor.În modelul de date relaționale, un domeniu este un set de elemente de același tip. Fuzionarea

schimburile trebuie să creeze un nou domeniu. Să fie date următoarele domenii:

O, = (1, 3, 5, 7, 9); B 2 =(‘a’, b ‘c’); O, = (2, 4, 6, 8). Apoi o nouă mulțime este definită în teoria mulțimilor:

B = E și E 2 = (1, 3, 5, 7, 9, ‘a’, ‘b’c’).

Dar pentru modelul de date relaționale, setul rezultat nu este un domeniu, deoarece conține elemente de diferite tipuri. Prin urmare, această operație nu este definită în modelul de date relaționale pentru operanzii specificați.

Pe de altă parte, noul set

0 = 0 și 0 3 = (1,3, 5,7,9, 2,4, 6, 8)

conţine elemente de acelaşi tip, adică este un domeniu. Prin urmare, în acest caz, operația de unire este definită pentru acești operanzi.

Fuzionarea relațiilor.În modelul de date relaționale, o relație este un set de tupluri care satisfac o singură schemă. Unirea relațiilor trebuie să aibă ca rezultat și o relație.

Să fie definite următoarele modele de relații definite pe domeniile de mai sus:

Realizările acestor relaţii pot avea următoarea formă: r, = ( , ); r2 = ( , ); g 3 = ( , ).

Apoi o nouă mulțime este definită în teoria mulțimilor: r = r și r 2 = ( , ).

Dar pentru modelul de date relaționale, mulțimea rezultată nu este o relație, deoarece tuplurile acestei mulțimi corespund unor scheme de relații diferite. Pe de alta parte, multi

g = g,ig 3 = ( , )

este o relație, deși schemele relațiilor inițiale I, ȘI I 3 sunt diferite.

În acest sens, algebra relațională ia în considerare proprietatea compatibilitatea asocierii.

Definiție. Simplu domenii sunt considerate compatibil prin asociere, dacă sunt formate din elemente de același tip.

Pentru exemplele de mai sus, domeniile şi sunt incompatibile prin asociere, iar O şi E3 sunt compatibile prin asociere.

Definiție. Două relaţie sunt considerate compatibil prin asociere, Dacă:

  • ambele relații au același set de atribute;
  • aceleași atribute ale două relații sunt definite pe domenii care sunt compatibile prin asociere.

Astfel, în exemplele de mai sus, relaţiile I şi I3 sunt compatibile prin asociere, deoarece atributele lor cu acelaşi nume sunt definite pe domenii compatibile prin asociere.

Dacă trebuie să verificați compatibilitatea relațiilor de combinare care utilizează diferite nume de atribute în schemele lor, atunci, în conformitate cu semantica atributelor, le puteți redenumi folosind operația de redenumire. După aceasta, relațiile rezultate sunt verificate pentru compatibilitatea uniunii. De exemplu, să fie dată o altă relație I 4 (BpO p B 2:0 3) și trebuie să verificăm dacă această relație este compatibilă prin asociere cu relația Ya Mai întâi, folosind operația de redenumire, obținem o nouă relație I 4 ( ApOp A 2:0 3) :

I 4: redenumiți B, în A r B 2 în A 2.

După aceasta, puteți verifica relația I! și I 4 pentru compatibilitate prin asociere. Puteți folosi la fel de bine și operația de redenumire:

Yar redenumește A [ în B r A 2 în B g

Să luăm acum în considerare toate operațiile algebrei relaționale. În definițiile operațiilor și exemplelor, literele mici indică implementări ale relațiilor, iar literele mari indică scheme de relații; o notație de forma r(R) înseamnă: o realizare a relației r care satisface schema R.

Fuziunea Relațiilor

Definiție. Combinând două relații r^R,) și r 2 (R 2), compatibile prin asociere, se numesc relația b = r, și r 2, pentru care:

  • a) schema de relații coincide cu I., sau I 2;
  • b) implementarea unei relații reprezintă un set de tupluri aparținând implementării lui r (și (sau) r 2 .

Intrare oficială:

dat g/K,), g 2 (I 2), g 1 = iad, g 2 = iad, I, = I, I 2 = I;

B = Gşi G2 = 8 (I), B = | ^? G 1 ŞI/SAU V

5 = G 1 și G 2

Proprietăți de funcționare:

  • comutativ - r 1 și r 2 = r 2 și r;
  • asociativ - g ] și (g 2 și g 3) = (g 1 și g 2) și g 3 = g ] și g 2 și g 3.

Scăderea rapoartelor

Definiție. Scăzând două rapoarte rDYa^ și r 2 (R 2), compatibile prin asociere, se numește relația b = r, - r 2, pentru care:

  • b) implementarea unei relaţii reprezintă un set de tupluri aparţinând implementării lui r cu excepţia celor prezente în r 2 .

Intrare oficială:

dat g,(I,), g 2 (I 2), g, = iad, g 2 = iad, I, = I, I 2 = I;

8 = r, - r 2 = 8(I), B = I ^ € r, I G.

Proprietăți de funcționare:

  • nu comutativ;
  • nu asociativ.

Intersecția relațiilor

Definiție. Intersecția a două relații r^I^) și r 2 (11 2), compatibile prin asociere, se numește relația b = n g 7, pentru care:

  • a) schema de relații coincide cu I, sau I 2;
  • b) implementarea relaţiei reprezintă un set de tupluri conţinute atât în ​​r cât şi în r 2 .

Intrare oficială:

dat r,(K,), r 2 (I 2), r, = (g și), g 2 = I, = I, I 2 = I;

B = G! PG2 = 8(I), B = | ^? G, eu ^

8 = G 1 P G 2

Proprietăți de funcționare:

  • comutativ - g1 p g2 = g2 p g1;
  • asociativ - g1 p (g2 p gZ) = (g1 p g2) p gZ = g1 p g2 p gZ. Operația de intersecție poate fi exprimată prin operația de scădere:

G 1 PG 2 = G 1 - (G 1 _G 2) -

Produsul cartezian al relaţiilor

Aici relaţiile r^R^ şi g 2 (K 2) pot avea scheme diferite, nu neapărat compatibile în asocierea lor. Înainte de a efectua operația de produs cartezian, este necesar să se redenumească atributele din schemele de relație I sau I 2, astfel încât numele tuturor atributelor să fie diferite.

Definiție. Produsul cartezian a două relații rДЯ^ și r 2 (I 2), ale căror scheme de relații nu au atribute cu același nume, i.e. I 1 n I 2 = 0, se numește relația b = g] x g 2, pentru care:

  • a) schema relaţională este determinată de cuplarea (unificarea) schemelor I şi I 2;
  • b) implementarea relației reprezintă un set de tupluri, care se obține prin concatenarea fiecărui tuplu din r 1 cu fiecare tuplu din r 2.

Intrare oficială:

dat r,(I,), I,(A r A 2 ,..., A t), r 2 (I 2), I 2 (B r B 2,..., V n),

Г 1 = и и ), Г 2 = (^), И,нИ 2 = 0;

b = g 1 x g 2 = b(I), I(A p A 2, A t, B p B 2,..., V p),

în = (i.u.|adică Gr cu g 2).

Proprietăți de funcționare:

  • comutativ - r, x r 2 = r 2 x Gr
  • asociativ - g] x (g 2 x g 3) = (g! x g 2) x g 3 = ^ x g 2 x g 3.

În teoria mulțimilor, această operație nu este nici comutativă, nici asociativă, deoarece mulțimile definesc ordinea de enumerare a elementelor dintr-un tuplu. Deoarece una dintre proprietățile modelului de date relaționale este lipsa de ordonare a atributelor, această operație dobândește proprietățile specificate.

Operațiuni speciale

Operațiile speciale ale algebrei relaționale includ:

  • proiecție;
  • alegere (sau selecție);
  • compus;
  • Divizia.

Operațiile speciale sunt definite numai pentru relațiile normalizate. La aceste operațiuni, alături de relațiile în sine, participă și atributele lor. În relațiile cu modelul de date relaționale, atributele pot fi accesate fie prin nume, fie prin poziția lor în diagrama relațiilor. Vom folosi atribute după nume.

Proiecție

Această operație este o operație unară asupra relațiilor, adică. O singură relație este implicată în această operațiune.

Definiție. Proiecția relației g(A), A = (A()), pe o listă de nume de atribute (subset de atribute) b din A, b cu A, se numește relația B = 71 b(g), PENTRU CARE!

  • schema de relații este determinată de lista b;
  • implementarea unei relații este un set de tupluri obținute din tuplurile relației r prin ștergerea elementelor corespunzătoare atributelor L - C și excluderea duplicatelor.

Intrare oficială:

dat r(A), A(A, A2,..., A t), r = ();

5(b) = 71 b(g), CVR în 2,..., în k), B; c L, b = (

astfel încât a = I dacă B 1 = A^).

Proiecția oferă o submulțime verticală a relației.

Proprietatea proiecției:

dacă Y c X c A, atunci m y (l: x (r)) = l; y(g).

Această operație se mai numește prescripţieȘi selecţie. De asemenea, o operație unară asupra unei relații.

Definiție. Prin alegerea din atitudine r(A) prin condiția A se numește relația B = Op(r), pentru care:

  • schema de relații coincide cu schema A;
  • implementarea unei relații este un set de tupluri din r care satisfac condiția K

Notație formală: dat r(L), r = (1;);

L) = o n (g), b = (i, | și |

Condiția (predicatul) I se scrie în conformitate cu următoarele reguli:

  • atributele și/sau constantele relației pot fi specificate ca operanzi;
  • Operații relaționale (=, f etc.) și operații logice (l, V, -n).

Pentru a indica ordinea evaluării predicatului P, în el se pot folosi paranteze.

Selecția produce un subset orizontal al relației.

Proprietăți de funcționare:

  • comutativ - a P1 (Op 2 (g)) = Op 2 (a n (g)) = o P1l P2 (g);
  • distributiv în raport cu operațiile y = (n, u, -):

^p(guz) = Or(g) var(5).

Operația de selecție restricționează tuplurile relației originale la valori care îndeplinesc condiția.

Compus

În algebra relațională, sunt luate în considerare două modificări ale acestei operații: îmbinarea naturală și îmbinarea condiționată (sau 0-join).

Legătura naturală

Definiție. Legătura naturală a relațiilor r,(I,), I, = XY și r 2 (I 2), I 2 = unde Y este un subset comun de atribute de la I și I 2, definite pe aceleași domenii, relația b(I) se numeste = g (M g 2, pentru care:

  • diagrama relațiilor I = I și I 2 = XY7;
  • implementarea unei relaţii este un set de tupluri (1) pentru care

Intrare oficială:

dat r^R^, R, = XY și r2 (R2), R2 =

b(I) = g, g 2, I = I și I 2 = XYZ e = (I | astfel încât 71 xy (1:)

b = G 1 XI G 2

Compusul natural dat se numește intern, sau închis, deoarece rezultatul operației conține doar acele tupluri din două relații care au valori corespunzătoare ale atributelor cu același nume. Împreună cu o astfel de operație, se ia în considerare și operația unei îmbinări naturale exterioare sau deschise și există varietăți ale operației de îmbinare exterioară: îmbinare la stânga, la dreapta și la unire exterioară completă.

Rezultatul operației de îmbinare exterioară stângă r, x] r 2 include rezultatul operației de îmbinare naturală, completat de acele tupluri din r pentru care nu există tupluri corespunzătoare din r 7; pentru astfel de tupluri, valorile atributelor moștenite de la r7 sunt setate la valori goale.

Rezultatul operației de îmbinare exterioară dreaptă r 1 x r 2 include rezultatul operației de îmbinare naturală, completat de acele tupluri din r 7 pentru care nu există tupluri corespunzătoare din r; pentru astfel de tupluri, valorile atributelor moștenite de la r sunt setate la valori goale.

În cele din urmă, rezultatul operațiunii complete de îmbinare exterioară G! x r 2 include rezultatul operației de îmbinare naturală, completat atât de tupluri din r pentru care nu există tupluri corespunzătoare din r 2, cât și de tupluri din r 2 pentru care nu există tupluri corespunzătoare din Gr cu valori goale ale corespunzătoare. atribute moștenite.

Conexiune după condiție

Definiție. Având în vedere două relații r^Rj) și r 2 (R 2), pentru care nu există atribute cu aceleași nume în R și R 2, i.e. R, n R 2 = 0. Fie comparat atributul A e Rj prin condiția 0 cu atributul B e R (condiția 0 este definită în același mod ca și predicatul F în operația de selecție). Apoi relații de legătură rj(Rj) și r2 (R2) după condiție 0 este relația s(R) = r, r 2 pentru care:

  • diagrama relațiilor R = R, u R 2:
  • implementarea unei relații este un set de tupluri obținute prin concatenarea tuplurilor din r și r 2, îndeplinind condiția A0B.

Intrare oficială:

dat rj(Rj) şi r2 (R2), R, nR2 = 0;

s(R) = r t r 2 , R = R, u R 2 , s = (uv | astfel încât u e r p v

iar v condiția 0 este îndeplinită).

Atributele A și B pot fi compozite, adică A = (A p A 2, ..., A p), B = (Bp B 2, ..., B p). Atunci A0B = [A,0,Bp A 2 0 9 B 2, ... , A n 0 n BJ. Operațiile 0j pot fi diferite. De exemplu, să fie dat g, (Ar A 2, AD și r 2 (Bp B 2, B 3) și toate atributele sunt definite pe domenii numerice. Apoi puteți obține o conexiune conform condiției:

C = G M la

ъ 1 1 V

Dacă operația = este folosită ca operator 0, o astfel de îmbinare se numește echijoin prin condiție.

Definiție. Date două rapoarte gDI^) și r 2 (11 2), pentru care 11 2 s I! iar eu 2 nu este gol. Coeficientul separării relației r cu relația r 2 este relația 8(R) = G]-n g 2, pentru care:

  • diagrama relațiilor I = I, - I 2,
  • Implementarea unei relații este un set de tupluri I astfel încât pentru toți și. e g 2 există V. 6 g 1 astfel încât y.(I ​​​​1 - I 2) = I și y/I 2) = u.

Intrare oficială:

dat r,(R,), r2 (R2), R2 cu K, R2^0;

8(I) = G 1 -5- G 2, I = I, - I 2, B = (E | V și e G 2 (E e g^).

Cu alte cuvinte, 8xr 2 e g r

Într-adevăr, există tupluri în relația Există un tuplu în relația r dar nu există tuplu, deci nu există nici un tuplu în b.

Putem scrie o expresie de algebră relațională echivalentă cu operația de împărțire:

G! + G2 = LK, -I, -,1 K | -I,“%,-I 2 X G 2> - G!>-

Să ne uităm la câteva exemple de scriere a interogărilor bazei de date în limbajul algebrei relaționale.

Să fie dată următoarea schemă a bazei de date:

  • 8(8#, 814, 8C) - FURNIZOR ( Numarul furnizorului. Nume, Oraș)", P(?#, P1CH, RS) - DETALII ( Număr detaliu, Nume, preț)", 8Р( 8#, Р#, OTU) - LIVRARE (Numarul furnizorului , Număr de detaliu . Cantitate).
  • 1. Obțineți numele furnizorilor care furnizează piesa cu numărul PP

%^ a P#=’P,’(8 M 8P))’

2. Obțineți numele furnizorilor care nu furnizează piese cu număr PP

^B!^ 8) - ^B^^P# =‘RG^ 8 8P))-

3. Obțineți numele furnizorilor care furnizează doar numărul de piesă P (:

ts 8H (a p# =T1,(8 8P))-l: 8M (a p# ^ P1,(8 M 8P)).

4. Obțineți numele furnizorilor care furnizează toate piesele:

^ 71 r#(r)) 8)-

5.3.5. Calcul relaţional Definiţii generale

Calcul relațional stă la baza abordării declarative a formulării unei interogări de bază de date, a cărei esență este următoarea.

O interogare de bază de date corespunde unei formule a unei teorii logice formale care descrie proprietățile rezultatului dorit.

Răspunsul la o interogare este un set de obiecte din domeniul de interpretare (care este baza de date), pe care formula corespunzătoare interogării este adevărată.

Ca atare teorie logică formală este folosită teoria calculului predicatului de ordinul întâi,în care formula este dată sub formă predicat.

Conceptul de predicat

Având în vedere câteva mulțimi arbitrare disjunse în perechi E, ..., E n, n E = 0 pentru orice F), iar variabilele x p

x 2, ..., x, luând valori din mulțimile corespunzătoare: x ^ pentru orice r

Apoi predicat(sau funcția predicat) se numește o funcție P(x p x 2, x), care ia una dintre cele două valori - 1 sau 0 (adevărat sau fals).

Variabilele x p x 2, x n se numesc variabile predicate. Mulțimile D p D 2 , ..., D n formează domeniul de interpretare al predicatului.

În scrierea unui predicat, alături de operațiile logice l, v, a căror semnificație și utilizare sunt tradiționale, se folosesc operații speciale - cuantificatori: universalitatea V și existența 3. Sensul folosirii cuantificatorilor este următorul:

  • Vx (f(x)) înseamnă că pentru toate valorile lui „x” din domeniul de interpretare, formula f(x) are valoarea „adevărat”;
  • 3x (f(x)) înseamnă că există cel puțin o valoare a lui „x” din domeniul de interpretare pentru care formula f(x) este adevărată.

Exemple. Fie ca variabila „x” să fie definită pe setul „grup de studiu”; f(t) - menţiunea „t primeşte bursă”; atunci predicatul 3x (f(x)) este adevărat dacă cel puțin un membru al grupului (indiferent cine) primește o bursă și fals dacă nimeni din grup nu primește o bursă.

Fie ca variabila „x” să fie definită pe setul „grup de studiu”; f(t) - mențiunea „t nu are datorii în timpul ședinței”; atunci predicatul Vx (f(x)) este adevărat dacă toți membrii grupului nu sunt datori în sesiune și fals dacă cel puțin un membru al grupului este îndatorat.

Utilizarea cuantificatorilor definește conceptul gratuitȘi legate de aparițiile variabilelor într-o formulă de predicat.

Apariția variabilei t în formula |/ este legată dacă variabila t se află în formula q/ într-o subformula care începe cu cuantificatorii V sau 3, care sunt imediat urmați de variabila t; atunci se spune că cuantificatorul leagă variabila t. În alte cazuri t INTREAZĂ 1|/ liber.

Luați în considerare următorul exemplu:

  • (Vx(R(x,y)v3y(U(x,y,z)AQ(x,y))))v(Vx(3r(U(x,y,r)A(3x(F(x))) ))).
  • 112 3 134 13 56 576 88

Exemplul numerotează utilizarea variabilelor în raport cu apariția lor în cuantificatori și în formulă. În consecință, în prima subformulă, toate aparițiile lui „x” (marcate cu numărul 1) sunt legate de cuantificatorul V; prima apariție a lui „y” (marcată cu numărul 2) este liberă; următoarele apariții "y"(marcate cu cifra 3) sunt legate prin cuantificatorul 3; introducerea variabilei „g” (marcată cu cifra 4) este liberă. În a doua subformula, toate aparițiile variabilei „x” (marcate cu numerele 5 și 8) sunt conectate prin cuantificatorii V și, respectiv, 3;

apariția lui „y” (marcat cu numărul 7) este liberă; iar în final, apariția variabilei r (marcată cu numărul 6) este asociată cu cuantificatorului 3.

Cuantificatorii din calculul relațional definesc intervalele de valori și vizibilitatea variabilelor. Aceasta înseamnă următoarele.

Toate variabilele incluse într-o formulă, în construcția căreia nu s-au folosit cuantificatori, sunt libere. Aceasta înseamnă că dacă valoarea „adevărată” este obținută pentru un anumit set de variabile libere la evaluarea unei formule de predicat, atunci acest set de valori ale variabilelor libere va fi inclus în rezultatul determinat de predicat.

Dacă apariția unei variabile într-o formulă este conectată printr-un cuantificator, atunci o astfel de variabilă nu este vizibilă în afara formulei care a conectat această variabilă. Atunci când se calculează valoarea unei astfel de formule, nu se utilizează o valoare a variabilei, ceea ce este cazul variabilelor libere, ci toate valorile din domeniul de definire a acestei variabile.

Să ne uităm la un exemplu. Să fie dat un set de cifre zecimale E = (O, 1,2, 3, 4, 5, 6, 7, 8, 9); atunci submulțimea constând din cifre pare poate fi definită după cum urmează: mulțimea tuturor valorilor lui y astfel încât condiția să fie îndeplinită:

Zx(x^ DESPRE l x -g- 2 = 0 l y = x).

Predicatul de mai sus este interpretat astfel: există cel puțin o valoare „x” e DESPRE, care este par și coincide cu valoarea unei variabile libere „y”. Prin urmare, dacă variabila liberă y are o anumită valoare, cum ar fi 6, predicatul dat va fi adevărat și acea valoare a lui y va fi inclusă în rezultat. Dacă variabila „y” are valoarea 7 sau 12, atunci predicatul va avea valoarea „fals” și această valoare a lui y nu va fi inclusă în rezultat.

În calculul relațional, domeniul de interpretare al unui predicat este baza de date, i.e. setul tuturor valorilor tuturor domeniilor pe care sunt definite toate schemele de relații care definesc schema bazei de date. Corespondența dintre predicatul P și relația r(A p A 2 ,..., A n) este următoarea

Dacă P(a r a 2,..., a) = 1, adică probă relaţiile r(A r A 2 ,..., A n), adică.

Dacă P(b p b 2 ,..., b) = 0, atunci de ex.

Astfel, conceptele de bază ale calculului sunt conceptul de variabilă și conceptul de formulă corect construită.

După cum am menționat mai devreme, în funcție de modul în care este determinată gama de valori ale variabilelor utilizate, se disting două tipuri de calcul relațional:

  • calcul relațional cu variabile tuple, pentru care domeniile de definire a variabilei sunt relații de bază de date, i.e. valoarea valabilă a fiecărei variabile este un tuplu al unei relații;
  • calcul relațional cu variabile pe domenii, pentru care sfera definițiilor variabilelor sunt domenii care definesc setul de valori de atribute valide. Formulele corect construite servesc la exprimare

condiţiile impuse variabilelor (tupluri sau domenii).

Calcul relațional cu variabile tuple

După cum sa menționat deja, în acest caz sfera de definire a variabilelor este relațiile. Variabilele tuplu trebuie să satisfacă o anumită schemă de relații R. O formulă bine formulată (wff) determină rezultatele selecției: acele tupluri pentru care wff dă valoarea 1 sunt selectate.

Să notăm o formulă construită corect (un predicat ale cărui valori sunt 0 sau 1) prin |/(t).

Să luăm în considerare regulile de construcție (/(t).

I. Baza formulei sunt atomii, care pot avea valorile 0 sau 1.

Există trei tipuri de atomi formulele vj/(t).

  • 1. Fie r(R) o implementare a unei relații care satisface schema R; t este o variabilă tuplu care satisface schema R. Atunci r(t) este un atom; înseamnă că t este un tuplu în raport cu r (adică formula este adevărată dacă t e r).
  • 2. Fie r(R) o implementare a relației care satisface schema R; u și v sunt variabile tuple din relația r(R) (adică u e r, v, >, F,
  • 3. Fie u o variabilă tuplă din relația r(R) (adică u e r); 0 - operație de comparare aritmetică (, >, F,

În condițiile de mai sus, intrarea u[A] înseamnă „valoarea variabilei tuplu și prin atributul A”.

II. Formula de calcul relațional (/(t), precum și aparițiile libere și legate ale variabilelor, sunt determinate de următoarele reguli recursive.

  • 1. Fiecare atom este o formulă. Toate aparițiile variabilelor tuple menționate într-un atom sunt libere. De exemplu, formula r(0) afirmă că variabila tuplu I este un tuplu al relației r(I).
  • 2. Dacă x(I.) este o variabilă tuplu din relația r cu schema I; |/(x) - o formulă în care variabila „x” are o apariție liberă; atunci 3x(A) (|/(x)) este o formulă în care apariția variabilei „x” devine un cuantificator legat 3. Această formulă afirmă că există cel puțin un tuplu „x” în relația r(R) astfel încât atunci când o înlocuim în formula (/(x) în loc de toate aparițiile libere ale lui „x” obținem valoarea „adevărat”. De exemplu, formula 3x(R) (r(x)) afirmă că relația r nu este gol (adică există, deși ar exista un tuplu x aparținând lui d).
  • 3. Daca x(I.) este o variabila tupla din relatia r cu schema I; |/(x) - o formulă în care variabila „x” are o apariție liberă; atunci /x(R) (q/(x)) este o formulă în care apariția variabilei „x” devine un cuantificator legat V. Această formulă afirmă că pentru toate tuplurile „x” din relația r(R) când înlocuindu-le în formula 1|/(x) în loc de toate aparițiile libere ale lui „x” obținem valoarea „adevărat”. De exemplu, formula /x(H) (x[A] F 0) afirmă că pentru toate tuplurile valoarea atributului A nu este goală, i.e. este necesar atributul A.
  • 4. Dacă |/(x) și φ(x) sunt formule, atunci -|)/(x), |/(x) l φ(x), q/(x) V φ(x) sunt și formule. Aparițiile variabilei „x” în aceste formule rămân libere sau legate - la fel ca și în c/(x) sau, respectiv, f(x). De exemplu, dacă variabila „x” a avut o apariție liberă în φ(x) și o apariție legată în φ(x), atunci tipul de apariție a variabilelor este păstrat în aceste funcții.
  • 5. Dacă φ(x) este o formulă, atunci (φ(x)) este de asemenea o formulă; apariția variabilei „x” rămâne liberă sau legată - la fel ca și în f(x).
  • 6. Nimic altceva nu este o formulă.

La calcularea formulelor, se folosește ordinea de prioritate a operațiilor, determinată de regulile de construire a formulei:

  • a) atomi în care se pot folosi operații de comparare aritmetică;
  • b) cuantificatori;
  • c) negație (-|)
  • d) operațiunea „I” (l)
  • e) operațiunea „SAU” (V)

Parantezele sunt folosite pentru a schimba ordinea în care o formulă este evaluată.

Definiție. O expresie de calcul relațional cu variabile tuplu are forma: (1:(11) 11|/(1:)), unde I este o variabilă tuplu care satisface schema de relație I; singura variabilă care poate fi inclusă liber în formula 1|/(1:); c/D) este o formulă corect construită.

Interpretarea expresiei calculului relațional: un set de tupluri 1: satisfacerea schemei de relații R, pentru care formula corect construită yD) este adevărată.

Exemplu. Să existe o atitudine K (Nume, bursă); atribut Bursa de studiu definit pe domeniu DESPRE= („da”, „nu”). Apoi expresia

(((Nume)| Zx(I) (r(x) l x[ Bursa de studiu] = „da” l x[Nume] = ([Nume])

vă va permite să preluați din relație numele tuturor studenților care primesc o bursă.

Expresii sigure

O expresie de forma (I | -1 gD)) în cazul general definește un raport infinit, care este inacceptabil. Prin urmare, în calculul relațional ne limităm să luăm în considerare așa-numitul sigur expresii de forma (I | |/(1:)), care sunt garantate pentru a produce un set limitat de tupluri. În astfel de expresii, valorile atributelor tuplurilor I sunt elemente ale unui set universal limitat - OOM((/). Aici OOM(1|/) este o relație unară, ale cărei elemente sunt simboluri care fie apar explicit în 1|/, sau servesc ca componente ale unora sau ale unui tuplu într-o relație pe care am menționat-o în 1|/.

În cartea lui J. Ullman este dată următoarea definiție: „Numim expresia (I | |/(1:)) de calcul relațional cu variabile tuple sigur, dacă sunt îndeplinite următoarele condiții:

  • 1. Ori de câte ori I satisface c/D), fiecare componentă a lui I este un element al OOM()/).
  • 2. Pentru orice subexpresie |/ de forma (Zi) (co(u)), fiecare componentă și aparține OOM(co) dacă și satisface co.
  • 3. Dacă pentru orice subexpresie |/ de forma (/u) (co(u)) fiecare componentă și nu aparține OOM(co), atunci nu satisface co. Condițiile 2 și 3 ne permit să stabilim adevărul unei formule calificate (Zi) (co(u)) sau (Ui) (co(u)), luând în considerare numai și, compusă din simboluri aparținând OOM(co). De exemplu, orice formulă (3 și) (Shchi) l...) satisface condiția 2, iar orice formulă (Ui) (-.Shchi) V ...) satisface condiția 3.

Deși condiția 3 poate părea neintuitivă, ar trebui să remarcăm că formula (Ui) (co(u)) este echivalentă logic cu formula -n(3) (-|Co(u)). Acesta din urmă nu este sigur dacă și numai dacă există unele și 0 PENTRU care -1CO(u 0) este ADEVĂRAT și și 0 nu aparține domeniului formulei -nso(u). Deoarece domeniile co și ->co sunt aceleași, condiția 3 afirmă că formula (/u) (co(u)) este sigură atunci când formula -DZi) (-.co(u)) este sigură...”

Echivalența expresiilor de algebră relațională și relațională

calcul cu variabile tuple

În aceeași carte a fost demonstrată următoarea teoremă, care este dată aici fără dovezi.

Dacă E este o expresie de algebră relațională, atunci există o expresie de calcul relațional sigur echivalent cu variabile tuple.

În tabel 5.1 oferă unele echivalențe.

Tabelul 5.1

Echivalențe pentru algebră relațională și calcul relațional

cu tupluri variabile

Expresia algebră relațională

Expresie de calcul relațional cu tupluri variabile

Unire: g și g, g, (K), g 9 (K)

(x(H) | G,(x) V r 2 (x))

Diferență: g, - g, g, (K), g 2 (I)

(x(I) I G,(x) A -iG 2 (x))

Intersecția: r 1 n r 2, r^Ya), r 7 (K)

(x(H)|r,(x)lg 2 (x))

Produs cartezian: g, x g., gDYa,), g 2 (I 2)

(x(I,I,) 1 Ei(I,) Eu(I 2) (g,(i)l g 2 (y)l x[I,] =

I(g1]lx[I 2 1=y[I 2 ]))

Proiecție: D b (g), g (Z), bсЯ

(DO | Ei(I) (r(i) l i[C = Db])

Alegere: a p (g), g (I)

D(I) | g(1) l I’))

Compus natural: g, mg, g, (AB), g 2 (BC)

(DAWS) | Eu(AB) Eu(BC) (g,(u) l g 2 (y) l u[B] =

= y[V] l DAV] = u [ A B ] l T[C] = y[C]))

Diviziune: g, n-g 2, g, (AB), g 2 (B)

(DA) | Yx(B) (g 2 (x) l Eu(AB) (g,(y) l y[B] =

H[V]lu[A]=YES])

Să luăm în considerare aceleași exemple de interogări care au fost date pentru limbajul algebră relațională.

Având în vedere aceeași schemă a bazei de date:

  • 8(8#. 814, 8С) - FURNIZOR (Numarul furnizorului. Nume, Oraș)", P(P#. PЇ4, RS) - DETALIU ( Număr de detaliu. Nume, preț)", 8Р( 8#. R#. OTU) - LIVRARE (Numarul furnizorului . Număr de detaliu . Cantitate).
  • 1. Obțineți numele furnizorilor care furnizează numărul de piesă P1.

(1(814) | Zi(8)Zu(8P)(8(i) a 8P(y) a u = y a y[P#] =

= ‘RG l u = 1)).

Explicație: rezultatul interogării este un set de tupluri і, având un singur atribut 814, astfel încât:

  • - există cel puțin un tuplu din relația 8 (Zi(8)... (8(i)...) și
  • - există cel puțin un tuplu din relația BR (...Zu(8Р)(... 8Р(у) ...),

astfel încât

  • - valorile acestor tupluri după atributul E# coincid (și),
  • - valoarea tuplului V prin atributul P# determină detaliul P1 care ne interesează (y(P#( = ‘RG) și
  • - tuplează și definește rezultatul interogării (u = 1:).
  • 2. Obțineți numele furnizorilor care nu furnizează numărul de piesă P1:

(1(814) | Zi(8)(8(i) l-Zu(8Р) (8Р(у) l у [Р#] = ‘РГ l и =

Uli = 1))).

Adică, pentru un tuplu din relația 8 care definește rezultatul unei interogări, nu există niciun tuplu din relația 8P care să aibă aceeași valoare pentru atributul 8# și să definească detaliul P1.

3. Obțineți numele furnizorilor care furnizează doar numărul de piesă P1.

Această cerere combină în esență cele două anterioare: i.e. se determină tuplurile corespunzătoare piesei livrate P1, iar din aceste tupluri se îndepărtează cele corespunzătoare livrării altor piese:

(1(814) | Zi(8)Zu(8R)(8(i) l 8R(y) l și = y l y[P#] =

= 'RG l şi = Ts8G^] l -.3у(8Р)(8Р(у) l у =

eu te[R#] F‘RG))).

4. Obțineți numele furnizorilor care furnizează toate piesele. Deoarece această interogare este implementată prin operația de divizare a algebrei relaționale, vom folosi echivalența de mai sus. Să luăm mai întâi în considerare o interogare care ne permite să obținem numărul de furnizori care furnizează toate piesele:

(1(8#) | Ush(R)Zi(8R)(R(w) d 8R(y) d y[R#| = y[R#] d P8#] = y18#])).

Acum să adăugăm la această interogare constructele necesare pentru a obține numele furnizorului din relația 8:

(1(814) | Zi(8)/u(R)Zi(8R)(8(i) l R(u) l 8Р(у) l w =

U [P#] l u = u l t = u)).

Calcul relațional cu variabile pe domenii

O expresie de calcul relațional cu variabile de domeniu este construită folosind aceleași instrumente ca și o expresie de calcul relațional cu variabile tuple. Diferența este că aici domeniul de aplicare al definiției este domeniile.

Aici se construiește și o formulă definită corect, a cărei bază este atomii.

I. Atomii au următoarea formă:

  • a) g(x, x 2,..., x), unde g este o relație care satisface schema R(A p A 2,..., A), și fiecare x. există o constantă sau o variabilă pe domeniu;
  • b) și 0 v, unde și și v sunt constante sau variabile definite pe domenii compatibile cu operația 0,0 - operație de comparare aritmetică (, >, F,

I. Formula de calcul relațional j/(t), precum și aparițiile libere și legate ale variabilelor, sunt definite în același mod ca și pentru calculul cu variabile tuple.

Echivalența expresiilor de calcul relațional cu variabile tuple și calcul cu variabile de domeniu

O expresie de calcul cu variabile de domeniu echivalentă cu o expresie de calcul cu variabile tuple (t | i|/(t)) este construită conform următoarelor reguli.

Să existe o variabilă tuplu t(R), unde R = (A p A 2 , ..., A n) are aritate n. Atunci, în locul variabilei tuplu t, se introduc n variabile noi pe domeniile t, t 2 ,... , t , iar expresia de calcul dată cu variabile tuple este înlocuită cu expresia (t, t 2 , ..., t |

  • orice atom r(t) este înlocuit cu un atom r(t p t 2 ,..., t);
  • fiecare apariție liberă a lui t este înlocuită cu variabila t,;
  • pentru fiecare cuantificator Z sau Vu introdus w noi variabile și, și 2, ..., și, unde m este aritatea lui și. Cuantificatori Zee (sau V(u)) se înlocuiesc cu cuantificatorii Zi, Zi 2 ... 3u m (Vu, Vu 2 ... Vum m , respectiv), iar în expresiile subordonate cuantificatorilor u[A,] se înlocuiesc cu și , a r(u) - r( Up u 2 ,..., u m).

Teorema. Pentru Pentru fiecare expresie sigură cu variabile tuple, există o expresie sigură echivalentă cu variabile de domeniu.

Exemplu. Relațiile cu schemele sunt date:

S(S#. NUME, ORAȘ) - furnizor;

P(P#. PNAME, PRET) - detaliu;

SP( S#. R#. CANTITATE) - livrare.

Scrieți o expresie de calcul relațional care vă permite să obțineți numele furnizorilor care furnizează numărul de piesă P1:

a) expresie de calcul cu variabile tuple:

(t(SNAME) | 3u(S) 3v(SP) (S(u) l SP(v) l u l u)

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva