Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Relatii intre tabele

baze de date



+ Font mai mare | - Font mai mic



Relatii intre tabele

O proiectare eficienta a unei baze de date presupune separarea datelor in mai multe tabele. Tabelele vor fi legate impreuna prin intermediul relatiilor.



De exemplu, in aplicatia noastra exista un tabel Proiect ce contine datele referitoare la proiectele realizate. In acest tabel avem date despre clientul pentru care se realizeaza proiectul. Pastrarea in tabelul Proiect a tuturor datelor despre clienti (Nume, Adresa, Oras etc) ar duce la o risipa de spatiu pe disc. Daca un client efectueaza mai multe comenzi, atunci aceleasi datele referitoare la acest client vor fi stocate de mai multe ori. In plus, orice modificare (de exemplu, a adresei clientului) va trebui operata in toate inregistrarile referitoare la clientul respectiv.

Din acest motiv, datele referitoare la client vor fi pastrate intr-un tabel separat. Un anumit client poate avea mai multe comenzi. Astfel, unei inregistrari din tabelul Clienti ii vor corespunde mai multe inregistrari in tabelul Proiect.

Relatiile se formeaza prin precizarea unei legaturi intre un camp (sau o combinatie de campuri) dintr-un tabel si campurile corespunzatoare din alt tabel.

Relatiile pot fi de urmatoarele tipuri:

1.Relatia de la unu la mai multi (one-to-many): unei inregistrari dintr-un tabel ii corespund mai multe inregistrari in alt tabel - ca in exemplul de mai sus. Aceasta relatie este cea mai cunoscuta si mai utila.

Tabelul din partea 'unu' a relatiei trebuie sa aiba o cheie primara, iar tabelul din partea 'mai multi' trebuie sa contina un camp similar, care sa indice inregistrarea la care este legat. Acest camp se numeste cheie straina. In mod normal, cheia straina trebuie sa fie de acelasi tip si sa aiba aceeasi dimensiune ca si cheia primara.

2.Relatia de la mai multi la mai multi (many-to-many): unei inregistrari dintr-un tabel ii corespund mai multe inregistrari in alt tabel. Intr-o astfel de situatie se va crea un tabel intermediar care va 'imparti' relatia many-to-many intr-o pereche de relatii one-to-many.

Exemplu: daca baza noastra de date ar avea si un tabel Delegatii (NrDelegatie, DataPlecarii, Durata, Scop), atunci: o persoana poate pleca in mai multe delegatii. De asemenea, la realizarea scopului unei delegatii pot participa mai multe persoane.

Tabelul intermediar poate fi numit EvidentaPlecari si contine campurile IdentificatorPersonal si NrDelegatie. Pentru fiecare plecare intr-o delegatie a unei persoane apare o inregistrare in tabelul EvidentaPlecari. Deci, se poate defini o relatie one-to-many intre Angajati si EvidentaPlecari si o relatie one-to-many intre Delegatii si EvidentaPlecari.

3.Relatia unu la unu (one-to-one): unei inregistrari dintr-un tabel ii corespunde o singura inregistrare in alt tabel. Aceasta situatie se intalneste rar. Doua tabele unite printr-o relatie unu la unu sunt similare, in practica, cu un tabel care cuprinde campurile din ambele tabele. Relatia unu la unu poate fi utila pentru:

tabelele cu foarte multe campuri

stocarea unor date suplimentare

asigurarea securitatii datelor, in cazul in care campurile din cel de-al doilea tabel vor fi facute disponibile numai pentru anumite persoane

1.1.Crearea unei relatii


In fereastra Database se alege optiunea Relationships (Relatii) din meniul Tools sau se executa clic pe pictograma Relationships.

Se deschide fereastra Relationships in care se vor adauga tabelele necesare. Tabelele pot fi adaugate in doua moduri:

-tragand cu mouse-ul tabelul respectiv din fereastra Database in fereastra Relationships

-prin intermediul ferestrei Show Table

Dupa ce au fost adaugate tabelele, se poate crea o relatie prin selectarea unui camp din tabelul primar si 'tragerea' acestuia peste campul corespunzator din tabelul asociat. Pentru o relatie de unu la mai multi, tabelul asociat este tabelul din partea 'mai multi' a relatiei.

Access raspunde prin deschiderea unei ferestre in care sunt precizate detaliile relatiei. Sunt aratate ambele tabele; de asemenea, sunt prezentate campurile implicate in relatie, definitia putand fi modificata daca este nevoie.

Exemplu: pentru crearea relatiei intre tabelele Clienti si Proiect se parcurg urmatorii pasi:

1.se deschide fereastra Relationships; in fereastra sunt prezentate relatiile stabilite deja prin definirea tabelelor de cautare (Lookup).



2.se executa clic pe pictograma Show Table

si deschide fereastra Show Table:


3.prin clic pe Clienti, urmat de clic pe butonul Add, tabelul Clienti va fi adaugat in fereastra Relationships; prin dublu-clic pe Proiect si acest tabel va fi adaugat in fereastra Relationships.

Se inchide Show Table prin clic pe butonul Close.


Fereastra Relationships arata astfel:

Obs: figura contine doar tabelele care ne intereseaza in acest moment. Stergerea unui tabel din fereastra Relationships nu determina stergerea relatiei, ci suprima afisarea relatiilor care implica tabelul respectiv.

