Documente Academic
Documente Profesional
Documente Cultură
Cursul #1
Definire SGBD Termenul de baz de date (database) reprezint o colecie de informaii corelate, relaiile logice dintre aceste informaii i tehnicile de prelucrare corespunztoare (cutare, sortare, tergere, inserare, modificare, etc.). Sistemul de gestiune a bazelor de date S.G.B.D. (Database Management System - DBMS) reprezint sistemul de programe care permite accesarea bazei de date de ctre utilizatori , accesare ce permite realizarea de operaii asupra bazei de date.
ntreg, cu semn pe 8 octei (-9223372036854775808 -> 9223372036854775807) logic (True sau False) stocare binar (utilizat inclusiv pentru stocarea imaginilor n diverse formate sau a metafiierelor) ir cu maxim n caractere ir cu exact n caractere calendar date (year, month, day) real, precizie 15 dubl IPv4 sau IPv6 adres gazd (host address) ntreg, cu semn pe 4 octei(-2147483648 -> +2147483647) adres MAC currency (moned) numeric cu precizie prestabilit real, precizie simpl intreg pe 2 octei (-32768 -> +32767 ) autoincrementare, intreg 4 octei autoincrementare, intreg 8 octei ir de caractere cu lungime variabil timp (ore,minute,secunde, ms) dat i timp mpreun Date format XML
pag. 1/16
Cursul #1
Sintaxa (simplificat):
Not: parantezele drepte din expresie indic o expresie opional iar acoladele o secven ce se repet i este separat prin virgul. De asemenea simbolul | semnific sau. Iar column_constraint [ ... ] este :
[ CONSTRAINT constraint_name ]{NOT NULL|NULL|UNIQUE index_parameters| PRIMARY KEY index_parameters | CHECK ( expression )}
unde: PRIMARY KEY reprezint cheia primar de ordonare(cmpul sau cmpurile dup care se face ordonarea) NOT NULL semnific faptul c nu se accept valori vide (fr date) pentru cmpul respectiv CHECK permite verificri suplimentare (de exemplu: temp_max<50) Not: Cmpul sau cmpurile care constituie cheia primar nu pot avea valori NULL
1-1-4 Stergere tabele Ex: DROP vremea Sintaxa: 1-1-5 Creare indecsi
Tabelele pot fi indexate n scopul obinerii unor date ordonate dup unul sau mai multe criterii (de obicei se ordoneaz dup unul sau mai multe cmpuri). Indexarea NU schimb ordinea fizic a nregistrrilor. Prin definirea indecsilor se creaz automat tabele de coresponden dintre ordinea fizic a nregistrrilor i cea logic (corespunztoare ordonrii). simpli, ex: CREATE INDEX indexptrVremea ON vremea(data)
Ordonarea dat de indeci poate fi cresctoare (ASC implicit) sau descresctoare (DESC) n exemplul dat, cmpul data va fi ordonat cresctor iar cmpul orasul va fi ordonat descresctor
CREATE INDEX indexptrVremea4 ON vremea(data, oras DESC)
ASC / DESC semnific tipul de ordonare ascendent/descendent ; NULL FIRST valorile NULL (vide) sunt puse la nceput iar (implicit pentru ASC); NULL LAST valorile NULL (vide) sunt puse la sfrit (implicit pentru DESC).
Cursul #1
Ex:
Sintaxa (simplificat):
Ex. expresie LIKE Rezultat 'abcd' LIKE 'abcd' true 'abcd' LIKE 'a%' true 'abcd' LIKE '_b__' true 'abcd' LIKE 'abc' false 'abcd' LIKE '_b%' true 'abcd' LIKE '__b%' false
Nota:n loc de 'abcd' va fi denum irea cm pului
1-2 INTEROGAREA BAZEI DE DATE (cazul unui singur tabel) 1-2-1 PRELUAREA DATELOR DIN TABEL Preluarea datelor din tabel (interogarea bazei de date) se realizeaz prin utilizarea instruciunii SELECT. Not: Nu conteaz dac codul SQL este scris pe un singur rand sau pe mai multe rnuri i nici dac ntre cuvinte exist un spaiu sau mai multe. Se recomand scriere astfel nct codul s se citeasc ct mai uor. Ex: preia ntregul tabel vremea SELECT * FROM vremea ( * specific preluarea tuturor cmpurilor )
preia numai ce ndeplinete condiiilor din cadrul WHERE (condiii la nivel de nregistrare) ordoneaz date descresctor (ex:data) i cresctor (ex; oras)
SELECT oras, data, precipitatii FROM vremea WHERE((temp_min>=0)AND(temp_max<10))OR(precipitatii>0) ORDER BY data DESC, oras
grupeaz datele dup anumite cmpuri n vederea realizrii anumitor operaii (ex. calc. mediei temp. min.) SELECT oras, avg(temp_min) FROM vremea aplic condiii la nivel de grup
Liviu erbnescu 2008-2009
GROUP BY oras
SELECT oras, avg(temp_min) FROM vremea GROUP BY oras HAVING avg(temp_min)>5 pag. 3/16
Not: Toate cmpurile din cadrul SELECT trebuie s se regseasc n GROUP BY, altfel nu este posibil gruparea acestora efectueaz operaii ntre cmpuri i afieaz rezultatul ntr-un cmp nou
SELECT oras, temp_min, temp_max, (temp_min+temp_max)/2.0 AS media FROM vremea
Sintaxa (simplificat):
SELECT [ ALL | DISTINCT ] * | expression [ AS output_name ] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ]] [ LIMIT { count | ALL } ]
Descriere
Media aritmetic a expresiei Numrul de nregistrri Numrul de nregistrri pentru care valoarea expresiei nu este nul Valoarea maxim pentru expresie Valoarea minimm pentru expresie Suma expresiei
Not: (espresie) poate fi un cmp sau rezultatul unor operaii aplicate mai multor cmpuri
pag. 4/16
Cursul #2
Cursul #2
n acest caz, tipul i ordinea valorilor introduse trebuie s corespund cu cea din CREATE TABLE Exemplul de mai sus se mai poate scrie: Ex:
INSERT INTO vremea(oras,temp_min,temp_max,precipitatii,data) VALUES (Bacau, -20, 42, 0.25, 30.12.2007);
n acest caz, tipul i ordinea valorilor introduse n vremea() trebuie s corespund cu cea din VALUES() Se pot aduga doar anumite cmpuri din tabel (se adaug obligatoriu cmpurile din cheia primar excepie fac cmpurile de tip autoincrementare ) Ex:
INSERT INTO vremea(oras,precipitatii,data) VALUES (Bacau, 0.25, 30.12.2007); INSERT INTO vremea(oras,precipitatii,data) VALUES (Bacau, NULL, 30.12.2007);
1-3-1 -3 Adugarea mai multor nregistrri, dintr-un alt tabel Presupunem c exist un alt tabel denumit vremea2 cu o structur asemntoare cu primul tabel (vreamea) Ex:
INSERT INTO vremea(oras,temp_min,temp_max,precipitatii,data) SELECT oras,temp_min,temp_max,precipitatii,data FROM vremea2 WHERE data > '20.11.2007';
n cazul n care cele dou tabele au aceeai ordine i aceleai tipuri de date se poate scrie Ex: sau Ex:
INSERT INTO vremea SELECT * FROM vremea2 WHERE data > '20.11.2007'; INSERT INTO vremea(oras,temp_min,temp_max,precipitatii,data) SELECT * FROM vremea2 WHERE data > '20.11.2007';
Sintaxa simplificat:
INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
pag. 5/16
Cursul #2 1-3-2 Copierea datelor n tabel utiliznd comada COPY (importul datelor) Se pot copia fiiere ntregi cu date ntr-un tabel. Aceste fiiere, de regul, sunt fiiere format CSV (commaseparated values ) - fiiere text avnd valorile separate prin virgul, iar valorile ce conin caracterul , sunt scrise ntre ghilimele. Ex:
COPY vremea FROM C:/test/tempvremea.csv WITH csv;
n acest exemplu tabelul vremea este populat cu datele din fiierul tempvremea.csv. Sintaxa simplificat:
COPY tablename [ ( column [, ...] ) ] FROM filename [[ WITH ] [ DELIMITER [ AS ] delimiter ] [ NULL [ AS ] null string ] [ CSV [ HEADER ] [ QUOTE [ AS ] quote ]
unde:
DELIMITER specific un alt delimitator ntre valorile din fiierul CSV (implicit fiind virgula) NULL specific sirul ce reprezint valoarea NULL (implicit nu se scrie nimic adic dup virgul urmeaz tot virgul) CSV specific faptul c este vorba de un fiier format CSV (pot exista transferuri i cu fiiere binare sau alte fiiere text aceste cazuri nu sunt tratate n prezentul curs) HEADER specific dac primul rnd din cadrul fiierului format CSV este reprezentat de numele coloanelor/ cmpurilor QUOTE specific caracterele ntre care sunt puse valorile ce conin i caracterul separator (implicit caracterul ).
De obicei, aceast comand este utilizat la preluarea iniial a datelor, date existente n alte baze de date sau n fiiere de tip XLS / text. Comanda COPY adaug noile date la cele vechi. De asemenea, n cursurile urmtoare se va detalia utilizarea comenzii COPY pentru exportul datelor n format CSV. 1-3-3 tergerea nregistrrilor dintr-un tabel Ex: Ex: unde
terge toate nregistrrile din tabelul vremea. terge toate nregistrrile anterioare datei specificate
Sintaxa simplificat:
ONLY este utilizat n cazul tabelelor ierarhizate pentru a nu terge i nregistrrile din tabelele copil ce depind de tabelul respectiv USING specific alte tabele utilizate n condiia WHERE
TABLE municipii (denumire_oras character varying(80) NOT NULL, populatie integer, suprafata numeric)
i tergem toate nregistrrile din vremea care apar i n tabelul municipii Ex:
DELETE FROM vremea USING municipii WHERE vremea.oras=municipii.denumire_oras
pag. 6/16
Cursul #2 1-3-4 Actualizarea datelor dintr-un tabel Comanda UPDATE actualizeaz valorile din tabelul dat, pentru nregistrrile rezultate n urma aplicrii condiiei din cadrul WHERE, cu valorile i pentru cmpurile explicitate n seciunea SET Ex:
UPDATE vremea SET temp_min = temp_min-1, temp_max = temp_min+20, precipitatii = 0 WHERE (oras = 'Iasi') AND (data > '1.07.2007') AND (data < '31.08.2007');
Sunt modificate doar valorile cmpurilor date de SET pentru nregistrrile date de WHERE Sintaxa simplificat: unde:
UPDATE [ ONLY ] table [ [ AS ] alias ] SET { column = { expression | DEFAULT } } [, ...] [ FROM fromlist ] [ WHERE condition ]
ONLY este utilizat n cazul tabelelor ierarhizate pentru a nu modifica i nregistrrile din tabelele copil ce depind de tabelul respectiv FROM specific alte tabele utilizate n condiia WHERE DEFAULT preia valorile implicite sau NULL dac nu sunt specificate
UPDATE vremea SET temp_min = temp_min-1, temp_max = temp_min+20, precipitatii = DEFAULT FROM municipii WHERE(vremea.oras = municipii.denumire_oras )AND(data>'1.07.2007')AND(data<'31.08.2007');
Ex:
a) Uniune
Implicit (DISTINCT), prin uniunea celor dou interogri, nregistrrile multiple, identice, vor aprea o singur dat. Prin utilizarea comenzii ALL acestea nu vor mai fi eliminate. Ex:
SELECT oras FROM vremea UNION SELECT denumire_oras FROM municipii interogare#1 UNION interogare#2 ... UNION interogare#n
Putem avea :
b) Intersecie
Prin utilizarea comenzii INTERSECT vor fi selectate doar nregistrrile comune din cadrul interogrilor
Ex:
SELECT oras FROM vremea INTERSECT SELECT denumire_oras FROM municipii
c) Diferen
Prin utilizarea comenzii EXCEPT vor fi selectate doar nregistrrile care se regsesc n rezultatul primei interogri dar care nu se regsec i n rezultatul celei de a doua interogri. Ex:
SELECT oras FROM vremea EXCEPT SELECT denumire_oras FROM municipii
n toate cele trei cazuri cmpurile din cadrul seleciilor trebuie s fie de acelasi timp, altfel fiind necesar convertirea acestora la tipul respectiv prin utilizarea operatorului CAST.
pag. 7/16
Cursul #2
1-5 Operatorul CAST Este utilizat pentru convertirea tipului datelor Ex: Ex: Ex: Ex:
SELECT 3.21 AS "numeric" UNION SELECT 1; SELECT 1 AS "numeric" UNION SELECT CAST('3.14' AS numeric); SELECT 'Bacau' AS "varchar(20)" UNION SELECT CAST('3.14' AS varchar(20)); SELECT oras, cast(temp_min as varchar(10)) AS temp_min_ch FROM vremea
Sintaxa simplificat:
Ex:
SELECT (temp_min+temp_max)/2.0 as temp_medie, CASE WHEN ((temp_min+temp_max)/2.0 )<=0 THEN 'GER' WHEN (((temp_min+temp_max)/2.0 )>0)AND (((temp_min+temp_max)/2.0 )<15) THEN 'FRIG' WHEN ((temp_min+temp_max)/2.0 )>30 THEN 'CALD' ELSE 'NORMAL' END AS evaluare FROM vremea
pag. 8/16
Cursul #3
Cursul #3
1-7 Tipuri de asocieri ntre nregistrrile unor tabele ntr-o baz de date relaional tabelele sunt corelate, pentru ca datele memorate n tabele diferite s poat fi asociate corect atunci cnd din baza de date se solicit anumite informaii. Se pot realiza asocieri datele din tabele dup criterii logice i de nrudire a datelor. Asocierile sunt posibile n faza de definire a structurii tabelelor. Cmpurile comune prin care se face corelarea sunt date de cheia primar pentru un tabel i respectiv chei externe pentru tabelele asociate. Orice tabel cuprine unul sau mai multe cmpuri, care intr n componena unei chei primare, utilizat pentru diferenierea unei nregistrri de celelalte. Asocierea a dou tabele (tabel printe i tabel copil) se face printr-un cmp special cu o trimitere la cheia primar a tabelului subordonat (tabelul copil).
O baz de date poate fi format din mai multe tabele avnd diferite legturi ntre acestea. Tipurile de legturi dintre dou tabele pot fi: asocierea( legtura ) de tip unu la unu (1:1) unei nregistrri dintr-un tabel i corespunde o singur nregistrare n cealalt tabel;
asocierea( legtura ) de tip unu la mai muli (1:M) unei nregistrri dintr-un tabel i corespund mai multe nregistrri n cealalt tabel; asocierea( legtura ) de tip muli la muli (M:N) mai multor nregistrri dintr-un tabel i corespund mai multe nregistrri n cealalt tabel.
Asocierea( legtura ) de tip unu la unu (1:1) nregistrrile din dou tabele se afl n asocierea unu la unu dac unei nregistrri dintr-un tabel i corespunde (sau nu) o singur nregistrare din cellalt tabel. Legatura dintre cele doua tabele se face pe baza cheilor primare. Acest tip de asociere este utilizat mai rar. Exist, totui, cazuri n care este necesar i util stabilirea unei astfel de relaii. Ex:
VREMEA oras temp_min temp_max precipitatii
1:1
Asocierea( legtura ) de tip unu la mai muli (1:N) Dou tabele A i B se afl n asociere 1:N dac unei nregistrri din tabelul A i corespund mai multe nregistrri n tabelul B. Cheia primara din tabelul parinte(A) se adaug n tabelul copil(B) sub forma de cheie extern. Ex:
JUDET nume suprafata populatie
1:N
pag. 9/16
Cursul #3
Cursul #3
Asocierea( legtura ) de tip muli la muli (M:N) mai multor nregistrri dintr-un tabel le corespund mai multe nregistrri n cealalt tabel. n vederea implementrii practice se adaug un tabel suplimentar care va contine cheile primare ale tabelelor initiale si campuri referitoare la asocierea dintre tabelele parinti. Cheia primar din tabela intermediar va fi o cheie compusa.
BIBLIOTECA cota titlu autor1 editura an_aparitie
M:N
Crearea cheilor primare i a cheilor externe Cheia primar din tabel impune unicitatea valorilor cmpurilor din cadrul cheii primare pentru fiecare nregistrare. Specificarea cheii primare se face cu modificatorul PRIMARY KEY. Cheia strin sau extern se declar prin modificatorul FOREIGN KEY. Ex:
CREATE TABLE municipii( denumire_oras varchar(80) PRIMARY KEY, suprafata numeric, populatie int ); CREATE TABLE vremea( oras varchar(80) REFERENCES municipii(denumire_oras), temp_min int, temp_max int, precipitatii real, data date );
CREATE TABLE vremea2( oras varchar(80) PRIMARY KEY REFERENCES municipii(denumire_oras), temp_min int,temp_max int,precipitatii real,data date);
sau
CREATE TABLE vremea2 ( oras character varying(80) NOT NULL, temp_min integer, temp_max integer, precipitatii real, data date, CONSTRAINT vremea2_pkey PRIMARY KEY (oras), CONSTRAINT vremea2_oras_fkey FOREIGN KEY (oras) REFERENCES municipii (denumire_oras) );
Att pentru PRIMARY KEY ct i pentru FOREIGN KEY putem avea unul sau mai multe cmpuri, separate prin virgul. Asigurarea integritii refereniale Una din problemele importante ale unei baze de date este asigurarea consistenei i corelrii datelor. Pentru aceasta putem impune respectarea unei restricii la adugarea sau eliminarea nregistrrilor n tabelele corelate. Aplicarea acestor restricii ne d posibilitatea s asigurm o proprietate important a bazelor de date relaionale numit integritate referenial. Aceste restricii se refer la tergerea datelor, la inserarea/adugarea datelor sau modificarea lor.
pag. 10/16
Cursul #3 Operaiile de tergere i inserare au n clauza WHERE i cmpurile ce constituie cheile primare. De asemenea operaia de adugare impune specificarea obligatorie a cmpurilor din cheia primar, acestea fiind diferite de NULL i fiind unice n cadrul tabelului. 1-8 INTEROGAREA MAI MULTOR TABELE Atunci cnd n clauza FROM a unei comenzi SELECT apar mai multe tabele se realizeaz produsul cartezian al acestora. De aceea numrul de linii rezultat crete considerabil, fiind necesar restricionarea acestora cu o clauza WHERE. Atunci cnd este necesar obinerea de informaii din mai multe tabele se utilizeaz clauza JOIN. n acest fel liniile dintr-un tabel pot fi puse n legtura cu cele din alt tabel conform valorilor comune ale unor coloane. Clauza JOIN Clauza JOIN este utilizat pentru preluarea informaiilor din dou sau mai multe tabele n condiiile existenei unor legturi logice ntre anumite cmpuri din cadrrul tabelelor. JOIN ntoarce nregistrrile ce respect condiiile impuse de JOIN ntre tabele. JOIN nu se refer la intersecii ci la produse carteziene. Diversele tipuri de JOIN reduc produsele punnd diverse condiii pe una sau mai multe dintre mulimi. Presupunem c un tabel T1 cu N nregistrri i un tabel T2 cu M nregistrri. CROSS JOIN T1 CROSS JOIN T2 ntoarce pentru fiecare nregistrare din T1 toate nregistrrile din T2. Tabelul rezultat va avea NxM nregistrri Sintaxa:
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join column list ) T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2
Clauzele INNER i OUTER sunt optionale. INNER este implicit, iar LEFT, RIGHT sau FULL implic OUTER. Clauza ON este asemntoare cu WHERE. Principalele forme ale clauzei JOIN:
INNER JOIN (jonciune intern de tip egalitate) - pentru fiecare rnd (nregistrare) R1 din tabelul T1, tabelul rezultat n urma aplicrii clauzei JOIN va avea o nregistrare din tabelul R2 care ndeplinete condiia de jonctiune cu R1.
SELECT v.oras,v.data FROM vremea v INNER JOIN municipii m ON v.oras=m.denumire_oras
Ex:
LEFT OUTER JOIN (jonciune extern la stnga) Pentru nceput se realizeaz o jonciune intern. Apoi, fiecare rnd din T1 (T1 stnga, T2 dreapta) care nu satisface jonciunea cu T2 este adugat avnd valori NULL pentru cmpurile corespondente din T2. Tabelul rezultat va avea, cel putin rndurile din tabelul T1.
SELECT v.oras,v.data FROM vremea v LEFT OUTER JOIN municipii m ON v.oras=m.denumire_oras Liviu erbnescu 2008-2009 pag. 11/16
Cursul #3
RIGHT OUTER JOIN (jonciune extern la stnga) Pentru nceput se realizeaz o jonciune intern. Apoi, fiecare rnd din T2 (T1 stnga, T2 dreapta) care nu satisface jonciunea cu T1 este adugat avnd valori NULL pentru cmpurile corespondente din T1. Tabelul rezultat va avea, cel putin rndurile din tabelul T2.
SELECT v.oras,v.data,m.populatie FROM vremea1 v RIGHT OUTER JOIN municipii m ON v.oras=m.denumire_oras
FULL OUTER JOIN (jonciune total) Pentru nceput se realizeaz o jonciune intern. Apoi, fiecare rnd din T2 (T1 stnga, T2 dreapta) care nu satisface jonciunea cu T1 este adugat avnd valori NULL pentru cmpurile corespondente din T1. Apoi, fiecare rnd din T2 (T1 stnga, T2 dreapta) care nu satisface jonciunea cu T1 este adugat avnd valori NULL pentru cmpurile corespondente din T1.
SELECT v.oras,v.data,m.populatie FROM vremea1 v FULL OUTER JOIN municipii m ON v.oras=m.denumire_oras
De asemenea, se pot lega mai multe clauze de tipul ON ntr-o instruciune de tipul JOIN, utiliznd, de exemplu, sintaxa:
SELECT cmpuri FROM tabel1 INNER JOIN tabel2 ((ON tabel1.cmp1 operator de compara ie tabel2.cmp1 AND ON tabel1.cmp2 operator de compara ie tabel2.cmp2) OR ON tabel1.cmp3 operator de compara ie tabel2.cmp3);
O operaie de tip LEFT JOIN sau RIGHT JOIN se poate imbrica ntr-o operaie de tipul INNER JOIN, dar o operaie de tipul INNER JOIN nu se poate imbrica ntr-o operaie de tipul LEFT JOIN sau RIGHT JOIN.
pag. 12/16
Cursul #4
Cursul #4
1-9 Motenirea Acest concept a aprut n standardul SQL99 .i este specific sistemelor de baze de date orientate obiect. Ex:
CREATE TABLE municipii_1 (judet character varying(100) NOT NULL, oras character varying(80) NOT NULL, populatie integer, suprafata numeric); CREATE TABLE capitale_1 (tara character varying(100) NOT NULL, oras character varying(80) NOT NULL, populatie integer, suprafata numeric);
Un tabel poate s moteneasc unul sau mai multe tabele. n cazul n care se face referire la un anumit tabel din cadrul motenirii se utilizeaz clauza ONLY Aceasta clauz poate fi utilizat n combinaie cu : SELECT, UPDATE sau DELETE. Comanda Comanda Comanda
SELECT * FROM municipii_2
va afia cmpurile: oras, populatie, suprafata, judet. De va afia cmpurile: oras, populatie, suprafata, tara. De
asemenea va afia numai rndurile adugate cu comanda INSERT n cadrul tabelului municipii_2.
SELECT * FROM capitale_2
asemenea va afia numai rndurile adugate cu comanda INSERT n cadrul tabelului capitale_2.
SELECT * FROM orase
toate rndurile adugate cu comanda INSERT, indiferent dac a fost realizat n cadrul tabelului capitale_2, municipii_2 sau a tabelului orase. De asemenea, comanda SELECT INSERT n cadrul tabelului orase.
* ONLY FROM orase
De exemplu, dac n tabelul orase sunt adugate 5 nregistrri, n tabelul municipii_2 sunt adugate 4 nregistrri, iar n tabelul capitale_2 sunt adugate 2 nregistrri tabelul orase va conine 11 nregistrri, tabelul municipii_2 va conine 4 nregistrri iar tabelul capitale_2 va conine 2 nregistrri, tergerea unei nregistrri din tabelele municipii_2 sau capitale_2 , fr utilizarea clauzei ONLY, va duce i la tergerea nregistrrilor respective din tabelul orase. tergerea unei nregistrri din tabelul orase, fr utilizarea clauzei ONLY, va duce i la tergerea nregistrrilor corespondente - dac exist - din tabelele municipii_2 sau capitale_2 . Aceste observaii sunt valabile i n cazul modificrilor (utilizarea comenzii UPDATE).
pag. 13/16
Cursul #4 1-10 SUBINTEROGRI Subinterogrile permit crearea unui tabel n cadrul unei interogri. Acestea sunt scrise ntre paranteze rotunde i au un ALIAS. Subinterogri scalare - Acestea sunt interogrile care ntorc un singur rnd i o singur coloan. Ele se scriu ntre paranteze rotunde. n cazul n care suinterogarea ntoarce mai multe nregistrri vom avea eroare. n cazul n care nu ntoarce nici o nregistrare valoarea rezultat a interogrii este considerat NULL. Ex:
SELECT oras,(SELECT avg(precipitatii) FROM vremea WHERE capitale_2.oras=vremea.oras) AS media FROM capitale_2;
EXISTS IN
EXISTS (subquery)
Intoarce true daca subinterogarea are ca rezultat cel puin o nregistrare, alfel ntoarce false.
expression IN (subquery)
constructorul de nregistrare (row constructor) Obs: Constructorul de nregistrare formeaz o nregistrare utliznd cuvntul ROW, de ex: Ex:
Verific dac expresia satisface condiia pentru fiecare nregistrare din subinterogare sau
Row constructor ALL (subquery)
Este utilizat pentru conversia tipurilor de date, n vederea evalurii unor expresii n care intr datele respective sau pentru adugarea acestora n tabele ce au un alt format de date. Ex:
SELECT oras, cast(temp_min as numeric),cast(precipitatii as integer) as PrecInt, cast(temp_max as varchar(15)) FROM vremea
Un caz aparte de cast este funcia to_date( test, text ) care realizeaz conversia din ir de caractere n .format de tip dat calendaristic. Ex:
INSERT INTO vremea(oras,data) VALUES('Titu', to_date('28.10.2008','dd.mm.yyyy'))
pag. 14/16
Cursul #5
Cursul #5
2.Arhitecturi SGBD
Clasificri SGBD Clasificare dupa modelul de date: Modelul de ierarhic de date - legturile dintre date sunt ordonate unic, accesul se face numai prin vrful ierarhiei, un subordonat nu poate avea dect un singur superior direct i nu se poate ajunge la el dect pe o singur cale; Modelul de date retea - datele sunt reprezentate ca ntr-o mulime de ierarhii, n care un membru al ei poate avea orici superiori, iar la un subordonat se poate ajunge pe mai multe ci; Modelul relational (aplicaii comerciale, volum de date mare si tipuri de date simple) - structura de baz a datelor este aceea de relaie tabel, limbajul SQL (Structured Query Language) este specializat n comenzi de manipulare la nivel de tabel; Modelul obiect-orientat (aplicaiilor tiintifice, multimedia)-Aceste modele sunt orientate pe reprezentarea semnificaiei datelor. Structura de baz folosit pentru reprezentarea datelor este cea de clas de obiecte definit prin abstractizare din entitatea fizic pe care o regsim n lumea real. Aici exist entiti simple i clase de entiti care se reprezint prin obiecte simple sau clase de obiecte, ordonate n ierarhii de clase i subclase. Acest tip de baz de date a aprut din necesitatea gestionrii obiectelor complexe: texte, grafice, hri, imagini, sunete (aplicaii multimedia) i a gestionrii obiectelor dinamice: programe, simulri Modelul obiect-relational Clasificare dupa numarul de utilizatori Sisteme mono-utilizator Sisteme multi-utilizator Clasificare dupa numarul de statii pe care este memorat baza de date: Baze de date centralizate ( toate datele (si SGBD) sunt memorate pe un singur host) Baze de date distribuite ( att datele ct i SGBD-ul sunt memorate pe mai multe host-uri, conectate printr-o retea de comunicaie) Arhitectura client-server: Server (back-end): SGBD-ul si baza de date Client (front-end): program (programe) de aplicatie Arhitectur local (fiiere comune mapate n interiorul reelei) pentru controlul accesului se folosesc fisiere system O baza de date trebuie s asigure: abstractizarea datelor (date unice), integrarea datelor (controlul corelaiei datelor), integritatea datelor (respectarea restriciile de integritate a datelor pe parcursul operaiilor SQL), securitatea datelor (controlul accesului la baza de date), partajarea datelor (datele pot fi accesate de mai muli utilizatori, eventual n acelai timp),
Un SGBD trebuie s asigure urmtoarele activiti: definirea i descrierea structurii bazei de date se realizeaz printr-un limbaj propriu, limbaj de definire a datelor (LDD); ncrcarea datelor n baza de date se realizeaz prin comenzi n limbaj propriu(limbaj de manipulare a datelor (LMD)); accesul la date se realizeaz prin comenzi specifice din limbajul de manipulare a datelor (SQL). Accesul la date se refer la operaiile de interogare i actualizare. Interogarea este complex i presupune vizualizarea, consultarea, editarea de situaii de ieire (rapoarte, liste, regsiri punctuale). Actualizarea presupune 3 operaiuni: adugare, modificare efectuate prin respectarea restriciilor de integritate ale BD i tergere; ntreinerea bazei de date se realizeaz prin utilitare proprii ale SGBD;
Liviu erbnescu 2008-2009 pag. 15/16
Cursul #5
securitatea datelor se refer la asigurarea confidenialitii datelor prin autorizarea i controlul accesului la date pe mai multe nivele, criptarea datelor.
Arhitectura PostgreSQL PostgreSQL utilizeaz un model client/server. O sesiune PostgreSQL const n mai multe procese: Un proces server, care gestioneaz fiierele bazei de date, accept conexiuni la bazele de date dinspre aplicaiile client, realizeaz actiunile cerute de client pe bazele de date. Serverul de base de date se numete postgres . Aplicaia client a utilizatorului care dorete sa execute operaii pe baza de date. Aplicaiile client pot fi foarte diverse: un client poate fi un utilitar linie de comand, o aplicaie grafic, un server web care acceseaz baza de date pentru a afia pagini de web sau un utilitar specializat de gestiune a bazelor de date. Unele aplicaii client sunt puse la dispoziie n distribuia PostgreSQL. Majoritatea sunt dezvoltate de utilizatori. Ca i n cazul altor aplicaii client/server, clientul si server-ul pot fi pe host-uri diferite. n acest caz ele comunic prin conexiuni TCP/IP. Serverul de PostgreSQL poate gestiona multiple conexiuni concurente de la clieni avnd chiar versiuni diferite pentru PostgreSQL. Pentru aceasta el pornete cte un nou proces pentru fiecare conexiune. Din acel punct, clientul si un proces al server-ului comunic far intervenia procesului iniial postgres. Astfel procesul principal al server-ului continu s atepte noi clieni. Modul de lucru al serverului PostgreSQL Postgresql foloseste un model client/server numit proces per-user. O sesiune Postgres consta din cooperarea urmatoarelor procese (programe): Un proces daemon de supervizare (postmaster), aplicatia frontend a userului (programul psql), si unul sau mai multe servere backend de baze de date (procesul postgres el insusi) Un singur proces postmaster conduce o colectie de baze de date pe o singura gazda. Aplicatiile frontend care doresc sa acceseze o baza de date printr-o instalare face apelul la librarie. Libraria trimite cererea userului prin retea la postmaster. Paii prin care trece o cerere SQL pentru a se obine un rezultat: 1.O conexiune dinspre o aplicaie la server-ul de PostgreSQL a fost stabilit. Clientul trimite o cerere ctre server i ateapt s primeasc rezultatele trimise de server (aplicatia frontend trimite o cerere la postmaster prin soket-ul de retea). Cnd o conexiune este stabilita, aceasta porneste un nou proces server backend si conecteaza procesul frontend la un nou server. Din acel punct, procesul frontend si serverul backend comunica fara interventia postmasterului. Cu toate ca, postmasterul merge intotdeauna, asteptand cereri, procesele frontend si backend vin si pleaca. Libraria libpq permite unui singur frontend sa faca multiple conexiuni la procesele backend. Aplicatia frontend este un singur fir de executie suportat prin intermediul libpq. postmasterul creaza un server backend (porneste un nou proces server backend si conecteaza procesul frontend la un nou server). 2.Parser-ul verific cererea trimis de aplicaie si corectitudinea sintaxei i creeaz un query tree. 3.Sistemul de rescriere preia query tree-ul creat de parser i caut eventualele reguli (depozitate n cataloagele sistemului) care trebuie aplicate query tree-ului. Acesta aplic transformarile descrise n regulile respective. 4.Planificatorul/Optimizatorul preia query tree-ul rescris si creeaz un plan de execuie al cererii care va fi de fapt intrarea pentru sistemul de execuie a comenzilor. 5.Server-ul execut recursiv plan tree-ul. Postmasterul si backendul ruleaza pe o aceeasi masina (serverul de date), in timp ce aplicatia frontend poate rula oriunde.
Liviu erbnescu 2008-2009 pag. 16/16