Beruflich Dokumente
Kultur Dokumente
Continutul cursului: Sistemul de Gestiune a Bazelor de Date SQL Server 2008; Organizarea si exploatarea bazelor de date SQL Server; Limbajul Transact-SQL ; Depozite de date; Studiu de caz Analiza cifrei de afaceri la o societate comerciala.
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Baza de date
Este un ansamblu structurat de date legate funcional ntre ele. Este o structura omogena in care se pastreaza datele. D.p.d.v. fizic, baza de date este o colectie de obiecte: tabele, diagrame, view-uri, proceduri memorate etc. SGBD (Sistemul de Gestiune a Bazelor de Date) este un ansamblu de programe care asigur interfaa dintre utilizator i baza de date. Prin aceast interfa se realizeaz operaiile de creare, actualizare i consultare (adaugare, stergere, modificare) a bazei de date. Principalele SGBD sunt: 1. de tip local n reele mici Microsoft Access, Microsoft Visual FoxPro 2. de tip client server: Microsoft SQL Server, Sybase SQL Server 3. de tip complex: Oracle, Java SQL Server are doua categorii de baze de date: baze de date sistem, grupate in System Databases: .master contine legaturi la toate bazele de date instalate; .model este un sablon pentru crearea bazelor de date utilizator; .pubs este o baza de date demonstrativa; .tempdb locul unde se efectueaza operatiile de sortare. baze de date utilizator
Tabela
Este obiectul din baza de date destinat stocrii datelor despre o entitate, o operaie economic, o tranzacie.
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Tabela conine att structura datelor ct i datele propriu-zise (nregistrrile). Structura cuprinde informaii privind numele datelor, tipurile de date, proprietile acestora, cheile de identificare i indecii de cutare. Datele se refer la mulimea nregistrrilor din tabel. Particularitati: Inregistrarea un rand din tabela; Campul o coloana cu o denumire unica si un tip de data; Domeniu multimea valorilor dintr-un camp; Cheia un camp sau mai multe campuri ale caror valori identifica inregistrarea (grup de inregistrari). Cheia poate fi: - cheie primara prin care se identifica unic o inregistrare; - cheie externa (straina) pentru a face legaturi intre tabele; - cheie compusa (concatenata) prin care se identifica unic un grup de inregistrari; functioneaza ca o cheie primara pe mai multe campuri. numele de cmp este un ir de maximum 64 caractere; pentru numele de cmpuri nu se fac deosebiri ntre literele mici i literele mari; nu se admit caracterele : punct (.), semnul exclamrii (!), paranteze drepte ([ ]) si spatiu.
- exacte Siruri
Date calendaristice
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Exemplu: Baza de date VANZARI - sursa de date: documentul primar Factura si alte colectii de date.
Date furnizor . . Date beneficiar . .
Cod produs
Denumire produs
UM
Cantitate
Pret unitar
Valoare
TVA
Observatii: In factura putem avea mai multe tranzactii pentru produse diferite. Pentru fiecare tranzactie din factura trebuie asociate aceleasi date comune: nrfactura, datafact, datele clientului, datele furnizorului. Intr-o perioada de gestiune putem avea mai multe tranzactii pentru acelasi produs. In acest caz continutul unor campuri se repeta (ex. denumire produs, um, cantitate, pret unitar). In consecinta, pentru reducerea spatiului de stocare si pentru cresterea performantelor datele din factura se descompun in mai multe tabele. o Un tabel cu datele de identificare a fiecarei facturi; o Un tabel care sa cuprinda datele de identificare pentru fiecare tranzactie (facturarea, contractarea); o Un tabel care sa cuprinda datele constante pentru fiecare produs; o Un tabel cu datele de identificare a clientilor (furnizorilor); o Un tabel cu datele de identificare a contractelor; o Un tabel cu datele de identificare a locurilor de expeditie (magazie).
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Randfactura (nrfactura, codprodus, cant, pret) Docincasare (nrdoc, datainc, sumainc, nrfactura) Magazine (codmagazin, denmagazin, loc, adresa, jd, numegest) Promotii (IDpromotie, numepromotie, costpromotie, datainceput, datasfarsit, tippromotie)
Crearea tabelelor
Se realizeaza prin: - utilitarul Microsoft SQL Server Management Studio; - comenzi T-SQL, generate in fereastra New Query.
Tipuri de relatii:
- Relatia 1 1: unei inregistrari dintr-o tabela ii corespune o inregistrare din alta tabela; se realizeaza intre doua campuri cheie primara din tabele diferite. Studeni nume pren facult an gr nrleg 101 102 103 1-1 Taxe suma de plata suma platita nrleg 101 102 103
6
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Tabelele aflate ntr-o astfel relaie pot fi reconsiderate ntr-un singur tabel, ns, datorit faptului c au o frecven diferit de consultare i actualizare, datele se recomand a fi organizate n tabele diferite. - Relatia 1 n: unei inregistrari dintr-o tabela ii corespunde 0, 1, sau mai multe inregistrari din alta tabela; se realizeaza intre un camp cheie primara si un camp cheie secundara (sau un camp care participa la o cheie compusa) din tabele diferite. Produse codprodus denprodus 10101001 placa de baz 10201001 placa video um buc buc Randfactur nrfactura 120 121 122 122 codprodus cant pret 10101001 10101001 10201001 10101001
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Exe: un produs poate sa apara pe mai multe facturi (produsul cu codul 10101001 apare pe factura 120, 121, 122) - Relatia m n: unei inregistrari dintr-o tabela ii corespunde 0, 1, sau mai multe inregistrari din cea de-a doua tabela, iar unei inregistrari din cea de-a doua tabela ii corespunde 0, 1, sau mai multe inregistrari din prima tabela; se realizeaza intre doua campuri cheie externa (sau campuri care participa la o cheie compusa) din tabele diferite.
Codificarea datelor
Scop: economisire spatiu stocare, facilitati de regasirea informatiilor, stabilirea unor relatii de reprezentare a informatiilor. Exemplu: O firm comercializeaz componente de calculatoare, codul produsului este format din 8 caractere numerice.
Clasa produsului Subclasa produsului Sortimentul
XXXXXXXX - primele 2 caractere reprezint clasa produsului; - caracterul 3 i 4 reprezint subclasa produsului; - ultimele 4 caractere reprezint sortimentul.
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Exemplu: Evidena studenilor. Tabela Cursuri are urmtoarea structur: codcurs, dencurs, formaev, nrcredite. Codul cursului este un cod alfanumeric format din 8 caractere.
E PV E
4 5 5
Clasificarea codurilor
dup natur:
- coduri numerice 10101001 - coduri alfabetice BRD - coduri alfanumerice FZ22OB01 dup controlul codurilor i al erorilor - coduri autodetectoare de erori: acest tip de cod permite determinarea unei erori din structura codului prin intermediul unui caracter de control plasat pe ultima poziie a codului.
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
b) crearea tabelei Randfactura cu cheia primara pe doua campuri --- se definesc, pe rand, campurile tabelei, iar la sfarsit se insereaza cheia primara pe campurile participante:
CREATE TABLE Randfactura (Nrfactura Varchar(10) Not Null, Codprodus Int Not Null, Cant Decimal(10,2) Not Null,
10
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel Pret Decimal(10,2) Not Null, Primary Key(Nrfactura, Codprodus))
c) crearea tabelei IDPromotie cu: - restrictii de verificare (CHECK) care asigura integritatea pe domeniu; - restrictii cheie straina (FOREIGN KEY) / NU ESTE CAZUL - crearea unui index unic pe campul Numepromotie.
CREATE TABLE Promotii (IDpromotie Int Not Null Primary Key CHECK(IDpromotie Between 1 And 10), Numepromotie Varchar(50) Not Null CHECK(numepromotie=Aniversare 1 an OR numepromotie=Mos Craciun 2007) COSNTRAINT IDprom UNIQUE (numepromotie), Codpromotie Decimal(10,2) Not Null, Datainceput SmallDateTime Not Null, Datasfarsit SmallDateTime Not Null, Tippromotie Char(10) Not Null CHECK (Tippromotie=Fluturasi OR Tippromotie=RadioTV OR Tippromotie=Presa))
Interogarea datelor
Consta din extragerea informatiilor din baza de date Se realizeaza cu: o utilitarul Microsoft SQL Server Management Studio / Views o prin comenzi T-SQL; sintaxele se scriu in fereastra New Query, generata prin apasarea butonului New Query din interfata principala.
11
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Observatie: se utilizeaza comanda Use nume_db in scopul utilizarii bazei de date din care se doreste extragerea datelor; daca nu se specifica aceasta comanda se incearca extragerea datelor din baza de date master, iar ca urmare nu se vor returna datele solicitate. INTO tabel-nou determina crearea unei tabele pe baza datelor din alte tabele. Se realizeaza numai in Query Analyzer.
12
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Ex2. Sa se creeze o noua tabela cu date valorice despre tranzactionarea unor produse use vanzari_tj SELECT Facturi.Nrfactura, Datafactura, Codprodus, Codclient, Cant, Pret, Cant*Pret As Valoare INTO Vanzari2005 FROM Facturi INNER JOIN Randfactura ON Facturi.Nrfactura=Randfactura.Nrfactura WHERE Datafactura Between '1/1/2005' AND '12/31/2005'
FROM lista-tabele WHERE criteriu-selectie GROUP BY grupeaza datele (inregistrarile) care satisfac eventual clauza WHERE HAVING stabileste criteriul pentru determinarea returnarii rabdurilor centralizatoare
13
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Functii matematice ROUND(valoare, n) rotunjeste expresia numerica la o valoare cu n zecimale. Functii pentru siruri LEFT(sir, n) returneaza n caractere din stanga sirului RIGHT(sir, n) returneaza n caractere din dreapta sirului SUBSTRING(sir, pozitie, numar) returneaza din expresie un subsir, de la o anumita pozitie STR(valoare) converteste datele numerice in siruri de caractere LOWER(sir) converteste expresia in litere mici UPPER(sir) conerteste espresia in litere mari LTRIM(sir) returneaza expresia fara spatii la inceput RTRIM(sir) returneaza expresia fara spatii la sfarsit SPACE(sir) returneaza un sir de spatii egal cu o expresie intreaga Functii pentru date calendaristice Day(data) returneaza ziua Month(data) returneaza luna Year(data) returneaza anul GetDate() returneaza data si ora curente DateADD(data, perioada, numar) adauga la data numarul de componente DateDiff(perioada, data1, data2) returneaza numarul de componente dintre doua date DatePart(perioada, data) returneaza valoarea intreaga a unei componente specificate pentru data mentionata Operatori de comparatie: <, <=, >, >=, =, <>, LIKE, NOT LIKE Operatori asociati operatorilor de comparatie: +=, -=, &=, *=, /=, \=, ^= Operatori logici: OR, AND, NOT, XOR, AndAlso, OrElse Operatori de concatenare: &, + Exemple de utilizare a operatorilor si functiilor Ex3. Camp calculat se utilizeaza tabela Randfactura use vanzari_tj SELECT Codprodus, Cant, Pret, ROUND(Cant*Pret, 2) As Valoare FROM Randfactura
14
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Lista returnata:
Ex.4 Vanzarile de produse din clasa Soft (20) use vanzari_tj SELECT Left(str(codprodus, 8, 0), 2) As [Clasa Soft], Cant, Pret, Cant*Pret As Valoare FROM Randfactura WHERE Left(str(codprodus, 8, 0), 2) = 20 Lista returnata:
15
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Ex5. Vanzarile de produse din clasa Hard (10), subclasa Placa de baza (10) use vanzari_tj SELECT Left(str(codprodus, 8, 0), 4) As [Clasa Hard Subclasa Placa de baza], Cant, Pret, Cant*Pret As Valoare FROM Randfactura WHERE (Left(str(codprodus, 8, 0), 2) = 10) AND (Substring(str(codprodus, 8, 0), 3, 2) = 10) Lista returnata:
Ex6. Extragerea datei curente si a orei curente use vanzari_tj SELECT GetDate() As [Data si ora curenta] Lista returnata: Ex7. Extragerea datei curente fara ora curenta use vanzari_tj SELECT Convert(Char(8), GetDate(), 2) As Data Lista returnata:
16
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Ex8. Se extrag datele din tabela Facturi pentru a obtine data scadenta (+15 zile) privind achitarea facturii si a numarului de zile de intarziere fata de data scadenta use vanzari_tj SELECT Nrfactura, Datafactura, Codclient, DateAdd(dd, 15, Datafactura) As [Data scadenta], DateDiff(dd, DateAdd(dd, 15,Datafactura), GetDate()) As [Nr zile intarziere] FROM Facturi Lista returnata:
17
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Corelarea tabelelor
Sintaxa: SELECT lista-campuri FROM nume-tabela1 {INNER / OUTHER {LEFT / RIGHT / FULL} JOIN nume-tabela2 ON criterii de legatura Tipul de jonctiune INNER JOIN leaga doua tabele pe baza unei conditii de jonctiune, generand un nou tabel cu inregistrari care satisfac conditia. Ex10. Lista vanzarilor pentru produsul Placa de baza catre clientii N1034116, R984676, R7468214 - se utilizeaza tabelele Produse, Facturi, Randfactura use vanzari_tj SELECT Produse.Codprodus, Denprodus, Codclient, Cant, Pret, Str(Cant*Pret, 10, 2) As Valoare FROM Produse INNER JOIN Randfactura ON Produse.Codprodus = Randfactura.Codprodus INNER JOIN Facturi ON Randfactura.Nrfactura = Facturi.Nrfactura WHERE (Denprodus like 'Placa de baza%') And (Codclient IN('N1034116', 'R984676', 'R4948567')) Lista returnata:
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
MIN(nume-camp) extrage valoarea min. dintr-un domeniu de valori SUM(nume-camp / expresie) insumeaza valorile dintr-un camp numeric sau conforme cu o expresie Exemple: Ex11. Lista cu totalul vanzarilor cantitative si valorice pe fiecare produs - se utilizeaza tabelele Produse si Randfactura use vanzari_tj SELECT Produse.Codprodus, Denprodus, Str(Sum(Cant), 10, 2) As Tcantitate, Str(Sum(Cant*Pret), 10, 2) As Tvaloare FROM Produse INNER JOIN Randfactura ON Produse.Codprodus = Randfactura.Codprodus GROUP BY Produse.Codprodus, Denprodus ORDER BY Produse.Codprodus Lista returnata:
Ex12. Lista cu totalul vanzarilor cantitative si valorice pe un produs use vanzari_tj SELECT Produse.Codprodus, Denprodus, Str(Sum(Cant), 10, 2) As Tcantitate, Str(Sum(Cant*Pret), 10, 2) As Tvaloare FROM Produse INNER JOIN Randfactura ON Produse.Codprodus = Randfactura.Codprodus GROUP BY Produse.Codprodus, Denprodus HAVING Produse.Codprodus = 10101001 Lista returnata:
19
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Ex13. Centralizatorul cantitatilor contractate si vandute pe produse - se utilizeaza tabelele Produse, Contracte, Randfactura use vanzari_tj SELECT Randfactura.Codprodus, Denprodus, Str(Sum(Contracte.Cant), 10, 2) As [Cantitate contractata], Str(Sum(Randfactura.Cant), 10, 2) As [Cantitate vanduta], Str(Sum(Contracte.Cant Randfactura.Cant), 10, 2) As Diferenta FROM Produse INNER JOIN Contracte ON Produse.Codprodus = Contracte.Codprodus INNER JOIN Randfactura ON Produse.Codprodus = Randfactura.Codprodus GROUP BY Randfactura.Codprodus, Denprodus Lista returnata:
20
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
ROLLUP genereaza randuri de subtotal si total general Ex14: Lista cu totalul vanzarilor pe clienti si produse - se utilizeaza tabelele: Clienti, Produse, Facturi, Randfactura use vanzari_tj SELECT Denclient, Denprodus, Str(Sum(Cant*Pret*1.19), 10, 2) As [Total valoare] FROM Produse INNER JOIN Randfactura ON Produse.Codprodus = Randfactura.Codprodus INNER JOIN Facturi ON Randfactura.Nrfactura = Facturi.Nrfactura INNER JOIN Clienti ON Facturi.Codclient = Clienti.Codclient GROUP BY Denclient, Denprodus WITH ROLLUP Lista returnata:
21
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
CUBE genereaza randuri de subtotal si total general precum si combinatii posibile Ex15: Lista cu totalul vanzarilor pe clienti si produse - se utilizeaza tabelele: Clienti, Produse, Facturi, Randfactura use vanzari_tj SELECT Denclient, Denprodus, Str(Sum(Cant*Pret*1.19), 10, 2) As [Total valoare] FROM Produse INNER JOIN Randfactura ON Produse.Codprodus = Randfactura.Codprodus INNER JOIN Facturi ON Randfactura.Nrfactura = Facturi.Nrfactura INNER JOIN Clienti ON Facturi.Codclient = Clienti.Codclient GROUP BY Denclient, Denprodus WITH CUBE
22
Universitatea Titu Maiorescu, Facultatea de Stiinte Economice Curs master : Tehnologii informatice utilizate in mediul decizional I, 2009_2010 Titular disciplina: Lect.univ.drd. Vasilciuc Bogdan Gabriel
Lista returnata:
23