Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Baze de date


Index » educatie » » informatica » Baze de date
» Baze de date relationale


Baze de date relationale


BAZE DE DATE RELATIONALE

Modelul relational a avut, inca de la aparitia sa in anul 1970, o popularitate deosebit de mare, astfel incat majoritatea sistemelor de baze de date care exista si se dezvolta la ora actuala sunt sisteme relationale. Pe langa simplitatea si precizia modului de definire a elementelor de baza ale modelului (relatii, atribute, domenii), exista un suport teoretic substantial pentru realizarea bazelor de date relationale (constrangerile de integritate, normalizarea relatiilor, controlul concurentei), care permite crearea structurii datelor si a prelucrarii lor intr-un mod consistent si asigura integritatea si protectia acestora.



RELATII

Relatiile intervin in etapa de modelare logica. Ele se reprezinta prin tabele. In etapa de modelare fizica tabelele devin fisiere. Inregistrarile din fisiere, respectiv liniile unui tabel corespund tuplurilor relatiei reprezentate de tabelul respectiv.

O baza de date relationala este compusa dintr-o multime finita de relatii, fiecare relatie reprezentand un tip de entitate sau o asociere dintre doua sau mai multe tipuri (multimi) de entitati.

Din cauza ca in engleza asocierea se numeste relationship, in unele lucrari aceasta a fost tradusa tot prin relatie, ceea ce genereaza confuziii. Relatiile la care se refera definitia de mai sus, au o definitie matematica precisa (ca multime de tupluri) si nu poate fi folosit pentru a semnifica altceva. Fiecare relatie este unica (nu exista doua sau mai multe relatii de acelasi fel) si se defineste prin intermediul atributelor sale. Relationship trebuie tradus prin asociere. Acestea fac obiectul modelului EA.

Atributele unei relatii sunt atributele tipului de entitate sau de asociere pe care il reprezinta relatia respectiva.

Fiecare atribut al unei relatii are un domeniu de definitie si pentru fiecare tuplu al relatiei (linie dintr-o tabela), un atribut poate lua o singura valoare (din domeniul sau de definitie), ceea ce inseamna ca atributele au numai valori scalare. Intr-o relatie nu exista tupluri duplicat.

Un domeniu de definitie (domain) este o multime cu nume de valori atomice de acelasi tip , avand o anumita semnificatie, din care isi iau valori atributele relatiilor.

Numarul de atribute ale relatiei se numeste gradul relatiei (degree), iar numarul de tupluri se numeste cardinalitatea relatiei (cardinality).

O relatie corespunde, in general, unei multimi de realizari ale unui tip de entitate din diagrama E-A a unei baze de date, iar un tuplu reprezinta o entitate din acel tip de entitate. Atributele tipului de entitate din modelul conceptual de nivel inalt devin atributele relatiei in modelul relational.

Relatia se defineste prin schema relatiei - multimea atributelor prin care se descrie o relatie, impreuna cu domeniile asociate acestora si numele atributelor. Relatia ca variabila, se modifica in cursul existentei sale, prin inserarea sau stergerea tuplurilor, sau prin modificarea (actualizarea) valorilor atributelor tuplurilor.

Reprezentarea relatiilor prin tabele

Un tabel (table) este o reprezentare a unei relatii si este compus din urmatoarele parti:

Numele tabelului, care este identic cu numele relatiei pe care o reprezinta.

Un numar de coloane egal cu numarul de atribute ale relatiei, fiecare coloana reprezentand un atribut.

. Capul tabelului, in care se inscriu numele atributelor relatiei, fiecare atribut fiind inscris in coloana corespunzatoare.

O multime de linii, fiecare linie corespunzand unui tuplu (deci unei realizari a entitatii pe care o reprezinta acea relatie); in fiecare element al unei linii se inregistreaza valoarea atributului corespunzator coloanei in care se afla elementul respectiv.

Catalogul sistemului SGBD

Catalogul sistemului (system catalog) este partea centrala a oricarui SGBD, in care se memoreaza descrierea bazelor de date pe care acesta le administreaza.

Catalogul sistemului este o mica baza de date, in care sunt memorate date despre datele stocate; astfel de informatii sunt denumite meta-date.