4.folosind mouse-ul, campul ClientID din tabelul Clienti (partea 'unu' a relatiei) va fi 'tras' peste campul ClientID din tabelul Proiect (partea 'mai multi').

Este afisata fereastra:



5.se executa clic pe butonul Create. Fereastra Relationships va reflecta crearea relatiei:

Fereastra Relationships mai contine:

o caseta de validare etichetata Enforce Referential Integrity (Impune integritatea referentiala). Integritatea referentiala impune ca fiecare inregistrare din partea 'mai multi' a unei relatii sa corespunda unei inregistrari din partea 'unu' a relatiei. Selectarea acestei optiuni ofera posibilitatea de precizare a unor actualizari sau stergeri in cascada in cadrul relatiei.

un buton de comanda cu ajutorul caruia se poate preciza tipul de combinare (Join Type) prestabilit, pentru a fi utilizat in interogari.


Pentru a edita sau sterge o relatie, se executa clic-dreapta pe linia care reprezinta relatia in fereastra Relationships si se selecteaza Edit Relationship., respectiv Delete.

De asemenea, pentru a sterge o relatie, se executa clic pe linia care reprezinta relatia si se apasa Del.

1.2.Integritatea referentiala

Daca, in momentul crearii unei relatii, se executa clic pe caseta de validare Referential Integrity, Access va gestiona integritatea referentiala a acestei relatii. Aceasta inseamna ca fiecare inregistrare din partea 'many' a unei relatii trebuie sa corespunda unei inregistrari din partea 'one' a    relatiei.

In exemplul nostru, integritatea referentiala a relatiei dintre Clienti si Proiect inseamna ca fiecare inregistrare din Proiect trebuie sa corespunda unei inregistrari din Clienti, altfel spus nu putem adauga in tabelul Proiect comenzi ale unor clienti inexistenti.

Daca se incearca o astfel de adaugare, se va afisa mesajul:

You can't add or change a record because a related record is required in table <name>.

De asemenea, nu putem sterge din tabel clienti ce au facut cel putin o comanda.

Orice operatie de editare, adaugare sau stergere care ar putea compromite integritatea este blocata cu mesajul:

The record cannot be deleted or changed because table <name> includes related records.

Pentru a crea o relatie care implica integritatea referentiala, campurile corespunzatoare trebuie sa fie de acelasi tip si sa aiba aceeasi dimensiune.


Atunci cand se executa clic pe optiunea Enforce Referential Integrity, utilizatorul are posibilitatea de a selecta inca doua optiuni:

Cascade Update Related Fields (actualizari in cascada), si

Cascade Delete Related Records (stergeri in cascada)

Ca urmare a permiterii unor stergeri in cascada, atunci cand un utilizator sterge o inregistrare din tabelul primar, toate inregistrarile corespunzatoare din tabelul asociat sunt sterse. De exemplu, daca se sterge clientul SC 'ABC' SA din tabelul Clienti, vor fi sterse toate inregistrarile (proiectele) corespunzatoare acestui client din tabelul Proiect.

In cazul unei actualizari in cascada, daca utilizatorul modifica valoarea campului din partea primara a unei relatii, toate inregistrarile asociate sunt actualizate, pentru a reflecta aceasta modificare. Optiunea nu are sens pentru campurile in care utilizatorul nu poate face modificari (ex: AutoNumber).

In continuare, vom edita relatia creata anterior pentru a impune integritatea referentiala. Se procedeaza astfel:

1.In fereastra Relationships, se executa clic-dreapta pe linia care reprezinta relatia

2.Din meniul care apare se alege optiunea Edit Relationship.


Se va deschide fereastra pentru editarea relatiei.

3.Se selecteaza caseta Enforce Referential Integrity. Vor fi activate optiunile Cascade Update Related Fields si Cascade Delete Related Records. Prima optiune nu o selectam deoarece campul ClientID (cheia primara) este AutoNumber. De asemenea, nu vom permite stergerea unui client din baza de date, chiar daca acel client si-a incheiat colaborarea cu firma, deci si a doua optiune ramane neselectata.


4.Se executa clic pe OK. In fereastra Relationships apare cifra 1 in partea 'one' a relatiei si semnul in partea 'many'.

1.3.Tipuri de asocieri

Asocierea defineste modul in care inregistrarile din tabele asociate vor fi combinate intr-o interogare.

Pot fi definite urmatoarele tipuri de asocieri:

Asociere interna (inner join): o interogare cu asociere interna va contine numai acele inregistrari care isi corespund in ambele tabele

Asociere externa (outer join): precizeaza ca o interogare trebuie sa selecteze toate inregistrarile dintr-un tabel impreuna cu datele care corespund din celalalt tabel. Exista doua tipuri:

  1. asociere externa stanga
  2. asociere externa dreapta

Asociere intrinseca (self join): precizeaza ca o relatie asociaza unui camp alt camp din acelasi tabel. Exemplu: tabelul Angajati poate sa contina un camp pentru seful direct al fiecarei persoane. Inregistrarea pentru sef apartine aceluiasi tabel. Pentru a crea acest tip de relatie, se aduce o copie a tabelului din fereastra Database in fereastra Relationships si se procedeaza ca in cazul tabelelor diferite.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1478
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved