Documente Academic
Documente Profesional
Documente Cultură
Curs 1
Concepte teoretice
introductive
Cuprins
Definitii
Terminologie in baze de date
Modele de baze de date
Clasificarea bazelor de date
Clasificarea datelor
Baze de date – protejarea informatei
Baze de date-utilizatori
Baze de date – avantajele unui SGBD
2
DEFINITII
Baza de date - este un ansamblu structurat de date înregistrat pe
suporturi accesibile calculatorului pentru a satisface simultan
cerintele mai multori utilizatori intr-un mod selectiv şi în timp util.
3
DEFINITII
4
DEFINITII
Proprietati:
Baza de date este o colecţie logica coerenta de date care are cel putin
un înteles
Baza de date este destinata, construita si populata de date despre un
domeniu bine precizat. Ea are un grup de utilizatori si se adreseaza
unui anumit grup de aplicatii
5
Termeni specifici
Sistem de gestiune a bazelor de date (SGDB/DBMS) –ansamblul
de baze de date si de programe care permite utilizatorului sa
interactioneze cu o baza de date sub aspectul modificarilor
posible asupra informatiilor sau utilizarii informatiilor pentru
generarea de rapoarte .
7
Modele ale bazelor de date
1. Modelul ierarhic
… un ansamblu structurat de
datedezvoltatea
A fost primul model folosit pentru … bazelor de date.
Schema conceptuala se reprezinta printr-un numar oarecare de
scheme ierarhice.
Fiecare nod (cu exceptia nodurilor frunza) are una sau mai multe
legaturi catre noduri de pe nivelul imediat inferior (noduri fii). 8
Modele ale bazelor de date
1. Modelul ierarhic
9
Modele ale bazelor de date
… un ansamblu structurat de
2. Modelul retea
date …
Este modelul in care datele sunt reprezentate ca intr-o multime de
ierarhii, in care un membru al ei poate avea oricati superiori, iar
la un subordonat se poate ajunge pe mai multe cai.
10
Modele ale bazelor de date
2. Modelul retea
11
Modele ale bazelor de date
… un ansamblu structurat de
3. Modelul relational
date …
Se bazează pe notiunea de relatie din matematica ce corespunde unei
entitati de acelasi tip si are o reprezentare uşor de înteles si de
manipulat
Consta dintr-un tabel compus din linii si coloane. Fiecare linie din
tabel reprezintă o entitate si este compusa din multimea valorilor
atributelor entitatii respective, fiecare atribut corespunzând unei
coloane a tabelului.
Date angajat
Cod angajat Nume Prenume Salariu
1 A Q 6
2 S W 7
3 D E 8
Proiect
Cod proiect Descriere Buget Cod angajat
XR1 aaaaa 10 1
XR2 sssss 100 2
XR3 ddddd 1000 3
Companie
Filiala Departament Cod proiect
Z A1 XR1
X A2 XR2
C A3 XR3
14
Modele ale bazelor de date
… un ansamblu structurat de
4. Modelul orientat pe obiect
date …
Se bazeaza pe limbaje de programare orientate obiect în care datele
sunt independente de timpul de viaţa al programelor care le creeaza
sau acceseaza. prin memorare pe suport magnetic
date …
Fiecare clasa reprezinta abstractizarea unui tip de entitate din
realitatea modelata, iar clasele sunt membre ale unei ierarhii de clase,
corelate între ele prin relatii de mostenire.
18
Clasificare Date
… un ansamblu structurat de
Datele - sunt informatii primare care pot fi numere, marimi, relatii etc.,
datesi scop
prelucrate într-un context cu semnificatie …devin informatii utile.
Clasificare:
Domeniul de activitate la care se refera:
19
ClasificareDate
… un ansamblu structurat de
Datele - sunt informatii primare care pot fi numere, marimi, relatii etc.,
date …
prelucrate într-un context cu semnificatie si scop devin informatii utile.
Clasificare:
Forma de exprimare a fenomenelor pe care le reflecta:
… un ansamblu structurat de
Datele - sunt informatii primare care pot fi numere, marimi, relatii etc.,
prelucrate într-un context cu semnificatie si scop devin informatii utile.
Clasificare:
date …
Destinatie:
de evaluare şi raportare;
21
Clasificare Date
Datele - sunt informatii primare care pot fi numere, marimi, relatii etc.,
… un ansamblu structurat de
prelucrate într-un context cu semnificatie si scop devin informatii utile.
Clasificare:
date …
Caracteristicile lor functionale:
de stare - caracterizeaza cantitativ şi calitativ potentialul
tehnic de productie;
de cooperare - exprima legaturile organizatorice ce se stabilesc inter si
extra organizatie;
-de executie - reflecta modul de desfasurare a activitătii curente
şi asigura functionarea operativa a unei unitati;
… un ansamblu structurat de
Protectia bazei de date - ansamblu de masuri necesare asigurarii
securitatii şi integritatii datelor.
date …
Securitatea datelor – controlul restrictionat si privilegiat al acesului la
informatiile bazei de date;
23
Protejarea Datelor
SECURITATEA datelor.
… un ansamblu structurat de
1. Autorizarea şi controlul accesului la date consta în identificarea
date
utilizatorilor şi restrictionarea … acestora, pentru diferite
accesului
operatii de prelucrare.
date
diferitele optiuni pe care i le indica … de calcul.
sistemul
28
Baze de date
Curs II
SGBD - Definitii
Este compus din module cu functii specifice
Un set de functii este asigurat de nucleul sistemului de operare
Asigura un minim de functii de baza cu ajutorul carora sunt
dezvoltate alte functii
Permite administratorului sa genereze versiuni de BD performante
tinând cont de înmultirea utilizatorilor.
Este un produs software care pune la dispozitie toate serviciile
necesare organizarii si intretinerii bazei de date (transfer de date,
gestionare acces)
Accepta limbaj de interogare folosit de utilizator pentru a obtine
informatii
Este un interpretor de cereri, el receptionând de la utilizatori
anumite cereri de acces la baza de date, le interpreteaza, executa
operatiile respective şi returneaza rezultatul catre utilizatori
Este un sistem de programe general ce faciliteaza procesul definirii,
constructiei şi manipularii datelor pentru diverse aplicatii.
Arhitectura unui sistem de gestiune a bazei de date
BD
SGBD Aplicatie
Utilizator
Arhitectura unui sistem de gestiune a bazei de date
SGBD - Arhitectura
O structura de date asociata unei baze de date poate fi reprezentata
pe trei niveluri, având ca scop separarea aplicatiilor utilizatorului
de baza de date fizica. Schema bazei de date pe cele trei niveluri
poate fi vazuta astfel:
Schema
conceptuala
Schema interna
Date
memorate
Arhitectura unui sistem de gestiune a bazei de date
SGBD - Arhitectura in detaliu
Arhitectura unui sistem de gestiune a bazei de date
SGBD - Obiective
Abstractizarea si structurarea datelor
SGBD - Obiective
Abstractizarea si structurarea datelor
SGBD - Obiective
SGBD - Obiective
Redundanta si inconsistenta
SGBD - Obiective
SGBD - Obiective
Securitatea si confidentialitatea datelor
SGBD-ul trebuie sa gestioneze accesul la informatii si la
tipurile de operatii pe care fiecare utilizator le poate efectua
si sa valideze aceste operatii. De asemenea se realizeaza o
protejare prin parolare si criptare împotriva accesului
neautorizat.
Partajabilitatea datelor
Determina folosirea bazei simultan de mai multe aplicatii.
Asigura gestiunea tranzactiilor si a prelucrarilor
concurente. Tranzactia este o unitate de prelucrare care
transforma o instanta consistenta a bazei în alta instanta
consistenta. SGBD-ul trebuie sa paralelizeze sau sa detecteze
cazurile de interblocare (când o tranzactie asteapta date
detinute de alte tranzactii)
Arhitectura unui sistem de gestiune a bazei de date
SGBD - Obiective
Scheme si instantieri
Orice model de BD din SGBD contine structura si context
Structura este schema BD specificata in timpul proiectarii si
cuprinde conventii si metareguli pe baza carora se construiesc
diagramele structurii. Elementele diagramelor se numesc
constructori de schema.
Diagrama contine nume de relatii (student) si elemente de date
(COD_STUD-constructor de schema) dar nu si tipul constructorilor
sau restrictii de genu: “Studentul X din anul I sectia Info
frecventeaza cursul Y”
Arhitectura unui sistem de gestiune a bazei de date
SGBD - Interfete
SGBD - Interfete
SGBD - Interfete
SGBD - Interfete
SGBD - Interfete
SGBD - Limbaje
Curs III
Curs IV
Modelul entitate-relaţie
Caracteristici:
Structura relationala a datelor.
Operatorii modelului relational.
Restrictiile de integritate ale modelului relational.
Modelul entitate-relatie.
Normalizarea bazelor de date relationale
Studenti Entitate
Nume
Atribute Prenume
Sectie
An
Modelul entitate-relatie.
Normalizarea bazelor de date relationale
Structura relationala a datelor
Schema relatiei
Consta in numele relatiei, urmat de lista atributelor,
pentru fiecare atribut precizandu-se domeniul asociat.
Intensia unei relatii este schema relatiei, o expresie a
proprietatilor comune si invariante ale tuplurilor care
compun relatia.
Extensia unei relatii reprezinta multimea tuplurilor
care compun la un moment dat relatia, multime care
este variabilia in timp.
Relatii virtuale - un filtru asupra tabelului initial care
contine numai informatia necesara unei anumite
abordari, unei anumite aplicatii.
Modelul entitate-relatie.
Normalizarea bazelor de date relationale
Relatii virtuale
Se concretizeaza prin tabelul view si sunt definite prin
intermediul unor expresii relationale;
SELECT *
FROM salariat, departament;
Modelul entitate-relatie.
Normalizarea bazelor de date relationale
SELECT cod_salariat
FROM atasat_la a
WHERE nr_proiect IN
(SELECT nr_proiect
FROM proiect
WHERE buget =100.000)
GROUP BY cod_salariat
HAVING COUNT(nr_proiect) = (SELECT COUNT (*)
FROM proiect
WHERE buget =100.000);
Modelul entitate-relatie.
Normalizarea bazelor de date relationale
Curs V
Curs VI
CREATE TABLE
Cea mai simpla forma a cererii SQL de creare a unei
noi tabele are următoarea sintaxa:
CREATE TABLE [schema.]nume_tabela (nume_coloana_1
tip_coloana_1 [DEFAULT expresie_1], nume_coloana_2
tip_coloana_2 [DEFAULT expresie_2],
...
nume_coloana_n tip_coloana_n [DEFAULT expresie_n]);
unde:
nume_tabela = numele tabelei care se creează;
nume_coloana_1,..., nume_coloana_n = numele coloanelor;
tip_coloana_1,..., tip_coloana_n = tipurile de date pentru
coloanele respective, cu specificarea, daca este cazul, a
dimensiunii maxime sau preciziei;
DEFAULT expresie_i - clauza optionala =specifica o valoare
implicita care este introdusa automat în cazul în care la
adaugarea unei noi linii nu se specifica nici-o valoare
Baze de date. Cursul 6
CREATE TABLE
schema = numele bazei de date.
Condiționări in utilizarea comenzii CREATE TABLE:
Utilizatorul are drepturile (privilegiile) necesare pentru a
crea tabele.
Exista spatiu de stocare pentru noua tabela.
Numele tabelei si al coloanelor respecta restricțiile uzuale
ale limbajului SQL (maxim de caractere, începe cu o litera,
conține litere, cifre si caracterele _, $, #, este cuvânt
rezervat). Sunt permise si alte caractere daca numele este
inclus între ghilimele.
Nu exista deja un alt obiect (tabel) cu același nume în
aceeași schema (pentru același utilizator).
Literele mici si cele mari sunt considerate egale în numele
de tabele si coloane (o tabela de studenti este aceeasi daca la
creare se foloseste oricare din numele STUD, Stud sau
StuD).
Baze de date. Cursul 6
Observatii:
Numarul matricol si anul de studii a fost definit de tipul
intreg format din 4 cifre;
Medie_anterioara este definite tot de tipul Number dar are
pozitie pentru zecimale, media va avea 4 cifre dintre care 2
intregi si 2 zecimale;
CNP si Grupa sunt de tipul caracter formate din numar fix
de caractere, 13 sau 1;
Nume, sectie si localitate sunt de tipul caracter, cu numar
variabil de caractere, unde s-a specificat si numarul maxim
pe care il poate avea fiecare, 10, 30, respective 20.
data nasterii are tipul specific datelor calendaristice;
Pentru campurile An_studii si Localitate s-a specificat si o
valoare care sa se complecteze automat, “1” pentru
studentii din anul I si “Resita” pentru studentii care
locuiesc in Resita, pentru celelalte inregistrari urmand a se
adauga valorile de catre utilizator
Baze de date. Cursul 6
Exemplul 2:
Crearea unei tabele în care se stocheaza date
despre evenimente: momentul de început, durata si o
descriere a acestora.
Observatii:
Descrierea coloanelor nu este prezenta în cerere:
Numele coloanelor tabelei create precum si tipul
acestora este identic cu al celor din rezultatul cererii
SELECT;
Noua tabela nu mosteneste nici una dintre
constrângerile de integritate ale tabelei/tabelelor din
care provine rezultatul.
Baze de date. Cursul 6
CONSTRANGERI
TIPURI DE CONSTRANGERI
NOT NULL: valorile nu pot fi nule
Acest tip de constrângere se aplica unei coloane a noii tabele
si specifica faptul ca aceasta nu poate contine valori nule. El
poate fi definit doar la nivel de coloana si are urmatoarea
sintaxa:
coloana [CONSTRAINT nume_constr] NOT NULL
Exemplu:
CREATE TABLE Specializare (CodSpec NUMBER(2), Nume
VARCHAR(10) CONSTRAINT NUMENENUL NOT NULL,
Domeniu VARCHAR(15) NOT NULL);
PRIMARY KEY: defineste cheia primara a unei tabele
Sintaxa la nivel de coloana: coloana [CONSTRAINT
nume_constrangere]
Sintaxa la nivel de tabela: [,CONSTRAINT
nume_constrangere] PRIMARY KEY(lista_coloane)
Baze de date. Cursul 6
TIPURI DE CONSTRANGERI
PRIMARY KEY: exemplu
la nivel de coloana:
CREATE TABLE Specializare(CodSpec NUMBER(2)
CONSTRAINT SPEC_PK PRIMARY KEY, Nume
VARCHAR(10), Domeniu VARCHAR(15));
Si la nivel de tabela:
CREATE TABLE Specializare(CodSpec NUMBER(2), Nume
VARCHAR(10), Domeniu VARCHAR(15), CONSTRAINT
SPEC_PK PRIMARY KEY(CODS));
TIPURI DE CONSTRANGERI
UNIQUE: definește o alta cheie a tabelei
Sintaxa la nivel de coloana:
coloana [CONSTRAINT nume_constrangere] UNIQUE
Sintaxa la nivel de tabela:
[,CONSTRAINT nume_constrangere] UNIQUE(lista_coloane)
Daca în tabela de Specializare nu pot exista niciodata
doua specializari cu acelasi nume, se adauga o constrângere de tip
UNIQUE:
CREATE TABLE Specializare(CodSpec NUMBER(2)
CONSTRAINT SPEC_PK PRIMARY KEY, Nume VARCHAR(10)
CONSTRAINT NUMES_UNIC UNIQUE, Domeniu
VARCHAR(15));
Aceeasi constrangere, la nivel de tabela:
CREATE TABLE Specializare(CodSpec NUMBER(2)
CONSTRAINT SPEC_PK PRIMARY KEY, Nume VARCHAR (10),
Domeniu VARCHAR(15), CONSTRAINT NUMES_UNIC
UNIQUE(Nume));
Baze de date. Cursul 6
TIPURI DE CONSTRANGERI
FOREIGN KEY: defineste o cheie straina (externa)
Valorile unei coloane/unor coloane sunt fortate sa fie doar
dintre cele ale cheii unei tabele (cheie primara sau
UNIQUE).
Coloanele constrânse în acest fel formeaza o cheie straina
sau cheie externa iar constrângerea mai este denumita si
de integritate referentiala.
La nivel de coloana:
coloana [CONSTRAINT nume_constrangere] REFERENCES
tabela(coloana) [ON DELETE CASCADE | ON DELETE SET
NULL]
La nivel de tabela:
[,CONSTRAINT nume_constrangere] FOREIGN KEY
(lista_coloane) REFERENCES tabela(lista_coloane) [ON
DELETE CASCADE | ON DELETE SET NULL]
Baze de date. Cursul 6
TIPURI DE CONSTRANGERI
FOREIGN KEY: CLAUZA ON DELETE
În cazul în care se doreste ca o linie dintr-o tabela
continând o valoare de cheie referita într-o alta tabela (sau
în aceeasi tabela) sa poata fi stearsa fara a se obtine un
mesaj de eroare, la definirea constrângerii se poate specifica
modul în care se trateaza aceasta stergere din perspectiva
tabelei care
refera valoarea:
Daca se doreste ca la stergerea liniei continând o valoare
de cheie sa fie sterse suplimentar si toate liniile care refera
aceasta valoare, se specifica ON DELETE CASCADE
Daca se doreste ca liniile care refera valoarea cheii
respective sa nu fie sterse, se specifica ON DELETE SET
NULL care are urmatorul efect: în toate liniile care refera
acea valoare ea este înlocuita cu valori nule.
Baze de date. Cursul 6
TIPURI DE CONSTRANGERI
CHECK: introduce o conditie (expresie logica).
Prin acest tip de constrângeri valorile aflate pe o
linie a tabelei sunt fortate sa verifice o conditie (expresie
logica). Aceasta poate contine toate elementele prezentate
anterior pentru conditii, inclusiv apeluri de functii, cu
câteva exceptii:
apelurile unor functii ca SYSDATE, USER, UID
referinta la pseudocoloanele NEXTVAL, CURRVAL
(specifice secventelor), LEVEL si ROWNUM)
subcereri.
O aceeasi coloana poate participa la mai multe
constrângeri de acest tip, având fiecare o alta conditie
asociata. Conditia se evalueaza doar la nivelul liniei
respective, fara a se putea lua în considerare valori aflate
pe alte linii ale tabelei.
Baze de date. Cursul 6
TIPURI DE CONSTRANGERI
CHECK: introduce o conditie (expresie logica).
La nivel de coloana:
coloana [CONSTRAINT nume_constrangere] CHECK
(expresie_logica)
La nivel de tabela:
[,CONSTRAINT nume_constrangere] CHECK
(expresie_logica)
Baze de date
Curs VII
Comanda SELECT
Este o comanda pentru interogarea uneia sau mai
multor tabele dintr-o baza de date si are sintaxa generala:
SELECT [DISTINCT] lista_de_expresii
FROM nume_tabela
WHERE conditie_linie
- - clauza opțională
ORDER BY criterii_sortare_rezultat;
- - clauza optionala
Execuția comenzii are ca efect următoarele:
Se parcurg rând pe rând liniile tabelei specificate pe clauza
FROM;
Din fiecare linie conținând date, pentru care condiția aflata
pe clauza WHERE este adevărată, va rezulta o linie în
răspunsul cererii. În cazul în care WHERE lipsește, toate
liniile tabelei FROM vor avea o linie corespondenta în
rezultatul cererii;
Baze de date. Cursul 7
STUD
Baze de date. Cursul 7
SPEC
BURSA
Baze de date. Cursul 7
Forme de utilizare a comenzii SELECT:
Nume de coloane sau “*” :
o SELECT NUME, DOMENIU FROM SPEC;
o SELECT * FROM STUD;
Constante:
o SELECT 'Specializarea ', NUME FROM SPEC
Expresii aritmetice:
o SELECT TIP, SUMA, (SUMA+100)*1.5 FROM BURSA;
Expresii concatenate:
o SELECT 'Specializarea '|| NUME || ' are codul ', CODS FROM
SPEC;
Alias de coloana:
o Nu poate fi mai lung de 30 de caractere.
o Începe cu o litera, nu poate conține decât litere, cifre, _, # si $
sau este pus intre ghilimele (tot max. 30 caractere intre
ghilimele).
o Între ghilimele literele mici sunt considerate diferite de
literele mari.
Baze de date. Cursul 7
Alias de coloana:
o Nu poate fi folosit decât în cererea curenta.
o Sistemul nu stochează în baza de date sau altundeva aceste
nume alternative.
o Nu poate fi folosit în alte clauze ale unei cereri, doar in
SELECT si ORDER BY.
Exemplu:
SELECT TIP AS "Tip bursa", ' are valoarea ' || SUMA || '.Lei' AS
Descriere FROM BURSA;
Baze de date. Cursul 7
DISTINCT
Elimina liniile duplicat din rezultat:
SELECT CODS FROM STUD;
SELECT DISTINCT CODS FROM STUD;
SELECT DISTINCT CODS, AN FROM STUD;
CLAUZA WHERE
Sintaxa: WHERE expresie_logica
Exemplu:
SELECT NUME, GRUPA, CODS FROM STUD WHERE AN = 4;
Operatori de comparatie: “=“, “>”, “>=“, “<“, “<=“, “<>” (sau “!=“,
“^=“);
Conditii compuse AND, OR, NOT:
Exemplu:
AN=2 AND PUNCTAJ>500 OR CODS=11
AN=2 AND (PUNCTAJ>500 OR CODS=11)
OBS: Atentie la utilizarea parantezelor!!!
Baze de date. Cursul 7
CLAUZA WHERE - Operatorul BETWEEN:
Sintaxa: expresie BETWEEN valoare_minima AND
valoare_maxima
Exemple:
SELECT NUME, AN, PUNCTAJ FROM STUD WHERE
PUNCTAJ BETWEEN 2000 AND 4000;
SELECT NUME, LOC, DATAN FROM STUD WHERE LOC
BETWEEN 'A' AND 'L' AND DATAN BETWEEN '1-JAN-82'
AND '31-DEC- 82';
Alte exemple:
SELECT NUME, PUNCTAJ, CODS FROM STUD WHERE
PUNCTAJ + 10 IN (CODS*30+70, CODS*200+700);
SELECT NUME, LOC, DATAN FROM STUD WHERE LOC
IN ('BUCURESTI', 'PLOIESTI') OR DATAN IN ('02-SEP-85',
'19-APR-84', '29- AUG-84');
Baze de date. Cursul 7
Exemple:
SELECT NUME, LOC FROM STUD WHERE LOC IS NULL;
SELECT NUME, LOC FROM STUD WHERE LOC IS NOT
NULL;
Baze de date. Cursul 7
CLAUZA ORDER BY:
Sintaxa: ORDER BY criteriu1 [DESC] [,criteriu2 [DESC]...]
Cuvântul cheie optional DESC (descendent) specifica inversarea
ordinii de sortare implicite (ascendent, crescatoare) pentru criteriul
respectiv, astfel încât sortarea se face descendent (descrescator).
Efectul produs:
În cazul în care ORDER BY contine mai multe criterii de sortare,
ele nu sunt echivalente ci se iau în considerare în ordinea
specificata:
Se sorteaza rezultatul dupa primul criteriu
Pentru valori egale pentru primul criteriu se ia în considerare al
doilea criteriu, pentru valori egale pentru primele doua criterii se ia
în considerare al treilea criteriu, s.a.m.d.
ORDER BY – coloane:
SELECT NUME, DOMENIU, CODS FROM SPEC ORDER BY
NUME;
SELECT NUME, AN, GRUPA, DATAN, CODS FROM STUD
ORDER BY AN DESC, NUME
Baze de date. Cursul 7
CLAUZA ORDER BY:
ORDER BY – alias de coloana:
SELECT NUME, PUNCTAJ, (PUNCTAJ+100)*1.5 PMARIT FROM
STUD WHERE CODS=11
ORDER BY – expresii (coloane si aliasuri):
SELECT NUME, PUNCTAJ, (PUNCTAJ+100)*1.5 PMARIT FROM
STUD WHERE CODS=11 ORDER BY (PUNCTAJ+100)*1.5 ;
SELECT NUME, PUNCTAJ, (PUNCTAJ+100)*1.5 PMARIT FROM
STUD WHERE CODS=11 ORDER BY PUNCTAJ-PMARIT;
ORDER BY – coloane care nu apar in rezultat:
SELECT NUME, AN, GRUPA FROM STUD WHERE AN=2 ORDER
BY LOC DESC, (PUNCTAJ/10);
SELECT MATR, NUME, AN FROM STUD ORDER BY 3 DESC, 2;
SELECT MATR, NUME, AN FROM STUD ORDER BY 3 DESC,
NUME;
OBS: Numarul de coloana nu se poate da printr-o expresie!!!:
SELECT MATR, NUME, AN FROM STUD ORDER BY 2+1 DESC,
NUME;
Baze de date. Cursul 7
CEREREA DE ECHIJOIN:
SELECT MATR, STUD.NUME, STUD.CODS, SPEC.NUME
FROM STUD, SPEC WHERE STUD.CODS = SPEC.CODS
CEREREA DE NON-ECHIJOIN:
SELECT NUME, AN, TIP, SUMA FROM STUD, BURSA
WHERE PUNCTAJ BETWEEN PMIN AND PMAX
FUNCTII STATISTICE:
MIN si MAX – valoare minima si maxima
SUM si AVG – suma si media aritmetica
COUNT – numarare
STDDEV si VARIANCE – deviatia standard si varianta
Baze de date. Cursul 7
Curs VIII
STUD
Baze de date. Cursul 7
SPEC
BURSA
Baze de date. Cursul 8
VEDERI
Asigurarea corectitudinii datelor: prin faptul ca un
utilizator nu are acces la date pe care uzual nu le foloseste
este împiedicata coruperea accidentala a celorlalte date din
cauza necunoasterii semnificatiei lor.
SINTAXA
Sintaxa cererii de creare a unei vederi este urmatoarea:
VEDERI
Semnificatia elementelor prezente într-o astfel de
cerere este urmatoarea:
nume_vedere - specifica numele asociat vederii respective.
Respecta aceleasi conditii ca în cazul numelor de tabele.
subcerere - cererea SQL de tip SELECT asociata vederii;
Elementele optionale au urmatoarea semnificatie:
lista_de_coloane - specifica numele coloanelor din vedere.
Acestea trebuie sa respecte restrictiile uzuale pentru nume
de coloane descrise în capitolele precedente (30 de caractere,
etc.). În lipsa acestei optiuni coloanele vederii au aceleasi
nume cu ale rezultatului cererii SQL asociate. În cazul în
care rezultatul cererii asociate vederii are nume de coloane
care nu respecta restrictiile privind astfel de nume este
obligatorie fie folosirea listei_de_coloane fie modificarea
cererii prin adaugarea unor aliasuri de coloana
corespunzatoare.
Baze de date. Cursul 8
VEDERI
OR REPLACE - în cazul în care exista deja o vedere cu acel
nume, ea este înlocuita. Este modul usual prin care se
modifica structura si continutul unei vederi. În lipsa acestei
optiuni sistemul semnaleaza în astfel de situatii o eroare.
FORCE | NOFORCE (valoare implicita NOFORCE) – la
crearea unei vederi sistemul verifica existent tabelelor
folosite în definitia acesteia si semnaleaza erori în cazul
detectarii unor absente. În cazul folosirii optiunii FORCE
aceasta verificare nu mai duce la eroare si vederea este
stocata în baza de date. Vederea nu poate însa fi folosita
pâna când discrepanta dintre definitia sa si structura bazei
de date nu este înlaturata.
WITH READ ONLY - nu sunt permise modificari ale
datelor prin intermediul vederii. De asemenea se poate
asocia un nume pentru aceasta constrângere.
Baze de date. Cursul 8
VEDERI
WITH CHECK OPTION - ca si în capitolul precedent,
aceasta optiune împiedica efectuarea de modificari ale
continutului bazei de date daca liniile inserate/actualizate
nu sunt regasite prin cererea asociata vederii. Aceasta
optiune este din categoria constrângerilor de integritate si
se poate asocia un nume cu CONSTRAINT nume.
Asocierea de nume pentru ultimele doua optiuni permite
activarea si dezactivarea lor.
EXEMPLE:
CREATE OR REPLACE VIEW STUD_AN1 AS
SELECT * FROM STUD WHERE AN = 1
WITH CHECK OPTION;
Baze de date. Cursul 8
VEDERI
EXEMPLE:
CREATE OR REPLACE VIEW LISTA_AN1
(MATRICOLA, NUMELE, ANUL, NRPUNCTE) AS
SELECT MATR, NUME, AN, PUNCTAJ
FROM STUD_AN1
WHERE CODS = 21
WITH READ ONLY;
OBSERVATII
O vedere se poate folosi pentru definirea altor vederi
(LISTA_AN1 e definita pe baza STUD_AN1).
Prin vederea STUD_AN1 nu se pot insera decât studenti de
anul 1 si nu se poate modifica valoarea anului de studiu din
1 în alta valoare, nula sau nenula (constrângerea WITH
CHECK OPTION).
Baze de date. Cursul 8
VEDERI
OBSERVATII
Prin vederea LISTA_AN1 se pot efectua doar regasiri de
date (constrângerea WITH READ ONLY).
Numele coloanelor din vederea LISTA_AN1 este altul decât
cel din tabela STUD si vederea STUD_AN1 ca urmare a
folosirii unei liste de nume în cererea de creare.
Se pot defini vederi având asociate cereri SQL oricât de
complicate. Un exemplu de vedere având la baza joinul
celor trei tabele STUD, SPEC si BURSA este urmatorul:
CREATE OR REPLACE VIEW LISTA_BURSA AS
SELECT MATR, ST.NUME NUMESTUD, AN, PUNCTAJ AS
PCT, SP.NUME NUMESPEC, SUMA
FROM STUD ST, SPEC SP, BURSA
WHERE ST.CODS = SP.CODS AND
PUNCTAJ BETWEEN PMIN AND PMAX
ORDER BY SP.NUME, PUNCTAJ DESC;
Baze de date. Cursul 8
VEDERI - STERGERE
Stergerea unei vederi se face cu cererea DROP VIEW.
Sintaxa acesteia este:
DROP VIEW nume_vedere
Exemplu: stergerea vederilor STUD_AN1 si LISTA_A1 se
face cu cererile:
DROP VIEW STUD_AN1;
DROP VIEW LISTA_AN1;
Fiind o comanda DDL, stergerea unei vederi nu poate fi
revocata cu ROLLBACK.
Stergere linii prin vederi - Cererea DELETE poate avea la
baza o vedere daca aceasta verifica urmatoarele restrictii:
Are la baza o singura tabela
Nu contine functii de grup
Nu contine clauza GROUP BY
Nu contine clauza DISTINCT
Nu contine functia ROWNUM
Baze de date. Cursul 8
VEDERI - STERGERE
Urmatoarele vederi nu pot fi folosite pentru stergere
deoarece încalca una sau mai multe din restrictiile
anterioare:
Exemplul 1: Vedere care contine DISTINCT, grupare si functii
de grup:
CREATE OR REPLACE VIEW NU_STERGE AS
SELECT DISTINCT MAX(PUNCTAJ) MAXIM
FROM STUD
GROUP BY CODS;
Exemplul 2: Vedere care contine ROWNUM si join:
CREATE OR REPLACE VIEW NU_STERGE AS
SELECT ROWNUM NRCRT, ST.NUME NUMESTUD,
SP.NUME NUMESPEC
FROM STUD ST, SPEC SP
WHERE ST.CODS = SP.CODS;
Baze de date. Cursul 8
SECVENTE
În multe aplicatii este nevoie de generarea unor
secvente de numere care sa fie folosite în comenzi de tip
INSERT sau UPDATE pentru valorile cheilor primare ale
înregistrarilor inserate sau modificate.
Solutia calcularii unei valori maxime si a incrementarii
ei nu este corecta în contextul unei utilizari concurente a
datelor.
O cerere precum cea de mai jos nu garanteaza obtinerea
de valori unice pentru numerele matricole din înregistrarile
inserate în tabela STUD, deoarece ea poate fi executata
simultan, returnând aceeasi valoare:
SELECT MAX(MATR) + 1
FROM STUD;
Solutia care poate fi folosita este aceea a definirii unor
obiecte numite secvente care pot fi apelate în cereri SQL si care
nu returneaza niciodata aceeasi valoare.
Baze de date. Cursul 8
SECVENTE
O secventa nu este asociata unei tabele ci poate fi
folosita pentru a genera valori care se utilizeaza oriunde este
necesar.
SINTAXA
CREATE SEQUENCE nume_secventa
[INCREMENT BY pas]
[START WITH valoare_initiala]
[MAXVALUE valoare_maxima | NOMAXVALUE]
[MINVALUE valoare_minima | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE numar_valori | NOCACHE];
nume_secventa: numele obiectului de tip secventa.
pas: fiecare valoare generata se obtine din precedenta prin
adaugarea acestui pas. Implicit pasul are valoarea 1. În cazul
în care valoarea sa este negativa secventa este
descrescatoare
Baze de date. Cursul 8
SECVENTE
valoare_initiala: prima valoare generata de secventa.
valoare_maxima: în cazul specificarii unei astfel de valori,
secventa nu poate genera valori mai mari decât aceasta.
Implicit nu exista o limitare superioara a valorilor generate
(NOMAXVALUE).
valoare_minima: în cazul secventelor descrescatoare
secventa nu poate genera valori mai mici decât aceasta.
Implicit nu exista o limitare inferioara a valorilor generate
(NOMINVALUE).
CYCLE: în cazul atingerii valorii maxime sau minime,
secventa reporneste de la valoarea initiala. Implicit
secventele se creaza cu NOCYCLE (fara ciclare).
CACHE numar_valori: implicit sistemul genereaza si tine în
memorie urmatoarele 20 de valori din secventa. În cazul în
care se doreste ca numarul de valori din memorie sa fie altul
foloseste aceasta optiune.
Baze de date. Cursul 8
SECVENTE-creare
EXEMPLU - Pentru a genera noi numere matricole care sa
porneasca de la valoarea 5000, pasul de incrementare sa fie 2
iar valoarea maxima sa fie 9998 se creaza secventa
MATRICOLA cu cererea:
CREATE SEQUENCE MATRICOLA
INCREMENT BY 2
START WITH 5000
MAXVALUE 9998;
SINONIME
Obiectelor din baza de date li se pot asocia nume alternative -
sinonime.
Crearea sinonimelor are ca obiect simplificarea operarii cu
obiectele respective, putând asigura:
Nume alternative mai sugestive pentru obiecte care la
creare au primit o denumire criptica.
Nume alternative mai scurte pentru obiecte care la creare
au primit o denumire lunga.
Nume alternative mai scurte pentru obiectele create de
alti utilizatori (pentru a fi accesate acestea trebuie
prefixate cu numele utilizatorului care le detine).
SINTAXA
CREATE [PUBLIC] SYNONYM sinonim FOR obiect;
Optiunea PUBLIC specifica faptul ca sinonimul este accesibil si
celorlalti utilizatori ai sistemului.
Baze de date. Cursul 8
SINONIME
EXEMPLU
CREATE PUBLIC SYNONYM ST FOR STUD;
Dupa crearea acestui sinonim, ST poate apare în cereri în
locul lui STUD, dar nu si împreuna cu acesta.
De exemplu, cererea de mai jos va semnala o eroare deoarece
în contextul clauzei FROM continute, pentru coloanele din
STUD se poate folosi pentru prefixare fie STUD fie A:
SELECT A.NUME, B.NUME
FROM STUD A, SPEC B
WHERE ST.CODS = B.CODS;
În schimb cererea urmatoare va returna numele studentilor si
numele specializarilor acestora:
SELECT ST.NUME, SPEC.NUME
FROM ST, SPEC
WHERE ST.CODS = SPEC.CODS;
Baze de date. Cursul 8
SINONIME - STERGERE
Stergerea unui sinonim se face prin cererea:
DROP [PUBLIC] SYNONYM nume_sinonim;
PUBLIC se foloseste pentru stergerea sinonimelor create
cu aceasta optiune. Fiind o comanda DDL, stergerea unui
sinonim nu poate fi revocata cu ROLLBACK.
Baze de date
Curs IX
distribuite
Descompunere
Cerere in algebra
relationala pe
relatii distribuite
Localizare
date
Cerere pe
fragmente
Optimizare
globala
Cerere pe fragmente
optimizata cu operatii
de comunicare
Optimizare
locala
Cerere locale
optimizate
Baze de date. Cursul 9
Baze de date distribuite
Proiectarea distributiei datelor
Exista mai multe abordari in proiectarea unei baze de
date distribuite:
Strategia top-down este folosita mai ales in cazul
proiectării unor noi aplicații in care gradul de autonomie
este scazut si omogenitatea este ridicata. Aceasta
strategie este adecvata de exemplu in proiectarea
sistemelor distribuite omogene.
Strategia bottom-up este folosita in cazurile in care gradul
de autonomie este mediu sau ridicat si in cazul
neomogenitatii sistemelor locale, prezente in diversele
noduri. Un exemplu cazul in care bazele de date din
nodurile locale exista deja, urmând a se face o integrare a
lor intr-o baza de date distribuita, rămânând însă posibila
si folosirea fiecărei BD locale independent, ca o baza de
date centralizata. Strategia se folosește si in cazul
sistemelor federate, multibaza de date si heterogene noi.
Baze de date. Cursul 9
Baze de date distribuite
Proiectarea distributiei datelor
Strategia mixta – in practica pentru proiectarea bazelor
de date distribuite se aplica o combinatie a celor doua
strategii anterior prezentate. Insasi prezenta feedback-
ului din strategia top-down este o abatere de la fluxul “de
sus in jos” . De asemenea, in cazul strategiei bottom-up,
bazele de date locale pot fi proiectate top-down, inainte de
integrarea lor bottom-up.
Replicarea datelor
Costul de operare in cazul unei BDD are doua componente
principale:
costul de stocare a informatiei (numarul de accese la disc).
costul de comunicatie, pentru cereri si actualizari ale
bazei de date.
Baze de date. Cursul 9
Baze de date distribuite
Replicarea datelor
O redundanta mare duce la scaderea costului de
comunicatie pentru cereri, deoarece probabilitatea
existentei unei copii in nodul local este mare, in schimb
creste costul de comunicatie pentru actualizarea tuturor
copiilor.
Redundanta scazuta are un efect contrar: scade costul de
comunicatie pentru actualizari dar creste cel pentru cereri.