pbd 2 post normalizare, de normalizare
Post on 26-Jan-2016
23 Views
Preview:
DESCRIPTION
TRANSCRIPT
04-03 - Proiectarea bazelor de date
Post- şi De- Normalizare
DenormalizareDenormalizarea este un proces de introducere controlată a unor
atribute (şi chiar tabele) suplimentare, de obicei calculabile, pentru:
• mărirea vitezei de lucru a bazei de date şi, implicit, a aplicaţiei• implementarea unor restricţii (reguli ale afacerii – Business Rules)
ceva mai complexe:– O factură nu poate avea mai mult de 10 linii– Nu se mai vinde nimic clienţilor cu soldul mai mare de 100000 lei– Un student poate împrumuta, la un moment dat:
• Max 3 cărţi dacă este la licenţă• Max 5 cărţi dacă este la master• Max 8 cărţi dacă este doctorand
– O înregistrare contabilă nu poate avea mai multe conturi, simultan, şi pe debit şi pe credit
• controlul drepturilor de acces şi programului de lucru al utilizatorilor etc.
Carduri1 – normalizare 100%
CLIENTI {IdClient, DenClient, Adresa, ….}CONTURI {IdCont, IBAN, TipCont, DataOraDeschidere, SoldInitial}ALIMENTARI {IdAlimentareCont, IdCont, DataOraAlimentare, Sursa,
IBANContSursa, SumaIntrata}PLATI {IdPlata, IdCont, DataOraPlata, DestinatiePlata, IBANContDestinatie,
SumaPlata}
IdClient
Adresa
DenClient
IBANIdCont
DataOraDeschidereSoldIniţial
…
IdAlimentareCont
DataOraAlimentare
SursaSumaIntrată
IdPlatăTipCont
DataOraPlată
DestinaţiePlată
SumaPlată
IBANContSursă
IBANContDestinaţie
Carduri1 – diagrama E-R (Barker)
Carduri1 – diagrama relațională
Carduri1 – dezavantaj principal
• În orice moment, aflarea soldului curent al unui cont presupune prelucrarea unui volum imens de date (după numai câţiva ani)
SELECT IBAN, SoldInitial, COALESCE(TotalIntrari, 0) AS Intrari , COALESCE(TotalIesiri, 0) AS Iesiri, SoldInitial + COALESCE(TotalIntrari, 0) - COALESCE(TotalIesiri, 0) AS SoldFinal
FROM conturi c LEFT OUTER JOIN (SELECT IdCont, SUM(SumaIntrata) AS TotalIntrari
FROM alimentari GROUP BY IdCont) INTRARI ON c.IdCont=INTRARI.IdCont
LEFT OUTER JOIN (SELECT IdCont, SUM(SumaPlata) AS TotatIesiri FROM plati GROUP BY IdCont) IESIRI ON c.IdCont=IESIRI.IdCont
Carduri2 – soluție “denormalizată”
CLIENTI {IdClient, DenClient, Adresa, ….}CONTURI {IdCont, IBAN, TipCont, DataOraDeschidere, SoldInitial, SoldCurent}ALIMENTARI {IdAlimentareCont, IdCont, DataOraAlimentare, Sursa,
IBANContSursa, SumaIntrata}PLATI {IdPlata, IdCont, DataOraPlata, DestinatiePlata, IBANContDestinatie,
SumaPlata}
IdClient
Adresa
DenClient
IBANIdCont
DataOraDeschidereSoldIniţial
…
IdAlimentareCont
DataOraAlimentare
SursaSumaIntrată
IdPlatăTipCont
DataOraPlată
DestinaţiePlată
SumaPlată
IBANContSursă
IBANContDestinaţieSoldCurent
Carduri2 – diagramă E-R (Barker)
+
BD Vânzări - soluții denormalizate
Obiective:• Validitate temporală • Creşterea vitezei de acces a aplicaţiei, ştiind ca
anume informaţii sunt solicitate frecvent:– Valoarea TVA pentru o factură– Valoarea totală (cu TVA) a unei facturi– Valoarea încasată din fiecare factură
• Crearea premiselor pentru implementarea unor restricţii complexe
Vânzări1_Sol3
PRODUSE{CodPr, DenPr, UM, Grupa, ProcentTVA_Crt}FACTURI {NrFact, DataFact, CodCl, TVAFact, ValTotala, ValIncasata }LINIIFACT {NrFact, Linie, CodPr, Cantitate, PretUnit, TVALinie}
NrFact
DataFact
CodCl
Linie CodPr
DenPr
UM
Cantitate
PreţUnit
Grupa
ProcentTVA_Crt
TVAFact
ValTotalaValÎncasată
TVALinie
Diagramă E-R – Vânzări1_Sol3
Diagramă relațională – Vânzări1_Sol3
Vânzări1_Sol3– avantaje/dezavantaj
• Avantaje– Simplitate (număr mic de atribute)– Se cunosc procentele TVA curente– Se poate afla şi o parte din procentele TVA precedente
(TVALinie/(cantitate * pretunit)– Calculul simplu al valorii şi TVA unei facturi
• Dezavantaj– Nu putem cunoaşte cu exactitate istoria procentelor
TVA pentru fiecare produs în decursul anilor (ci numai în măsura în care am vândut aceste produse)
Vânzări1_Sol4
PRODUSE{CodPr, DenPr, UM, Grupa, ProcentTVA_Crt}FACTURI {NrFact, DataFact, CodCl, TVAFact, ValTotala, ValIncasata }LINIIFACT {NrFact, Linie, CodPr, cantitate, PreUnit, TVALinie}PRODUSE_TVA {CodPr, DataIntrareVigoare, DataIesireVigoare,
ProcentTVA}
NrFact
DataFact
CodCl
Linie CodPr
DenPr
UM
Cantitate
PreţUnit
Grupa
ProcentTVA_Crt
TVAFact
ValTotalaValÎncasată
TVALinie
ProcentTVA
DataIntrareVigoareProcTVA
DataIesireVigoareProcTVA
Diagramă E-R – Vânzări1_Sol4
Diagramă relațională – Vânzări1_Sol4
Vânzări1_Sol4 – avantaje/dezavantaje
• Avantaje– Se cunosc procentele TVA curente– Putem cunoaşte cu exactitate istoria procentelor
TVA pentru fiecare produs în decursul anilor– Calculul simplu al valorii şi TVA unei facturi
• Dezavantaje– Atribute suplimentare– Efort suplimentar de actualizare a tabelei
PRODUSE_TVA – este un dezavantaj aparent, pentru că actualizarea sa se poate realiza automat, prin declanşoare
Recapitulare: modificarea schemei BD VânzăriVânzări2 (1) – noutăți
• Pentru validitate temporală:– Atributul LINIIFACT.TVALinie
• Pentru istoric (preluarea modificărilor de valori)– Tabela PRODUSE_TVA
– Tabela IST_FUNCTII
• Pentru implementarea unor restricţii:– FACTURI.NrLinii (pentru o restricţie de genul: O factură nu
poate avea mai mult de 30 de linii)
– CLIENTI.SoldCurent (pentru o restricţie de genul: Unui client nu îi mai vindem nimic dacă are o datorie (rest de plată) mai mare de 30000 lei)
Recapitulare: modificarea schemei BD VânzăriVânzări2 (2)
• Pentru mărirea vitezei de acces:– CLIENTI.SoldCurent
– FACTURI.ValTotala
– FACTURI.TVAFact
– FACTURI.ValIncasata
• Atribut care nu are legătură cu denormalizarea:– FACTURI.Validare (vezi explicaţii la curs)
Diagramă E-R – Vânzări2
Diagramă relațională – Vânzări2
Până unde se poate merge cu denormalizarea ?
• Se pot introduce atribute/tabele noi (redundante) pentru orice categorie de informaţii solicitată frecvent
• Ex:– Pt. CLIENȚI: Solduri iniţiale, rulaje, solduri finale
pentru fiecare an/lună– Pentru VÎNZĂRI:• Centralizare Produse – Clienţi – Zile• Centralizare Produse-Zile• Centralizare Vânzări-Zi-Client sau Vânzări – An – Lună• ...
O denormalizare (poate) exagerată
Atribute pentru introducerea unor reguli (Business Rules) mai complexe
• Liniile unei facturi să fie ordonate strict, fără intervale
• Numărul de linii ale unei facturi să nu fie mai mare de 25
• Soldul unui client sa nu fie mai mare decât...• Închideri contabile• Acces diferenţiat la tabele/atribute, în funcţie
de categoria utilizatorului• Acces diferenţiat la clienţi (în funcţie de user)
top related