Sunteți pe pagina 1din 27

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Departamentul Inginerie, Software i Automatic

PROIECT DE CURS

Disciplina: Baze de Date i Cunotine

Efectuat de: st.gr.TI-131 f/r Bogdan Ion

Controlat de: Bulai Rodica


Chiinu 2017

Cuprins
1. Proiectarea logic a bazei de date......................................................................................................3

1.1 Analiza domeniului...............................................................................................................

1.2 Descrierea atributelor............................................................................................................

1.3 Stabilirea dependenelor funcionale.....................................................................................

1.4 Codificarea atributelor..........................................................................................................

1.5 Sinteza schemei bazei de date...............................................................................................

2. Implementarea bazei de date n SQL..............................................................................................11

2.1 Crearea bazei de date noi n T-SQL....................................................................................

2.2 Crearea relaiilor i constrngerilor de integritate n T-SQL...............................................

2.3 Crearea cheilor externe.......................................................................................................

2.4 Crearea diagramei bazei de date.........................................................................................

2.5 Popularea cu tupluri relaiile bazei de date.........................................................................

2.6 Crearea schemelor bazei de date.........................................................................................

2.7 Crearea utilizatorilor...........................................................................................................

2.8 Crearea viziunilor................................................................................................................

2.9 Crearea sinonimilor.............................................................................................................

3. Interograrea bazei de date................................................................................................................20

3.1 Crearea interogrilor ce exprima operaiile algebrei relaionale.........................................

3.2 Crearea interogrilor cu funcii de agregare........................................................................

3.3 Crearea interogrilor de grupare.........................................................................................

3.4 Subinterogri.......................................................................................................................

3.5 Crearea declanatoarelor.....................................................................................................

3.6 Crearea procedurilor stocate...............................................................................................

Concluzia................................................................................................................................................31

Anexa A - Scriptul T-SQL bazei de date .............................................................................................32


1. Proiectarea logic a bazei de date
1.1 Analiza domeniului
n aceast lucrarea am creat baza de date pentru Academia Cisco. Scopul academie este oferirea studiilor de calitate n
domeniul IT. Instruirea se face pe baza unor programe elaborate i aprobate de companii de tot din lumea IT cum sunt Cisco
System, VMware, Linux Professional Institute. Prin aceast BD se va duce eviden a cursurilor, studen ilor, profesorilor, etc.

1.2 Descrierea atributelor


Universul bazei de date Centrul educaional DNT n tabelul 1.2.1.

Tabelul 1.2.1 Descrierea atributelor

Cod atribut Nume atribut Descriere atribut Tip


atribut
A Student Id Id-ul Studentului int
B Student Nume Numele Studentului varchar
C Student Prenume Prenumele Studentului varchar
D Student Email Email-ul Studentului varchar
E Student Nr.Tel Nr. Tel. al Studetului varchar
F Tema Nr. Nr-ul. Temei care se prezint int
G Tema Denumire Denumirea Temei ce se prezint varchar
H Tema Descriere Descrierea Temei ce se prezint varchar
M Profesor Id Id-ul Profesorului int
N Profesor Nume Numele Profesorului varchar
P Profesor Prenume Prenumele Profesorului varchar
R Porfesor Email Email-ul Profesorului varchar
S Sala Id Id-ul Slii int
T Sala Denumire Denumirea Slii varchar
U Sala Nr. Locuri Nr. de locuri a unei sli int
V Sala Tip Tipul de sala unde este amplasata varchar

1.3 Stabilirea dependenelor funcionale


n acest subcapitol sunt reprezentate dependenele funcionale ale Bazei de Date pentru Academia Cisco.
Dependenele funcionale n mulimea de dependee F:
F={
Student Id -> Student Nume, Student Prenume.
Student Email -> Studet Id, Student Nr. Tel.
Stundet Nr. Tel -> Student Nume, Student Prenume, Student Email.
Student Id -> Sala Id.
Student Id -> Tema Nr.
Tema Nr. -> Tema Denumire, Tema Descriere.
Tema Nr. -> Sala Id.
Profesor Id -> Profesor Nume, Profesor Prenume.
Profesor Id -> Profesor Prenume, Profesor Email, Profesor Tel.
Profesor Email -> Profesor Nume.
Profesor Email -> Profesor Prenume.
Profesor Prenume -> Profesor Email.
Profesor Email -> Profesor Prenume.
Profesor Email -> Profesor Prenume, Profesor Id.
Profesor Id -> Profesor Nume.
Profesor Id -> Profesor Nr. Tel.
Sala_Id -> Sala Denumire, Sala Locuri, Sala Tip.
}
1.4 Codificarea atributelor
Utiliznd mulimea de dependenelor funcionale din subcapitolul 1.3 i codarea din subcapitolul 1.2 se va primi:
F={ A BC , D AE , E BCD , A S , A F , F GH , F S , M NO , P MNO , M PR , P R , R

1.5 Sinteza schemei bazei de date


Algoritmul de sintez
Mulimea de dependene funcionale reeind din codificarea atributelor:
F={ A BC , D AE , E BCD , A S , A F , F GH , F S , M NO , P MNO, M PR , P R , R
1) Aduc dependene funcionale la X A :
F={ A B , A C , D A , D E , E B , E C , E D , A S , A F , F G , F H , F S , M N , M

2) Se adaug n mulimea de dependene funcionale o dependen de forma R Q , unde R este universul


bazei de date, iar Q nu aparine lui R:
3)
F={ A B , A C , D A , D E , E B , E C , E D , A S , A F , F G , F H , F S , M N ,
4) Se construiete acoperirea neredundant pentru F:
(B)F/{A->B}=<ACSFTVUGH>,Nu aparine
(C)/F{A->C}=<ABSFGHTVU>,Nu
(A)/F{D->A}=<DECB>,Nu
(E)/F{D->E}=<DABCSFGHTVU>,Nu
(B)/F{E->B}=<ECDAEB>,Omitem
(C)/F{E->C}=<EBDAEC>,Omitem
(D)/F{E->D}=<E>,Nu
(S)/F{A->S}=<ABCF>,Nu
(F)/F{A->F}=<ABCTVU>,Nu
(G)/F{F->G}=<FHSTVU>,Nu
(H)/F{F->H}=<FGSTVU>,Nu
(S)/F{F->S}=<FGH>,Nu
(N)/F{M->N}=<MOPRFGH>,Nu
(O)/F{M->O}=>MNPRFGH>,Nu
(M)/F{P->M}=<PNORM>,Omitem
(N)/F{P->N}=<PORMFGH>,Nu
(O)/F{P->O}=<PNR>,Nu
(P)/F{M->P}=<MRPFGH>,Omitem
(R)/F{M->R}=<MFGH>,Nu
(R)/F{P->R}=<PNO>,Nu
(P)/F{R->P}=<RMFGH>,Nu
(M)/F{R->M}=<RPNO>,Nu
(F)/F{M->F}=<MNORP>,Nu
(T)/F{S->T}=<SUV>,Nu
(U)/F{S->U}=<STV>,Nu
(V)/F{S->V}=<STU>,Nu
(ABCDEFGHMNOPRSTUV)/F{ ABCDEFGHMNOPRSTUV->Q}=< ABCDEFGHMNOPRSTUV>,Nu
Rezultatul primit:
1)
F={ A B , A C , D A , D E , E B , E C , E D , A S , A F , F G , F H , F S , M N ,

2) Se trece mulimea de dependene funcionale prin algoritmul reducerii la stnga:


ABCDEFGHMNOPRSTUV Q
+= ABCDEFGHMNOPRSTU , ABCDEFGHMNOPRSTUV , ABCDEFGHMNOPRSTUV Q>;
ABCDEFGHMNOPRSTU F

Q aparine
+= ABCDEFGHMNOPRST , ABCDEFGHMNOPRSTU , ABCDEFGHMNOPRSTUQ> ; Q aparine
ABCDEFGHMNOPRST F

+= ABCDEFGHMNOPRS , ABCDEFGHMNOPRST ,

ABCDEFGHMNOPRS F

ABCDEFGHMNOPRSTQ >; Q aparine
+= ABCDEFGHMNOPR , ABCDEFGHMNOPRS , ABCDEFGHMNOPRSQ,
ABCDEFGHMNOPR F

; Q aparine .
+= ABCDEFGHMNOP , ABCDEFGHMNOPR , ABCDEFGHMNOPQ

ABCDEFGHMNOP F ;

Q aparine
+= ABCDEFGHMNO , ABCDEFGHMNOP , ABCDEFGHMNOQ

ABCDEFGHMNO F ; Q aparine

+= ABCDEFGHMN , ABCDEFGHMNO , ABCDEFGHMNQ
ABCDEFGHMN F >

+= ABCDEFGHM . ABCDEFGHMN . ABCDEFGHMQ>; Q aparine
ABCDEFGHM F
; Q aparine
+= ABCDEFGHM >;
ABCDEFGHM F Q nu aparine

+= ABCDEFGM , ABCDEFGHM , ABCDEFGMQ>; Q aparine
ABCDEFGM F

+= ABCDEFM , ABCDEFGM , ABCDEFMQ>; Q aparine
ABCDEFM F

+= ABCDEM , ABCDEFM , ABCDEMQ>; Q aparine
ABCDEM F

+= ABCM , ABCEM , ABCMQ> ;Q aparine

ABCM F

+= AM >; Q nu aparine
AM F

+= M , MO , MNO ,>; Q nu aparine .

M F

Rezultatul primit:
1)
F={ A B , A C , D A , D E , E D , A S , A F , F G , F H , F S , M N , M O, P N
2) Se Formeaz clasele de echivalen pentru mulimea de dependene F:
A->B => < EDACBSFGHTVU >
A->C => < EDACBSFGHTVU >
D->A => < EDACBSFGHTVU >
A->E => < EDACBSFGHTVU >
E->D=> <EDACBSFGHTVU>
A->S=> < EDACBSFGHTVU >
A->F=>< EDACBSFGHTVU >
F->G=><FGHSTVU>
F->H=>< FGHSTVU>
F->S=>< FGHSTVU >
M->N=><MNORFGHSTVU>
M->O=>< MNORFGHSTVU >
M->R=>< MNORFGHSTVU>
M->F=>< MNORFGHSTVU>
P->N=><PNORMFGHSTUV>
P->O=>< PNORMFGHSTUV>
P->R=>< PNORMFGHSTUV>
R->P=>< PNORMFGHSTUV>
S->T=><STVU>
S->V=>< STVU>
S->U=>< STVU>
S->TVU=>< STVU>
AM->Q=><AMQNOPRBCSFGHTVU >
Clasele de echivalen:
F={ A B , A C , D A , A E , E D , A S , A F , F G , F H , F S , M N , M O , P N , P
E F={ E ( A )= { A B , A C , A S , A E , D A , E D , A F } ,
E ( F ) ={ F G , F H , F S } ,
E ( M )={ R P , R M , P N , P O , P R , M N , M O , M R , M F } ,
E ( S )= { S T , S U , S V } ,
E ( AM )= { AM Q } ,}

1) Construiesc mulimea J din F, cu determinanii X i Y, unde X Y schimb mulimea


J =J { X Y ,Y X } i modific mulimea F:
J ={ { A D , D A , A E , E A , E D , D E } ,
{} ,
{ R P , P R , M P , P M , M R , R M } ,
{} ,
{ } ,}
E F={ E ( A )= { A B , A C , A S , A F } ,
E ( F ) ={ F G , F H , F S } ,
E ( M )={ P N , P O , M N , M O, M R , M F } ,
E ( S )= { S T , S U , S V } ,
E ( AM )= { AM Q } ,}

2) terg din F dependee tranzitive. Pentru mulimea de dependene funcionale primit la punctul anterior
formez acoperirea neredundant n uniune cu mulimea J:
(B)/F{A->BUJ}=><ACSFDEGHTUV>, NU
(C)/F{A->C}=><ABSFGHDETUV>,NU
(S)/F{A->S}=><ABCFDEGHS>,OMITEM
(F)/F{A->F}=><ABCDE>,NU
(G)/F{F->G}=><FHSTUV>,NU
(H)/F{F->H}=><FGSTUV>,NU
(S)/F{F->S}=><FGH>,NU
(P)/F{P->N}=><ORMNGHSTUV>,OMITEM
(O)/F{P->O}=><PMRNFGHSTUV>,NU
(N)/F{M->N}=><MORFGHSTUVP>,NU
(O)/F{M->O}=><MORFGHSTUVP>,OMITEM
(R)/F{M->R}=><MOR>,OMITEM
(F)/F{M->F}=><MORPONM>,NU
(T)/F{S->T}=><SUV>,NU
(U)/F{S->U}=><STV>,NU
(V)/F{S->V}=><SVT>,NU
(AM)/F{AM->Q}=><AM>,NU

3) Introduc J n F:
E F={ E ( A )= { A B , A C , A F , A D , D A , A E , E A , E D , D E } ,
E ( F ) ={ F G , F H , F S } ,
E ( M )={ P O , M N , M F , R P , P R , M P , P M , M R , R M } ,
E ( S )= { S T , S U , S V } ,
E ( AM )= { AM Q } ,}
4) Reeind din punctul anterior formez schemele bazei de date i cheile primare:
R 1= { A , D , B , C , E , F } , K = { A , D , E } ;
R2= { F ,G , H , S } , K= { F } ;
R3= { P , O , M , N , F , R } , K= { P , M , R , P } ;
R4 ={ S ,T ,U , V } , K= { S } ;
R5= { A , M } , K ={ AM } .
2. Implementarea bazei de date n SQL
2.1 Crearea bazei de date noi n T-SQL
use master
go
IF DB_ID('Academia_Cisco') IS NOT NULL
DROP DATABASE ICT_SUMMIT;
CREATE DATABASE Academia_Cisco
ON(
NAME = Academia_Cisco_data,
FILENAME = 'C:\BDC\Academia_Cisco.mdf',
SIZE = 250MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 25MB)
LOG ON(
NAME = Academia_Cisco_log,
FILENAME = 'C:\BDC\Academia_Cisco.ldf',
SIZE = 5MB,
FILEGROWTH = 5MB);
GO

Figura 2.1.1 Rezultatul scriptului pentru crearea Bazei de Date n Transact-SQL (C:\BDC)

2.2 Crearea relaiilor i constrngerilor de integritate n T-SQL


IF OBJECT_ID('Student','U') IS NOT NULL
DROP TABLE [Student];CREATE TABLE [Student] (
[Student_Id] INT NOT NULL IDENTITY(1,1),[Student_Nume] VARCHAR(255),
[Student_Prenume] VARCHAR(255),
[Student_Email] VARCHAR(255) NOT NULL,
[Student_Tel] VARCHAR(255) NOT NULL,
[Sala_Id] INT NOT NULL ,
[Tema_Id] INT NOT NULL,

CONSTRAINT [CHECK_Student_Id] CHECK(Student_Id>0),


CONSTRAINT [UNIQUE_Student_Email] UNIQUE(Student_Email),
CONSTRAINT [UNIQUE_Student_Tel] UNIQUE(Student_Tel),
);
-- TEMA
IF OBJECT_ID('Tema','U') IS NOT NULL
DROP TABLE [Tema];
CREATE TABLE [Tema] (
[Tema_Id] INT NOT NULL IDENTITY(1,1),
[Tema_Nume] VARCHAR(255) NOT NULL,
[Tema_Descriere] VARCHAR(255),
[Sala_Id] INT NOT NULL ,
);
-- Profesor
IF OBJECT_ID('Profesor','U') IS NOT NULL
DROP TABLE [Profesor];
CREATE TABLE [Profesor] (
[Profesor_Id] INT NOT NULL IDENTITY(1,1),
[Profesor_Nume] VARCHAR(255) NOT NULL,
[Profesor_Prenume] VARCHAR(255) NOT NULL,
[Profesor_Email] VARCHAR(255) NOT NULL,
[Profesor_Tel] VARCHAR(255) NOT NULL,
[Tema_Id] INT NOT NULL,
CONSTRAINT [CHECK_Profesor_Id] CHECK(Profesor_Id>0),
CONSTRAINT [UNIQUE_Profesor_Email] UNIQUE(Profesor_Email),
CONSTRAINT [UNIQUE_Speaker_Tel] UNIQUE(Profesor_Tel),
);
-- Sala
IF OBJECT_ID('Sala','U') IS NOT NULL
DROP TABLE [Sala];
CREATE TABLE [Sala] (
[Sala_Id] INT NOT NULL IDENTITY(1,1),
[Sala_Nume] VARCHAR(255) NOT NULL,
[Sala_Locuri] INT NOT NULL,
[Sala_Tip] VARCHAR(255),
CONSTRAINT [CHECK_Sala_Id] CHECK([Sala_Id]>0),
);

Figura 2.2.1 Rezultatul scriptului pentru rearea relaiilor i constrngerilor de integritate n Transact-SQL
2.3 Crearea cheilor externe
ALTER TABLE [Sala]
ADD CONSTRAINT [K_SALAID] PRIMARY KEY([Sala_Id]);
ALTER TABLE [Tema]
ADD CONSTRAINT [K_TEMAID] PRIMARY KEY([Tema_Id]),
CONSTRAINT [FK_SALAID_TEMA] FOREIGN KEY ([Sala_Id]) REFERENCES [Sala]([Sala_Id]);

ALTER TABLE [Student]


ADD CONSTRAINT [K_StudentID] PRIMARY KEY([Student_Id]),
CONSTRAINT [FK_SALAID] FOREIGN KEY([Sala_Id]) REFERENCES [Sala]([Sala_Id]),
CONSTRAINT [FK_TEMAID] FOREIGN KEY([Tema_Id]) REFERENCES [Tema]([Tema_Id]);

ALTER TABLE [Profesor]


ADD CONSTRAINT [K_ProfesorID] PRIMARY KEY([Profesor_Id]),
CONSTRAINT [FK_TEMAID_FK] FOREIGN KEY ([Tema_Id]) REFERENCES [Tema]([Tema_Id]);

Figura 2.3.1 Rezultatul scriptului pentru crearea cheilor externe n Transact-SQL


2.4 Crearea diagramei bazei de date

Figura 2.4.1 Diagrama bazei de date

2.5 Popularea cu tupluri relaiile bazei de date


------------------------------------- populate db
USE Academia_Cisco;
GO
INSERT INTO [Student]
([Student_Nume],[Student_Prenume],[Student_Email],[Student_Tel],[Sala_Id],[Tema_Id])
VALUES
('Mihai','Tamazlicaru','MihaiTam.m@gmail.com','598712',2,4),
('Dumitru','Midirgan','DumitruMidrig.@gmail.com','28560',17,4),
('Dorian','Saranciuc','saranciuc.dorian@gmail.com','000002',1,5),
('Constatin','Esanu','ConstatinEsanu@rambler.ru','4354756',12,5),
('AAAAAAA','BBBBBBBB','ABABABA.@rambler.com','141420',1,6);

select * from Student;

USE Academia_Cisco;
GO
INSERT INTO [Tema]
([Tema_Nume],[Tema_Descriere],[Sala_Id])
VALUES
('Routing','Rutarea Paketelor',5),
('Swinchiking','Dispozitiv_de_layer_2',4),
('WanLan','WanLanRouting',5),
('Subnetare','Subnetarea Retelelor', 15);

select* from Tema;

USE Academia_Cisco;
GO
INSERT INTO Sala
([Sala_Nume],[Sala_Locuri],[Sala_Tip])
VALUES
('D-03',111,'Deschis'),
('D-02',222,'Deschis'),
('D-01',333,'Inchis');

select * from Sala;

use Academia_Cisco
go
INSERT INTO Profesor ([Profesor_Nume],[Profesor_Prenume],[Profesor_Email],
[Profesor_Tel],[Tema_Id])
VALUES
('Iurie','Costas','CostasIurie.@gmail.com','12348906',14),
('Skupuiriri','Nadrei','SkupuriiAbdrei,@gmail.com','245472',8),
('Dorian','Saranciuc','DorianSaranciu.@gmail.com','66546457',6),
('Ion','Mihai','IonMiha.@gmail.com','668585',6);

select *from Profesor;

2.6 Crearea schemelor bazei de date


IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE
SYS.schemas.name='Student')
DROP SCHEMA [Student];
GO
CREATE SCHEMA [Student];
GO
ALTER SCHEMA [Student] TRANSFER [dbo].[Student];
GO
IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE
SYS.schemas.name='Tema')
DROP SCHEMA [Tema];
GO
CREATE SCHEMA [Tema];
GO
ALTER SCHEMA [Tema] TRANSFER [dbo].[Sala];
ALTER SCHEMA [Tema] TRANSFER [dbo].[Profesor];
ALTER SCHEMA [Tema] TRANSFER [dbo].[Tema];
GO

Figura 2.6.1 Rezultatul scriptului pentru crearea schemelor bazei de date Tranasact-SQL
2.7 Crearea utilizatorilor
IF EXISTS(SELECT * FROM [master].[dbo].[syslogins] WHERE [name]='Examplu_1' AND
[dbname]='Academia_Cisco')
DROP LOGIN Examplu_1;
CREATE LOGIN Examplu_1
WITH PASSWORD = '1111', DEFAULT_DATABASE = Academia_Cisco;
IF EXISTS(SELECT * FROM [master].[dbo].[sysusers] WHERE [name]='Examplu_1')
DROP USER Examplu_1;
CREATE USER Examplu_1 FOR LOGIN Examplu_1
WITH DEFAULT_SCHEMA = [Student];
EXEC SP_ADDSRVROLEMEMBER 'Examplu_1','sysadmin';
EXEC SP_ADDROLEMEMBER 'db_datareader', 'Examplu_1';
--2
IF EXISTS(SELECT * FROM [master].[dbo].[syslogins] WHERE [name]='Examplu_2' AND
[dbname]='Academia_Cisco')
DROP LOGIN Examplu_2;
CREATE LOGIN Examplu_2
WITH PASSWORD = '2222', DEFAULT_DATABASE = Academia_Cisco;
IF EXISTS(SELECT * FROM [master].[dbo].[sysusers] WHERE [name]='Examplu_2')
DROP USER Examplu_2;
CREATE USER Examplu_2 FOR LOGIN Examplu_2
WITH DEFAULT_SCHEMA = [Proiecte];
EXEC SP_ADDSRVROLEMEMBER 'Examplu_2','sysadmin';
EXEC SP_ADDROLEMEMBER 'db_datawriter', 'Examplu_2';

Figura 2.7.1 Rezultatul scriptului pentru crearea utilizatorilor in Tranasct-SQL

2.8 Crearea viziunilor


IF OBJECT_ID('VIEW_First','V') IS NOT NULL
DROP VIEW [VIEW_First];
GO
CREATE VIEW [VIEW_First]
WITH SCHEMABINDING
AS
SELECT
dbo.Profesor
dbo.Profesor,
FROM dbo.Utilizator_Speaker;
GO
DROP TABLE dbo.Profesor;
IF OBJECT_ID('VIEW_Second','V') IS NOT NULL
DROP VIEW [VIEW_Second];
GO
CREATE VIEW [VIEW_Second]
AS
SELECT
dbo.Student,
dbo.Tema.Tema_Descriere
FROM dbo.Tema
WHERE dbo.Tema.Tema_Descriere LIKE '%Despre%'
WITH CHECK OPTION
GO
UPDATE [VIEW_Second]
SET [VIEW_Second].Tema_Nume = 'Nu s-a Gasit'
WHERE [VIEW_Second].Tema_Descriere LIKE '%Despre%';

Figura 2.8.1 Rezultatul scriprului pentru crearea viziunilor

2.9 Crearea sinonimilor


IF OBJECT_ID('Tema','SN') IS NOT NULL
DROP SYNONYM [TEM];
CREATE SYNONYM [TEM] FOR dbo.Tema;
--/////////////////////////////////////////////
IF OBJECT_ID('Sal','SN') IS NOT NULL
DROP SYNONYM [Sal];
CREATE SYNONYM [Sal] FOR dbo.Sala;
--/////////////////////////////////////////////
IF OBJECT_ID('PR','SN') IS NOT NULL
DROP SYNONYM [PR];
CREATE SYNONYM [PR] FOR dbo.Prfesor;
--/////////////////////////////////////////////

IF OBJECT_ID('ST','SN') IS NOT NULL


DROP SYNONYM [ST];
CREATE SYNONYM [ST] FOR dbo.Student;

Figura 2.9.1 Rezultatul scriptului pentru crearea sinonimilor


3. Interograrea bazei de date
3.1 Crearea interogrilor ce exprima operaiile algebrei
relaionale
select * from Tema.Profesor
where Tema.Profesor.Profesor_Id = 1
union all
select* from Tema.Sala
where Tema.Sala.Sala_Id = 3;

Figura 3.1.1 Uniunea

--intersectie
--Sa se afiseze toate coloane din profesor si tema
select * from Tema.Profesor
where Tema.Profesor.Profesor_Id = 1
intersect
select* from Tema.Sala
where Tema.Sala.Sala_Id= 3;

Figura 3.1.2 Intersecia

--diferenta

--sa se gaseasca TemaId din Profesori unde Sala_tip din Sala este Deschis
select Tema_Id from Tema.Profesor
where Tema_Id = 6
except
select Sala_Tip from Tema.Sala
where Sala_Tip = '%Deschis'
Figura 3.1.3 Diferena

--produsul cartezian
--sa se afiseze tota inscritiile din Profesor sin din Sala
select * from Tema.Profesor
CROSS JOIN Tema.Sala;

Figura 3.1.4 Produs cartezian

-- Jonctiune
-- Tema id = cu sala id
SELECT * FROM [TEM] JOIN [Sal]
ON [TEM].Tema_Id=Sal.Sala_Id ;

Figura 3.1.5 Theta jonciune


--jonctiunea exsterna

--jonctiunea left join


--toate temele cu ajutorul left joi
select * from Tema.Sala
left outer join ON
[Tema].Sala.Sala_Nume = [Tema].Sala.Sala_Nume;

Figura 3.1.6 Jonciune stnga

--jonctiunea right join

select * from Tema.Sala


right outer join ON
[Tema].Sala.Sala_Nume = [Tema].Sala.Sala_Nume;

Figura 3.1.9 Jonciune dreapta

--semijonctiunea
select * from Tema.Sala
join ON
[Tema].Sala.Sala_Id = [Tema].Sala.Sala_Id;

Figura 3.1.11 Semijonciune


--divizarea fara pierderi
Select * from
(Select * from [TEM] ) AS [DIVIZIUNEA1]
JOIN
(Select * from [Sal]) AS [DIVIZIUNEA2]
ON [DIVIZIUNEA1].Sala_Id < [DIVIZIUNEA2].Sala_Locuri;

Figura 3.1.12 Divizarea far pierderi


--divizarea cu pierderi
Select DISTINCT * from
(Select * from [TEM] ) AS [DIVIZIUNEA1]
JOIN
(Select * from [Sala]) AS [DIVIZIUNEA2]
ON [DIVIZIUNEA1].Tema_Id < [DIVIZIUNEA2].Sala_Id;

Figura 3.1.13 Divizarea cu pierderi

3.2 Crearea interogrilor cu funcii de agregare


--Sa se afiseze locurile la sala care are cel mai putine locuri
select Min(Tema.Sala.Sala_Locuri) as Cele_mai_putin_locuri from Tema.Sala;

Figura 3.2.1 Rezultatul interogrii

--Sa se afiseze locurile la sala care are cel mai multe locuri

select Max(Tema.Sala.Sala_Locuri) as Cele_mai_multe_locuri from Tema.Sala;

Figura 3.2.2 Rezultatul interogrii

--Media aritmetica a temelor


select AVG(Tema.Profesor.Tema_Id) as Media_aritemetica_a_temelor
from Tema.Profesor;

Figura 3.2.3 Rezultatul interogrii


3.3 Crearea interogrilor de grupare
--unirelatie
select (Tema.Profesor.Profesor_Id) as ID_ul_Profesoral from Tema.Profesor
where Tema.Profesor.Profesor_Id < 5 group by Tema.Profesor.Profesor_Id;

Figura 3.3.1 Rezultatul interogrii


--multirelatie
select (Tema.Tema.Tema_Id) as Id_ul_Salilor_de_Clasa from Tema.Tema
where Tema.Sala_Id < 15

Figura 3.3.2 Rezultatul interogrii

3.4 Subinterogri
select * from Tema.Profesor
where Tema.Profesor.Profesor_Email in (select Tema.Profesor.Profesor_Nume from
Tema.Profesor);

Figura 3.4.1 Rezultatul interogrii

select Tema.Tema.Tema_Descriere, Tema.Tema.Sala_Id, Tema.Tema.Tema_Nume


from Tema.Tema
where Tema.Sala_Id < 10;

Figura 3.4.2 Rezultatul interogrii


select Tema.Sala.Sala_Locuri, Tema.Sala.Sala_Nume, Tema.Sala.Sala_Id
from Tema.Sala;

Figura 3.4.3 Rezultatul interogrii

3.5 Crearea declanatoarelor


GO
CREATE TRIGGER [TRIGGER_Utilizator]
ON [dbo].[Utilizator]
FOR UPDATE
AS
IF UPDATE([Utilizator_Nume])
BEGIN
IF EXISTS (SELECT * FROM inserted WHERE LOWER([Utilizator_Nume]) = 'D.Saranciuc')
ROLLBACK;
END
GO
UPDATE [dbo].[Utilizator]
SET [Utilizator_Nume] = 'Dorian'
WHERE [Utilizator_Prenume] = 'Saranciuc';

select * from utilizator;

Figura 3.6.1 Rezultatul scriptului T-SQL

3.6 Crearea procedurilor stocate


GO
USE ICT_SUMMIT
GO
IF OBJECT_ID('Sala_Locuri','P') IS NOT NULL
DROP PROCEDURE [Sala_Locuri];
GO
CREATE PROCEDURE [Sala_Locuri]
@LOC INT = 132
AS
Select MIN(Sala.Sala_Locuri) AS TypeofRooms from Sala
Where Sala_Locuri >= @LOC
Group BY Sala_Locuri
Order by Sala_Locuri DESC;

-------------------------------------------
GO
USE ICT_SUMMIT
GO
IF OBJECT_ID('Tema_descriere','P') IS NOT NULL
DROP PROCEDURE [Tema_descriere];
GO
CREATE PROCEDURE [Tema_descriere]
AS
SELECT *
FROM dbo.Tema
WHERE dbo.Tema.Tema_Descriere LIKE '%About%'
EXCEPT
SELECT *
FROM dbo.Tema
WHERE dbo.Tema.Tema_Descriere LIKE '%Weather%';

Figura 3.7.1 Rezultatul scriptului T-SQL

Concluzie
Una din utilizrile cele mai frecvente ale calculatorului const n stocarea datelor. In general prin date se are n vedere un
numr, o secvena, un caracter. Astfel organizarea datelor ntr-un sitem orientat pe procese raspunde unor cerine concrete n
funcie de problema care se rezolva. Diverse aplicaii utilizeaz date distincte pentru diferite prelucrri. Prin urmare, orice
echip de utilizatori dispun de propriile fiiere. Dar accesul la aceste date pna la urma va fi determinat de organizarea
fizica a datelor.
Pentru solutonarea acestor probleme, din nou intervin capacitaile calculatorului de a face rapid multe lucruri simple. Adic
calculatorul se propune s controleze coordonaa ntre date i pentru aceasta datelor li se d o structur distinc care nu se
mai bazeaza pe conceptul clasic de fiier. Pentru a obine informaiile necesare, se leag datele din diferite componente n
structuri complexe. n felul acesta au aprut bazele de date.
In lucrarea de an prezentat mai mai sus am creat o baza de date pentru Academia Cisco, dupa parerea mea este o baza de
date reusit. Doar ca ar trebui de o expandat pe scara mai larga. Aceasta baza de date ofera posibilitatea de stoca mai multe
feluri de data cum ar fi nume, prenumele profesorilor, studentilor impreuna cu infortaia personala a unui membru al acestei,
att student ct si profesor.
Anexa A - Scriptul T-SQL bazei de date
Crearea bazei de date noi n T-SQL
use master
go
IF DB_ID('Academia_Cisco') IS NOT NULL
DROP DATABASE ICT_SUMMIT;
CREATE DATABASE Academia_Cisco
ON(
NAME = Academia_Cisco_data,
FILENAME = 'C:\BDC\Academia_Cisco.mdf',
SIZE = 250MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 25MB)
LOG ON(
NAME = Academia_Cisco_log,
FILENAME = 'C:\BDC\Academia_Cisco.ldf',
SIZE = 5MB,
FILEGROWTH = 5MB);
GO
];
GO
--
Student

IF OBJECT_ID('Student','U') IS NOT NULL


DROP TABLE [Student];CREATE TABLE [Student] (
[Student_Id] INT NOT NULL IDENTITY(1,1),[Student_Nume] VARCHAR(255),
[Student_Prenume] VARCHAR(255),
[Student_Email] VARCHAR(255) NOT NULL,
[Student_Tel] VARCHAR(255) NOT NULL,
[Sala_Id] INT NOT NULL ,
[Tema_Id] INT NOT NULL,
CONSTRAINT [CHECK_Student_Id] CHECK(Student_Id>0),
CONSTRAINT [UNIQUE_Student_Email] UNIQUE(Student_Email),
CONSTRAINT [UNIQUE_Student_Tel] UNIQUE(Student_Tel),
);

-- TEMA

IF OBJECT_ID('Tema','U') IS NOT NULL


DROP TABLE [Tema];
CREATE TABLE [Tema] (
[Tema_Id] INT NOT NULL IDENTITY(1,1),
[Tema_Nume] VARCHAR(255) NOT NULL,
[Tema_Descriere] VARCHAR(255),
[Sala_Id] INT NOT NULL ,
);

-- Profesor

IF OBJECT_ID('Profesor','U') IS NOT NULL


DROP TABLE [Profesor];
CREATE TABLE [Profesor] (
[Profesor_Id] INT NOT NULL IDENTITY(1,1),
[Profesor_Nume] VARCHAR(255) NOT NULL,
[Profesor_Prenume] VARCHAR(255) NOT NULL,
[Profesor_Email] VARCHAR(255) NOT NULL,
[Profesor_Tel] VARCHAR(255) NOT NULL,
[Tema_Id] INT NOT NULL,
CONSTRAINT [CHECK_Profesor_Id] CHECK(Profesor_Id>0),
CONSTRAINT [UNIQUE_Profesor_Email] UNIQUE(Profesor_Email),
CONSTRAINT [UNIQUE_Speaker_Tel] UNIQUE(Profesor_Tel),
);

--Sala--

IF OBJECT_ID('Sala','U') IS NOT NULL


DROP TABLE [Sala];
CREATE TABLE [Sala] (
[Sala_Id] INT NOT NULL IDENTITY(1,1),
[Sala_Nume] VARCHAR(255) NOT NULL,
[Sala_Locuri] INT NOT NULL,
[Sala_Tip] VARCHAR(255),
CONSTRAINT [CHECK_Sala_Id] CHECK([Sala_Id]>0),
);

Crearea cheilor externe


ALTER TABLE [Sala]
ADD CONSTRAINT [K_SALAID] PRIMARY KEY([Sala_Id]);
ALTER TABLE [Tema]
ADD CONSTRAINT [K_TEMAID] PRIMARY KEY([Tema_Id]),
CONSTRAINT [FK_SALAID_TEMA] FOREIGN KEY ([Sala_Id]) REFERENCES [Sala]([Sala_Id]);

ALTER TABLE [Student]


ADD CONSTRAINT [K_StudentID] PRIMARY KEY([Student_Id]),
CONSTRAINT [FK_SALAID] FOREIGN KEY([Sala_Id]) REFERENCES [Sala]([Sala_Id]),
CONSTRAINT [FK_TEMAID] FOREIGN KEY([Tema_Id]) REFERENCES [Tema]([Tema_Id]);

ALTER TABLE [Profesor]


ADD CONSTRAINT [K_ProfesorID] PRIMARY KEY([Profesor_Id]),
CONSTRAINT [FK_TEMAID_FK] FOREIGN KEY ([Tema_Id]) REFERENCES [Tema]([Tema_Id]);

Popularea cu tupluri relaiile bazei de date


USE Academia_Cisco;
GO
INSERT INTO [Student]
([Student_Nume],[Student_Prenume],[Student_Email],[Student_Tel],[Sala_Id],[Tema_Id])
VALUES
('Mihai','Tamazlicaru','MihaiTam.m@gmail.com','598712',2,4),
('Dumitru','Midirgan','DumitruMidrig.@gmail.com','28560',17,4),
('Dorian','Saranciuc','saranciuc.dorian@gmail.com','000002',1,5),
('Constatin','Esanu','ConstatinEsanu@rambler.ru','4354756',12,5),
('AAAAAAA','BBBBBBBB','ABABABA.@rambler.com','141420',1,6);

select * from Student;

USE Academia_Cisco;
GO
INSERT INTO [Tema]
([Tema_Nume],[Tema_Descriere],[Sala_Id])
VALUES
('Routing','Rutarea Paketelor',5),
('Swinchiking','Dispozitiv_de_layer_2',4),
('WanLan','WanLanRouting',5),
('Subnetare','Subnetarea Retelelor', 15);

select* from Tema;

USE Academia_Cisco;
GO
INSERT INTO Sala
([Sala_Nume],[Sala_Locuri],[Sala_Tip])
VALUES
('D-03',111,'Deschis'),
('D-02',222,'Deschis'),
('D-01',333,'Inchis');

select * from Sala;

use Academia_Cisco
go
INSERT INTO Profesor ([Profesor_Nume],[Profesor_Prenume],[Profesor_Email],
[Profesor_Tel],[Tema_Id])
VALUES
('Iurie','Costas','CostasIurie.@gmail.com','12348906',14),
('Skupuiriri','Nadrei','SkupuriiAbdrei,@gmail.com','245472',8),
('Dorian','Saranciuc','DorianSaranciu.@gmail.com','66546457',6),
('Ion','Mihai','IonMiha.@gmail.com','668585',6);

select *from Profesor;

Crearea schemelor bazei de date


IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE
SYS.schemas.name='Student')
DROP SCHEMA [Student];
GO
CREATE SCHEMA [Student];
GO
ALTER SCHEMA [Student] TRANSFER [dbo].[Student];
GO
IF EXISTS(SELECT SYS.schemas.name FROM SYS.schemas WHERE
SYS.schemas.name='Tema')
DROP SCHEMA [Tema];
GO
CREATE SCHEMA [Tema];
GO
ALTER SCHEMA [Tema] TRANSFER [dbo].[Sala];
ALTER SCHEMA [Tema] TRANSFER [dbo].[Profesor];
ALTER SCHEMA [Tema] TRANSFER [dbo].[Tema];
GO
Crearea utilizatorilor
IF EXISTS(SELECT * FROM [master].[dbo].[syslogins] WHERE [name]='Examplu_1' AND
[dbname]='Academia_Cisco')
DROP LOGIN Examplu_1;
CREATE LOGIN Examplu_1
WITH PASSWORD = '1111', DEFAULT_DATABASE = Academia_Cisco;
IF EXISTS(SELECT * FROM [master].[dbo].[sysusers] WHERE [name]='Examplu_1')
DROP USER Examplu_1;
CREATE USER Examplu_1 FOR LOGIN Examplu_1
WITH DEFAULT_SCHEMA = [Student];
EXEC SP_ADDSRVROLEMEMBER 'Examplu_1','sysadmin';
EXEC SP_ADDROLEMEMBER 'db_datareader', 'Examplu_1';
--2
IF EXISTS(SELECT * FROM [master].[dbo].[syslogins] WHERE [name]='Examplu_2' AND
[dbname]='Academia_Cisco')
DROP LOGIN Examplu_2;
CREATE LOGIN Examplu_2
WITH PASSWORD = '2222', DEFAULT_DATABASE = Academia_Cisco;
IF EXISTS(SELECT * FROM [master].[dbo].[sysusers] WHERE [name]='Examplu_2')
DROP USER Examplu_2;
CREATE USER Examplu_2 FOR LOGIN Examplu_2
WITH DEFAULT_SCHEMA = [Proiecte];
EXEC SP_ADDSRVROLEMEMBER 'Examplu_2','sysadmin';
EXEC SP_ADDROLEMEMBER 'db_datawriter', 'Examplu_2';

Crearea viziunilor
IF OBJECT_ID('VIEW_First','V') IS NOT NULL
DROP VIEW [VIEW_First];
GO
CREATE VIEW [VIEW_First]
WITH SCHEMABINDING
AS
SELECT
dbo.Profesor
dbo.Profesor,
FROM dbo.Utilizator_Speaker;
GO
DROP TABLE dbo.Profesor;

IF OBJECT_ID('VIEW_Second','V') IS NOT NULL


DROP VIEW [VIEW_Second];
GO
CREATE VIEW [VIEW_Second]
AS
SELECT
dbo.Student,
dbo.Tema.Tema_Descriere
FROM dbo.Tema
WHERE dbo.Tema.Tema_Descriere LIKE '%Despre%'
WITH CHECK OPTION
GO
UPDATE [VIEW_Second]
SET [VIEW_Second].Tema_Nume = 'Nu s-a Gasit'
WHERE [VIEW_Second].Tema_Descriere LIKE '%Despre%';
9 Crearea sinonimilor
IF OBJECT_ID('Tema','SN') IS NOT NULL
DROP SYNONYM [TEM];
CREATE SYNONYM [TEM] FOR dbo.Tema;
--/////////////////////////////////////////////
IF OBJECT_ID('Sal','SN') IS NOT NULL
DROP SYNONYM [Sal];
CREATE SYNONYM [Sal] FOR dbo.Sala;
--/////////////////////////////////////////////
IF OBJECT_ID('PR','SN') IS NOT NULL
DROP SYNONYM [PR];
CREATE SYNONYM [PR] FOR dbo.Prfesor;
--/////////////////////////////////////////////

IF OBJECT_ID('ST','SN') IS NOT NULL


DROP SYNONYM [ST];
CREATE SYNONYM [ST] FOR dbo.Student;