Documente Academic
Documente Profesional
Documente Cultură
Relaii, atribute, domenii; schema relaiei Reprezentarea relaiilor prin tabele Limbajul SQL:
Convenii lexicale Expresii, operatori, functii Instructiuni de definire a datelor: CREATE, ALTER, DROP Instructiuni de manipulare a datelor: SELECT, INSERT, UPDATE, DELETE
Indexarea relaiilor
Indexul primar Indexuri secundare
Atributele unei relaii corespund atributelor tipului de entitate sau de asociere pe care l reprezint relaia respectiv
fiecare atribut are un nume (Ai) i un domeniu de definiie D(Ai) pentru o entitate data, un atribut poate lua o singur valoare (scalar)
Atributele pot fi: simple (un element) sau compuse (o submulime de atribute) Domeniu: o mulime de valori D = {di | i = 1,, n }, definit printr-o specificare de tip, unde:
D este numele domeniului di este un element al domeniului care satisface anumite constrngeri Elementele domeniilor sunt atomice (indivizibile) O valoare speciala, null, poate apartine oricarui domeniu (inseamna lipsa de informatie sau valoare necunoscuta)
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 2
Schema relaiei
Schema relaiei: descriere a unei relaii (tipul, intensiunea relaiei) Schema relaiei: R(A1,A2,...Ai,...An), unde:
R este numele schemei relaiei lista ordonat a atributelor sale A1,A2,...Ai,..An fiecare atribut Ai definit pe domeniul su de definiie, D(Ai) Gradul relaiei: numrul de atribute ale schemei acelei relaii (n) Exemplu: STUDENTI (Nume, Prenume, DataNasterii, Adresa, Facultatea)
n mod curent: se foloseste R atat pentru schema cat i pentru relaia insasi
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 3
Tabelul sugereaz ordonarea atributelor (coloanelor) i a tuplurilor (liniilor) ceea ce nu corespunde modelului matematic (relaie = mulime de tupluri)
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 4
Afiarea tabelelor
SGBD-urile ofer instrumnente de proiectare i afisare a tabelelor
De exemplu, afiarea tabelului Employees din baza de date Northwind folosind toolset-ul SQL Query Analyser din Microsoft SQL Server
Limbajul SQL
Limbajul IBM Sequel dezvoltat ca parte a proiectului System R la IBM San Jose Research Laboratory (1970) Redenumit Structured Query Language (SQL) Standarde SQL - ANSI i ISO:
Anul 1986 1989 1992 1999 2003 2006 Denumire SQL-86 SQL-89 SQL-92 SQL-1999 SQL-2003 SQL-2006 Caracteristici Publicat de ANSI (SQL1); ratificat de ISO n 1987 Revizii minore Revizii majore, redenumit SQL2 Redenumit SQL3, adauga unele caracteristici obiect-relaionale Adauga unele trasaturi referitoare la limbajul XML Utilizare SQL n conjunctie cu XML
Fiecare SGBDR implementeaz un dialect al limbajului SQL, ceea ce micoreaz gradul de portabilitate a aplicaiilor n diferitele implementri ale limbajului SQL pot s lipseasc unele comenzi prevzute n standard, dar pot exista extensii specifice SGBD-ului respectiv
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 7
Standardul SQL3 prevede instructiuni de control i crearea de tipuri definite de utilizator, fiind implementat n SGBD-urile obiect-relaionale Pentru aplicaiile de baze de date, s-au dezvoltat extensii procedurale ale limbajului SQL, biblioteci i interfee de programare care integreaz instruciunile SQL
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 8
Spaiile albe (whitespaces) separa elementele: spaiu, linie nou, tab O instructiune se poate scrie pe una sau mai multe linii, iar ntr-o linie se pot introduce una sau mai multe instructiuni Limbajul SQL este case-insensitive (nu deosebeste literele mici de cele mari) cu exceptia identificatorilor delimitati (quoted) care sunt case-sensitive
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 9
Operatori SQL: binari sau unari (dupa numarul de operanzi) Operatori SQL: aritmetici, de comparaie SQL, relaionali, logici
Operatori aritmetici de operatii cu numere intregi sau reale: +, -, *, /, %, ^ Operatori aritmetici orientati pe biti: ~, &, |, # Operatori aritmetici de comparatie: <, >, =, <> (sau !=), <=, >= Operatori de comparatie SQL: IS NULL, IS NOT NULL, BETWEEN, IN, LIKE Operatori relaionali: UNION, INTERSECT, MINUS
Cap. 2 - Baze de date relationale 10
Operatori SQL
Operatorii de comparaie returneaz valori logice:
true (1), dac condiia este ndeplinit false (0) dac condiia nu este ndeplinit null dac ambii operanzi au valoarea null
B
true false null false null null
A and B
true false null false false null
A or B
true true true false null null
A
true false null
not A
false true null
11
Funcii SQL
Funcii SQL: funcii agregat i funcii scalare. Funciile agregat calculeaz un rezultat din mai multe linii ale unui tabel
Aceste funcii vor fi detaliate ulterior, la descrierea instruciunii SELECT
Funciile scalare:
Primesc unul sau mai multe argumente i returneaz valoarea calculat sau NULL n caz de eroare Argumentele funciilor pot fi constante (literale) sau valori ale atributelor specificate prin numele coloanelor corespunzatoare
Funciile scalare se folosesc n expresii, care pot s apar n diferite clauze ale instruciunilor SQL
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 12
Siruri de caractere:
character(n), prescurtat, char(n) - ir de caractere de lungime fix (n) character varying(n), prescurtat varchar(n) - ir de caractere de lungime variabil, maximum n
Siruri de bii - secvene de cifre binare (care pot lua valoarea 0 sau 1):
bit(n)) - sir de biti de lungime fix (n) bit varying(n) sir de biti lungime variabil, maxim n
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 13
Standardul SQL2 nu suport tipuri de date i operaii definite de utilizator Standardul SQL3 suport tipuri de date i operaii definite de utilizator, care sunt caracteristice ale modelului de date obiect-relaional Actualmente, productorii de sisteme de baze de date relaionale introduc treptat diferite caracteristici ale modelului obiect-relaional cuprinse n SQL3
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 14
Domenii SQL
n SQL2 domeniile atributelor se specific pe baza tipurilor de date predefinite ale limbajului SQL, deci nu corespund ntru totul noiunii de domeniu relaional Standardul SQL2 prevede comanda CREATE DOMAIN, care definete un domeniu pe baza unui tip predefinit SQL2 i cu unele constrngeri Standardul SQL3 prevede comanda CREATE TYPE care creaz tipuri definite de utilizator (user-defined types) n SGBD-urile actuale sunt implementate diferite versiuni din standarde:
n SQL Server se pot crea domenii ale atributelor cu comanda SQL CREATE DOMAIN n Oracle (8i, 9i, 10g,11g) se pot crea tipuri de date noi, folosind comanda CREATE TYPE, care permite gruparea sub un anumit nume a mai multor atribute i operatii n PostgreSQL de asemenea se pot crea tipuri de date noi, folosind comanda CREATE TYPE
15
Conventii de notatie
Pentru prezentarea limbajului SQL i a altor limbaje, biblioteci i interfete
[ { ] (paranteze drepte) } (acolade) Element opional al instruciunii Element obligatoriu al instruciunii Separ elementele din parantezele drepte sau acolade; numai unul dintre acestea se poate introduce n instruciunea respectiv Elementul precedent poate fi repetat de n ori; elementele repetate sunt separate prin virgul List de n elemente de acelai tip; elementele repetate sunt separate prin virgul List de elemente de acelai tip separate prin virgul
| (bar vertical)
Caracterele folosite pentru a specifica o anumit convenie sintactic (paranteze, bara vertical, virgula, etc.) nu apar n instruciunile propriu-zise Listele de elemente (compuse din mai multe elemente separate prin virgul) vor fi exprimate folosind una cele trei din construciile de mai sus, care se potrivete cel mai bine instruciunii respective
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 16
Instruciuni SQL
Componenta de definire a datelor din SQL (LDD - Limbajul de Definire a Datelor):
Crearea (CREATE), modificarea (ALTER) i distrugerea (DROP) obiectelor bazei de date Obiectele bazei de date sunt: tabele de baz (TABLE), tabele vedere (VIEW), indexuri (INDEX), proceduri (PROCEDURE), trigere (TRIGGER), utilizatori (USER)
DROP PROCEDURE,
DROP TRIGGER
Componenta de manipulare a datelor din limbajul SQL (Limbajul de Manipulare a Datelor - LMD) conine comenzile: SELECT, INSERT, UPDATE i DELETE Instructiunile SQL se transmit SGBD-ului:
de ctre diferite programe client (client grafic, linie de comanda, program executabil) SGBD-ul compileaz i execut instructiunea SQL returneaz un rspuns (rezultatul operaiei sau un cod de eroare)
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 17
Crearea tabelelor
Instruciunea CREATE TABLE are urmtoarea sintax:
CREATE TABLE nume_tabel ( col1 domeniu1 [constrngeri_coloana], col2 domeniu2 [constrngeri_coloana], ................................. coln domeniun [constrngeri_coloana], [constrngeri_tabel] );
Constrngerile impuse fiecrei coloane (atribut), ca i constrngerile de tabel, sunt opionale i vor fi discutate n sectiunea urmtoare. Exemplu:
CREATE TABLE ANGAJATI ( Nume varchar(20), Prenume varchar(20), DataNasterii date, Adresa varchar(50), Functia varchar(20), Salariu numeric);
Instruciunea CREATE TABLE definete att tipul relaiei ct i o variabil relaie de acel tip care iniial este vid (nu conine nici un tuplu)
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 18
Crearea vederilor
Tabelele create cu instruciunea CREATE TABLE:
se numesc i tabele de baz (base tables) ele sunt memorate n fiierele bazei de date i pot fi accesate pentru introducerea, modificarea i regsirea (interogarea) datelor
Formatul comenzii SELECT va fi descris n capitolul urmtor Datele (valorile atributelor) sunt memorate o singur dat, n tabelele de baz, dar pot fi accesate att prin tabelele de baz ct i prin tabelele vederi Un tabel vedere este ntotdeauna actualizat ("la zi"), adic orice modificare efectuat n tabelele de baz se regsete imediat n orice tabel vedere creat pe baza acestora
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 19
Pentru adugare unei coloane ntr-un tabel se folosete clauza ADD, urmata de numele coloanei i numele domeniului (tipul SQL) atributului corespunztor. Exemplu:
ALTER TABLE ANGAJATI ADD DataAngajarii date;
Pentru tergerea unei coloane dintr-un tabel se folosete clauza DROP, urmata de numele coloanei care se va sterge. Exemplu:
ALTER TABLE ANGAJATI DROP DataAngajarii;
20
Instruciunea SELECT
SELECT - instruciune de interogare, prin care se regsesc informaiile din unul sau mai multe tabele ale bazei de date dupa un criteriu (conditie) dat Sintaxa general:
SELECT [DISTINCT] lista_coloane [FROM lista_tabele] [WHERE conditie] [clauze_secundare];
Clauza SELECT
Clauza SELECT specific:
lista coloanelor unor tabele (date n lista_tabele) expresii care vor fi calculate i afiate
Exemple:
SELECT ID, Name, CountryCode, District from city; SELECT 3*4, cos(45), floor(12.45);
Selectarea tuturor coloanelor produsului cartezian al tabelelor date - cu caracterul * ca i lista_coloane. Exemplu:
SELECT * FROM city;
n clauza SELECT se pot redenumi tabelele i coloanele tabelelor sau se pot specifica nume pentru expresii, folosind urmtoarea sintax:
SELECT nume1 [AS] noul_nume1 [,...n] FROM lista_tabele [alte_clauze]; SELECT ID, Name Oras, CountryCode Cod Tara FROM city;
22
Exemple:
SELECT * FROM city WHERE Population > 1000; SELECT * FROM city WHERE (Population > 200000) AND (CountryCode=ROM);
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 23
Ordonarea n ordine cresctoare: parametrul ASC (implicit); n ordine descrescatoare: DESC. Exemplu:
SELECT * FROM city order by CountryCode DESC;
Clauzele GROUP BY i HAVING se folosesc mpreun cu funciile agregat Funciile agregat definite n limbajul SQL2 sunt urmtoarele:
Functia COUNT SUM MAX MIN AVG
Prof. Felicia Ionescu
Valoarea returnata Numarul de linii al tabelului rezultat Suma valorilor din coloana dat ca argument Valoarea maxima din coloana dat ca argument Valoarea minima din coloana dat ca argument Valoarea medie din coloana dat ca argument
Cap. 2 - Baze de date relationale 24
Funcii agregat
Exemple de funcii agregat fr clauze secundare:
SELECT COUNT(*) FROM city; SELECT COUNT(col) FROM city; -- returneaza numarul de linii din tabel -- return nr de valori dif de null din acea col.
SELECT MAX(Population) FROM city; SELECT MIN(Population) FROM city; SELECT AVG(Population) FROM city;
Clauza GROUP BY se folosete pentru gruparea rezultatelor funciilor agregat dupa valoarea uneia sau mai multor coloane. Exemplu:
SELECT CountryCode, AVG(Population) FROM city GROUP BY CountryCode;
Clauza HAVING nlocuiete clauza WHERE atunci cnd n condiia care trebuie s fie ndeplinit se folosesc funcii agregat. Exemplu:
SELECT CountryCode, AVG(Population) FROM city GROUP BY CountryCode HAVING AVG(Population) >800000;
25
Instruciunea INSERT
Instruciunea INSERT se folosete pentru introducerea datelor n tabele i are urmtoarea sintax:
INSERT INTO nume_tabel (col1,col2,...coln) VALUES(val1,val2,...valn);
Lista de coloane poate s lipseasc dac se introduc valori n toate coloanele tabelului i n aceast situatie:
ordinea valorilor introduse trebuie s respecte ordinea coloanelor tabelului ordinea coloanelor provine din ordinea de definire a atributelor prin instruciunea CREATE TABLE, precum i din operaiile ulterioare de alterare a tabelului ordinea coloanelor se poate afla prin instruciunea DESCRIBE nume_tabel.
26
Clauza WHERE: actualizarea valorilor se efectueaza numai asupra acelor linii care ndeplinesc condiia dat. Exemplu:
UPDATE ANGAJATI SET Adresa = Bucuresti WHERE Nume = Popescu;
Dac este omis clauza WHERE, vor fi modificate valorile coloanelor din toate liniile tabelului. Instruciunea DELETE permite tergerea uneia sau mai multor linii dintr-un tabel i are sintaxa:
DELETE FROM nume_tabel [WHERE conditie];
Din tabel se terg acele linii care ndeplinesc condiia dat n clauza WHERE. Dac este omis clauza WHERE, vor fi sterse toate liniile din tabel. Exemplu:
DELETE FROM ANGAJATI WHERE Nume =Ionescu;
27
Clasificare dup locul unde se definesc: constrngeri de coloana i constrngeri de tabel Clasificare dup numrul de relaii implicate: constrngeri intra-relaie i constrngeri inter-relaii. Constrngerile intra-relaie - reguli care se impun n cadrul unei singure relaii; sunt de trei categorii:
Constrngeri de domeniu - condiii ce se impun valorilor domeniilor atributelor Constrngeri de tuplu - condiii ce se impun tuplurilor unei relaii prin chei (primare sau secundare) Constrngeri impuse prin dependene de date (dependene funcionale, multivalorice sau de jonciune); acestea sunt constrngeri intre valorile atributelor dintr-o relaie
Constrngerile inter-relaii - reguli care se impun ntre dou sau mai multe relaii; asigura integritarea referenial prin intermediul cheilor strine
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 28
Constrngerile implicite sunt reguli specifice fiecrui sistem de gestiune; acestea se definesc de ctre proiectant, iar sistemul de gestiune le verific i le impune automat
Exemple: connstrngerile de domeniu, constrngerile de tuplu i constrngerile de integritate referenial sunt constrngeri implicite.
Constrngerile explicite sunt constrngeri suplimentare, specifice bazei de date respective; proiectantul definete constrngerile explicite precum i procedurile de verificare ale accestora (funcii, proceduri stocate, triggere)
Exemple: dependenele de date care nu sunt determinate de cheile relaiilor
29
La crearea unui tabel opiunea NULL este implicit (nu se specific nimic), sau se poate introduce explicit; optiunea NOT NULL se introduce explicit. Optiunile NULL i NOT NULL se introduc ca i constrngeri de coloana n instructiunea SQL CREATE TABLE. Exemplu:
CREATE TABLE ANGAJATI ( Nume varchar(20) NOT NULL, Prenume varchar(20) NOT NULL, DataNasterii date NULL, Functie varchar(20), Salariu numeric);
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 30
Constrngerea de verificare (CHECK) pentru verificarea valorilor atributelor printr-o conditie care trebuie sa ia valoarea TRUE. Se introduce ca o constrangere de tabel n instructiunea CREATE TABLE:
[CONSTRAINT nume_constrangere] CHECK (conditie); Exemplu: CREATE TABLE ANGAJATI ( Nume varchar(20) NOT NULL, Prenume varchar(20) NOT NULL, Salariu numeric, CONSTRAINT Verificare_Salariu CHECK (Salariu >= 1500 ));
MySql 5.0 nu face verificarea CHECK, chiar daca admite acest cuvnt cheie
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 31
Constrngeri de tuplu
O relaie = mulime de tupluri tuplurile unei relaii trebuie s fie distincte (nu pot exista dou sau mai multe tupluri identice) Pentru ca tuplurile unei relaii s fie distincte se folosete cte o cheie primar (primary key) n fiecare relaie O cheie primar PK a unei relaii este un atribut (simplu sau compus) al acelei relaii care are proprietatea de unicitate, adic fiecare valoare a cheii primare este unic n acea relaie. Aceasta nseamn c:
Nu exist dou tupluri distincte (diferite) care s aib aceeai valoare a cheii primare (sau combinaie de valori) pentru orice stare a relaiei, adic:
ti[PK] tj[PK] dac i j, unde ti i tj sunt 2 tupuri diferite ale relaiei
Proprietatea de unicitate a cheii primare este o constrngere de integritate a tuplurilor: fiecare tuplu poate fi identificat n mod precis i se pstreaz integritatea acestuia, dac se cunoate valoarea cheii sale primare Cheia primar este o constrngere implicit: se definete de proiectant la crearea tabelului i este verificat de SGBD (s nu existe duplicate, etc) Cheia primar mai are urmtoarele restricii:
Este ireductibil: nu exist o submulime proprie nevid a cheii PK care s aib proprietatea de unicitate Nici o valoare a atributelor cheii primare nu poate fi modificat prin operaii de actualizare (UPDATE) Nu se admit valori de NULL pentru nici unul dintre atributele cheii primare
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 32
O cheie primar artificial este un atribut (de obicei simplu) care nu reprezint o proprietate a tipului de entitate sau asociere reprezentat de relaie, ci se adaug n schema relaiei special pentru identificarea unic a tuplurilor Exemplu:
ANGAJATI (IdAngajat, CNP, Nume, Prenume, DataNasterii, Adresa, Functia, Salariu): IdAngajat este o cheie primar artificial Ar putea fi definite i chei primare naturale prin atribute simple sau compuse care au proprietatea de unicitate n anumite condiii:
atributul simplu {CNP} valabil numai pentru persoanele din Romania atributul compus {Nume, Prenume, DataNasterii, Adresa}
Din motive de eficien a operaiilor de identificare a tuplurilor, se prefer chei primare cu un numr ct mai mic de atribute (atribut simplu)
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 33
SGBD-urile interzic introducerea liniilor (tuplurilor) care au valori identice ale cheilor primare
34
Dac cheia primar este simpl (format dintr-un singur atribut), ea se poate specifica i ca o constrngere de coloan; exemplu:
CREATE TABLE ANGAJATI ( IdAngajat int PRIMARY KEY AUTO_INCREMENT, Nume varchar(20) NOT NULL, Prenume varchar(20) NOT NULL, DataNasterii Date, Adresa varchar(50), Salariu numeric) ;
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 35
O cheie candidat poate fi simpl (un atribut), sau compus (mai multe atribute)
Exemplu: ANGAJATI (IdAngajat, CNP, Nume, Prenume, DataNasterii, Adresa, Functia, Salariu) SK1 = {IdAngajat, CNP, Nume, Prenume, DataNasterii, Adresa, Functia, Salariu} SK2 = {CNP, Nume, Prenume, DataNasterii, Adresa}; SK3 = {IdAngajat, CNP} CK1= {Nume, Prenume, DataNasterii, Adresa}; CK2 = {CNP}; CK3 ={IdAngajat}
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 36
Alegerea cheii primare dintre mai multe chei candidate este arbitrar, dar, din motive de eficien, se alege cheia cu cel mai mic numr de atribute Cheile secundare se deosebesc de cele primare prin:
Pot fi modificate prin instruciuni UPDATE, dac se respect proprietatea de unicitate Cheile secundare compuse admit valori NULL pentru unele din atributele lor
37
Constrngeri inter-relaii
Asocierile (relaionships) 1: N ntre dou mulimi de entiti (din modelul Entitate-Asociere) se realizeaz n modelul relaional prin chei strine Exemplu: Pentru a realiza asocierea 1: N dintre relaiile SECTII i ANGAJATI, se adaug n relaia ANGAJATI cheia strin IdSectie, care reprezint identificatorul (numrul) seciei n care lucreaz angajatul respectiv:
ANGAJATI (IdAngajat, Nume, Prenume, DataNasterii, Adresa, Salariu, IdSectie)
SECTII SECTII 1 N ANGAJATI
IdSectie 1 2 3 4 Nume Productie Proiectare Cercetare Documentare Buget 400000 300000 200000 100000
Diagrama E-A
ANGAJATI
IdAngajat 1 2 3 4 Nume Ionescu Popa Carol Marin Prenume Ion Petre Ana Radu DataNasterii 1960.01.05 1965.02.97 1961.03.06 1970.03.98 Adresa Bucuresti Bucuresti Bucuresti Bucuresti Functia inginer tehnician secretara inginer Salariul 4000 3200 2000 4000 IdSectie 1 1 2 3
38
Cheia strin
Fie dou relaii R1 i R2, ntre care exista o asociere cu raportul 1: N. O cheie strin (foreign key) este o submulime FK de atribute ale relaiei R2 care refer cheia CK din relaia R1 i satisface urmtoarele condiii:
atributele cheii strine FK sunt definite pe domenii compatibile cu cele ale atributelor cheii candidate CK a relaiei R1 valorile atributelor FK ntr-un tuplu din relaia R2, fie sunt identice cu valorile atributelor CK ale unui tuplu oarecare din starea curent a relaiei R1, fie sunt NULL
Dou domenii sunt compatibile dac ele sunt compatibile din punct de vedere al tipului de date i compatibile semantic (are sens s fie comparate)
n limbajul SQL verificarea domeniilor se rezum la verificarea tipurilor de date, iar compatibiltatea semantic trebuie s fie asigurat de proiectant
Exemplu:
CREATE TABLE ANGAJATI ( IdAngajat int PRIMARY KEY, Nume varchar(20) NOT NULL, Prenume varchar(20) NOT NULL, IdSecie int, CONSTRAINT FK FOREIGN KEY (IdSectie) REFERENCES SECTII(IdSectie));
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 39
Pentru meninerea integritii refereniale trebuie s fie inpuse restrictii operaiilor de modificare a strii relaiilor (INSERT, DELETE, UPDATE) Restriciile care se impun operaiilor de modificare a relaiilor depind de rolul relaiei (relaie care refer, relaie referit, sau poate avea ambele roluri) Operaia INSERT:
ntr-o relaie care nu refer alt relaie, inserarea se poate face fr restricii ntr-o relaie care refer (care conine o cheie strin): SGBD-ul permite introducerea unui tuplu nou numai dac: (a) valoarea cheii strine a tuplului nou este NULL sau (b) exist o valoare a cheii referite egal cu valoarea cheii strine a tuplului nou
Operatia DELETE:
ntr-o relaie care nu este referit tergerea se poate face fr restricii ntr-o relaie referit se admite: tergere restricionat, tergere n cascad, anularea (SET NULL) a cheilor strine care refereau tuplul ters
tergerea restricionat interzice tergerea unui tuplu din relaia referit dac acesta este referit de un tuplu din relaia care o refer
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 40
Exemplu:
CREATE TABLE ANGAJATI ( IdAngajat int PRIMARY KEY, Nume varchar (20) NOT NULL, ........................ Sectie int, CONSTRAINT FK FOREIGN KEY (Sectie) REFERENCES SECTII (IdSectii) , ON DELETE CASCADE ON UPDATE RESTRICT);
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 41
Nr. total noduri N = 20 + 21 + 2j + 2d-1 = 2d 1 Nivelul 2 d = log (N + 1) Pentru cutare se parcurg max d pai, deci timpul de cutare TC = k2* log N = O(log N)
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale
42
Un index al unei relaii este o structur auxiliar, memorat n baza de date, care permite accesul rapid la tuplurile relaiei prin ordonarea acestora Structuri folosite n indexare: arbori binari de cutare, arbori BTREE, arbori RTREE, tabele de dispersie (HASH) etc. Exista dou categorii de indexuri ale unei relaii:
un index primar, care determin localizarea tuplurilor n fiierele bazei de date zero, unul sau mai multe indexuri secundare, care nu modific localizarea tuplurilor, dar sunt folosii pentru regsirea rapid a tuplurilor dup valorile unor atribute
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 43
(Li) (pki) (ai, bi, ci, ...) (Lj) (Lk) (2)(Popa, .) (Lj) (Lk) (1)(Ionescu,..) Prof. Felicia Ionescu
(4)(Marin, .)
(6)(Ionescu,.)
(3)(Carol,...)
(5)(Ene,.)
(7)(Dobre,.) 44
Operatiile de interogare care se fac dup valoarea altor atribute (dect indexul primar) se execut mult mai ineficient, fiind o cutare ntr-o mulime neordonat dup acea valoare
Exemplu: Care sunt funcia i salariul angajatului cu numele Dobre ? Pentru cutare se vor parcurge pe rnd toate tuplurile relaiei (memorate n nodurile arborelui - exist astfel de algoritmi de parcurgere) pentru a gsi tuplul (sau tuplurile) cu valoarea atributului Nume egal cu Dobre Sunt necesari maximum N pai (N este nr total de tupluri ale relaiei)
Pentru rezolvarea mai eficient a unor astfel de interogri se definesc indexuri secundare pe acele atribute care intervin n clauza WHERE din interogri
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 45
Sunt dou categorii de indexuri secundare: unice (UNIQUE) i normale Un index secundar UNIQUE este definit pe un atribut A (simplu sau compus) al relaiei care ia valori unice (cum este o cheie unic - secundar sau alternativ)
Un element (nod) al indexului este compus din valoarea ai atributului indexat A i adresa (Li) a unui singur tuplu care are acea valoare a atributului A Dac relaia are N tupluri, indexul va avea M = N elemente
Index secundar normal (care nu este unic - nu are o denumire specific) este definit pe un atribut A care nu ia valori unice (nu este cheie unic)
Un element (nod) al indexului este compus din valoarea ai a atributului indexat A i lista (Li1 , Li2 , ) a adreselor (pe hard-disk) a tuplurilor ti1, ti2, care au valoarea ai a atributului A Dac relaia are N tupluri, indexul va avea M N elemente
Pentru o structur arbore binar a indexului, fiecare nod mai conine i adresele nodurilor fii (stnga, dreapta) (nereprezentate n figura urmtoare)
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 46
Un index secundar nu modific adresa de memorare a unui tuplu (care se afl n indexul primar), dar conine informaii pentru gsirea rapid a unui tuplu dup valoarea acestui index
(Ionescu) (L1, L6)
(Dobre) (L7)
(Marin) (L4)
(Popa) (L2) 47
n sistemele SGBD avansate (obiect-relaionale), pot exista i indexuri secundare speciale, cum sunt
Indexuri spaiale (indexarea obiectelor reprezentate n spaiul bi sau tridimensional) Indexuri de context (indexarea textelor) Indexuri XML (indexarea documentelor XML)
n general, se recomand utilizarea unui numr ct mai mic de indexuri secundare, definite pe atributele care intervin cel mai frecvent n interogri
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 48