Sunteți pe pagina 1din 25

Veniamin Bulat

Ion DamaskIn

Microsoft SQL Server

Baze de date

O baza de date e un ansamblu structurat de


date, inregistrat pe suporturi accesibile
calculatorului pentru a satisface simultan
cerintele mai multor utilizatori intr-un mod
selectiv si in timp util.`

PA! SQL SERVER invatat!


cum se cereaza si se acceseaza o baza de date.
PA!

Tema :BD relationare

1)fisiere si baza de date


2)dictionarul datelor
3)termenii-BD si sistemul de gestiune a BD
4)indipendenta a datelor
5)modelele de date:ierarhic,retea si relational...
6)functii unui SGBD
7)arhitectura unui SGBD
8)LDD libbaj de definire a datelor
9)limbaj de manipulare a datelor
10)Rolul persoanelor in elaborarea a BD
11)schema LGBD
12)clasificarea SGBD

ldd - limbaj de definire a datelor (ddl)


lmd - limbaj de manipulare a datelor
lc - limbaj de control

rolul persoanelor in elaborarea, utilizarea bazelor


de date

schema lgbd

clasificarea gbd

sgbd e un ansamblude program ce face toate


operatiile cu baze de date:
deschiderea, citirea, afisarea....

orice baza de date are un dictionar ce contine


informatia despre baza de date
e o baza de date despre alta baza de date.

baza de date are in ansamblu obiectele:


tabelele, formularele, aplicatii, rapoarte,
utilizatorii, programatorii, administratorii

sgbd e un complect de programe


tabelul
are nume
este creat din coloane ce au nume
valorile coloanelor formeaza inregsistrarea
fiecare tabel nu depinde ordinea coloanelor

tabelul trebuie sa aiba 1+ campuri cu valori unice

defineste in mod unic o inregistrare cu chei


primare

independenta datelor:
pentru a asigura independenta

nivelul extern sa nu depinda de nivelul fizic

sunt multe modele de bd

1 model ierarhic
2 model retea
3 model relational

limbaj de definire a datelor


instructiuni:

create- creaza
alter - modifica
drop - sterge

limbaj de manipulare a datelor

Insert - introducerea datelor


Update -
delete-

limbaj de control
LC

revoke (rewoke) restrictioneaza accesul


Grant permite accesul

Schema sgbd

lista de module
lista de actiuni

PA!
de adus cate o pagina de informatie la fiecare
intrebare de la lectie 1..12

Raport...: titlu, sarcina, introducere, cuprins

Evidenta manualelor din grupa noastra.


denumirea, cine a imprumutat, disciplina
luni 5-a LucruIndividual BD

TEMA: Algebra relationala, operatii cu tabele

selectia
proiectia
diviziunea
jonctiunea
(zigma) conditie (R)

SELECT Nume_elev, adr_elev from nume_tabel


WHERE nume_elev like A*

alias - porecla
junctiuni externe
outer join - se iau 2 tabele afisarea totala a
continutului
A left outer

Tema de azi: dependente functionale

tipruile de dependente functionale

reguli de inferenta
inferenta = axioma
tipuri de dependente relationale:
simpla = x -> y (x il determina pe y)
petntru orice x y primeste valoare

dependente ... = constringeri, explicit .


ca sa facem constringeri -

prin dependente functionale se subintelegecada


oricarui element al unei multimi A i se pune in
corespondenta (i se asociaza) un element Y care
are aceleasi valori pentru aceleasi valori a lui Y
(valorile lui X si Y pot fi diferite)

o dependenta functionala poate fi reprezentata


printr-un tabel grafic sau diagrama.
definitie: dependenta functionala defineste
relatia dintre un atribut sau mai multe atribute
ale aceluiasi tabel sau mai multe atribute a altui
tabel.

dependente functionale e un grup de


constrangeri ce asigura integritatea datelor din
baza de date si, practic, au fost prinele
constrangeri fata de baza de date.

atributul de care depinde un alt atribut se


numeste determinant x->y (x este determinant)
iar atributul care este determinat este determina

elevi (cod personal al elevului [cheia primara],


nume, prenume, adresa, grupa)
codul personal este determinantul iar restul este
determinat
constringerile dependentelor relationale nu pot fi
demonatrate, nu sunt cerinte a lumii reale, dar
sunt niste legaturi (cerinte) "logice" intre atribute
stabilite atat de viata cat si de administratorul
bazei de date.
Clase{CodClasa, Locatie, NrMese, NrTable}

Finisat raportul 1. done.

Raportul:

2 Tema:
2.1 Proiectarea bazei de date
.2 stabilirea scopului (studierea sistemului)
.3 selectarea datelor (stabilirea datelor)
.4 stabilirea coloanelor in tabele
.5 pasii de proiectare a bazei de date
.6 coordonarea cu patronul

3
crearea bazei de date (instructiunile tranzact
SQL)

4
crearea tabelelor

5
modificarea/stergerea structurii (alter)

popularea bazei de date (insert)

actualizarea/modificarea datelor (update)

stergerea datelor (drop)

9 selectarea datelor (select)

9.1 selectarea datelor dintr-un tabel


9.2 selectaera datelor din mai multe tabele
selectarea utilizand subinterogari
selectarea utilizand jonctiuni
interogari cu agregari
interogari combinate (cu operatori de multimi)

elaborarea de formulare

crearea de rapoarte

concluzia (am obtinut cunostinte, abtitudini,


indeletniciri), bibliografia

PA! comentat fiecare instructiune

Tema: normalizrea datelor

normalizarea bazelor de date (descompunerea)


formele normale (FN1 - FN5) = niste reguli
impuse fata de tabel
algoritmi de normalizare prin descompunere, si
verificare (se verifica daca s-a descompus corect)

Formele normale
se elimina elementele/datele redundante (care se
repeta)

FN1
cere ca toata atributele sa fie indivizibile (sa aiba
doar o valoare ce nu poate fi descompusa in alte
atribute)(sa nu fie atribute compuse)

proiectarea se efectueaza in 2 moduri:


1 descompunerea tabelului utilizand formele
normale FN1..FN5
2 descompunerea tabelului in mai multe tabele
utilizand matricea dependentelor functionale

FN2 atributul care nu e cheie - sa depinda de


intreaga cheie
daca si numai daca e in forma normala FN1 si
atributul noncheie depinde de cheia intreaga
(sa apara mai multe tabele)

FN3
daca satisface FN2 si nu exista atribute tranzitive
(care depinde de lol1 prin lol2)
pretul depinde de cheie da reducerea depinde de
pret (reducerea depinde tranzitiv de ID)

Pentru descompunerea tabelelor (normalizare)


exista algoritmi speciali de descompunere a
tabelelor pentru formele normale 2, forma
normala BScod , forma normala 4 si 5

la fel exista si algoritmi de verificare daca la


descompunere nu a avut loc pierderea de date.

Crearea bazei de date :


1 inventarierea (gasim toate datele pe care le
vom introduce

pasi:
1 inventarierea
2 normalizarea
3 discompunerea atributelor (adaugarea
coloanelor pentru campuri (telefon fix, domestic,
lucru)
determinam cheile si vedem ca toate atributele
sa depinda de intreaga cheie
daca cheia primara e din 2 coloane ap vedem ca
atributele 4, 5 sa depinda de primele

PA! Lucrare de control + infor despre FN4 si FN5


invatat algoritm join fara pierdere
Trebu de adus baza mea de date normalizata
Data viitoare invatam limbaje de definire (creare)
a bazelor de date.

PA! foaia de titlu, sarcina, introducerea,


proiectarea bazei de date (pasii 1..6), 1
inventarierea atributelor, 2 chei primare, 3
tabele, 4 redundanta, aruncarea, 5

pasii de proiectare:
pentru ce noua baza de date?
domeniul de aplicare a bazei de date.
ce date trebuie introduse in baza de date?

informatia reprezinta cand sunt mai multe date


care au o legatura intre ele, cand exista legatura
- datele devin informatii.

PA! de perfectionat raportul


foaia de titlu tiparita, sarcina tiparita,
introducerea, crearea, 0,5 pagini de explicatii la
comenzi, comenzile, tipuri, constangeri...
notiuni despre limbajul de interogare a bazei de
date

limbajul de interogare are 2 posibilitati:


de a interoga,
SQL e limbaj neprocedural, dar permite de a
scrie proceduri.

tipuri de date
avem tipuri de date numerice care coincid.

timestamp

PA! descrierea tuturor tipurilor de date (lungimea


si pentru ce sunt prevazute) din SQL Server.

Daca vin si spun 5 caracteristici nespuse a


limbajelor de interogare, am 10.

//////////////redundanta (repetarea cand de mai


multe pro se repeta o valoare)

tema:
proiectarea bazei de date
etape:
1 acumularea datelor (studierea sistemului,
domeniului, )
nr.data | denumirea datelor | sursa datelor
1 | nume_student | catalog
2 | prenume student | catalog

Firma comerciala
1 | produs | document de instire |
2 | cantitate |
3 | producator|
4 | pret |
5 |adresa pr. |
6 |nm.client | Liste
7 |pers.contct |
8 |adresa clientului|

Produse
Producatori
Clienti
Produse

| Produsul nm Producator produse

produs cantitate pret produse adresa


umbrela
|clienti| - <comanda> - |produs|

comanda

Producator
|------------------------------------------------------
----------------------
|
|
|
|
|

The ALTER TABLE statement is used to add, delete, or


modify columns in an existing table.
SQL ALTER TABLE Syntax
To add a column in a table, use the following syntax:
ALTER TABLE table_name
ADD column_name datatype
To delete a column in a table, use the following syntax
(notice that some database systems don't allow deleting a
column):
ALTER TABLE table_name
DROP COLUMN column_name
To change the data type of a column in a table, use the
following syntax:
SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
My SQL / Oracle (prior version 10G):
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
Oracle 10G and later:
ALTER TABLE table_name
MODIFY column_name datatype

PA! descrierea tuturor tipurilor de date (lungimea


si pentru ce sunt prevazute) din SQL Server.

Crearea bazei de date, tabele,


limbaj(instructiuni) de manipulare a datelor.
Operatii aritmetice, expresii, functii.
w

sa se scrie instructiunea de creare a tabelului


produse cu campurile id_produs int,
nume_produs char(50), id_producator int, pret
decimal, descriere_produs text(memo);
CREATE TABLE Produse(
id_produs int,
nume_produs char(50),
id_producator int,
pret decimal(10,2),
descriere_produs text)

In baza faptului c nu a fost indicata


constrangerea Not NULL si nici NULL, implicit se
considera NULL

sa se creeze tabelul comenzi cu campurile


nr_comanda, data_comanda, id_client, toate
campurile cu constrangerea NOT NULL, campul
nr_comanda de tipuk INT, data_comanda de tipul
DATE, id de tipul INT
campul nr_comanda cu constrangerea PRIMERY
KEY.

CREATE TABLE Comenzi(


NrComanda INT IDENTITY(1,1) PRIMARY
KEY,
DataComanda DATE NOT NULL DEFAULT
GETDATE(),
--cu valoarea implicita = valoarea functiei ce
intoarce data din computer
idClient INT NOT NULL

--CONSTRAINT Fk - ClientiId FOFOREIGN KEY


idCLIENT REFERENCES Client(IDCLIENT)

La crearea tabelului a fost declarata suplimentar


fata de campuri cheia straina, constrangerea cu
numele fkClient, constrangerea cheiaStraina,
campul idClient, cu referire la tabelul
Client(idClient)
crearea unui tabel cu instructiunea create table
poate fi efectuata cu instructiunea create tavle si
cu instructiunea alter table
cu instructiunea create tabeldescriem campurile
iar cu instructiunea alter table descriem
constrangerile
(creez baza de date produse)

majoritatea sgbd-urilor dispun de asistenti de


creare a bazelor de date dar poate fi creata si
prin metode de programare limbajul sql cum a
fost demonstrat mai sus
sintaxa instructiunilor sql poate devia putin de la
sgbd la sgbd din care motiv se recomanda
1 sa metinem standardul limbajului
instructiunile pot fi divizate in mai multe linii dar
se recomanda formatele aduse in exemplele de
mai sus

Limbaj de modificare

modificarea structuri tabelului se efectueaza cu


instructiunea ALTER TABLE dar este recomandat
sa se efectueze cît mai rar
-------------------------------------------------------
-
sa se efectueze o proiectare corecta si reusita

majoritatea sgbd-urilor permit un numar limitat


de modificari a structurii tabelelor si un numar si
mai limitat dupa popularea bazei de date
majoritatea sgbd-urilor permit adaugarea unui
camp nou , modificarea tipului (intr-un tip
compatibil, doar marind lungimea)
exemplu: sa se scrie instructiunea ce modifica
structura tabelului COMENZI prin adaugarea
campului infoClient de tipul char(100) cu
constrangerea NULL.
ALTER TABLE Comenzi ADD COLUMN ClientInfo
char(100), NULL.

sa se modifice campul introdus prin majorarea


lungimii pana la 200 de caractere
pentru modificari mai serioase a structurii
tabelelor se recomanda efectuarea urmatoarelor
actiuni in "mod manual":
1 se creaza un tabel cu structura dorita
2 se copie datele dorite prezente din alt tabel,
cu instructiunea insert into -select sau/ | create
table - select
3 se nimiceste tabelul vechi
4 se modifica numele tabelului nou in numele
tabelului vechi
5 se modifica declanşatoarele, tranzacţiile
corespunzătoare dacă necesita

ALTER TABLE Comenzi ADD COLUMN ClientInfo


char(200), NULL.

Stergerea unui camp se efectueaza


DROP COLUMN InfoClient;

sa se scrie instructiunea care elimina


constrangerea cheii primare la tabelul Comenzi,
campul DataComenzi

ALTER TABLE Comenzi DROP CONSTRAINT


PKComenzi;
instructiunea va fi corecta doar in cazul cand
cheia primara a campului nrComanda va avea
numele PKComenzi.
pentru atribuirea de nume a cheii primare
constrangerea trebuie sa fie declarata fie la
sfarsitul declararii campurilor in instructiunea
CREATE TABLE, fie cu instructiunea alterTable,
dupa cuvantul cheie Constraint.
să se scrie instrucţiunea de dezactivare a unei
constrangeri (de dezactivare a constrangerii cheii
primare a tabelului Comenzi)
-- DISABLE PRIMARY KEY
ALTER INDEX PKComenzi DISABLE

redenumirea tabelelor sau a campurilor, daca


sunt acceptate, se efectueaza fie prin
instructiunea RENAME dar majoritatea sgbd-
urilor utilizeaza procedura SP_RENAME

unele sgbd-uri pot cere numele vechi si numele


nou.
exemplu SP_RENAME 'COMENZI ','ComenziNou';

sa se schimbe numele campului nrComanda in


numele numarComanda, din tabelul comenzi.

SP_Rename
'Comenzi.NrComanda','NumarComanda'
Column...

este de dorit ca la crearea structurii tabelelor sa


se utilizeze la maximum constrangerile, dar, sata
poate duce la cresterea timpului de executie a
modificarilor bazei de date, ceea ce ne impune sa
alegem varianta optimala, sa gasim un
compromis intre timpul de exeutie şi numarul de
constrangeri pentru verificare
un exemplu de instructiune cu verificari la
maximum a corectitudinii datelor.

create table raionul(


nrai char(2)
primary key;
check (nrai = LTRIM(UPPER(nrai))),
ERROR 'Indicativul judetului se scrie cu
majuscule'
raion char(25);
not null
check (raion= LTRIM(PROPER(raion)));
ERROR 'prima litera din fiecare cuvint
al'+chr(13)+;
'denumirea raionului este majuscula'+chr(13)+;
'resul literelor mici!',;
regiune char(5) default 'centru'
CHECK (inlist(regiune','centru','Nord','sud'));
error 'regiunea poate avea doar o valoare din
lista'+chr(13)+;
'centru, nord, sud '; ) ;

Daca vin si spun 5 caracteristici nespuse a


limbajelor de interogare, am 10.

În cele ce urmează vom prezenta, prin intermediul unor exemple, trei abordări ale limbajului de cereri
în modelul relaţional:
Algebra relaţională.
Calculul pe tupluri.
Calculul pe domenii.
Interogările sunt de mai multe tipuri:

! de selecţie (SELECT) – permit afişarea datelor din una sau mai


multe
tabele, pe baza unor criterii de selecţie, calcularea unor câmpuri şi
afişarea datele ordonate după anumite câmpuri crescător sau
descrescător;

! de sintetizare a datelor (TOTAL) – permit selectarea unor câmpuri


ca criterii de grupare, fiind aplicate diverse funcţii: SUM, MIN, MAX,
COUNT, etc;

! de analiză încrucişată (CROSSTAB) – de analiză încrucişată a


datelor;

! de acţiune (MAKE TABLE, APPEND, UPDATE, DELETE);

! speciale (UNION, PASS THROUGH, DATA DEFINITION). Cel


mai des întâlnite şi utilizate sunt interogările de selecţie.

Interogări cu parametru

În cazul interogărilor de selecţie se pot utiliza parametrii. Dacă se doreşte


citirea interactivă de la tastatură a unei valori a unui câmp, în vederea
verificării unui criteriu şi a afişării datelor din tabelă/tabele, pe linia Criteria
se introduce între paranteze drepte un text, de exemplu [Introduceti data
facturii]. Acest text va fi interpretat ca un parametru, construindu-se automat
pentru acest parametru o casetă de introducere a valorii. Va fi evaluată
valoarea citită de la tastatură, se verifică egalitatea cu valorile din câmpul pe
care este plasat parametrul, şi anumte [data facturii], şi sunt afişate
înregistrările care verifică condiţia [data facturii]=valoarea introdusă de la
tastatură.

sa se creeze tabelul folosind inserarea pe mai


multe randuri;

interogarea bazei de date

clauzele whery order by group harding.


Selectarea datelor dintr-un tabel, folosirea
functiilor in cereri (in SELECT)

profu da instructiunea da noi scriem setul


dinamic

operanzi : denumiri de campuri, constante,


variabile...
operatii: + - * / and or not

instructiunea SELECT dispune de urmatoarele


clauze:
FROM - specifica numele tabelului din care se
extrag randurile specificate in SELECT
WHERE - se scrie conditiile de filtrare a randurilor
din tabel
SELECT - indica campurile, coloanele
WHERE - indica randurile
daca WHERE nu e utilizat - vor fi preluctate toate
randurile din tabel
indeosebi la instructiunea delete si la
instructiunea update
GROUP BY - permite aranjarea inregistrarilor pe
grupe - o grupa este creata din aceleasi valori a
campului specificat in clausa
gruparea se efectueaza dupa ultimul camp daca
se specifica mai multe campuri in GROUPBY
HAVING - este clauza de filtrare pentru setul
dinamic (rezultatul instructiunii SELECT)

este echivalent cu WHERE ...


ORDER BY - ordoneaza inergistrarile conform
valorilor campurilor specificate in clauze
clauza WHERE permite specificarea de conditii de
filtrare atat utilizand expresii simple precum si
instructiuni de tipul SELECT uniuni

Selectarea unei coloane dintr-un tabel

sa se selecteze din campul client coloana cu


numele clientilor

SELECT nume_client, contactClient


FROM Clienti ORDER BY nume_client

SELECT NumeClient FROM Clienti


WHERE contactClient = 'JonetaSusan'
SELECt NumeClient, idClient
FROM Clienti
WHERE emailclient IS NULL;

SELECT NumeProdus, PretProdus


FROM Produse
WHERE PretProdus > 5;

SELECt PretProdus
FROM Produs
WHERE PretProdus BETWEEN 5 AND 10;

SELECT NumeProdus, PretProdus


FROM Produse
WHERE NumeProdus LIKE 'R%'

SELECT PretProdus
FROM Produse
WHERE PretProdus IN (5.99, 4.99, 8.99);

SELECT idProdus, PretArticol * Cantitate AS Cost


FROM ArticolComandat;

SELECt idProdus, PretProdus * 0.01


FROM ArticolComandat;

SELECT RTRIM (NumeClienti) + '(' +


RTRIM(taraClient)+')' AS numeformatat
FROM Clienti
WHERE idclient = '1000000001';

suma tuturor costurilor produselor comandate

SELECT SUM(Pretunitar * Cantitate) AS CumCost


FROM ArticolComandat;

PA! sa scriem setul dinamic la fiecare instructiune


(rezultatul)

TRMa: interogarea bazei de date


Instructiunea select
1 Activizarea(Crearea) bazei de date Produse;
Pentru aceasta gasim instructiunile in mapa si le
lansam in executie
2 Executarea instructiunilor SELECT de la lectia
de curs, descrierea lor şi scrierea setului dinamic
obtinut la calculator.

S-ar putea să vă placă și