In sistemele de gestiune a bazelor de date relationale catalogul este compus din relatii, care pot fi actualizate sau interogate folosind chiar comenzi ale sistemului SGBD. In catalog sunt descrise relatiile (numele relatiei, numele si domeniul atributelor, cheile candidate si straine), vederile, indexurile, precum si procedurile stocate, triggerele, Functiile definite de utilizatori. De asemenea se memoreaza utilizatorii bazelor de date si drepturile acestora.

Limbajul SQL

Limbajul SQL (Structured Query Language) este limbajul utilizat de majoritatea sistemelor de baze de date relationale pentru definirea si manipularea datelor.

SQL este limbajul standard pentru sistemele de gestiune a bazelor de date relationale, adoptat de Organizatia International de Standarde - ISO (International Standardization Office) sub denumirea de SQL Mai exista standardul SQL3 care adauga limbajului SQL trasaturi ale modelului obiect-relational.

Pentru formularea conceptuala a interogarilor in bazele de date relationale s-au dezvoltat doua limbaje abstracte de interogare: algebra relationala si calculul relational.

Algebra relationala (relational algebra) consta dintr-o multime de operatii care au ca operanzi relatii, iar rezultatul este tot o relatie.

Calculul relational (relational calculus) este bazat pe calculul predicatelor si exprima o interogare formuland o definitie a rezultatului dorit (de regula, o relatie) printr-o expresie de calcul relational. Variabilele unei expresii de calcul relational pot fi variabile de tuplu (variabile ale caror valori sunt definite pe multimea tuplurilor unei anumite relatii) sau variabile de domeniu (variabile ale caror valori sunt definite pe domenii de definitie ale atributelor). Pe baza unor astfel de variabile se defineste calculul relational al tuplurilor, respectiv calculul relational al domeniilor.

Aceste limbaje de interogare abstracte, algebra relationala, calculul relational al tuplelor si calculul relational al domeniilor sunt echivalente din punct de vedere al capacitatii de exprimare a interogarilor, diferentele constand in modul de formulare a acestora. S-a demonstrat ca, pentru orice expresie de algebra relationala, se poate gasi o expresie de calcul relational echivalenta si invers.

Limbajele de interogare reale implementate in sistemele de baze de date relationale sunt limbaje definite pe baza unuia sau altuia din limbajele de interogare abstracte, sau pe o combinatie a acestora. De exemplu limbajul SQL2 este in cea mai mare parte bazat pe algebra relationala, dar mai contine si constructii derivate din calculul relational. Limbajul QBE (Query by Example), dezvoltat la firma IBM este bazat pe calculul relational al domeniilor.

Limbajul SQL foloseste termenii de tabel (table), linie (row), coloana (column) pentru a desemna o relatie, un tuplu sau un atribut, deci este orientat spre reprezentarea prin tabele a relatiilor, care este mai simpla si mai intuitiva pentru proiectanti si pentru programatori.

Limbajul SQL cuprinde atat componenta de descriere a datelor relationale (Limbaj de Descriere a Datelor - LDD) cat si componenta de manipulare a datelor (Limbaj de Manipulare a Datelor - LMD), ambele fiind absolut necesare in gestiunea bazelor de date.

Pe langa aceste componente principale, standardul SQL2 mai prevede si alte componente ale limbajului:

Controlul tranzactiilor - contine comenzi pentru specificarea tranzactiilor. Unele implementari adauga comenzilor prevazute in standard si alte comenzi suplimentare de control al concurentei si refacerea datelor.

Controlul securitatii si al protectiei datelor - contine comenzi de administrare a bazelor de date,

pentru definirea utilizatorilor si a drepturilor acestora de acces la tabele. Aceasta componenta este puternic dependenta de sistemul de gestiune al bazei de date, iar pentru sistemele performante, administrarea bazei de date este un capitol foarte extins, care face obiectul activitatii unei categorii speciale de utilizatori ai bazei de date (administratori ai bazei de date).

Limbajul SQL este un limbaj neprocedural: o instructiune SQL specifica ce informatii ii trebuie sa fie setate sau obtinute dar nu specifica modul (procedura) in care se opereaza. Limbajul SQL contine numai instructiuni de definire si manipulare a datelor si nu contine instructiuni de control al fluxului executiei (instructiuni ca for, while, if, etc).

De aceea, pentru realizarea aplicatiilor de baze de date, s-a dezvoltat o multitudine de tehnologii, limbaje, biblioteci si interfete de programare care integreaza, printr-o tehnica oarecare, instructiunile SQL de acces la date. In continuare se vor prezenta cele mai importante instructiuni de descriere si manipulare a datelor definite in standardul SQL

Pentru a invata si testa diferite instructiuni SQL trebuie sa fie instalat un sistem de gestiune a bazelor de date si un program utilitar care primeste instructiuni de la consola si le transmite sistemului SGBD pentru a fi executate. Majoritatea sistemelor SGBD ofera astfel de instrumente soft (cu sau fara interfata grafica). De exemplu, pentru sistemul Microsoft SQL Server exista utilitarele isql si osql care permit executarea instructiunilor Transact-SQL (care sunt extensii ale limbajului SQL); pentru sistemele Oracle exista utilitarul SQL*Plus care permite executia de la consola atat a instructiunilor SQL, ca si a blocurilor PL/SQL; pentru sistemul mySQL exista utilitarul mySQL care executa instructiuni SQL. Bineinteles, atunci cand se testeaza o anumita instructiune SQL trebuie sa fie folosita exact varianta implementata in sistemul folosit, care poate diferi intr-o oarecare masura de forma generala din standard.

1 Structura lexicala a limbajului SQL

O instructiune SQL (statement) este o secventa de elemente componente (tokens) terminata cu semnul punct si virgula (;). Fiecare instructiune SQL contine o comanda SQL (command), care specifica ce actiune se efectueaza, urmata de alte elemente componente, care specifica operatii, clauze, parametri, etc. De exemplu, instructiunea:

SELECT * FROM ANGAJATI;

contine comanda SQL SELECT, urmata de alte elemente componente ale instructiunii.

Un element al unei instructiuni SQL poate fi: cuvant cheie (key word), identificator (identifier), constanta (literal) sau un caracter special. Elementele componente sunt, in general, separate printr-unul sau mai multe spatii albe (whitespaces): caracter spatiu, caracter linie noua sau caracter tab. Separatorii pot lipsi daca nu exista ambiguitati in secventa de elemente ale unei comenzi.

O comanda se poate scrie pe una sau mai multe linii, iar intr-o linie se pot introduce una sau mai multe comenzi.

Cuvinte cheie si identificatori. Cuvintele cheie sunt elemente componente cu semnificatie fixa in limbajul SQL. Acestea pot fi comenzi (SELECT, UPDATE, INSERT, etc.), operatori (AND, OR, NOT, LIKE), clauze (WHERE, SET, VALUES, etc.).

