Documente Academic
Documente Profesional
Documente Cultură
(de ex., creăm tabele, definim și utilizăm datele într-un SGBD - MS Access)
Model fizic: administrare
(de ex., se implementează operații, prelucrări, modele de stocare pe disc, indecși, algoritmi etc.)
Tabelă (Relație): Colecție omogenă de date, compusă din coloane și linii de date.
Câmp (atribut) al unei tabele: caracteristică sau proprietate, considerată esențială pentru descrierea unui subiect abstract sau
concret din baza de date.
Valoare (realizare) a unui câmp: o dată concretă, atribuită unui câmp dintr-o tabelă.
Domeniu al unui câmp – o coloană de date: ansamblu de valori (realizări) atribuite unui câmp dintr-o tabelă.
Gradul (dimensiunea) unei tabele: numărul de câmpuri din structura unei tabele.
Înregistrare (tuplu) dintr-o tabelă – o linie de date a unei tabele: ansamblul format din câte o valoare (realizare) atribuită
fiecăruia dintre câmpurile care alcătuiesc structura unei tabele.
Cheia primară (principală) a unei tabele: un câmp, sau un ansamblu minimal de câmpuri, care identifică în mod unic o înregistrare
(un tuplu) dintr-o tabelă.
Cheia externă (secundară) a unei tabele: un câmp, sau un ansamblu minimal de câmpuri, cu rol de cheie primară într-o altă tabelă,
ce asigură legătura logică între tabelele implicate.
Restricție de integritate referențială: o condiție (logică) ce verifică dacă valorile unei chei externe se regăsesc în domeniul
cheii primare de proveniență.
Cheie candidat: ansamblul minimal de câmpuri care identifică în mod unic înregistrările dintr-o tabelă.
Dependența funcțională (DF) dintre două atribute ale unei tabele reprezintă relația (legătura) definită între acestea. De
exemplu, valoare unui atribut (sau grup de atribute) poate fi determinată prin (pornind de la) valoarea altui atribut (sau grup de
atribute).
O dependența funcțională (DF) se notează astfel:
X → Y,
adică atributul X determină funcțional atributul Y,
sau Y depinde funcțional de X.
O valoare a atributului X are cel mult o valoare corespondentă în domeniul atributului Y. Altfel spus, unei valori date a lui X îi corespunde
mereu aceeași valoare a lui Y. X se numește atribut determinant, iar Y - atribut determinat
- Exerciții -
Exercițiul I
Obiectiv de învățare:
Identificarea și exemplificarea conceptelor fundamentale din teoria bazelor de date – modelul relațional al datelor
Se dau tabelele:
Parcela TipSol TipSolPeFiecareParcela
CodPar DataAchiz SuprPar CodTipSol DenTipSol #CodPar #CodTipSol
111 12/08/2009 65 1000 cernoziom 111 1000
222 15/11/2000 20 2000 cenușiu 111 2000
3000 brun-roșcat 111 3000
4000 brun-cenușiu 222 1000
5000 turbă 222 4000
... ... ... ... ... ...
Exercițiul II
Obiectiv de învățare:
Identificarea și exprimarea unei dependențe funcționale, DF.
R
A B C D E
a1 b2 c2 d3 e2
a1 b2 c2 d1 e4
a2 b3 c2 d1 e5
a2 b4 c5 d1 e5
Vânzări
NrFV DataFV CodCl NrDocIncas DataDocIncas
17 4/01/2021 115599 2 12/02/2021
17 4/01/2021 115599 4 15/02/2021
18 4/01/2021 772266 5 15/02/2021
19 10/01/2021 772266 5 15/02/2021
Întrebări pregătitoare
I1. Câte documente de încasare au fost primite pentru fiecare factură?
I2. Câte facturi au fost încasate prin intermediul unui document de încasare?
Soluție:
Normalizarea este un proces de optimizare a structurii unei baze de date prin care se vizează minimizarea redundanței datelor și
eliminarea anomaliilor de adăugare, actualizare și ștergere a acestora.
2. Normalizarea
Formele normale FN1, FN2, FN3
Formele normale sunt proprietăți pe care schemele de relații (structurile tabelelor unei baze de date, BD) trebuie să le verifice
pentru a evita anomaliile de actualizare. Orice formă normală se aplică unei scheme de relații (unei tabele).
Concret, în etapa de normalizare FN1, un economist implicat într-un proiect de normalizare a unei bazei de date identifică și
rezolvă următoarele cazuri posibile:
a. Cazuri de sinonimie: două (sau mai multe) atribute cu denumiri diferite, dar cu aceeași semnificație.
Soluție FN1: se păstrează doar un atribut, sinonimele sale se elimină din DD.
b. Atribut deductibil: valorile sale pot fi deduse din cele ale altor atribute, prezente în DD.
Soluție FN1: se elimină din DD atributul deductibil.
e. Atribute repetitive: atribut ce a fost gândit pentru a colecta mai multe valori într-un singur șir, fiind astfel ne-atomic.
Soluție FN1: se regândesc structurile de date așa încât să nu mai existe niciun atribut repetitiv.
f. Atribute decompozabile: atribute devenite decompozabile în momentul în care devin necesare întocmirii de diverse rapoarte
pe baza unor criterii aflate în interiorul valorilor acestora.
Soluție FN1: criteriul se scoate în afară, definindu-se astfel încă un atribut distinct de cel care îl includea inițial.
Concret, în etapa de normalizare FN2, un economist implicat într-un proiect de normalizare a unei bazei de date parcurge
următoarele etape:
1) datele reținute în DDFN1 sunt repartizate în tabele distincte (de exemplu, Client, Factura, Parcela, Ferma etc.);
2) se identifică atributul sau atributele ce ar putea îndeplini rolul de cheie primară în fiecare tabelă;
3) valorificând informațiile oferite de regulile de gestiune elaborate, se analizează dacă toate dependențele funcționale (DF)
dintre atributele non-cheie și cheia primară a fiecărei tabele sunt complete;
4) se completează structurile tabelelor cu atributele rezultate din regulile de gestiune ca necesare pentru asigurarea coerenței
datelor și a legăturilor logice dintre tabele.
a) se creează o tabelă nouă (numită aici Tnouă), cu B - cheie primară și C - atribut non-cheie;
Tnouă ( B, C)
b) în tabela T, A rămâne cheie primară; atributul C, în raport cu care s-a înregistrat dependența funcțională tranzitivă, se elimină
din tabela T; pe baza cheii primare B a tabelei notate Tnouă, se va crea, în tabela T, cheia externă #B (sau B ).
T ( A, …, #B,… )
- Exerciții -
Exn1) Determinarea, prin normalizare, a structurii unei BD pentru gestiunea reparațiilor utilajelor
agricole ale unui complex cerealier
O echipă mixtă, de economiști și specialiști IT, a elaborat următoarele:
pg. 9 Baze de Date Liana ANICA-POPA
A. Dicționar de date (DD)
RG1. Un bon de reparații este întocmit de un salariat; un salariat poate întocmi mai multe bonuri de reparații.
RG2. Un bon de reparații este întocmit pentru un utilaj.
RG3. Pe un bon de reparație pot fi specificate mai multe piese, cu cantitatea consumată și costul său unitar; o piesă poate
figura, într-o cantitate și cu un cost unitar specificate, pe mai multe bonuri de reparație.
RG4. O piesă aparține unei singure categorii.
Cerință:
Să se proiecteze, prin metoda normalizării, structura unei baze de date dedicate.
Soluție:
Forma normală 1 (FN1)
Definiție FN1:
O tabelă (sau relație) verifică FN1 dacă și numai dacă
atributele sale au valori unice și nenule (sau atomice).
Atribute eliminate:
◘ IdPiesă, sinonim cu CodPiesă
◘ Valoare – atribut calculat Valoare = Sum ([Cantitate] * [CostUnitar])
Aplicând forma normală 2, atributele din dicționarul de date adus în FN1 (DDFN1) se grupează, mai întâi, în structurile tabelelor
noii baze de date.
Se creează tabelele, se stabilesc, în fiecare tabelă, cheile primare și atributele non-cheie, sunt definite cheile externe, apărute
prin valorificarea RG1, RG2, RG4, precum și noua tabelă - creată pe baza RG3.
Astfel, structura bazei de date în forma normală 2 (FN2) pentru gestiunea reparațiilor utilajelor agricole ale unui complex
cerealier este următoarea:
BDFN2
Utilaj (CodUtilajReparat, DenumireUtilajReparat)
În tabela Salariat (MarcaSalariat, NumeSalariat, Adresa, Localitate, Județ, CodPostal) a fost identificată următoarea dependență
funcțională tranzitivă:
MarcaSalariat CodPostal
CodPostal Localitate, de unde rezultă:
------------------------------------
MarcaSalariat Localitate
Relația MarcaSalariat Localitate se numește dependență funcțională tranzitivă (DFT) între atributele MarcaSalariat și
Localitate.
Conform definiției FN3, această DFT trebuie să fie eliminată din tabela Salariat și, implicit, din baza de date.
Soluția de aducere a structurii tabelei Salariat în FN3 – forma normală 3 – este următoarea:
c) se creează o tabelă nouă, Domiciliu, cu CodPostal - cheie primară și Localitate - atribut non-cheie;
Domiciliu (CodPostal, Localitate)
d) în tabela Salariat, MarcaSalariat rămâne cheie primară; atributul Localitate, în raport cu care s-a înregistrat dependența
funcțională tranzitivă, se elimină din tabela Salariat; pe baza cheii primare CodPostal a tabelei notate Domiciliu, se va crea,
în tabela Salariat, cheia externă #CodPostal (sau CodPostal ).
Așadar, structura bazei de date dedicate gestiunii reparațiilor utilajelor agricole ale unui complex cerealier, ce verifică
forma normală 3 (FN3), este:
BDFN3
Utilaj (CodUtilajReparat, DenumireUtilajReparat)
Bon_PieseConsumate (#NumărBonReparație, #CodPiesă, Cantitate, CostUnitar) (tabelă nouă, creată pe baza RG3)
Exn2) Se dă tabela:
Varianta a : Varianta b :
FoaieMatricola FoaieMatricola
Exn4) Se dă tabela:
Exn5) În care dintre formele normale de mai jos este soluționat cazul dependențelor funcționale tranzitive dintre atribute?
a) FN2
b) FN5
c) FN3
d) În niciuna.
SQL
- Sinteză teoretică -
SQL - Sintaxa generală a unei fraze de acțiune, pentru ștergere a unui set de înregistrări dintr-o tabelă
DELETE <Lista câmpuri / expresii> / * / /
FROM <nume_tabelă>
[ WHERE <condiţie1> AND/OR <condiţie2>…]
SQL - Sintaxa generală a unei fraze de acțiune, pentru adăugare a unei înregistrări într-o tabelă
INSERT INTO <nume_tabelă> (<câmp1>, <câmp2> ...)
VALUES (<valoare1>, <valoare2>...)
SQL - Sintaxa generală a unei fraze de acțiune, pentru crearea unei tabele noi
SELECT listă_campuri INTO nume_tabela_noua
FROM sursa_date
[WHERE <condiţie_1> [AND/OR <conditie_2> …]
SQL - Sintaxa generală a unei fraze de acțiune, pentru transferul (adăugarea) de înregistrări (de tip
Append)
INSERT INTO <tabelă destinație> (<listă_câmpuri destinație>)
SELECT listă_câmpuri_surse
FROM sursa_date
pg. 15 Baze de Date Liana ANICA-POPA
[WHERE <condiţie_1> [AND/OR <conditie_2> …]
Câteva remarci:
UNION nu permite duplicate, pe când UNION ALL da.
Toate interogările dintr-o operație UNION trebuie să solicite același număr de câmpuri; cu toate acestea, câmpurile pot să nu aibă aceeași
dimensiune sau același tip de date.
Utilizați aliasuri numai în prima instrucțiune SELECT deoarece acestea sunt ignorate în oricare alta. În clauza ORDER BY, referiți câmpurile
așa cum au fost denumite în prima instrucțiune SELECT.
Puteți utiliza o clauză GROUP BY sau HAVING în fiecare instrucțiune de interogare pentru a grupa datele returnate.
Puteți utiliza DOAR o clauză ORDER BY la sfârșitul ultimei interogări pentru a afișa datele într-o ordine specificată.
Fraze SQL
qEx3) Lista denumirilor și caracteristicilor merceologice ale materialelor ale căror denumiri încep cu litera „u”
SELECT denm, carm
FROM Material
WHERE denm like "u*"
qEx8) Lista materialelor de achiziționat, inclusiv a celor ce nu figurează pe facturi (neaprovizinate încă):
SELECT *
FROM Linie_fa RIGHT JOIN Material ON Linie_fa.codm=Material.codm;
qEx11) Afișați cantitatea totală din fiecare material facturat acum doi ani
SELECT Linie_fa.codm, SUM(Linie_fa.cantaa) AS CantitateTotala
FROM Factura INNER JOIN Linie_fa ON Factura.nrfa = Linie_fa.nrfa
WHERE YEAR(Factura.datafa) = YEAR(Date()) -2
GROUP BY Linie_fa.codm
qEx12) Afișați valoarea totală achitată din fiecare factură scadentă în ultimele 60 zile
SELECT Factura.nrfa, SUM(PlatiFacturi.SumaAchitFa) AS TotalAchitatFact
FROM Factura INNER JOIN PlatiFacturi ON Factura.nrfa = PlatiFacturi.nrfa
WHERE Factura.datascadfa > Date() - 60
GROUP BY Factura.nrfa
qEx13) Realizați un top 3 facturi cu cele mai mari valori, scadente în următoarele 45 zile
SELECT TOP 3 Factura.nrfa, ROUND(SUM(Linie_fa.cantaa*Linie_fa.pretua),2) AS ValoareTotala
FROM Factura INNER JOIN Linie_fa ON Factura.nrfa = Linie_fa.nrfa
WHERE Factura.datascadfa between Date() and Date() + 45
GROUP BY Factura.nrfa
ORDER BY SUM(Linie_fa.cantaa*Linie_fa.pretua) DESC
qEx17) Creșterea cu 1.25% a prețului unitar pentru materialele aprovizionate în cantități mai mici de 5.
UPDATE Linie_fa
SET pretua = pretua*1.0125
WHERE cantaa<5
Algebra relaţională – o colecţie de operatori care au, ca operanzi, relaţii (tabele), iar rezultatul returnat este tot o relaţie
(tabelă).