Algebra relațională în baze de date: operații, exemple. Operație de redenumire unară. În timpul lucrărilor de laborator au fost studiate operațiunile cu baze de date în general. abilități dobândite în utilizarea aplicației „ibexpert” pentru a crea, șterge, înregistra

Relația dintre o înregistrare de proprietar și o înregistrare de membru este, de asemenea, 1:N.

Principala diferență dintre aceste modele este că, în modelul de rețea, o înregistrare poate fi membru al mai multor relații de grup. Conform acestui model, fiecare relație de grup este numită și se face o distincție între tipul și instanța ei. Un tip de relație de grup este specificat prin numele său și definește proprietăți comune tuturor instanțelor de acest tip. O instanță de relație de grup este reprezentată de o înregistrare de proprietar și un set de înregistrări subordonate (posibil goale). Există următoarea limitare: înregistrarea instanței nu poate fi membru a două instanțe de relații de grup de același tip (adică, angajatul din exemplul din paragraful 1, de exemplu, nu poate lucra în două departamente).

  • arborii (a) și (b) prezentati în Fig. 4.2 sunt înlocuite cu o singură structură de rețea în care înregistrarea ANGAJAT este inclusă în două relații de grup;
  • pentru a afișa tipul M:N, introduceți înregistrarea EMPLOYEE_CONTRACT, care nu are câmpuri și servește doar pentru a lega înregistrările CONTRACTUL și ANGAJAT (vezi Fig. 4.3). Rețineți că această înregistrare poate stoca și informații utile, de exemplu, cota angajatului din remunerația totală conform acestui contract.


Orez. 4.3.

Fiecare instanță a unei relații de grup este caracterizată de următoarele caracteristici:

Cum să aranjați înregistrările subordonate:

  • arbitrar,
  • cronologic /coada/,
  • cronologic invers /stiva/,
  • asortat.

Dacă o înregistrare este declarată subordonată mai multor relații de grup, atunci fiecare dintre ele poate avea propria sa metodă de ordonare atribuită.

Mod de activare a înregistrărilor subordonate:

  • automat - este imposibil să introduceți o înregistrare în baza de date fără ca aceasta să fie imediat atribuită unui anumit proprietar;
  • manual - vă permite să vă amintiți o înregistrare subordonată în baza de date și să nu o includeți imediat într-o instanță a unei relații de grup. Această operațiune este inițiată ulterior de utilizator.

Modul de excepție.

Se obișnuiește să se distingă trei clase de apartenență a înregistrărilor subordonate în relațiile de grup:

  • Fix. O înregistrare subordonată este strâns legată de o înregistrare de proprietar și poate fi eliminată din relația de grup numai prin ștergerea acesteia. Când ștergeți o înregistrare de proprietar, toate înregistrările subordonate sunt șterse automat. În exemplul de mai sus, calitatea de membru fix presupune o relație de grup de CONCLUZIE între înregistrările CONTRACTULUI și CLIENT, deoarece un contract nu poate exista fără client.
  • Obligatoriu. Este posibil să comutați o înregistrare subordonată cu un alt proprietar, dar nu poate exista fără proprietar. Pentru a șterge o înregistrare de proprietar, aceasta nu trebuie să aibă înregistrări subordonate cu calitatea de membru necesară. Înregistrările „ANGAJAT” și „DEPARTAMENT” sunt legate prin această relație. Dacă un departament este desființat, toți angajații săi trebuie fie transferați în alte departamente, fie concediați.
  • Opțional. Puteți exclude o înregistrare dintr-o relație de grup, dar o păstrați în baza de date fără a o atribui unui alt proprietar. Atunci când o înregistrare de proprietar este ștearsă, înregistrările sale subordonate - membrii opționali - sunt păstrate în baza de date, nemaifiind participând la o relație de grup de acest tip. Un exemplu de astfel de relație de grup este „PERFORM” între „ANGAJATI” și „CONTRACT”, deoarece pot exista angajați în organizație ale căror activități nu sunt legate de îndeplinirea oricăror obligații contractuale față de clienți.

Operații asupra datelor într-un model de bază de date de rețea

Adăuga - face o înregistrare în baza de date și, în funcție de modul de includere, fie include într-o relație de grup, unde este declarată subordonată, fie nu o include în nicio relație de grup.
Includeți în relația de grup - legați o înregistrare subordonată existentă la înregistrarea proprietarului.
Intrerupator - legați o înregistrare subordonată existentă la o altă înregistrare de proprietar din aceeași relație de grup.
Actualizați - modificarea valorii elementelor unei înregistrări extrase anterior.
Extrage - extrageți secvențial înregistrările după valoarea cheii, precum și folosind relații de grup - de la proprietar puteți merge la înregistrările membrilor și dintr-o înregistrare subordonată la proprietarul setului.
Șterge - eliminați o înregistrare din baza de date. Dacă această înregistrare este proprietarul unei relații de grup, atunci se analizează clasa de apartenență a înregistrărilor subordonate. Membrii obligatorii trebuie mai întâi excluși din relația de grup, membrii fiși trebuie șterși împreună cu proprietarul, membrii opționali vor rămâne în baza de date.
Excludeți din relația de grup - întrerupeți legătura dintre recordul proprietarului și cel al membrului.

Constrângeri de integritate

Ca în model ierarhic Este asigurată doar menținerea integrității referențiale (titularul relației este membru al relației).

Avantajele și dezavantajele DBMS-urilor timpurii

Avantajele DBMS timpurii:

  • mijloace avansate de gestionare a datelor din memoria externă la un nivel scăzut;
  • capacitatea de a construi manual sisteme de aplicații eficiente;
  • capacitatea de a economisi memorie prin separarea subobiectelor (în sistemele de rețea)

Dezavantajele DBMS timpurii:

  • dificultatea de utilizare;
  • cerințe de nivel înalt de cunoștințe despre organizarea fizică a bazei de date;
  • dependența sistemelor de aplicații de organizarea fizică a bazei de date;
  • supraîncărcarea logicii sistemelor de aplicații cu detalii de organizare a accesului la baza de date.

Atât ierarhice cât şi model de date de rețea necesită prezența programatorilor cu înaltă calificare. Și chiar și în astfel de cazuri, implementarea solicitărilor utilizatorilor este adesea întârziată mult timp.

SGBD orientat pe obiecte

Apariția SGBD-urilor orientate pe obiect a fost cauzată de nevoile programatorilor în limbaje OO, care aveau nevoie de instrumente pentru stocarea obiectelor care nu se potriveau în memoria RAM a computerului. De asemenea, importantă a fost și sarcina de a salva starea obiectelor între lansările repetate ale programului de aplicație. Prin urmare, majoritatea OODBMS-urilor sunt o bibliotecă ale cărei proceduri de gestionare a datelor sunt incluse în programul de aplicație. Exemple de implementări OODBMS precum server dedicat bazele de date sunt extrem de rare.

Trebuie remarcat imediat că definiția general acceptată a „ model de date orientat pe obiecte„ nu există. Acum putem vorbi doar despre o anumită abordare „obiectală” a reprezentării logice a datelor și despre diferite moduri de implementare orientate pe obiecte.

Știm că orice model de date trebuie să includă trei aspecte: structural, holistic și manipulare. Să vedem cum sunt implementate pe o bază orientată pe obiecte paradigme de programare.

Structura

Structura modelului obiect este descrisă folosind trei concepte cheie:

încapsulare - fiecare obiect are o anumită stare internă (stochează o înregistrare a datelor în interiorul său), precum și un set de metode - proceduri, cu ajutorul cărora (și numai în acest fel) puteți accesa datele care determină starea internă a obiectul sau schimbați-le. Astfel, obiectele pot fi considerate ca entități independente, separate de lumea exterioară;
moştenire - implică capacitatea de a crea noi clase de obiecte din clase de obiecte care moștenesc structura și metodele strămoșilor lor, adăugându-le caracteristici care reflectă propria lor individualitate. Moștenirea poate fi simplă (un strămoș) sau multiplă (mai mulți strămoși);
polimorfism - obiecte diferite pot reacționa diferit la aceleași evenimente externe în funcție de modul în care sunt implementate metodele lor.

Integritatea datelor

Pentru a menține integritatea, abordarea orientată pe obiect sugerează utilizarea următoarelor instrumente:

  • menținerea automată a relațiilor de moștenire abilitatea de a declara unele câmpuri de date și metode ale unui obiect ca „ascunse”, nevizibile pentru alte obiecte; astfel de câmpuri și metode sunt utilizate numai de metodele obiectului însuși, creând proceduri de control al integrității în cadrul obiectului

Instrumente de manipulare a datelor

Din păcate, programarea orientată pe obiecte nu are instrumente comune de manipulare a datelor, cum ar fi algebra relațională sau calculul relațional. Datele sunt procesate folosind unul dintre limbajele de programare orientate pe obiecte de uz general, de obicei SmallTalk, C++ sau Java.

Să rezumam acum câteva rezultate

Bazele de date orientate pe obiecte, spre deosebire de cele relaționale, stochează mai degrabă obiecte decât înregistrări. Abordarea orientată pe obiect oferă un mijloc mai avansat de reprezentare a lumii reale decât modelul relațional, o reprezentare naturală a datelor. În modelul relațional, toate relațiile aparțin aceluiași nivel, ceea ce complică transformarea relațiilor ierarhice ale modelului entitate-relație în model relațional. Modelul OO poate fi vizualizat strat cu strat, la diferite niveluri de abstractizare. Este posibil să definiți noi tipuri de date și operațiuni cu acestea.

În același timp, OO - Modelul are și o serie de dezavantaje:

  • Nu există mijloace puternice non-procedurale de a prelua obiecte din baza de date. Toate interogările trebuie scrise în limbaje procedurale, problema optimizării lor este atribuită programatorului;
  • în loc de pur declarativ constrângeri de integritate(cum ar fi declararea explicită a cheilor primare și externe ale tabelelor relaționale folosind cuvinte cheie CHEIA PRINCIPALAȘi REFERINȚE) sau declanșatoare semi-declarative, trebuie să scrieți cod procedural pentru a asigura integritatea internă.

Evident, ambele deficiențe sunt asociate cu lipsa unor mijloace dezvoltate de manipulare a datelor. Această problemă este rezolvată în două moduri - extinderea limbajelor OO către gestionarea datelor (standard ODMG) sau adăugarea de proprietăți ale obiectelor la SGBD-urile relaționale (SQL-3, precum și așa-numitele SGBD-uri obiect-relaționale).

Fiecare operație include selecția datelor (selectarea) și acțiunile care vor fi efectuate asupra datelor selectate. Principalele operațiuni dintr-o bază de date relațională sunt operațiunile de actualizare a bazei de date și operațiunile de procesare a relațiilor.

LA operațiuni de actualizare a bazei de date include acele operațiuni care inserează tupluri noi, elimină pe cele inutile și ajustează valorile atributelor tuplurilor existente, și anume: acestea sunt operații Porniți, Ștergeți, actualizați.

Operațiune Porniți necesită specificarea numelui relației și generarea preliminară a valorilor atributelor noului tuplu. Trebuie specificată cheia tuplu.

Operațiune Șterge necesită numele relației, precum și identificarea tuplului sau grupului de tupluri care urmează să fie șters.

Operațiune Actualizați este executat pentru relația numită și poate corecta atât unul cât și mai multe tupluri. De exemplu, dacă conducerea companiei a decis să mărească toate salariile angajaților cu aceeași sumă, atunci mai multe tuple vor fi ajustate simultan cu o operațiune de actualizare.

Cu privire la operațiuni de prelucrare, apoi sunt împrumutate din algebra relațională. Conform abordării lui E. Codd, algebra relațională include opt operații, dintre care cinci sunt de bază: Probă, Proiecție, înmulțire, unire, scădere.

Probă- selectați din relație doar acele tupluri care satisfac condiția dată.

La Proiecții relație cu un set dat de atribute ale acestuia, se obține o nouă relație, creată prin extragerea tuplurilor care conțin atributele specificate din relația originală.

La Multiplicare(produsul cartezian) a două relații, se obține o nouă relație, ale cărei tupluri sunt o concatenare a tuplurilor primei și celei de-a doua relații.

Ca urmare Asociațiile două relaţii, se obţine una a treia, incluzând tupluri incluse în cel puţin o relaţie, adică conţinând toate elementele relaţiilor originale.

La Scădere Sunt returnate doar acele tupluri ale primei relații care rămân după scăderea celei de-a doua relații, adică toate tuplurile celei de-a doua relații sunt eliminate din prima relație.

Celelalte trei operațiuni sunt derivate, se pot obține din operațiunile principale: Conexiune, intersecție, Divizia.

Operațiune Compus se aplică la două relații care au un atribut comun. Rezultatul acestei operații pentru două relații în anumite condiții este o relație de tupluri care sunt o combinație a primei și a doua relații care satisfac condiția specificată.

Intersecție două relații este o relație care include toate tuplurile incluse în ambele relații.

Operațiune Diviziuni presupune că există două relații: una este binară (conținând două atribute), cealaltă este unară (conținând un atribut). Rezultatul este o relație formată din tupluri care includ valorile primului atribut al tuplurilor primei relații, dar numai acelea pentru care setul de valori al celui de-al doilea atribut al primei relații coincide cu setul de valorile atributelor celei de-a doua relații.

O trăsătură distinctivă a operațiilor de procesare a relațiilor este că unitatea de procesare în ele nu sunt tupluri, ci relații: una sau două relații sunt utilizate la intrarea fiecărei operații, iar rezultatul operațiilor este o relație nouă.

Să ne uităm mai detaliat la unele dintre cele mai frecvent utilizate operații ale algebrei relaționale.

Operațiune O asociere- intrarea primește două relații compatibile de aceeași dimensiune: A și B. Rezultatul este o relație de aceeași structură, care conține toate tuplurile A și toate tuplurile B

Intersecție presupune prezența la intrare a două relații de aceeași dimensiune: A și B. La ieșire se creează o relație de aceeași structură, care conține doar acele tupluri A care se află în B.

Divizia. La intrarea operaţiei se folosesc două relaţii: A şi B. Fie relaţia A, numită divizibilă, să conţină atribute (A 1, A 2, A 3,..., A n). Relația B este un divizor și conține o submulțime de atribute A: (A 1, A 2, ..., A k), unde k

În general, operațiunile modelului de date relaționale oferă capacitatea de a manipula relații, permițându-vă să actualizați baza de date, precum și să selectați subseturi de date stocate și să le prezentați în forma dorită.

Când proiectați și lucrați cu baze de date, aceste opt operațiuni nu sunt de obicei suficiente. Prin urmare, se adaugă operațiuni precum redenumirea atributelor, crearea de noi atribute calculate, operațiuni de atribuire, comparații etc.

Anomalii de modificare

Anomalii de modificare se manifestă prin faptul că o modificare a valorii unei date poate presupune scanarea întregului tabel și o modificare corespunzătoare a altor înregistrări de tabel.

Anomalii de ștergere sunt că atunci când ștergeți orice date din tabel, pot dispărea și alte informații care nu au legătură directă cu datele șterse.

Anomalii de adaos apar în cazurile în care informațiile nu pot fi plasate într-un tabel până când nu sunt complete sau inserarea unei noi înregistrări necesită o scanare suplimentară a tabelului

Să existe o relație care să stocheze informații despre studenți, cursurile pe care le urmează și costul acestor cursuri. Din această relație, se îndepărtează un tuplu care conține (pe lângă informații despre student) informații despre numele și costul cursului urmat de acest student. Dacă informațiile despre numele și costul cursului au fost stocate într-o singură copie numai în acest tuplu, acestea vor dispărea irevocabil din relație. Această situație se numește anomalie de ștergere. Efectuarea unei operații de ștergere are ca rezultat pierderea informațiilor despre două entități.

Aceeași relație poate fi ilustrată printr-un exemplu anomalie de inserție. Să presupunem că trebuie să adăugăm informații despre numele și costul unui anumit curs, dar nu vom putea adăuga aceste informații până când niciun student nu este înscris la curs. Puteți scăpa de ambele anomalii împărțind relația existentă în două, fiecare dintre acestea va conține date de la o singură entitate. Apoi ștergerea informațiilor despre student nu va afecta datele cursului.