Identificatorii sunt elemente componente care denumesc tabele, coloane sau alte obiecte ale bazei de date. Pe langa acest tip de identificatori simpli (formati dintr-o secventa de litere, cifre si caracterul subliniere), mai exista si un alt tip de identificatori, identificatorii delimitati (quoted identifiers), constand dintr-o secventa de caractere incadrata (la inceput si la sfarsit) de caracterul ghilimele ( " ).

Un identificator delimitat este intotdeauna identificator (niciodata cuvant cheie), iar literele mari sunt diferite de literele mici (este case-sensitive).

Constante. Constantele (literale) pot fi siruri de caractere, numere intregi, numere reale sau constante NULL. Ele se reprezinta aproximativ la fel ca in alte limbaje de programare (de exemplu C/C++).

Caractere speciale. Unele caractere care nu sunt litere sau cifre pot avea rol de operatori SQL sau pot avea o semnificatie speciala in cadrul comenzilor SQL. De exemplu, caracterul punct si virgula (;) este folosit pentru terminarea comenzilor; caracterul punct (.) este folosit ca punct zecimal sau pentru calificarea numelor; caracterul asterisc (*) este folosit ca operator de inmultire sau in comanda SELECT, etc.

2 Expresii, operatori si Functii SQL2

O expresie SQL consta dintr-unul sau mai multi operanzi, operatori si paranteze. Un operand poate fi numele unei coloane (a unui tabel), o constanta (literal), sau valoarea returnata de o functie;

parantezele sunt folosite pentru a preciza o anumita ordine a operatiilor, daca aceasta este diferita de cea implicita, data de precedenta operatorilor.

Un operator SQL este compus dintr-unul sau mai mai multe caractere speciale (care nu sunt litere sau cifre), ca de exemplu: +,-,*,/,%,<,>,=,~,!,@ #,&,|,^,?,',$, sau este un cuvant cheie, ca de exemplu: AND, OR, NOT, LIKE, etc. Din punct de vedere al numarului de operanzi, operatorii SQL sunt de doua categorii, binari si unari, cei unari putand fi operatori prefix sau operatori postfix. Din punct de vedere al tipului de operatie, operatorii SQL (din orice categorie) pot fi aritmetici, logici, de comparatie SQL, sau relationali.

Operatorii aritmetici: + (adunarea), - (scaderea), * (inmultirea), / (impartirea), % (modulo), ^ (ridicarea la putere), & (AND orientat pe biti), | (OR orientat pe biti), # (XOR orientat pe biti) , << (deplasarea la stanga), >> (deplasarea la dreapta). Tot operatori aritmetici sunt si operatorii binari de comparatie: < (mai mic), > (mai mare), <= (mai mic sau egal), >= (mai mare sau egal), = (egal), <> (sau !=) (diferit). Operatorii aritmetici unari sunt: @ (valoarea absoluta), ! (factorial), !! (factorial, operator postfix), ~ (NOT orientat pe biti).

Operatorii de comparatie SQL sunt descrisi in tabelul urmator.

Operator Operatia efectuata

A BETWEEN min AND max compara A cu doua valori, min si max

A IN (v1,v2 , vn ) compara A cu o lista de valori (v1, v2, . vn )

A IS NULL compara A cu NULL

A IS NOT NULL compara A cu NOT NULL

A LIKE model_sir compara A cu un model de sir de caractere

Pentru operatorii de comparatie, valoarea de comparat (A) este, de regula , valoarea unui atribut al unei relatii, dat prin numele coloanei corespunzatoare a tabelului care reprezinta relatia respectiva, o constanta sau valoarea unei expresii. Operatorii de comparatie (atat cei aritmetici, cat si operatorii de comparatie specifici SQL), returneaza (evalueaza ) valoarea logica TRUE (1), daca conditia de comparatie este indeplinita si FALSE (0) daca conditia de comparatie nu este indeplinita . Valoarea NULL este returnata daca ambii operanzi comparati au valoarea NULL.

Operatorii logici ai limbajului SQL sunt notati prin cuvinte cheie: AND, OR, NOT. Toti acesti operatori se aplica unor variabile logice cu 3 valori (trivalente): TRUE (1), FALSE (0) si NULL; valoarea NULL semnifica lipsa de informatie. Operatorii logici SQL returneaza o valoare logica trivalenta (TRUE, FALSE sau NULL), asa cum se poate vedea din tabelele de adevar de mai jos.

A B A AND B A OR B

TRUE TRUE TRUE TRUE

TRUE FALSE FALSE TRUE

TRUE NULL NULL TRUE

FALSE FALSE FALSE FALSE

FALSE NULL FALSE NULL

NULL NULL NULL NULL

A NOT A

TRUE FALSE

FALSE TRUE

NULL NULL

Operatorii relationali sunt notati prin cuvinte cheie: UNION (reuniune), INTERSECT (intersectie), MINUS (diferenta).

Functiile definite in SQL sunt de doua categorii: Functii agregat si Functii scalare.

Functiile agregat calculeaza un rezultat din mai multe linii ale unui tabel. Aceste Functii vor fi detaliate intr-o sectiune urmatoare, la descrierea instructiunii SELECT.

Functiile scalare primesc unul sau mai multe argumente si returneaza valoarea calculata sau NULL in caz de eroare. Argumentele functiilor pot fi constante (literale) sau valori ale atributelor specificate prin numele coloanelor corespunzatoare. Exista mai multe tipuri de Functii scalare SQL:

Functii numerice: Majoritatea versiunilor de SQL furnizeaza Functii de calcul trigonometric (sin, cos, etc.), Functii de calcul al logaritmului (ln, log), al puterii (pow), Functii de rotunjire (floor, ceil), etc.

Functii pentru manipularea sirurilor de caractere.

Functii pentru data calendaristica si timp.

Functii de conversie.

Functiile scalare se folosesc in expresii, care pot sa apara in diferite clauze ale instructiunilor SQL.

3 Tipuri de date si domenii SQL2

Tipul numeric include numere intregi de diferite dimensiuni (integer sau int reprezentat pe 4 octeti, smallint reprezentat pe 2 octeti), numere reale reprezentate in virgula flotanta, cu diferite precizii (float, reprezentat pe 4 octeti, real si double [precision], reprezentate pe 8 octeti) si numere zecimale reprezentate cu precizia dorita (tipul numeric sau decimal).

Pentru a pastra precizia dorita, numerele de tip DECIMAL sau NUMERIC sunt memorate ca sir de caractere, fiecare caracter reprezentand o cifra zecimala, punctul zecimal sau semnul.

Tipul sir de caractere permite definirea sirurilor de caractere de lungime fixa (character(n) sau, prescurtat, char(n)), precum si a sirurilor de caractere de lungime variabila (character varying, prescurtat varchar(n)).

Tipul siruri de biti defineste secvente de cifre binare (care pot lua valoarea 0 sau 1) de lungime fixa n (bit(n)) sau de lungime variabila, cu limita maxima n (bit varying(n)).

Tipurile pentru data calendaristica si timp sunt: date, time, timestamp, interval.

4 Instructiuni SQL de definire a datelor

Componenta de definire a datelor a limbajului SQL (numita Limbajul de Definire a Datelor - LDD) permite crearea (CREATE), modificarea (ALTER) si distrugerea (DROP) obiectelor bazei de date: tabele de baza (TABLE), tabele vedere (VIEW), indexuri (INDEX), proceduri (PROCEDURE), etc. Majoritatea dialectelor limbajului SQL contin comenzile:

CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATE USER

CREATE FUNCTION, CREATE PROCEDURE, CREATE TRIGGER

ALTER TABLE, ALTER VIEW, ALTER FUNCTION, ALTER PROCEDURE

DROP TABLE, DROP VIEW, DROP INDEX, DROP USER

DROP FUNCTION, DROP PROCEDURE, DROP TRIGGER

In continuare vor fi descrise cele mai importante instructiuni SQL de definire a datelor.

4.1 CREAREA TABELELOR si A VEDERILOR

In limbajul SQL2 un tabel se creeaza folosind instructiunea CREATE TABLE, care are urmatoarea

sintaxa:

CREATE TABLE nume_tabel (

col1 dom1 [constrangeri_coloana],

col2 dom2 [constrangeri_coloana],

coln domn [constrangeri_coloana],

[constrangeri_tabel] );

Vederi (views). Un tabel vedere este un tabel virtual, care nu este memorat fizic in fisiere, ci reprezinta o selectie (dupa un anumit criteriu) a datelor memorate in unul sau mai multe tabele de baza.

Datele (valorile atributelor) sunt memorate o singura data, in tabelele de baza, dar pot fi accesate atat prin tabelele de baza cat si prin tabelele vederi. Instructiunea SQL de creare a unui tabel vedere este:

CREATE VIEW nume_vedere AS (SELECT);

Un tabel vedere este intotdeauna actualizat ('la zi'), adica orice modificare efectuata in tabelele de baza se regaseste imediat in orice tabel vedere creat pe baza acestora.

4.2 MODIFICAREA si STERGEREA TABELELOR

Comanda de modificare a tabelelor (ALTER TABLE) permite adaugarea sau stergerea unor atribute,

modificarea domeniilor unor atribute, precum si adaugarea, modificarea sau stergerea unor constrangeri ale tabelului.

5 INSTRUCTIUNI SQL DE MANIPULARE A DATELOR

Instructiunile SQL de manipulare a datelor contin una din comenzile: SELECT, INSERT, UPDATE sau DELETE si vor fi studiate in continuare.

5.1 INSTRUCTIUNEA SELECT

Instructiunea SELECT este instructiunea de interogare in limbajul SQL, prin care se regasesc informatiile dorite din unul sau mai multe tabele ale bazei de date. Instructiunea SELECT este foarte puternica si ea are urmatoarea sintaxa generala:

SELECT [DISTINCT] lista_coloane

[FROM lista_tabele]

[WHERE conditie]

[clauze_secundare];

Ca rezultat al instructiunii SELECT se obtine un tabel care contine atributele (coloanele) din lista_coloane ale acelor linii (tupluri) ale produsului cartezian al tabelelor din lista_tabele pentru care expresia logica conditie este adevarata (are valoarea TRUE).

Se remarca trei sectiuni (clauze) importante ale instructiunii de interogare: SELECT, FROM si WHERE.

Clauza ORDER BY introduce numele atributului dupa care se face ordonarea liniilor tabelului rezultat.

Clauza GROUP BY se foloseste pentru gruparea rezultatelor Functiilor agregat (totalizatoare) in functie de valoarea uneia sau mai multor coloane. Pentru aceasta, in instructiunea SELECT se introduce clauza GROUP BY, urmata de numele coloanei (sau al coloanelor) dupa valoarea carora se doreste gruparea rezultatelor functiei agregat. In acest caz, functia agregat se aplica separat acelor linii care au aceeasi valoare a atributelor specificate de clauza GROUP BY.

Pentru folosirea unei Functii agregat intr-o conditie de selectie se foloseste clauza HAVING. Clauza HAVING este asemanatoare clauzei WHERE, adica introduce o conditie pe care trebuie sa o indeplineasca tuplurile rezultat, si in plus, permite utilizarea functiilor agregat in expresia conditionala. Exemplul de mai sus se scrie corect astfel:

SELECT Nume,Prenume

FROM ANGAJATI HAVING Salariu >= AVG (Salariu);

Instructiuni SELECT imbricate. Subinterogari. Instructiunile SELECT se pot imbrica pe mai multe niveluri, o instructiune avand ca argument rezultatul unei altei instructiuni, numita subinterogare. Exista mai multe moduri de construire a subinterogarilor, una din formele cele mai frecvent folosite fiind urmatoarea:

SELECT lista_atribute FROM tabel1

WHERE colx IN (SELECT colx FROM tabel2 WHERE conditie);

Intr-o astfel de constructie valoarea de comparatie (pentru operatorul de comparatie IN) din clauza WHERE a primei instructiuni SELECT se defineste printr-o subinterogare care consta dintr-o alta instructiune SELECT. Alte forme de construire a subinterogarilor vor fi prezentate in sectiunile urmatoare.

5.2 INSTRUCTIUNEA INSERT

Instructiunea INSERT se foloseste pentru introducerea datelor in tabele si are urmatoarea sintaxa:

INSERT INTO nume_tabel(col1,col2,coln)VALUES(val1,val2,valn);

5.3 INSTRUCTIUNEA UPDATE

Instructiunea UPDATE permite actualizarea valorilor coloanelor (atributelor) din una sau mai multe linii ale unui tabel. Aceasta are sintaxa:

UPDATE nume_tabel SET col1 = expr1 [,n] [WHERE conditie];

Clauza WHERE impune ca actualizarea valorilor coloanelor sa se efectueze numai asupra acelor linii care indeplinesc conditia data.

5.4 INSTRUCTIUNEA DELETE

Instructiunea DELETE permite stergerea uneia sau mai multor linii dintr-un tabel si are forma:

DELETE FROM nume_tabel [WHERE conditie];

3 CONSTRANGERI (RESTRICTII) DE INTEGRITATE

Constrangerile de integritate (integrity constraints) sunt reguli care se definesc la proiectarea bazei de date si care trebuie sa fie respectate de orice stare a acesteia.

Relatiile unei baze de date reflecta realitatea modelata si de aceea valorile pe care le contin trebuie sa respecte anumite reguli, care sa corespunda celor din realitate.

Constrangerile se pot clasifica dupa locul unde sunt definite si dupa modul in care sunt definite. Din punct de vedere al locului unde sunt definite, constrangerile pot fi constrangeri intra-relatie si constrangeri interrelatii. Constrangerile intra-relatie sunt reguli care se impun in cadrul unei singure relatii si asigura integritatea datelor acesteia. Ele sunt, la randul lor, de trei categorii:

Constrangeri de domeniu, care sunt conditii ce se impun valorilor atributelor si asigura integritatea domeniilor atributelor.

Constrangeri de tuplu, care sunt conditii ce se impun tuplurilor unei relatii si asigura identificarea corecta a tuplurilor prin intermediul cheilor (primare sau candidate).

Constrangeri impuse prin dependente de date (dependente functionale, multivalorice sau de jonctiune); acestea sunt constrangeri prin care valorile unor atribute ale unei relatii determina valorile altor atribute ale aceleiasi relatii.

Constrangerile inter-relatii sunt reguli care se impun intre doua sau mai multe relatii. Cele mai importante constrangeri inter-relatii sunt constrangerile de integritarea referentiala, care se realizeaza prin intermediul cheilor straine (externe) si asigura asocierea corecta a relatiilor.

Din punct de vedere al modului de definire, constrangerile unei baze date se pot clasifica in constrangeri inerente, implicite si explicite.

Constrangerile inerente sunt cele ale modelului de date insusi, care nu trebuie sa fie specificate la definirea relatiilor, dar sunt respectate prin modul in care se construiesc relatiile. De exemplu, in modelul relational constrangerea ca valoarea fiecarui atribut sa fie atomica (indivizibila) este o constrangere inerenta.

Constrangerile implicite sunt reguli care se definesc odata cu definirea schemelor relatiilor (prin intermediul instructiunile de definire a datelor), sunt memorate in baza de date si sistemul de gestiune verifica si impune automat respectarea acestora. Connstrangerile de domeniu, constrangerile de tuplu si constrangerile de integritate referentiala sunt exemple de constrangeri implicite.

Constrangerile explicite sunt constrangeri suplimentare pe care trebuie sa le respecte relatiile unei baze de date si care nu sunt impuse automat de sistemul SGBD, ci necesita proceduri speciale de verificare si impunere a respectarii lor. Ca exemple de constrangeri explicite sunt unele dependente de date, si anume cele care nu sunt determinate de cheile relatiilor.

3.3.1. MENTINEREA INTEGRITATII REFERENTIALE A DATELOR

Integritatea referentiala (referential integrity) este proprietatea bazei de date care garanteaza ca oricare valoare a unei chei straine se regaseste printre valorile cheii candidate corespunzatoare din relatia referita, sau cheia straina are valoarea NULL (daca atributele acesteia nu sunt supuse constr. NOT NULL).

Operatiile de modificare a starii unei relatii (introducerea, stergerea si actualizarea tuplurilor relatiei) pot afecta integritatea referentiala a unei baze de date, daca modificarile dintr-o relatie se fac individual, fara sa se tina seama de referintele catre si de la aceasta.

Operatia de introducere se poate face fara restrictii intr-o relatie referita. In schimb, la introducerea unui tuplu nou intr-o relatie care refera (care contine o cheie straina) trebuie sa se verifice ca in relatia referita exista un tuplu care are valorile atributelor cheii referite egale cu valorile atributelor cheii straine a tuplului de introdus. Daca aceasta conditie nu este satisfacuta, operatia de introducere este refuzata.

Operatia de stergere a unui tuplu se poate face fara nici o restrictie intr-o relatie care refera o alta relatie. Intr-o relatie referita, stergerea unui tuplu poate fi executata in doua moduri: stergere restrictionata sau stergere in cascada.

Stergerea restrictionata interzice stergerea unui tuplu din relatia referita daca acesta este referit de un tuplu din relatia care o refera.

Stergerea in cascada permite stergerea unui tuplu din relatia referita; daca tuplul sters era referit de unul sau mai multe tupluri, atunci se sterg si acestea din relatia care o refera; daca tuplurile sterse din relatia care refera sunt, la randul lor referite de alte tupluri, atunci trebuie sa fie sterse si acestea, s.a.m.d. Se executa deci o stegere in cascada, pe tot lantul de referiri.

Operatia de actualizare poate fi privita ca o stergere urmata de o introducere, deci restrictiile de actualizare reprezinta combinatia restrictiilor de introducere si de stergere. Intr-o relatie care refera, actualizarea cheii straine a unui tuplu este admisa daca noua valoare a cheii straine se regaseste ca valoare a cheii candidate corespunzatoare intr-unul din tuplurile relatiei referite. Intr-o relatie referita, actualizarea valorii cheii secundare (cheia primara nu poate fi modificata) poate fi facuta in aceleasi moduri ca si stergerea tuplurilor: actualizare restrictionata sau actualizare in cascada.

4 Indexarea relatiilor

Un index al unei relatii (index) este o structura auxiliara memorata in baza de date care permite accesul rapid la inregistrarile (tuplurile) relatiilor prin ordonarea acestora.

La definirea unei relatii se stabilesc doua categorii de indexuri: indexul primar al relatiei, care determina localizarea tuplurilor in fisierele bazei de date, si zero, unul sau mai multe indexuri secundare, care nu modifica localizarea tuplurilor, dar sunt folosite pentru regasirea tuplurilor dupa un criteriu dat.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate