Sunteți pe pagina 1din 48

Capitolul 2: Baze de date relaionale

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

Constrngerile de integritate ale relaiilor


Constrngeri de domeniu Constrngeri de tuplu: cheia primar chei secundare Constrngeri de integritate referenial chei strine

Indexarea relaiilor
Indexul primar Indexuri secundare

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

Relaii Atribute Domenii


Modelul relaional: E.F.Codd, 1970 IBM O baz de date relaional este compus dintr-o mulime finit de relaii
fiecare relaie reprezinta o mulime (tip) de entitati sau o mulime (tip) de asocieri fiecare relaie este unica intr-o baza de date o relaie se defineste prin intermediul atributelor sale

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)

O relaie r definita prin schema R(A1,A2,...Ai,...An) este:


o mulime finita de n-tupluri t tuplul t este o list ordonat de n valori: t = <v1,v2,...vi,...vn>, unde 1 i n vi este o valoare a atributului Ai, vi D(Ai)

Relaia r(R): r este variabila, instanta a schemei (tipului) R


Valoarea variabilei: starea sau extensiunea relaiei Numarul de tupluri ale unei relaii: cardinalitatea relaiei Fiecare tuplu este unic intr-o relaie (nu exista tupluri duplicat) Corespondenta: relaiemulime de entitati (sau de asocieri); tuplu entitate

n mod curent: se foloseste R atat pentru schema cat i pentru relaia insasi
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 3

Reprezentarea relaiilor prin tabele


Un tabel (table) = reprezentarea grafic a unei relaii; compus din:
Numele tabelului - identic cu numele relaiei Coloanele corespund atributelor relaiei Capul tabelului- contine numele atributelor (coloanelor) schema relaiei O mulime de linii, fiecare linie corespunznd unui tuplu starea relaiei Valori ale atributelor fiecarui tuplu

Exemplu: Tabelul care reprezinta relaia (starea relaiei) STUDENTI


Numele STUDENTI Nume Anghelescu Beldiman Boeru Prenume Octavian Cristina Marius DataNasterii 1999 1998 1999 Adresa Bucuresti Bucuresti null Facultatea ETTI ETTI ETTI Linii - tupluri Coloane - Atribute Valori atribute Capul tabelului

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

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

Ordonarea valorilor atributelor n tupluri


Din punct de vedere logic, ordinea valorilor atributelor ntr-un tuplu nu conteaza; aceast structurare poate fi exprimat prin urmtoarele definiii: Schema relaiei: R = {A1,A2, ...Ai,...An} (o mulime de atribute) Relaia r(R): o mulime de n-tupluri t, unde:
fiecare tuplu t este o mulime de n perechi ordonate <Ai,vi>, unde 1 i n, t = {<A1,v1>,<A2,v2>,...<Ai,vi>, ...<An,vn>} vi este valoarea atributului Ai, vi D(Ai)

Observaii asupra celor dou definiii:


A doua definiie a relaiei este mult mai general decat prima definitie Prima definiie simplific notaiile i corespunde reprezentrii prin tabel a relaiei i de aceea va fi folosit n continuare destul de frecvent n implementrile reale, exist o anumit ordine a valorilor atributelor memorate n fiiere, dar aceasta nu este relevant din punct de vedere logic

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

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

Caracteristicile generale ale limbajului SQL


Limbajul SQL foloseste reprezentarea prin tabele a relaiilor, reprezentare care este mai simpl i mai intuitiv (foloseste termenii tabel, linie, coloan) Limbajul SQL cuprinde:
Componenta de descriere a datelor (Limbaj de Descriere a Datelor LDD) Componenta de manipulare a datelor (Limbaj de Manipulare a Datelor LMD) Alte componente: controlul tranzactiilor, controlul securitatii, protectia datelor etc.

Limbajul SQL2 este un limbaj neprocedural:


o instruciune SQL2 specific ce informaii trebuie s fie setate sau obinute, nu modul (procedura) n care se opereaz limbajul SQL2 nu conine instruciuni de control al fluxului execuiei (instruciuni ca for, while, if, etc)

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

Structura lexicala a limbajului SQL


O instruciune SQL (statement) este o secven de elemente - de regula terminat cu semnul punct i virgul (;) Fiecare instruciune SQL conine o comand SQL (command), care specific ce aciune se efectueaz, urmat de alte elemente, care specific operaii, clauze, parametri etc.
Exemplu: SELECT * FROM ANGAJATI;

Elementele (tokens) instruciunilor SQL


cuvnte cheie (key words): CREATE, INSERT, SELECT , WHERE, FROM etc. identificatori (identifiers):
simpli - numai caractere alfa-numerice i underscore(_): ANGAJATI, Nume, Prenume etc. delimitati (quoted) - pot contine orice caracter, foloseste ghilimele : Nume, Prenume etc.

constante (literali): 1000, 100.5, Ionescu, NULL caractere speciale: *, ., ;

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

Expresii i operatori n limbajul SQL


O expresie SQL const dintr-unul sau mai muli operanzi, operatori i paranteze
Parantezele se pot folosi pentru a preciza o anumit ordine a operaiilor, dac aceasta este diferit de ordinea implicit data de precedenta operatorilor.

Un operand poate fi:


numele unei coloane n acest caz se foloseste valoarea memorata n acea colona intr-una sau mai multe linii ale tabelului o constant (literal) valoarea returnat de o functie

Un operator SQL este exprimat prin:


unul sau mai mai multe caractere speciale; exemple: +, -, *, /, %, <= etc. un cuvnt cheie; exemple: AND, OR, NOT, LIKE etc.

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

Prof. Felicia Ionescu

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

Operatorii logici (NOT, AND, OR):


se aplic unor valori logice trivalente (cu 3 valori: true (1), false (0) i null - lipsa de informatie) returneaz o valoare logic trivalent A
true true true false false 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

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

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

Tipuri de funcii scalare SQL:


Funcii de calcul trigonometric (sin, cos, tan etc.), funcii de calcul al logaritmului (ln, log), al puterii (power), funcii de rotunjire (floor, ceil), etc. Funcii pentru manipularea irurilor de caractere: concat, replace, upper etc. Funcii pentru data calendaristic i timp: add_months, next_day, last_day etc. Funcii de conversie: to_number, to_char etc.

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

Tipuri de date SQL (1)


Tipuri de date SQL2: numeric, iruri de caractere, iruri de bii, data (calendaristic), timp Tipul numeric:
numere ntregi: integer sau int (4 octei), smallint (2 octei) numere reale reprezentate n virgul flotanta: float (4 octei), real i double [precision] (8 octei) numere zecimale reprezentate cu precizia dorit (tipul numeric sau decimal, memorate ca ir de caractere): numeric[(p,s)] (sau decimal [(p,s)]), unde p (precizia) este numrul total de cifre, iar s (scara) este numrul de cifre dup punctul zecimal

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

Tipuri de date SQL (2)


Tipurile SQL pentru data calendaristic i timp sunt: date, time, timestamp, interval:
Tipul date: memorarea datelor calendaristice prin utilizarea a trei cmpuri (year, month, day), n formatul yyyy-mm-dd; se admit numai date valide Tipul time: memorarea timpului, folosind trei cmpuri (hour, minute, second) n formatul HH:MM:SS; se admit numai valori valide Tipul timestamp(p): memorarea combinat a datei calendaristice i a timpului, cu precizia p pentru cmpul second. Valoarea implicit a lui p este 6 Tipul interval este utilizat pentru memorarea intervalelor de timp

Variante de tipuri de date SQL specifice n diferite sisteme SGBD; Exemple:


SGBD Microsoft SQL Server: tinyint - numr ntreg pe 1 octet SGBD Oracle: varchar2 - ir de caractere de lungime variabil

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

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

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)

[ , . . . n] element1, . . . . . . . elementn lista_elemente

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)

Exemple de comenzi SQL de definire a datelor:


CREATE TABLE, CREATE VIEW, ALTER TABLE, ALTER VIEW, DROP TABLE, DROP VIEW, DROP FUNCTION, CREATE INDEX, CREATE USER ALTER PROCEDURE CREATE FUNCTION, CREATE TRIGGER, CREATE PROCEDURE ALTER FUNCTION, DROP INDEX, DROP 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

Un tabel vedere (view) este un tabel virtual care:


nu este memorat fizic n fiiere reprezint o selecie (dup un anumit criteriu) a datelor memorate n unul sau mai multe tabele de baz

Un tabel vedere se creeaza cu instruciunea SQL:


CREATE VIEW nume_vedere AS (SELECT...);

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

Modificarea i stergerea tabelelor i a vederilor


Comanda de modificare a tabelelor (ALTER TABLE) permite:
adugarea sau tergerea unor atribute modificarea domeniilor unor atribute adugarea, modificarea sau tergerea unor constrngeri ale tabelului

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;

Instruciunile de tergere a tabelelor de baz i a vederilor sunt:


DROP TABLE nume_tabel; DROP VIEW nume_vedere;

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

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];

SELECT returneaza un tabel cu coloanele din lista_coloane


ale acelor linii (tupluri) ale produsului cartezian al tabelelor din lista_tabele pentru care expresia logic conditie este adevrat (are valoarea TRUE).

Instructiunea SELECT are urmatoarele seciuni (clauze):


Clauza SELECT definete lista de coloane a tabelului rezultat Clauza FROM indic lista de tabele din care se selecteaz rezultatul Clauza WHERE definete condiia pe care trebuie s o ndeplineasc fiecare linie a tabelului rezultat Clauze secundare (ORDER BY, GROUP BY, HAVING): permit ordonri sau grupri ale tuplurilor (liniilor) rezultate
Prof. Felicia Ionescu Cap. 2 - Baze de date relationale 21

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);

Eliminarea liniilor duplicat cu parametrul DISTINCT. Exemplu:


SELECT [DISTINCT] CountryCode FROM city;

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;

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

22

Clauzele FROM i WHERE


Clauza FROM specific lista_tabele din care se selecteaz rezultatul Numele coloanelor din lista_coloane (clauza SELECT) trebuie s fie distincte Dac nu sunt distincte, se calific unele coloane cu numele tabelului caruia i aparin - folosind operatorul punct (.). De exemplu:
SELECT ANGAJATI.Nume, SECTII.Nume FROM ANGAJATI, SECTII;

Clauza WHERE specifica conditia pe care trebuie sa o ndeplinesca rezultatul:


conditia este o expresie logic compusa din valori logice, operatori logici (NOT, AND, OR) i paranteze o valoare logic se obtine ca rezultat al comparaiei ntre doi operanzi folosind un operator de comparaie un operand poate fi un atribut (nume de coloan), o constant, valoarea unei expresii aritmetice sau o valoare returnat de o funcie operatorii de comparaie pot fi operatori aritmetici sau operatori SQL de comparaie

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

Clauze secundare funcii agregat


Clauzele secundare sunt: ORDER BY, GROUP BY, HAVING Clauza ORDER BY specific numele atributului dup care se face ordonarea liniilor tabelului rezultat
SELECT * FROM city order by CountryCode;

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;

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

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);

ntre valori i numele de coloane trebuie s existe o coresponden pozitional. De exemplu:


INSERT INTO SECTII (Numar, Nume, Buget) VALUES (1,Productie, 40000);

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.

De exemplu, introducerea unei linii cu toate valorile n tabelul


ANGAJATI (IdAngajat,Nume,Prenume,DataNasterii,Adresa,Functia,Salariu) se poate face cu instruciunea: INSERT INTO ANGAJATI VALUES(100,Mihailescu, Mihai,1950-04-05,Craiova,Inginer, 3000);

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

26

Instruciunile UPDATE i DELETE


Instruciunea UPDATE permite actualizarea valorilor coloanelor (atributelor) din una sau mai multe linii ale unui tabel i are sintaxa:
UPDATE nume_tabel SET col1 = expr1 [, . . . n] [WHERE conditie];

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;

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

27

Constrngeri de integritate (1)


Constrngerile de integritate (integrity constraints) sunt reguli care se impun pentru ca datele memorate s corespund ct mai bine celor din realitate:
se definesc la proiectarea bazei de date trebuie s fie respectate de orice stare a acesteia

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

Constrngeri de integritate (2)


Clasificare din punct de vedere al modului de definire i de verificare a respectrii constrngerilor: inerente, implicite i explicite. Constrngerile inerente sunt cele ale modelului de date nsui, care nu trebuie s fie definite deoarece sunt incluse n sistemul de gestiune
De exemplu: n modelul relaional constrngerea ca valoarea fiecrui atribut s fie atomic (indivizibil) este o constrngere inerent

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

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

29

Constrngeri de domeniu (1)


Constrngerile de domeniu: constrngerea NOT NULL, constrngerea de valoare implicit (DEFAULT), constrngerea de verificare (CHECK) Constrngerea NOT NULL nsemna c atributul respectiv nu poate lua valoarea NULL n nici un tuplu al relaiei. Valoarea NULL a unui atribut ntr-un tuplu semnific faptul c valoarea acelui atribut nu este cunoscut pentru acel tuplu. Exemple:
nu se cunoaste deloc data de nastere a unei personalitati istorice; nu se cunoate valoarea unui atribut n momentul inserarii tuplului, dar aceasta va fi cunoscuta i completat ulterior

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

Constrngeri de domeniu (2)


Constrangerea de valoare implicit a unui atribut (DEFAULT): dac la inserarea unui tuplu nu se specific valoarea unui atribut, atunci:
atributul primete valoarea implicit (DEFAULT), dac a fost definit atributul primete valoarea NULL, dac nu a fost definit valoare implicit, dar sunt admise valori NULL se genereaz o eroare, dac nu a fost definit o valoare implicit i nici nu sunt admise valori NULL. Exemplu: CREATE TABLE STUDENTI ( Nume varchar (20) NOT NULL, Prenume varchar (20) NOT NULL, Tara varchar (20) DEFAULT Romania ) ;

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

Chei primare naturale i artificiale (1)


Se pot defini chei primare naturale sau chei primare artificile, cu condiia ca acestea s ndeplineasc condiia de unicitate O cheie primar natural este un atribut (simplu sau compus) al relaiei:
reprezint o proprietate a tipului de entitate (sau asociere) reprezntat de acea relaie are n mod natural valori unice: nu exist dou tupluri cu aceeai valoare a cheii primare, deoarece nu exist dou entiti cu acceai valoare a proprietii respective

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

Chei primare naturale i artificiale (2)


Modul de asigurare a unicitii valorii cheii primare artificiale depinde de sistemul SGBD folosit. De exemplu:
n Microsoft SQL Server se pot obine valori unice ale cheii primare folosind parametrul IDENTITY, care asigur incrementarea valorii atributului cheii la introducerea fiecrei linii noi n sistemele Oracle se pot genera chei artificiale folosind obiecte SEQUENCE; un obiect SEQUENCE geneaza un numar unic la fiecare apel al metodei NEXTVAL n MySQL, se foloseste parametrul AUTO_INCREMENT pentru generarea numerelor unice pentru cheile primare.

SGBD-urile interzic introducerea liniilor (tuplurilor) care au valori identice ale cheilor primare

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

34

Definirea cheii primare


Cheia primar se defineste prin instructiunea CREATE TABLE ca o constrngere de tabel sau ca o constrngere de coloan Definirea cheii primare ca o constrngere de tabel:
[CONSTRAINT nume_constr] PRIMARY KEY (lista_atribute) Exemplu: CREATE TABLE SECTII ( IdSectie int, Nume varchar(50) NOT NULL, Buget numeric, CONSTRAINT PK PRIMARY KEY (IdSectie) );

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

Superchei, chei candidate


O supercheie (superkey) este o submulime SK de atribute ale unei relaii care prezint proprietatea de unicitate (orice combinaie de valori ale atributelor supercheii este unic pentru orice stare a relaiei)
Dac se cunoate valoarea (combinaia de valori ale atributelor) supercheii, atunci acel tuplu poate fi identificat n mod unic Orice relaie are cel puin o supercheie, care este mulimea tuturor atributelor sale

O cheie candidat (candidate key) este o supercheie ireductibil:


Unicitate: nu exist dou tupluri diferite ale relaiei care s conin aceeai combinaie de valori ale atributelor cheii CK; Ireductibilitate: nu exist nici o submulime proprie, nevid a cheii CK care s aib proprietatea de unicitate

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

Chei candidate, primare i secundare


Atunci cnd exist mai multe chei candidate (cu proprietile de unicitate i ireductibilitate), una dintre ele se alege ca i cheie primar, iar celelalte chei se pot defini ca i chei secundare Cheia primar este o cheie candidat aleas (desemnat) de proiectant la definirea tabelului O cheie secundar (alternativ, unic) (secondary, alternate, unique key) este o cheie candidat definit de proiectant
Cheile secundare se definesc n instruciunea CREATE TABLE folosind specificatorul UNIQUE [KEY] n loc de PRIMARY KEY

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

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

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

Prof. Felicia Ionescu

Cap. 2 - Baze de date relationale

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

Cheia strin reprezint o constrngere referenial ntre cele 2 relaii


Relaia referit (R1) relaie printe, relaia care refer (R2) relaie fiu

Cheia strin se specific n comanda CREATE TABLE sau ALTER TABLE:


[CONSTRAINT nume_constr] FOREIGN KEY (cheie_strina) REFERENCES relaia_referita (cheie_candidata)

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

Mentinerea integritii refereniale a relaiilor (1)


Integritatea referenial (referential integrity) este proprietatea bazei de date prin care orice cheie strin:
fie are o valoare care se regsete printre valorile cheii candidate referite fie are valoarea NULL

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

Mentinerea integritii refereniale a relaiilor (2)


tergerea n cascad permite tergerea unui tuplu din relaia referit; dac tuplul ters era referit de unul sau mai multe tupluri, atunci se terg i acestea din relaia care o refer; dac tuplurile terse din relaia care refer sunt, la rndul lor referite de alte tupluri din alte relaii, atunci trebuie s fie terse i acestea, .a.m.d.; se execut deci o tegere n cascad Operaia UPDATE este o tergere urmat de o introducere, deci restriciile de actualizare reprezint combinaia restriciilor de introducere i de tergere n limbajul SQL se specific opiunile ON DELETE i ON UPDATE constrngerii de cheie strin; valorile posibile ale acestor opiuni sunt:
RESTRICT tergerea restricionat (este valoare implicit) CASCADE tergerea n cascad; SET NULL anularea cheilor strine care refereau tuplul ters NO ACTION se admit valori care nu respect integritatea relaional

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

Indexarea relaiilor (1)


Timpul de execuie a operatiilor asupra datelor din relaii depinde de modul de reprezentare a mulimii de elemente (tupluri) ale relaiilor Operaia de cutare a unui element ntr-o mulime se execut mai rapid dac elementele mulimii sunt reprezentate printr-o colecie ordonat, cum sunt liste, arbori, tabele de dispersie (hash table). De exemplu:
Timpul de cutare a unui element ntr-o mulime neordonat de N elemente este proportional cu N: TC = k1 * N = O(N) Timpul de cutare al unui element memorat ntr-o structur arbore binar de cutare ordonat dup valoarea etichetei (cheii) de ordonare este TC = k2* log N = O(log N)

Un arbore binar ordonat complet cu d niveluri:


pe nivelul 0 are 20 = 1 nod pe nivelul 1 are 21 = 2 noduri pe nivelul j are 2j noduri
Nivelul 0 Nivelul 1 1 2 4 6

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

Indexarea relaiilor (2)


Rezult c, dei o relaie nu presupune ordonarea tuplurilor sale, pentru accelerarea operaiei de cutare (SELECT) a unui tuplu se folosesc colecii ordonate i celelate operaii (INSERT, UPDATE, DELETE) se execut mai rapid n colecii ordonate
Pentru inserarea unui tuplu se verific mai nti s nu existe deja un tuplu cu aceeai valoare a cheii Pentru modificarea unui tuplu se caut mai nti tuplul dorit, apoi se fac modificrile Pentru tergere se caut mai nti tuplul dorit i apoi se terge

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

Indexul primar (1)


Indexul primar (primary index) se definete pe cheia primar a relaiei Fiecare element al indexului primar corespunde unui tuplu al relaiei i elementele sunt ordonate dup valoarea cheii primar PK De exemplu, pentru o structur arbore binar ordonat a indexului primar al unei relaii cu ckeia primar PK i atributele (A, B, C, ...), un element (nod) Ni este memorat la adresa Li pe hard-disk i conine:
Valoarea cheii primare a tuplului (pki), care este i eticheta de ordonare a arborelui Valorile celorlalte atribute ale tuplului (ai, bi, ci, ...) Adresele fiilor (Lj, Lk) (locaiile de memorare pe hard-disk a nodurilor fii)

(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

Cap. 2 - Baze de date relationale

Indexul primar (2)


Structura indexului primar este memorat mpreun cu tuplurile relaiei Operaiile de interogare care se fac dup indexul primar (cheia primar) se execut eficient, fiind o cutare ntr-o mulime ordonat dup acea valoare
Exemplu: Care sunt funcia i salariul angajatului cu cheia primara 3? Se caut nodul arborelui care are valoarea etichetei de ordonare (care este i cheia primar a relaiei) egal cu valoarea dat (3) Dup gsirea nodului se extrag valorile atributelor tuplului memorat n acel nod Sunt necesari maximum d (log N) pai de cutare (N este nr total de tupluri ale relaiei)

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

Indexuri secundare (1)


Un index secundar pe un atribut al unei relaii (secondary index) este o structur ordonat dup valoarea acelui atribut; un element al unui index secundar conine:
valoarea atributului indexat (care este etichet de ordonare) adresa (sau adresele) tuplurilor care conin acea valoare a atributului respectiv

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

Indexuri secundare (2)


Exemplu: indexul secundar (cu structur arbore binar) definit pe atributul Nume al relaiei ANGAJATI, al crei index primar este cel dat n figura precedent
La interogarea Care sunt functia i salariul angajailor cu numele Dobre ? se parcurge indexul secundar definit pe atributul Nume i se afl adresa unui singur tuplu (L7) La interogarea Care sunt functia i salariul angajatilor cu numele Ionescu ? se parcurge indexul secundar definit pe atributul Nume i se afl adresele tuplurilor (L1 i L6) care au valoarea atributului Nume egal cu Ionescu Dac indexul are o structur arbore binar ordonat, se vor executa max (log N) pai

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)

(Carol) (L3) Prof. Felicia Ionescu

(Ene) (L5) Cap. 2 - Baze de date relationale

(Popa) (L2) 47

Indexuri secundare (3)


Un index secundar se poate crea cu comanda CREATE TABLE (ca o costrngere de tabel), cu ALTER TABLE sau cu CREATE INDEX; ex.:
CREATE [optiuni] INDEX nume_index ON nume_tabel (lista_atribute_index); Una din opiunile care se pot introduce n CREATE INDEX este UNIQUE

n general, sistemele SGBD adaug:


Un index secundar UNIQUE pentru fiecare cheie candidat (definit prin constrngerea UNIQUE KEY) Un index secundar normal pentru fiecare cheie strin; un astfel de index secundar ajut la gsirea rapid a tuturor tuplurilor asociate cu o valoare a cheii strine (Care sunt angajaii care lucreaz n secia cu numrul (identificatorul IdSectie) 1?

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)

Indexurile secundare au avantaje i dezavantaje:


Avantaje: accelereaz operaiile de interogare care se fac dup valoarea indexului Dezavantaje: ocup spaiu de memorie i consum timp la actualizarea relaiilor

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

S-ar putea să vă placă și