Când împarte o relație în două, apar și probleme. De exemplu, este posibilă înscrierea unui student la un curs care încă nu există? Aceste probleme trebuie rezolvate prin discutarea regulilor de afaceri. Dacă regulile de afaceri impun ca acel curs și informații despre cost să fie disponibile atunci când un student se înscrie la acel curs, atunci se va verifica dacă cursul necesar există atunci când studentul se înscrie la curs. Aceste tipuri de verificări sunt numite constrângeri de integritate referenţială sau constrângeri de integritate cheie străină.

Integritatea entităților - nicio valoare a cheii primare nu trebuie să conțină null.

Etape de proiectare:

Conceptual proiectare - procesul de dezvoltare a bazei de date începe cu analiza cerințelor. Proiectantul în această etapă de dezvoltare trebuie să găsească răspunsuri la următoarele întrebări: ce elemente de date trebuie stocate, cine le va accesa și cum. Este creat un model spaniol. Informații, independent de aspectele fizice, baza de date țintă și limbaje de programare

boolean - se creează structura logică a bazei de date. Pentru a face acest lucru, determinați cum vor fi grupate datele în mod logic. Structura bazei de date în această etapă este exprimată în termeni de obiecte de aplicație și relații dintre acestea. Depinde de DBMS țintă, verificarea redundanței, normalizare.

fizică - Structura logică a bazei de date este convertită într-o structură fizică ținând cont de aspectele de performanță. Elementele de date în această etapă primesc atribute și sunt definite ca coloane în tabelele SGBD alese pentru implementarea bazei de date. Relațiile de bază cu fișierele și indexurile organizației, constrângerile de integritate și măsurile de securitate.

Doar în cazul în care - tranzacții- un efect secundar indivizibil al operațiunilor care transferă baza de date dintr-o stare stabilă în alta. Proprietăți - atomicitate (indivizibilitate), consistență (de la o stare la alta), izolare (tranzacțiile utilizatorilor nu interferează între ele), durabilitate (rezultatul trebuie înregistrat în baza de date după lansare, chiar dacă s-a prăbușit în momentul următor ).

Metoda entitate-relație.

Metoda modelării entitate-relație oferă un model abstract al unui domeniu de problemă folosind următoarele concepte de bază: esență(entitati), relatii(relaţiile) dintre entităţi şi atribute(atribute) pentru a reprezenta proprietățile entităților și relațiilor.

Orice fragment din domeniul subiectului poate fi reprezentat ca set de entitati, între care există unele multe conexiuni. Să dăm definiții:

Esență este un obiect care poate fi identificat într-un fel care îl deosebește de alte obiecte. Exemple: o anumită persoană, întreprindere, eveniment etc.

Set de entitati- un set de entitati de acelasi tip (avand aceleasi proprietati). Exemple: toți oamenii, afacerile, vacanțele etc. Seturile de entități nu trebuie să fie disjunctive. De exemplu, o entitate care aparține setului MAN aparține și setului OAMENI.

O entitate este de fapt un set atribute, care descriu proprietățile tuturor membrilor unui anumit set de entități. Domeniu era deja mai sus.

Cheia de entitate- este unul sau mai multe atribute care definesc în mod unic o entitate dată.

Conexiune este o asociere stabilită între mai multe entităţi. Exemple:

  • întrucât fiecare angajat lucrează într-un anumit departament, există o relație „lucrează în” sau DEPARTAMENT-ANGAJAT între entitățile ANGAJAT și DEPARTAMENT;

Din păcate, nu există reguli generale pentru a determina ce este considerat o entitate și ce este o relație. În exemplul discutat mai sus, am presupus că „conducerea” este o conexiune. Totuși, putem considera entitatea „manager”, care are legături „gestionează” cu entitatea „departament” și „este” cu entitatea „angajat”.

O relație poate avea și atribute. De exemplu, pentru relația DEPARTAMENT-ANGAJAT, puteți seta atributul WORK_TERRENCE_IN_DEPARTMENT.

Rolul entității în relație- funcția pe care o îndeplinește o entitate într-o conexiune dată. De exemplu, într-o relație PARENT-COPIL, entitățile PERSONA pot avea rolurile „părinte” și „copil”. Specificarea rolurilor în modelul entitate-relație este opțională și servește la clarificarea semanticii relației.

Set de conexiuni- aceasta este relația dintre n(și n nu mai puțin de 2) entități, fiecare aparținând unui anumit set de entități.

Deși, strict vorbind, conceptele de „conexiune” și „set de conexiuni” sunt diferite (primul este un element al celui de-al doilea), ele sunt totuși foarte des confundate.

Când n=2, adică când o relație combină două entități, se numește binară. S-a dovedit că n-un set de conexiuni ( n>2) pot fi întotdeauna înlocuite cu multe binare, dar primele reflectă mai bine semantica materiei.

Se numește numărul de entități care pot fi asociate printr-un set de conexiuni cu o altă entitate gradul de conexiune. Luarea în considerare a grade este utilă în special pentru relațiile binare. Pot exista următoarele grade de legături binare:

  • unu la unu (notat 1: 1 ). Aceasta înseamnă că într-o astfel de relație, entitățile cu un rol corespund întotdeauna cel mult unei entități cu alt rol.

O altă caracteristică importantă a unei conexiuni pe lângă gradul său este clasa de membru entități incluse în acesta sau cardinalitatea comunicatii.

„ANGAJAT” are clasa de membru obligatorie(acest fapt este indicat și prin indicarea intervalului numărului de posibile apariții ale entității într-o relație, în acest caz este 1,1), iar entitatea „DEPARTAMENT” are clasă de membru opțională(0,1). Acum putem descrie această relație ca 0,1:1,1 .

  • unu la multi ( 1:n). În acest caz, o entitate cu un rol poate corespunde oricărui număr de entități cu alt rol.

Această figură ilustrează în continuare faptul că mai multe seturi de relații pot fi definite între două entități.

  • multi la unu ( n: 1). Această relație este similară cu cartografierea 1:n.

În acest caz, din motive absolut evidente (fiecare contract se încheie cu un anumit client, iar fiecare client are cel puțin un contract, altfel nu ar fi așa), fiecare entitate are o clasă de membru obligatorie.

  • multi la multi ( n:n). În acest caz, fiecare dintre entitățile asociate poate fi reprezentată de orice număr de instanțe.

Dacă existența unei entități x depinde de existența unei entități y, atunci x este numit entitate dependentă(uneori entitatea x este numită „slabă” și „entitatea” y este numită puternică). Ca exemplu, luați în considerare relația dintre entitățile descrise anterior WORKING_GROUP și CONTRACT. Grupul de lucru este creat numai după semnarea contractului cu clientul și încetează să existe la finalizarea contractului. Atunci WORKING_GROUP depinde de entitatea CONTRACT. Vom desemna o entitate dependentă printr-un dreptunghi dublu, iar legătura ei cu o entitate puternică printr-o linie cu o săgeată ( am avut un oval pentru dependent)

Cardinalitatea conexiunii pentru o entitate puternică va fi întotdeauna (1,1). Clasa de membru și gradul de relație pentru o entitate dependentă pot fi orice.

12. Modele de date ierarhice și de rețea.

Model ierarhic este un ansamblu de elemente dispuse în ordinea subordonării lor de la general la specific și formând un arbore (graf) inversat în structură.

Conceptele de bază ale unei structuri ierarhice includ nivelul, nodul și relația. Nod este un set de atribute de date care descriu un obiect. Într-o diagramă arborescentă ierarhică, nodurile sunt reprezentate ca vârfuri în grafic. Fiecare nod de la un nivel inferior este conectat doar la un singur nod de la un nivel superior. Un arbore ierarhic are un singur vârf, care nu este subordonat niciunui alt vârf și este situat în partea de sus - primul nivel. Nodurile dependente (slave) sunt la nivelul al doilea, al treilea etc. Numărul de arbori din baza de date este determinat de numărul de înregistrări rădăcină. Fiecare înregistrare de bază de date are o singură cale ierarhică de la înregistrarea rădăcină.

Organizarea datelor într-un SGBD de tip ierarhic este definită în termeni de: element, agregat, înregistrare (grup), relație de grup, bază de date.

  • Atribut (element de date)- cea mai mică unitate a unei structuri de date. De obicei, fiecărui element dintr-o descriere a bazei de date i se dă un nume unic. Se face referire la acest nume în timpul procesării. Un element de date este adesea numit și câmp.
  • Record- o colecție numită de atribute. Utilizarea înregistrărilor vă permite să obțineți un set de date conectat logic într-un singur acces la baza de date. Înregistrările sunt modificate, adăugate și șterse. Tipul unei înregistrări este determinat de compoziția atributelor sale. Instanță de înregistrare - o înregistrare specifică cu o anumită valoare a elementului
  • Atitudine de grup- relaţia ierarhică între înregistrări de două tipuri. Înregistrarea părinte (proprietarul relației de grup) se numește înregistrarea sursă, iar înregistrările secundare (membrii relației de grup) sunt numite înregistrări subordonate. O bază de date ierarhică poate stoca doar astfel de structuri arborescente.

Înregistrarea rădăcină a fiecărui arbore trebuie să conțină o cheie cu o valoare unică. Cheile înregistrărilor non-root trebuie să aibă o valoare unică numai în cadrul relației de grup. Fiecare înregistrare este identificată printr-o cheie completă concatenată, care este setul de chei ale tuturor înregistrărilor de la rădăcină de-a lungul căii ierarhice.

Când sunt reprezentate grafic, relațiile de grup sunt reprezentate prin arce ale unui grafic direcționat, iar tipurile de înregistrări sunt reprezentate prin vârfuri.

Pentru relațiile de grup în modelul ierarhic, sunt furnizate modul de includere automată și apartenența fixă. Aceasta înseamnă că, pentru ca orice înregistrare non-rădăcină să fie memorată în baza de date, trebuie să existe înregistrarea părinte. Când o înregistrare părinte este ștearsă, toate înregistrările subordonate sunt șterse automat.

Exemplu: O întreprindere este formată din departamente în care lucrează angajații. Fiecare departament poate avea mai mulți angajați, dar un angajat nu poate lucra în mai mult de un departament.

Asadar, pentru un sistem informatic de management al personalului este necesara crearea unei relatii de grup formata dintr-un cazier parental DEPARTAMENT (NUMELE DEPARTAMENTULUI, NUMARUL DE SALARIATI) si un cazier al copilului ANGAJAT (NUME, POST, SALARIU). (Pentru simplitate, presupunem că există doar două înregistrări copil.) - orez a (mai departe)

Pentru automatizarea contabilității contractelor cu clienții, este necesară crearea unei alte structuri ierarhice: client - contracte cu acesta - angajați implicați în lucrul la contract. Acest arbore va include înregistrările CLIENT(NUME_CLIENT, ADRESĂ), CONTRACTUL(NUMĂR, DATA, SUMA), CONTRACTOR (NUME, POZIȚIE, NUME_DEPARTAMENT) - fig. b.

Defecte baze de date ierarhice:

  • Informațiile dintre înregistrări sunt parțial duplicate (astfel de înregistrări se numesc pereche), iar modelul de date ierarhice nu oferă suport pentru corespondența dintre înregistrările pereche.
  • Modelul ierarhic implementează relația dintre înregistrările sursă și copil conform schemei 1:N, adică o înregistrare părinte poate corespunde oricărui număr de copii. Să presupunem acum că executantul poate lua parte la mai multe contracte (adică, apare o relație de tip M:N). În acest caz, este necesară introducerea unei alte relații de grup în baza de date, în care CONTRACTATOR va fi înregistrarea inițială, iar CONTRACT va fi copilul. Astfel, suntem din nou obligați să duplicăm informațiile (Figura C).
  • conexiuni logice destul de complexe și greoaie corespunzătoare în prelucrarea datelor

Avantaje:

Cel mai simplu este o utilizare destul de eficientă a memoriei și o performanță bună a timpului pentru efectuarea operațiunilor pe date. Cu toate acestea, acest model este convenabil în principal pentru lucrul cu informații organizate ierarhic.

Operații asupra datelor definite în modelul ierarhic:

  • ADĂUGA o nouă intrare în baza de date. Pentru înregistrarea rădăcină, este necesar să se genereze o valoare cheie.
  • SCHIMBARE valoarea datelor din înregistrarea preluată anterior. Datele cheie nu trebuie modificate.
  • ȘTERGE unele înregistrări și toate înregistrările subordonate acesteia.
  • EXTRAGE:
    • extrageți înregistrarea rădăcină după valoarea cheii; este permisă și vizualizarea secvențială a înregistrărilor rădăcină
    • preluați înregistrarea următoare (înregistrarea următoare este preluată în ordinea de parcurgere din stânga)

În operațiunea EXTRACT, este posibilă specificarea condițiilor de selecție.

Toate operațiunile de modificare sunt aplicate doar unei înregistrări „curente” (care a fost preluată anterior din baza de date). Această abordare a manipulării datelor se numește „navigație”.

Constrângeri de integritate.

Se menține doar integritatea relațiilor dintre proprietari și membrii relației de grup (nici un descendent nu poate exista fără un strămoș). Corespondența înregistrărilor pereche aparținând unor ierarhii diferite nu este menținută automat.

Primele sisteme de gestionare a bazelor de date, care au apărut la mijlocul anilor 60, au făcut posibilă lucrul cu o bază de date ierarhică. Cel mai faimos a fost sistemul ierarhic IMS de la IBM. Sunt cunoscute și alte sisteme: PC/Focus, Team-Up, Data Edge și ale noastre: Oka, INES, MIRIS.

Model de date de rețea.

Model de rețea- o structură în care orice element poate fi asociat cu orice alt element. O bază de date de rețea constă din seturi de înregistrări care sunt legate între ele, astfel încât înregistrările pot conține legături explicite către alte seturi de înregistrări. Astfel, seturile de înregistrări formează o rețea. Relațiile dintre înregistrări pot fi arbitrare, iar aceste relații sunt prezente în mod explicit și stocate în baza de date.

Un model de date de rețea este definit în aceiași termeni ca și unul ierarhic. Constă din multe înregistrări care pot fi proprietari sau membri ai unei relații de grup. Relația dintre o înregistrare de proprietar și o înregistrare de membru este, de asemenea, de formă 1:N.

Principala diferență dintre aceste modele este că, în modelul de rețea, o înregistrare poate fi membru mai mult de o relație de grup. Conform acestui model, fiecare relație de grup este numită și se face o distincție între tipul său și instanța sa. Un tip de relație de grup este specificat prin numele său și definește proprietăți comune tuturor instanțelor de acest tip. O instanță de relație de grup este reprezentată de o înregistrare de proprietar și un set de înregistrări subordonate (posibil goale). Cu toate acestea, există următoarea limitare: o instanță de înregistrare nu poate fi membru a două instanțe de relații de grup de același tip (un angajat nu poate lucra în două departamente)

Structura ierarhică din imaginea de mai sus. este convertit în rețea după cum urmează

Arborii (a) și (b) sunt înlocuiți cu o singură structură de rețea în care intrarea ANGAJAT este inclusă în două relații de grup; pentru a afișa tipul M:N, introduceți înregistrarea EMPLOYEE_CONTRACT, care nu are câmpuri și servește doar pentru a lega înregistrările CONTRACTUL și ANGAJAT

Fiecare instanță a unei relații de grup este caracterizată de următoarele caracteristici:

  • modalitate de organizare a înregistrărilor subordonate:

arbitrar,

cronologic /coada/,

cronologic invers /stiva/,

asortat.

Dacă o înregistrare este declarată subordonată mai multor relații de grup, atunci fiecare dintre ele poate avea propria sa metodă de ordonare atribuită.

  • modul de activare a înregistrărilor subordonate:

automat - este imposibil să introduceți o înregistrare în baza de date fără ca aceasta să fie imediat atribuită unui anumit proprietar;

manual - vă permite să vă amintiți o înregistrare subordonată în baza de date și să nu o includeți imediat într-o instanță a unei relații de grup. Această operație este inițiată ulterior de utilizator).

  • modul excepție Se obișnuiește să se distingă trei clase de apartenență a înregistrărilor subordonate în relațiile de grup:

Fix. O înregistrare subordonată este strâns legată de o înregistrare de proprietar și poate fi eliminată din relația de grup numai prin ștergerea acesteia. Când ștergeți o înregistrare de proprietar, toate înregistrările subordonate sunt șterse automat. În exemplu, apartenența fixă ​​presupune relația de grup „ÎNCLUDE” între înregistrările „CONTRACT” și „CLIENT” deoarece un contract nu poate exista fără client.

Obligatoriu. Este posibil să comutați o înregistrare subordonată cu un alt proprietar, dar nu poate exista fără proprietar. Pentru a șterge o înregistrare de proprietar, aceasta nu trebuie să aibă înregistrări subordonate cu calitatea de membru necesară. Înregistrările „ANGAJAT” și „DEPARTAMENT” sunt legate prin această relație. Dacă un departament este desființat, toți angajații săi trebuie fie transferați în alte departamente, fie concediați.

Opțional. Puteți exclude o înregistrare dintr-o relație de grup, dar o păstrați în baza de date fără a o atribui unui alt proprietar. Atunci când o înregistrare de proprietar este ștearsă, înregistrările sale subordonate - membrii opționali - sunt păstrate în baza de date, nemaifiind participând la o relație de grup de acest tip. Un exemplu de astfel de relație de grup este „PERFORMA” între „ANGAJATI” și „CONTRACT”, deoarece organizația poate avea angajați ale căror activități nu sunt legate de îndeplinirea oricăror obligații contractuale față de clienți.

Operații pe date.

ADĂUGA- face o înregistrare în baza de date și, în funcție de modul de includere, fie include într-o relație de grup, unde este declarată subordonată, fie nu o include în nicio relație de grup.

INCLUDE ÎN RELAȚIA DE GRUP- legați o înregistrare subordonată existentă la înregistrarea proprietarului.

INTRERUPATOR- legați o înregistrare subordonată existentă la o altă înregistrare de proprietar din aceeași relație de grup.

ACTUALIZAȚI- modificarea valorii elementelor unei înregistrări extrase anterior.

EXTRAGE- extrageți secvențial înregistrările după valoarea cheii, precum și folosind relații de grup - de la proprietar puteți merge la înregistrările membrilor și dintr-o înregistrare subordonată la proprietarul setului.

ȘTERGE- eliminați o înregistrare din baza de date. Dacă această înregistrare este proprietarul unei relații de grup, atunci se analizează clasa de apartenență a înregistrărilor subordonate. Membrii obligatorii trebuie mai întâi excluși din relația de grup, membrii fiși trebuie șterși împreună cu proprietarul, membrii opționali vor rămâne în baza de date.
EXCLUDEA DIN RELAȚIA DE GRUP- întrerupeți legătura dintre recordul proprietarului și cel al membrului.

Constrângeri de integritate.

Ca și în modelul ierarhic, se asigură doar menținerea integrității referențiale (titularul relației este membru al relației).

Bazele demnitate modelul de rețea este o eficiență și eficiență ridicată a memoriei. Defect– complexitatea și rigiditatea schemei de bază, precum și dificultatea de înțelegere. În plus, controlul integrității este slăbit în acest model, deoarece permite stabilirea de conexiuni arbitrare între înregistrări. Complexitatea implementării SGBD, complexitatea mecanismului de acces la date și necesitatea de a defini clar conexiunile de date la nivel fizic

La sistemele de gestionare a bazelor de date de rețea binecunoscute includ: DBMS, IDMS, TOTAL, VISTA, NETWORK, SETOR, COMPASS etc.

Comparând bazele de date ierarhice și de rețea, putem spune următoarele. În general, modelele ierarhice și de rețea oferă acces destul de rapid la date. Dar întrucât în ​​bazele de date de rețea structura principală de prezentare a informațiilor are forma unei rețele în care fiecare vârf (nod) poate avea o legătură cu oricare altul, atunci datele din baza de date a rețelei sunt mai egale decât în ​​cea ierarhică, deoarece accesul la informaţie poate fi efectuată pornind de la orice nod.

Modelele grafice (ierarhice și de rețea) sunt implementate ca modele de date în sistemele de gestionare a bazelor de date care rulează pe computere mainframe. Pentru calculatoarele personale, bazele de date relaționale sunt mai frecvente, deși există și sisteme de gestionare a bazelor de date care suportă modelul de rețea.

^

Curs nr. 4. Algebră relaţională. Operații unare

algebră relațională, după cum ați putea ghici, acesta este un tip special de algebră în care toate operațiunile sunt efectuate pe modele de date relaționale, adică pe relații.

În termeni tabelare, o relație include rânduri, coloane și un rând - antetul coloanei. Prin urmare, operațiile unare naturale sunt operațiunile de selectare a anumitor rânduri sau coloane, precum și de schimbare a titlurilor de coloană - redenumirea atributelor.

^

1. Operație de preluare unară

Primul operator unar la care ne vom uita este operația de preluare– operaţia de selectare a rândurilor dintr-un tabel reprezentând o relaţie conform căreia

sau principiu, adică selecția rândurilor

tupluri care satisfac o anumită condiție sau condiții.

^ Operator de eșantionare notat cu σ <P >, starea de prelevareP <S>, adică operator σ este întotdeauna luată de o anumită condiție pe tupluri P, și starea în sine P se scrie in functie de schema de relatii S. Considerând toate acestea însumi operația de preluare peste schema de relaţii S în raport cu relaţia r

σ <P >r (S) σ <P >r = {t (S) |tr & P <S >t } = {t (S) |tr & DacăNull (P <S >t , Fals };

Rezultatul acestei operațiuni va fi o nouă relație cu aceeași schemă de relație S, constând din acele tupluri t (S) relație inițială

operanzi care satisfac condiția de eșantionare P t. Este clar că pentru a aplica ce

atunci condiția pentru tuplu este de a înlocui valorile atributelor tuplului în locul numelor de atribute.

Pentru a înțelege mai bine principiul acestei operațiuni, să dăm un exemplu. Să fie dată următoarea diagramă de relații:

^S: Sesiune (număr carnet de note, Prenume, Subiect, Notă).

Să luăm următoarea condiție de eșantionare:

P <S> = (Subiect = „Informatică” și nota > 3).

Avem nevoie de relația originală

operand, selectați acele tupluri care conțin informații despre elevii care au promovat materia „Informatică” cu cel puțin trei puncte.

Să fie dat și următorul tuplu din această relație:

t 0 (S) ∈ r (S

Aplicând condiția noastră de selecție la tuplu t 0, obținem:

P t 0 = (‘Baze de date’ = ‘Informatică’ și 5 > 3);

Pe acest tuplu particular, condiția de selecție nu este îndeplinită.

În general, rezultatul acestui eșantion special

σ <Предмет = "Информатика" and Оценка >3 > Sesiune

va exista un tabel „Sesiune” în care sunt lăsate rânduri care satisfac condiția de selecție.

^

2. Operație de proiecție unară

O altă operație unară standard pe care o vom studia este operația de proiecție. Operațiune de proiecție este operaţia de selectare a coloanelor dintr-un tabel reprezentând o relaţie conform căreia

sau semnează. Și anume, mașina selectează acele atribute (adică, literalmente, acele coloane) ale relației originale

operanzi care au fost specificați în proiecție.

^ Operator de proiectie notat cu [ S"] sau π . Aici S"– subcircuit al schemei de relație inițială S, adică unele dintre coloanele sale. Ce înseamnă acest lucru? Aceasta înseamnă că S’ are mai puține atribute decât S, pentru că în S" Au rămas doar cele pentru care a fost îndeplinită condiția de proiecție. Și în tabelul care reprezintă relația r (S"), sunt atâtea rânduri câte sunt în tabel r (S), și sunt mai puține coloane, deoarece rămân doar cele corespunzătoare atributelor rămase. Deci operatorul de proiecție π< S"> în raport cu r (S) are ca rezultat o nouă relație cu o schemă de relație diferită r (S"), constând din proiecții t (S) [S"] tupluri ale relaţiei iniţiale. Cum sunt determinate aceste proiecții de tuplu? Proiecție orice tuplu t (S) relație inițială r (S) pe subcircuit S" este determinată de următoarea formulă:

t (S) [S' ] = {t (A)|Adef (t) ∩ S ’}, S " ⊆S .

Este important de reținut că tuplurile duplicate sunt excluse din rezultat, adică nu vor exista rânduri duplicat în tabel care reprezintă noua relație rezultată.

Ținând cont de toate cele de mai sus, operațiunea de proiecție în ceea ce privește sistemele de gestionare a bazelor de date va arăta astfel:

π <S" >r (S) ≡ π <S' >rr (S) [S ’] ≡ r [S" ] = {t (S) [S' ] | tr };

Să luăm în considerare un exemplu care ilustrează principiul operației de eșantionare.

Să fie date relația „Sesiune” și schema acestei relații:

S: Sesiune (numar carnet de note, Prenume, Subiect, Nota);

Ne vor interesa doar două atribute din această schemă, și anume „numărul caietului de note” și „Numele” elevului, deci subschema S" va arata asa:

^S": (număr registru, nume).

Este nevoie de o atitudine inițială r (S) se proiectează pe subcircuit S" .

t 0 (S) ∈ r (S): ((numărul caietului de note: 100), (Nume: „Ivanov”), (Subiect: „Bază de date”), (Scor: 5));

Aceasta înseamnă că proiecția acestui tuplu pe acest subcircuit ^S" va arata asa:

t 0 (S) S": ((număr carnet: 100), (Nume: „Ivanov”));

Dacă vorbim despre operația de proiecție în termeni de tabele, atunci Sesiunea de proiecție [Gradebook No., Last Name] a relației inițiale este tabelul Session, din care au fost șterse toate coloanele cu excepția a două: Gradebook No. și Last Name. În plus, toate liniile duplicate au fost, de asemenea, eliminate.

^

3. Operație de redenumire unară

Ultimul operator unar la care ne vom uita este operație de redenumire a atributelor. Dacă vorbim despre o relație ca un tabel, atunci operația de redenumire este necesară pentru a schimba numele tuturor sau a unor coloane.

^ Redenumiți operatorul după cum urmează: ρ<φ >, aici φ – redenumiți funcția .

Această funcție se setează reciproc

corespondența unu-la-unu între numele atributelor schemei SȘi Ŝ, unde respectiv S – schema relației inițiale și Ŝ diagramă de relații cu atribute redenumite. Deci operatorul ρ <φ> în raport cu r (S) oferă o nouă relație cu schema Ŝ , constând din tupluri ale relației originale cu numai atributele redenumite.

Să scriem operația de redenumire a atributelor în ceea ce privește sistemele de gestionare a bazelor de date:

ρ <φ > r (S) ≡ ρ <φ >r = {ρ <φ > t (S)| tr };

Iată un exemplu de utilizare a acestei operații:

Să luăm în considerare relația deja familiară Session, cu diagrama:

S: Sesiune (numărul caietului de note, Prenume, Subiect, Nota);

Să introducem o nouă schemă de relații Ŝ, cu alte nume de atribute pe care am dori să le vedem în locul celor existente:

Ŝ : (ZK Nr., Prenume, Subiect, Punct);

De exemplu, clientul bazei de date a vrut să vadă alte nume în relația dvs. gata făcută. Pentru a implementa această ordine, trebuie să proiectați următoarea funcție de redenumire:

φ : (număr carnet, nume, materie, notă) → (număr carnet, nume, materie, punctaj);

De fapt, doar două atribute trebuie redenumite, așa că ar fi legal să scrieți următoarea funcție de redenumire în loc de cea existentă:

φ : (numărul cărții de note, nota) (Nr. ZK, Punct);

t 0 (S) r (S): ((numărul caietului de note: 100), (Nume: „Ivanov”), (Subiect: „Bază de date”), (Scor: 5));

Să aplicăm operatorul de redenumire acestui tuplu:

ρ<φ>t 0 (S): ((ZK Nr.: 100), (Nume: „Ivanov”), (Subiect: „Bază de date”), (Scor: 5));

Deci, acesta este unul dintre tuplurile relației noastre cărora atributele sale au fost redenumite.

În termeni tabelar, relația

ρ < № зачетной книжки, Оценка „ZK Nr., Punct > Sesiune –

acesta este un tabel nou obținut din tabelul de relații Session prin redenumirea atributelor specificate.

^

4. Proprietăţile operaţiilor unare

Operațiile unare, ca oricare altele, au anumite proprietăți. Să ne uităm la cele mai importante dintre ele.

Prima proprietate a operațiilor unare de selecție, proiecție și redenumire este o proprietate care caracterizează raportul cardinalităților relațiilor. (Reamintim că cardinalitatea este numărul de tupluri dintr-o anumită relație.) Este clar că aici luăm în considerare, respectiv, relația originală și relația obținută ca urmare a aplicării unei anumite operații.

Rețineți că toate proprietățile operațiilor unare decurg direct din definițiile lor, astfel încât acestea pot fi explicate cu ușurință și chiar, dacă se dorește, deduse independent.

1) raport de putere:

a) pentru operația de prelevare: | σ <P >r |≤ |r |;

b) pentru operația de proiecție: | r [S" ] | ≤ |r |;

c) pentru operaţiunea de redenumire: | ρ <φ >r | = |r |;

În total, vedem că pentru doi operatori, respectiv operatorul de eșantionare și operatorul de proiecție, puterea relațiilor inițiale - operanzi este mai mare decât puterea relațiilor obținute din cei inițiali folosind operațiile corespunzătoare. Acest lucru se datorează faptului că procesul de selecție asociat acestor două operațiuni de selecție și proiecție elimină unele rânduri sau coloane care nu îndeplinesc condițiile de selecție. În cazul în care toate rândurile sau coloanele îndeplinesc condițiile, cardinalitatea (adică numărul de tupluri) nu scade, astfel încât inegalitatea din formule nu este strictă.

In cazul unei operatii de redenumire, puterea relatiei nu se modifica, datorita faptului ca la schimbarea numelor nu sunt excluse din relatie niciun tuplu;

2) proprietatea de idempotenta:

a) pentru operația de eșantionare: σ <P > σ <P >r = σ <P >;

b) pentru operația de proiecție: r [S' ] [S' ] = r [S" ];

c) pentru operaţiunea de redenumire, în cazul general, nu este aplicabilă proprietatea idempotei.

Această proprietate înseamnă că aplicarea de două ori succesivă a aceluiași operator la oricare

sau relația este echivalentă cu utilizarea sa unică.

Pentru operațiunea de redenumire a atributelor relației, în general, se poate aplica această proprietate, dar întotdeauna cu rezerve și condiții speciale.

Proprietatea de idempotenta este foarte des folosita pentru a simplifica forma unei expresii si pentru a o aduce la o forma mai economica, relevanta.

Ultima proprietate pe care o vom lua în considerare este proprietatea monotonității. Este interesant de observat că, în orice condiții, toți cei trei operatori sunt monotoni;

3) proprietatea monotonității:

a) pentru operația de eșantionare: r 1 r 2 ⇒ σ <P > r 1 σ <P >r 2 ;

b) pentru operația de proiecție: r 1 r 2 r 1 [S" ] r 2 [S" ];

c) pentru operația de redenumire: r 1 r 2 ρ <φ >r 1 ⊆ ρ <φ >r 2 ;

Conceptul de monotonitate în algebra relațională este similar cu același concept din algebra generală obișnuită. Să explicăm: dacă inițial relația r 1 și r 2 au fost conectate în așa fel încât rr 2 , atunci chiar și după aplicarea oricăruia dintre cei trei operatori de eșantionare, proiecție sau redenumire, această relație va rămâne aceeași.

Algebra relațională este un limbaj de operații efectuate pe relații - tabele unei baze de date relaționale. Operațiile de algebră relațională vă permit să creați o altă relație bazată pe una sau mai multe relații fără a modifica relațiile originale în sine. Cealaltă relație rezultată nu este de obicei scrisă în baza de date, ci există ca rezultat al interogării SQL - o matrice creată de funcții pentru lucrul cu bazele de date în limbaje de programare. Pentru fiecare operație de algebră relațională, implementarea acesteia va fi dată sub formă de interogări în limbajul SQL.

Să luăm în considerare operațiile algebrei relaționale. Pentru a nu fi distras de conținutul tabelelor care nu sunt bazele dvs. de date, cum ar fi „Produse”, „Driver”, „prune”, „pere”, „ceai”, „cafea”, Vladimir, Serghei etc. Vom efectua operații pe relații (tabele) cu date abstracte, precum R1, R2 (nume de tabele - relații), etc. și A1, A2, A3 (nume de atribute - coloane) și h15, w11 etc. (conținutul înregistrărilor din tabelul bazei de date).

Priorități pentru efectuarea operațiilor de algebră relațională (în ordinea descrescătoare a elementelor din listă și într-un singur articol - operații cu priorități egale):

  • selecție, proiecție
  • Produs cartezian, legătură, intersecție, împărțire
  • unire, diferență.

Operația de prelevare a probelor

Operația de selectare operează pe o relație și determină relația rezultată R, care conține doar acele tupluri (sau rânduri, sau înregistrări), relații care satisfac o anumită condiție (predicat P ).

Astfel, operația de preluare este o operație unară și este scrisă după cum urmează:

Unde P- predicat (condiție logică).

Interogare SQL

Acum să vedem ce se întâmplă când rulăm această operație de algebră relațională și interogarea SQL corespunzătoare. Tabelul de mai jos arată o relație pe care funcționează această operație.

R3
A1A2A3A4
3 hhylDomnișoară
4 ppa1sr
1 rrylDomnișoară

Ne uităm la coloana A3 și stabilim că predicatul A3>"d0" este satisfăcut de intrările din primul și al treilea rând ale relației originale (deoarece numărul literei y din alfabet este mai mare decât numărul literei d ). Ca rezultat, obținem următoarea relație nouă, care conține două linii:

R
A1A2A3A4
3 hhylDomnișoară
1 rrylDomnișoară

Acest material vă va ajuta să combinați tot felul de condiții logice pentru selecții. „Algebra booleană (algebra logicii)” .

Interogare SQL

SELECTAȚI A1, A2, A3 din R1 UNION SELECTAȚI A1, A2, A3 din R2

Acum să vedem ce se întâmplă când rulăm această operație de algebră relațională și interogarea SQL corespunzătoare. Acum sunt date două relații, deoarece operația de unire este o operație binară:

R1 R2
A1A2A3A1A2A3
Z7aaw11X8ppk21
B7hhh15Q2eeh15
X8ppw11X8ppw11

Combinăm liniile primei și celei de-a doua relații și vedem că a treia linie, care este a treia atât în ​​prima cât și în a doua relație, este identică, așa că o includem în noua relație o singură dată. Obtinem urmatoarea relatie:

R
A1A2A3
Z7aaw11
B7hhh15
X8ppw11
X8ppk21
Q2eeh15

Următorul este important: o operație de îmbinare poate fi efectuată numai atunci când două relații au același număr și nume de atribute (coloane) sau, formal vorbind, sunt compatibile cu îmbinarea.

Operațiunea de intersecție

Rezultatul intersectării a două mulțimi (relații) A și B () va fi o mulțime (relație) C care include acele și numai acele elemente care sunt atât în ​​mulțimea A cât și în mulțimea B. Operația de intersecție a algebrei relaționale este identică la operatie.

Interogare SQL

SELECTAȚI A1, A2, A3 din R1 INTERSECT SELECTAȚI A1, A2, A3 din R2

Unele dialecte SQL nu au cuvântul cheie INTERSECT. Înlocuitorul său, de exemplu, în MySQL și altele, este INNER JOIN. Cum funcționează operatorul SQL JOIN în general și varietățile sale INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN și FULL OUTER JOIN - în lecție SQL JOIN - alăturarea tabelelor bazei de date .

Interogare MySQL

Acum să vedem ce se întâmplă când rulăm această operație de algebră relațională și interogarea SQL corespunzătoare. Din nou, sunt date două relații R1 și R2:

R1 R2
A1A2A3A1A2A3
Z7aaw11X8ppk21
B7hhh15Q2eeh15
X8ppw11X8ppw11

Privim toate înregistrările din două relații și aflăm că atât în ​​prima cât și în a doua relație există un rând - cel care este al treilea atât în ​​prima cât și în a doua relație. Obținem o nouă relație:

R
A1A2A3
X8ppw11

Funcționarea diferențelor

Diferența dintre două relații R1 și R2 () constă din tupluri (sau înregistrări, sau rânduri) care sunt prezente în relația R1, dar nu și în relația R2. Relațiile R1 și R2 trebuie să fie compatibile cu îmbinarea. Operația de diferență de algebră relațională este identică cu operația.

Interogare SQL

SELECTAȚI A1, A2, A3 din R2 CU EXCEPȚIA
SELECTAȚI A1, A2, A3 din R1

Să stabilim ce se întâmplă ca rezultat al executării acestei operații de algebră relațională și a interogării SQL corespunzătoare. Din nou, sunt date două relații R1 și R2:

R1 R2
A1A2A3A1A2A3
Z7aaw11X8ppk21
B7hhh15Q2eeh15
X8ppw11X8ppw11

Din relația R2 excludem rândul care există și în relația R2 - al treilea - și obținem o nouă relație:

R
A1A2A3
X8ppw11
Q2eeh15

Funcționarea produsului cartezian

Operația de produs cartezian () definește o nouă relație R, care este rezultatul concatenării fiecărui tuplu al relației R1 cu fiecare tuplu al relației R2.

Interogare SQL

SELECT * din R3, R4

Să stabilim ce se întâmplă ca rezultat al executării acestei operații de algebră relațională și a interogării SQL corespunzătoare. Având în vedere două relații R3 și R4:

R3 R4
A1A2A3A4A5A6
3 hhylDomnișoară3 hh
4 ppa1sr4 pp
1 rrylDomnișoară

Noua relație trebuie să conțină toate atributele (coloanele) celor două relații. Mai întâi, primul rând al relației R3 este concatenat cu fiecare dintre cele două rânduri ale relației R4, apoi al doilea rând al relației R3, apoi al treilea. Rezultatul ar trebui să fie 3 X 2 = 6 tupluri (rânduri). Obținem această nouă relație:

R
A1A2A3A4A5A6
3 hhylDomnișoară3 hh
3 hhylDomnișoară4 pp
4 ppa1sr3 hh
4 ppa1sr4 pp
1 rrylDomnișoară3 hh
1 rrylDomnișoară4 pp

algebră relațională, după cum ați putea ghici, acesta este un tip special de algebră în care toate operațiunile sunt efectuate pe modele de date relaționale, adică pe relații.

În termeni tabelare, o relație include rânduri, coloane și un rând - antetul coloanei. Prin urmare, operațiile unare naturale sunt operațiunile de selectare a anumitor rânduri sau coloane, precum și de schimbare a titlurilor de coloană - redenumirea atributelor.

1. Operație de preluare unară

Primul operator unar la care ne vom uita este operația de preluare– operația de selectare a rândurilor dintr-un tabel care reprezintă o relație după un anumit principiu, adică selectarea rândurilor de tuplu care satisfac o anumită condiție sau condiții.

Operator de eșantionare notat cu ? <P>, starea de prelevareP<S>, adică operator ? este întotdeauna luată cu o anumită condiție pe tupluri P, și starea în sine P se scrie in functie de schema de relatii S. Considerând toate acestea însumi operația de preluare peste schema de relaţii S în raport cu relaţia r

? <P>r(S) ? ? <P>r = {t(S) |t ? r & P<S>t} = {t(S) |t ? r & DacăNull(P<S>t, Fals};

Rezultatul acestei operațiuni va fi o nouă relație cu aceeași schemă de relație S, constând din acele tupluri t(S) din relația de operand original care satisface condiția de eșantionare P t. Este clar că, pentru a aplica o anumită condiție unui tuplu, este necesar să înlocuiți valorile atributelor tuplului în locul numelor de atribute.

Pentru a înțelege mai bine principiul acestei operațiuni, să dăm un exemplu. Să fie dată următoarea diagramă de relații:

S: Sesiune (număr carnet de note, Prenume, Subiect, Notă).

Să luăm următoarea condiție de eșantionare:

P<S> = (Subiect = „Informatică” și nota > 3).

Trebuie să selectăm din relația de operand original acele tupluri care conțin informații despre studenții care au promovat disciplina Informatică cu cel puțin trei puncte.

Să fie dat și următorul tuplu din această relație:

t 0 (S) ? r(S

Aplicând condiția noastră de selecție la tuplu t 0, obținem:

P t 0 = (‘Baze de date’ = ‘Informatică’ și 5 > 3);

Pe acest tuplu particular, condiția de selecție nu este îndeplinită.

În general, rezultatul acestui eșantion special

? <Предмет = "Информатика" and Оценка >3 > Sesiune

va exista un tabel „Sesiune” în care sunt lăsate rânduri care satisfac condiția de selecție.

2. Operație de proiecție unară

O altă operație unară standard pe care o vom studia este operația de proiecție. Operațiune de proiecție este operația de selectare a coloanelor dintr-un tabel reprezentând o relație bazată pe o anumită caracteristică. Și anume, mașina selectează acele atribute (adică, literalmente acele coloane) ale relației operandului original care au fost specificate în proiecție.

Operator de proiectie notat cu [ S"] sau ? . Aici S"– subcircuit al schemei de relație inițială S, adică unele dintre coloanele sale. Ce înseamnă acest lucru? Aceasta înseamnă că S’ are mai puține atribute decât S, pentru că în S" Au rămas doar cele pentru care a fost îndeplinită condiția de proiecție. Și în tabelul care reprezintă relația r(S"), sunt atâtea rânduri câte sunt în tabel r(S), și sunt mai puține coloane, deoarece rămân doar cele corespunzătoare atributelor rămase. Deci operatorul de proiecție ?< S"> în raport cu r(S) are ca rezultat o nouă relație cu o schemă de relație diferită r(S"), constând din proiecții t(S) [S"] tupluri ale relaţiei iniţiale. Cum sunt determinate aceste proiecții de tuplu? Proiecție orice tuplu t(S) relație inițială r(S) pe subcircuit S" este determinată de următoarea formulă:

t(S) [S'] = {t(A)|A ? def(t) ? S’}, S" ?S.

Este important de reținut că tuplurile duplicate sunt excluse din rezultat, adică nu vor exista rânduri duplicat în tabel care reprezintă noua relație rezultată.

Ținând cont de toate cele de mai sus, operațiunea de proiecție în ceea ce privește sistemele de gestionare a bazelor de date va arăta astfel:

? <S">r(S) ? ? <S'>r ? r(S) [S’] ? r [S" ] = {t(S) [S'] | t ? r };

Să luăm în considerare un exemplu care ilustrează principiul operației de eșantionare.

Să fie date relația „Sesiune” și schema acestei relații:

S: Sesiune (numar carnet de note, Prenume, Subiect, Nota);

Ne vor interesa doar două atribute din această schemă, și anume „numărul caietului de note” și „Numele” elevului, deci subschema S" va arata asa:

S": (număr registru, nume).

Este nevoie de o atitudine inițială r(S) se proiectează pe subcircuit S".

t 0 (S) ? r(S): ((numărul caietului de note: 100), (Nume: „Ivanov”), (Subiect: „Bază de date”), (Scor: 5));

Aceasta înseamnă că proiecția acestui tuplu pe acest subcircuit S" va arata asa:

t 0 (S) S": ((număr carnet: 100), (Nume: „Ivanov”));

Dacă vorbim despre operația de proiecție în termeni de tabele, atunci Sesiunea de proiecție [Gradebook No., Last Name] a relației inițiale este tabelul Session, din care au fost șterse toate coloanele cu excepția a două: Gradebook No. și Last Name. În plus, toate liniile duplicate au fost, de asemenea, eliminate.

3. Operație de redenumire unară

Ultimul operator unar la care ne vom uita este operație de redenumire a atributelor. Dacă vorbim despre o relație ca un tabel, atunci operația de redenumire este necesară pentru a schimba numele tuturor sau a unor coloane.

Redenumiți operatorul după cum urmează: ?>, aici ? - redenumiți funcția.

Această funcție stabilește o mapare unu-la-unu între numele atributelor schemei SȘi S, unde respectiv S- diagrama relației inițiale și S - diagramă de relații cu atribute redenumite. Deci operatorul ? <?> în raport cu r(S) oferă o nouă relație cu schema S, constând din tupluri ale relației originale cu numai atributele redenumite.

Să scriem operația de redenumire a atributelor în ceea ce privește sistemele de gestionare a bazelor de date:

? <? > r(S) ? ? <? >r = {? <? > t(S)| t ? r};

Iată un exemplu de utilizare a acestei operații:

Să luăm în considerare relația deja familiară Session, cu diagrama:

S: Sesiune (numărul caietului de note, Prenume, Subiect, Nota);

Să introducem o nouă schemă de relații S, cu nume de atribute diferite pe care am dori să le vedem în locul celor existente:

S:

De exemplu, clientul bazei de date a vrut să vadă alte nume în relația dvs. gata făcută. Pentru a implementa această ordine, trebuie să proiectați următoarea funcție de redenumire:

? : (număr carnet, nume, materie, notă) > (număr carnet, nume, materie, punctaj);

De fapt, doar două atribute trebuie redenumite, așa că ar fi legal să scrieți următoarea funcție de redenumire în loc de cea existentă:

? : (numărul cărții de note, nota) > (Nr. ZK, Punct);

t 0 (S) ? r(S): ((numărul caietului de note: 100), (Nume: „Ivanov”), (Subiect: „Bază de date”), (Scor: 5));

Să aplicăm operatorul de redenumire acestui tuplu:

?t 0 (S): ((ZK Nr.: 100), (Nume: „Ivanov”), (Subiect: „Bază de date”), (Scor: 5));

Deci, acesta este unul dintre tuplurile relației noastre cărora atributele sale au fost redenumite.

În termeni tabelar, relația

? < № зачетной книжки, Оценка > „ZK Nr., Punct > Sesiune -

acesta este un tabel nou obținut din tabelul de relații Session prin redenumirea atributelor specificate.

4. Proprietăţile operaţiilor unare

Operațiile unare, ca oricare altele, au anumite proprietăți. Să ne uităm la cele mai importante dintre ele.

Prima proprietate a operațiilor unare de selecție, proiecție și redenumire este o proprietate care caracterizează raportul cardinalităților relațiilor. (Reamintim că cardinalitatea este numărul de tupluri dintr-o anumită relație.) Este clar că aici luăm în considerare, respectiv, relația originală și relația obținută ca urmare a aplicării unei anumite operații.

Rețineți că toate proprietățile operațiilor unare decurg direct din definițiile lor, astfel încât acestea pot fi explicate cu ușurință și chiar, dacă se dorește, deduse independent.

1) raport de putere:

a) pentru operația de prelevare: | ? <P>r |? |r|;

b) pentru operația de proiecție: | r[S"] | ? |r|;

c) pentru operaţiunea de redenumire: | ? <? >r | = |r|;

În total, vedem că pentru doi operatori, respectiv operatorul de eșantionare și operatorul de proiecție, puterea relațiilor inițiale - operanzi este mai mare decât puterea relațiilor obținute din cei inițiali folosind operațiile corespunzătoare. Acest lucru se datorează faptului că procesul de selecție asociat acestor două operațiuni de selecție și proiecție elimină unele rânduri sau coloane care nu îndeplinesc condițiile de selecție. În cazul în care toate rândurile sau coloanele îndeplinesc condițiile, cardinalitatea (adică numărul de tupluri) nu scade, astfel încât inegalitatea din formule nu este strictă.

In cazul unei operatii de redenumire, puterea relatiei nu se modifica, datorita faptului ca la schimbarea numelor nu sunt excluse din relatie niciun tuplu;

2) proprietatea de idempotenta:

a) pentru operația de eșantionare: ? <P> ? <P>r = ? <P>;

b) pentru operația de proiecție: r [S'] [S'] = r [S"];

c) pentru operaţiunea de redenumire, în cazul general, nu este aplicabilă proprietatea idempotei.

Această proprietate înseamnă că aplicarea secvențială dublă a aceluiași operator la orice relație este echivalentă cu aplicarea sa unică.

Pentru operațiunea de redenumire a atributelor relației, în general, se poate aplica această proprietate, dar întotdeauna cu rezerve și condiții speciale.

Proprietatea de idempotenta este foarte des folosita pentru a simplifica forma unei expresii si pentru a o aduce la o forma mai economica, relevanta.

Ultima proprietate pe care o vom lua în considerare este proprietatea monotonității. Este interesant de observat că, în orice condiții, toți cei trei operatori sunt monotoni;

3) proprietatea monotonității:

a) pentru operația de eșantionare: r 1 ? r 2 ? ? <P> r 1 ? ? <P>r 2 ;

b) pentru operația de proiecție: r 1 ? r 2 ? r 1 [S"] ? r 2 [S"];

c) pentru operația de redenumire: r 1 ? r 2 ? ? <? >r 1 ? ? <? >r 2 ;

Conceptul de monotonitate în algebra relațională este similar cu același concept din algebra generală obișnuită. Să explicăm: dacă inițial relația r 1 și r 2 au fost conectate în așa fel încât r ? r 2 , atunci chiar și după aplicarea oricăruia dintre cei trei operatori de eșantionare, proiecție sau redenumire, această relație va rămâne aceeași.