Documente Academic
Documente Profesional
Documente Cultură
ELECTRICE
BAZE DE DATE
Electromecanic - Frecven redus - Suport teoretic -
2006 - 2007
BIBLIOGRAFIE
1. SISTEME DE GESTIUNE A BAZELOR DE DATE Velicanu Manole i colectiv Ed. Petrion,
Bucureti, 1998 BAZE DE DATE INTELIGENTE N MANAGEMENTUL FIRMEI Andone Ioan, ugui
Alexandru Ed. Dosoftei, Iai, 1997 SQL FR PROFESOR N 14 ZILE Perkins Jeff,
Morgan Bryan Ed. TEORA, Bucureti, 1998 BAZE DE DATE Burdescu Dumitru Dan, Ionescu
Augustin Iulian, Stnescu Liana Editura Universitaria, Craiova, 2004 BASES DE
DONNES Jean Fruitet Cours, Universit de Marne - La - Valle, 1997 PROGRAMARE N
ACCESS 97. VBA PENTRU NCEPTORI Smith Robert, Sussman David Ed. TEORA, Bucureti,
1997 TOTUL DESPRE MICROSOFT ACCESS 97 Viescas L. John Ed. TEORA, Bucureti, 1999
BAZE DE DATE. FUNDAMENTE TEORETICE I PRACTICE Grupul BDASEIG Ed. Infomega,
Bucureti, 2002 SQL n lecii de 10 minute Ben Forta Ed. Teora, Bucureti, 2004
2.
3.
4.
5.
6.
7.
8.
9.
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
segmentele de dreapt care fac legtura ntre entiti i relaii. Alte dou
elemente grafice folosite sunt elipsa - prin care se reprezint un atribut i, din
nou, segmentul de dreapt, care poate face legtura i ntre atribute i entiti.
Exemplul 1 - S se deseneze diagrama ER a unei baze de date ce conine prinii
unei persoane. Att prinii ct i copii pot fi grupai ntr-o clas de entiti
"PERSOAN". O entitate de acest tip poate fi descris prin atributele "NUME",
"PRENUME", "SEX" i "CNP". O relaie ca cele din exemplul acesta se spune c este
recursiv.
Fig. 5 Diagrama ER pentru exemplul 1 Obs. Atributul "CNP" este cheie primar.
Pentru a se deosebi de celelalte atribute, n diagrama ER atributul se subliniaz
(fig. 4). Exemplul 2 - S se deseneze diagrama ER corespunztoare unei baze de date
care conine reete culinare.
Fig. 6 Diagrama ER pentru exemplul 2 Pentru baza de date s-au imaginat dou
entiti - "REET" i "INGREDIENTE", legtura dintre cele dou entiti fcundu-
se, efectiv, prin atributele "COD INGREDIENTE", atribut care pentru entitatea
"INGREDIENTE" este cheie primar. Obs. Structurile bazelor de date pentru care s-au
trasat diagramele entitate-relaie nu sunt optimizate. mbunatatirea acestra va fi
discutata ulterior. Exemplul 3 - S se deseneze diagrama ER a unei baze de date ce
conine studenii unei faculti. Pentru aceast diagram s-au imaginat trei
entiti legate funcional ntre ele: entitatea "STUDENT", entitatea "DISCIPLIN"
i entitatea "NOT".
4
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
Datorit structurii acestei baze de date apar ca evidente cel puin urmtoarele
anomalii: 1. Redundan perechea de date (Ionescu, Bogdan) apare de 3 ori,
(Popa, Virgil) de dou ori etc. 2. Anomalii la tergere dac se terge
nregistrarea cu Nr_crt = 6 se pierd toate informaiile legate de studentul Florea
Ion. 3. Anomalii la inserare perechea (Ionescu, Bogdan, Baze de date, 9)
este inserat de dou ori. 4. Anomalii la modificare dac prenumele studentului
Popa Virgil este greit, modificarea lui presupune modificarea unui numr de
nregistrri egal cu notele studentului, ceea ce, ntre altele, poate conduce la
noi erori de introducere a datelor. Pentru eliminarea acestor anomalii prin
normalizare, E.F. Codd a fundamentat o teorie matematic, care const n esen n
construirea unor tabele standard numite forme normale. Pn n prezent s-au
dezvoltat mai multe astfel de forme, n practic fiind folosite numai o parte din
acestea. O structur a bazei de date discutate care elimin o parte din aceste
anomalii sparge tabelul anterior n dou tabele, conform urmtoarei reprezentri
i a diagramei entitate-relaie asociate.
6
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
7
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
Ex. 2. Structura unei baze de date care gestioneaz crile dintr-o bibliotec
public
8
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
Ex. 3. Structura unei baze de date care gestioneaz articolele publicate de un grup
de cercettori
9
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
10
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
Se observ pentru cea de-a doua nregistrare nu s-au mai specificat cmpurile
tabelului. Acest lucru este posibil atunci cnd pentru o nregistrare se introdul
toate cmpurile (adic nu exist cmpuri vide nedeclarate) i cnd ordinea datelor
inserate n tabel este aceeai cu cea din definirea tabelului prin intermediul
instruciunii CREATE TABLE. Instruciunea SELECT SELECT este utilizat pentru
extragerea datelor din tabele. n cazul n care se dorete vizualizarea tuturor
notelor studenilor din tabelul TNoteStudeni, se poate utiliza comanda: 11
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
SELECT Nume, Prenume, Disciplina, Nota FROM TNoteStudenti; Din acest exemplu se
poate observa uor sintaxa instruciunii: SELECT cmp_1, , cmp_n FROM nume_tabel;
Obs. Pentru simplitate, toate instruciunile au fost prezentate pn n acest
moment n forma cea mai simpl. Dezvoltarea lor se va face progresiv, n discuiile
ulterioare. Dac se dorete selecia tuturor nregistrrilor dintr-un tabel,
instruciunea SELECT se poate utiliza sub forma: SELECT * FROM TNoteStudenti; care
este echivalent cu SELECT Nr_crt, Nr_matricol, Nume, Prenume, Disciplina, Nota
FROM TNoteStudenti; Instruciunea UPDATE UPDATE permite modificarea nregistrrilor
din baza de date. Sintaxa instruciunii este: UPDATE nume_tabel SET
valoare_cmp_de_modificat = valoare WHERE criteriu_selectie_inregistrare; De
exemplu, dac se dorete modificarea notei studentului Ionescu din 9 n 10, codul
SQL corespunztor este: UPDATE TNoteStudenti SET Nota = 10 WHERE Nume = Ionescu;
Dei modificarea este corect n tabelul dat exemplu (care conine DOAR cele dou
nregistrri), n realitate execuia acestei comenzi poate fi dezastruas, datorit
criteriului de selecie. Astfel, dup execuie toi studenii cu numele Ionescu
vor avea nota 10 la toate disciplinele. Comanda corect este: UPDATE TNoteStudenti
SET Nota = 10 WHERE Nume=Ionescu AND Prenume=Bogdan AND Disciplina=Baze de
date; sau, mai simplu: UPDATE TNoteStudenti SET Nota = 10 WHERE Nr_matricol = 112
AND Disciplina=Baze de date;
12
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
Denumire CHAR(100) NOT NULL, PRIMARY KEY (Cod_disciplina)); CREATE TABLE Tnote
( Nr_matricol INTEGER NOT NULL, Cod_disciplina INTEGER NOT NULL, Nota INTEGER NOT
NULL, FOREIGN KEY (Nr_matricol) REFERENCES TStudent, FOREIGN KEY (Cod_disciplina)
REFERENCES Tdiscipline); Schimbarea structurii tabelelor Comanda ALTER TABLE
permite modificarea structurii tabelelor. Astfel, cu ajutorul clauzei ADD pot fi
adugate noi coloane. Modificarea unor coloane deja existente se poate face cu
ajutorul clauzei MODIFY. Mai mult, tergerea coloanelor poate fi fcut prin
intermediul clauzei DROP. De exemplu, dac se dorete inserarea unui cmp care s
conin numrul de credite obinute pentru un examen promovat, trebuie modificat
structura tabelului TDiscipline. Inserarea se face cu comanda ALTER TABLE astfel:
ALTER TABLE TDiscipline ADD (Nr_credite INTEGER); Dac se dorete tergerea acestei
coloane, se folosete aceeai comand combinat cu DROP: ALTER TABLE TDiscipline
DROP (Nr_credite); Modificarea cu ALTER TABLE se poate face doar la nivelul
strilor UNIQUE i NOT NULL. Pentru schimbri semnificative trebuie utilizat mai
nti clauza DROP (pentru tergerea coloanei de modificat), apoi clauza ADD (pentru
inserarea coloanei la care sunt luate n considerare toate modificrile).
Modificarea strilor UNIQUE i / sau NOT NULL este indicat s se fac atunci cnd
tabelul este gol, altfel pot aprea erori (o valoare NULL dintr-o nregistrare, de
exemplu, poate intra n conflict cu declararea coloanei ca fiind nevid prin NOT
NULL). tergerea tabelelor Pentru tergerea unui tabel dintr-o baz de date se
folosete comanda DROP TABLE a crui sintax este: DROP TABLE nume_tabel; n cazul
unor SGBD-uri, tabelul trebuie s fie gol n momentul apelrii comenzii DROP TABLE.
Acest caracteristic rezult din motive de securitate, pentru prevenirea tergerii
accidentale a tabelelor. Directiva DEFAULT Pentru una sau pentru mai multe coloane
pot fi definite valori implicite. De obicei, o nregistrare pentru care nu s-a
specificat un cmp, conine n momentul salvrii n baza de date valoarea NULL.
Directiva DEFAULT suprascrie aceast valoare cu valoarea declarat prin intermediul
ei. 14
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
SELECT AVG(Nota) FROM Tnote WHERE Nr_matricol = 123; Dac se dorete determinarea
numrului de studeni care au promovat examenul la disciplina al crui cod este 15,
de exemplu, interogarea devine: SELECT COUNT(*) FROM Tnote WHERE Cod_disciplina =
15 AND Nota >= 5; Pentru obinerea tuturor studenilor n ordine alfabetic comanda
SELECT se utilizeaz mpreun cu clauza ORDER BY, astfel: SELECT * FROM TStudent
ORDER BY Nume, Prenume; GROUP BY se folosete pentru obinerea unor grupuri n
cadrul interogrilor obinute cu ajutorul instruciunii SELECT. De exemplu, cu
linia de cod: SELECT Nr_matricol, COUNT(*) AS Examene_promovate FROM Tnote WHERE
Nota >= 5 GROUP BY Nr_matricol; are ca efect afiarea numrului de examene
promovate de studenii din baza de date, identificai n acest caz prin numrul
matricol, dup care se face i gruparea. Directiva AS aloc numele formal
Examene_promovate sumei examenelor la care un student a obinut cel puin nota 5.
HAVING permite specificarea unei condiii de filtrare a datelor. Dac se dorete
selecia doar a studenilor care au cel puin 5 examene promovate, codul SQL
aferent este: SELECT Nr_matricol, COUNT(*) AS Examene_promovate FROM Tnote WHERE
Nota >= 5 GROUP BY Nr_matricol HAVING COUNT(*) >= 5; Clauza DISTINCT este foarte
util atunci cnd este necesar aflarea tuturor valorilor unui atribut, nefiind
important numrul de apariii. De exemplu, dac se dorete afiarea tuturor
numerelor matricole alocate, se poate utiliza comanda SELECT astfel: SELECT
DISTINCT Nr_matricol FROM Tstudent; n condiiile de selecie din exemplele
anterioare au intervenit civa operatori de comparare. Mulimea acestor operatori
conine urmtoarele simboluri: - = - egal; - > - mai mare; - < - mai mic; - >= -
mai mare sau egal dect; - <= - mai mic sau egal cu; - <> - diferit. 16
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
Pentru verificarea ncadrrii valorii unui atribut ntr-un anumit interval poate fi
folosit operatorul BETWEEN. Dac se dorete selecia tuturor studenilor cu mediile
cuprinse ntre 7,50 i 9,50 dintr-o vedere ce conine mediile acestora comenzile
SQL necesare sunt: Creare vedere: CREATE VIEW VMedii_studenti AS SELECT
Nr_matricol, AVG(Nota) AS Medie FROM Tnote GROUP BY Nr_matricol; Interogare (cu
utilizarea operatorului BETWEEN): SELECT * FROM VMedii_studenti WHERE Medie BETWEEN
7.50 AND 9.50; n cazul n care se dorete obinerea numelui studenilor cu mediile
cuprinse ntre cele dou limite (nu numai numrul matricol), n corpul comenzii
select se vor specifica att numele vederii ct i numele tabelului care conine
numele i prenumele studenilor: SELECT VMedii_studenti.Nr_matricol, TStudent.Nume,
TSudent.Prenume, VMedii_studenti.Medie FROM VMedii_studenti, TStudent WHERE
VMedii_studenti.Medie BETWEEN 7.50 AND 9.50, TStudent.Nr_matricol =
VMedii_studenti.Nr_matricol; sau SELECT VMS.Nr_matricol, TS.Nume, TS.Prenume,
VMS.Medie FROM VMedii_studenti VMS, Tstudent TS WHERE VMS.Medie BETWEEN 7.50 AND
9.50, TS.Nr_matricol = VMS.Nr_matricol; n cel de-al doilea caz, pentru fiecare
dintre tabelele implicate n interogare s-a asociat cte un nume formal: VMS pentru
tabelul virtual Vmedii_studeni i TS pentru tabelul TStudent. Acest lucru
determin simplificarea modului de scriere a unei interogrii. Pentru recapitularea
i fixarea elementelor de limbaj SQL prezentate pn acum, se va construi n cele
ce urmeaz o baz de date care gestioneaz articolele dintr-un raion de echipamente
electrocasnice. Crearea tabelelor care conin chei primare i nu conin chei
strine: CREATE TABLE TProducatori ( Cod_producator INTEGER NOT NULL UNIQUE,
Denumire CHAR(200) NOT NULL, PRIMARY KEY (Cod_producator)); CREATE TABLE TFirme
( Cod_firma INTEGER NOT NULL UNIQUE, Nume CHAR(100) NOT NULL, Adresa CHAR(200) NOT
NULL, PRIMARY KEY (Cod_firma));
17
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
5. Aplicaii specifice bazelor de date Limbajul SQL este practic integrat n toate
SGBD-urile actuale i nu numai. Instruciunile SQL pot fi utilizate fr probleme
i n limbaje de nivel nalt precum Pascal (Delphi), Basic (Visual Basic), C
(Visual C) etc. n ideea simplificrii modulului de utilizare a scripturilor SQL s-
a dezvoltat o gama larg de aplicaii, multe dintre ele fiind distribuite gratuit.
n capitolul de fa se vor preznta doar cteva exemple de aplicaii de acest gen,
tocmai pentru a se pune n eviden utilitatea acestora. O etapa important n
dezvoltarea unei baze de date o constituie stabilirea structurii acesteia,
structur care poate fi descrisa complet prin intermediul diagramei entitate-
relaie. Odat trasat aceast diagram, dac se utilizeaz aplicii specifice,
poate fi generat codul SQL responsabil de crearea tabelelor i a legturilor dintre
acestea. Ex. 1 - Pentru acest prim exemplu se va considera DER trasat pentru baza
de date care gestioneaz articolele publicate de un grup de cercettori.
19
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
20
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
21
Baze de date - Constantinescu Ctlin; 2006 - 2007, sem. 1
22