Sunteți pe pagina 1din 13

Descrierea bazei de date

Tema acestui proiect o reprezinta gestiunea unei baze de date pentru o farmacie.
Telul nostru este de a dezvolta si implementa sisteme informatice care sa asigure imbunatatirea
serviciilor pe care le ofera farmacia noastra, prin cresterea eficientei si a trasparentei proceselor
informatice ale acestora.
Scopul bazei de date este sa fie sortate retetele si sa se aiba o legatura a doctorilor care au
eliberat o reteta.
Schema conceptuala(ERD)
Am creat tabelele: CLIENT, MEDIC, RETETE, FARMACIST.
Intre tabela MEDIC si tabela RETETE exista o legatura de 1:M(un medic poate elibera mai
multe retete; o reteta poate fi eliberata de un medic).
Intre tabela CLIENT si tabela RETETE exista o legatura de 1:M(un client poate avea mai multe
retete; o reteta apartine unui singur client).
Intre tabela FARMACIST si tabela RETETE exista o legatura de 1:M(un farmacist vinde una
sau mai multe retete; o reteta este incasata de un sigur farmacist).

MEDIC

RETETA

CLIENT

# id_medic

# id_reteta

#id_client

*nume

*id_client

*nume

*prenume

*id_medic

*prenume

*telefon

*id_farmacist

*cnp

*email

*data_eliberare

FARMACIST
#id_farmacist
*nume
*prenume
*cnp

Comenzi pentru definirea datelor(LDD)


Crearea tabelelor

1.Crearea tabelei MEDIC


CREATE TABLE MEDIC(ID_MEDIC NUMBER, NUME VARCHAR2(30), PRENUME
VARCHAR2(30), TELEFON VARCHAR2(10), EMAIL VARCHR2(30));

2. Crearea tabelei CLIENT


CREATE TABLE CLIENT(ID_CLIENT NUMBER, NUME VARCHAR2(20), PRENUME
VARCHAR2(20), CNP VARCHAR2(13));

2.Creare tabelei FARMACIST


CREATE TABLE FARMACIST(ID_FARMACIST NUMBER, NUME VARCHAR2(20),
PRENUME VARCHAR2(20), CNP VARCHAR2(13));

3.Crearea tabelei RETETA


CREATE TABLE RETETA(ID_RETETA NUMBER, ID_CLIENT NUMBER, ID_MEDIC
NUMBER, ID_FARMACIST NUMBER, DATA_ELIBERARE DATE);

Adaugarea de constrangeri
1.Adaugarea constrangerilor pentru tabela MEDIC
ALTER TABLE MEDIC ADD CONSTRAINT ID_MEDIC_PK PRIMARY KEY(ID_MEDIC);
ALTER TABLE MEDIC ADD CONSTRAINT TELEFON_M_UQ UNIQUE(TELEFON);
ALTER TABLE MEDIC ADD CONSTRAINT NUME_NN CHECK(NUME IS NOT NULL);
ALTER TABLE MEDIC ADD CONSTRAINT EMAIL_M_UQ UNIQUE(EMAIL);

2.Adaugarea constrangerilor pentru tabela CLIENT


ALTER TABLE CLIENT ADD CONSTRAINT ID_CLIENT_PK PRIMARY
KEY(ID_CLIENT);
ALTER TABLE CLIENT ADD CONSTRAINT CNP_UQ UNIQUE(CNP);

3.Adaugarea constrangerilor pentru tabela FARMACIST


ALTER TABLE FARMACIST ADD CONSTRAINT ID_FARMACIST_PK PRIMARY
KEY(ID_FARMACIST);
ALTER TABLE FARMACIST ADD CONSTRAINT CNP_F_UQ UNIQUE(CNP);
ALTER TABLE FARMACIST ADD CONSTRAINT PRENUME_NN CHECK(PRENUME IS
NOT NULL);

4.Adaugarea constrangerilor pentru tabele RETETA


ALTER TABLE RETETA ADD CONSTRAINT ID_RETETA_PK PRIMARY
KEY(ID_RETETA);
ALTER TABLE RETETA ADD CONSTRAINT ID_CLIENT_FK FOREIGN
KEY(ID_CLIENT) REFERENCES CLIENT(ID_CLIENT);
ALTER TABLE RETETA ADD CONSTRAINT ID_MEDIC_FK FOREIGN KEY(ID_MEDIC)
REFERENCES MEDIC(ID_MEDIC);
ALTER TABLE RETETA ADD CONSTRAINT ID_MEDIC_FK FOREIGN KEY(ID_MEDIC)
REFERENCES MEDIC(ID_MEDIC);

Comenzi pentru manipularea datelor(LMD)


Popularea tabelelor(INSERT)
1.Popularea tabelei MEDIC
INSERT INTO MEDIC(ID_MEDIC, NUME, PRENUME, TELEFON, EMAIL) VALUES(1,
'CARTAS', 'GABRIEL', '0763729364', 'CASRTAS.G@YAHOO.COM');
INSERT INTO MEDIC(ID_MEDIC, NUME, PRENUME, TELEFON, EMAIL) VALUES(2,
'SALAHORU', 'ALBERT', '0747748204', 'ALBERT.SALAHORU@YAHOO.COM');
INSERT INTO MEDIC(ID_MEDIC, NUME, PRENUME, TELEFON, EMAIL) VALUES(3,
'HARBUZ', 'DANIELA', '0737997553', 'DANIELA20@YAHOO.COM');
INSERT INTO MEDIC(ID_MEDIC, NUME, PRENUME, TELEFON, EMAIL) VALUES(4,
'SANINI', 'SOFIA', '0757747109', 'SOFI.SANINI@YAHOO.COM');
INSERT INTO MEDIC(ID_MEDIC, NUME, PRENUME, TELEFON, EMAIL) VALUES(5,
'RUSU', 'ROXANA', '0786434109', 'RUSUROXANA@YAHOO.COM');

2.Popularea tabelei CLIENT


INSERT INTO CLIENT(ID_CLIENT, NUME, PRENUME, CNP) VALUES(1, 'TOPEA',
'ALINA', '2970521746393');
INSERT INTO CLIENT(ID_CLIENT, NUME, PRENUME, CNP) VALUES(2, 'COCEA',
'SANDRA', '2950813483829');
INSERT INTO CLIENT(ID_CLIENT, NUME, PRENUME, CNP) VALUES(3, 'SANDU',
'ALIN', '1890624586937');
INSERT INTO CLIENT(ID_CLIENT, NUME, PRENUME, CNP) VALUES(4, 'ROMAN',
'JEAN', '1880301548594');
INSERT INTO CLIENT(ID_CLIENT, PRENUME, CNP) VALUES(5, 'JULIET',
'2880301548594');

3.Popularea tabelei FARMACIST


INSERT INTO FARMACIST(ID_FARMACIST, NUME, PRENUME, CNP) VALUES(1,
'CRISTEA', 'SORANA', '2780327974635');
INSERT INTO FARMACIST(ID_FARMACIST, NUME, PRENUME, CNP)
VALUES(2,'COMAN', 'SONIA', '2800901890754');
INSERT INTO FARMACIST(ID_FARMACIST, NUME, PRENUME, CNP)
VALUES(3,'MANEA', 'CORINA-ELENA', '2901130483920');
INSERT INTO FARMACIST(ID_FARMACIST, NUME, PRENUME, CNP)
VALUES(4,'GAVRIL', 'BEATRICE', '2033077467483')
INSERT INTO FARMACIST(ID_FARMACIST, NUME, PRENUME, CNP)
VALUES(5,'RUSU', 'ANA-MARIA', '2820731374859');

4.Popularea tabelei RETETA


INSERT INTO RETETA(ID_RETETA, ID_MEDIC, ID_CLIENT, ID_FARMACIST,
DATA_ELIBERARE) VALUES(1, 1, 1, 1, '10/FEB/2013');
INSERT INTO RETETA(ID_RETETA, ID_MEDIC, ID_CLIENT, ID_FARMACIST,
DATA_ELIBERARE) VALUES(2, 2, 2, 2, '17/JAN/2013');
INSERT INTO RETETA(ID_RETETA, ID_MEDIC, ID_CLIENT, ID_FARMACIST,
DATA_ELIBERARE) VALUES(3, 3, 3, 3, '17/JULY/2013');
INSERT INTO RETETA(ID_RETETA, ID_MEDIC, ID_CLIENT, ID_FARMACIST,
DATA_ELIBERARE) VALUES(4, 4, 4, 4, '21/AUG/2014');

INSERT INTO RETETA(ID_RETETA, ID_MEDIC, ID_CLIENT, ID_FARMACIST,


DATA_ELIBERARE) VALUES(5, 5, 5, 5, '07/SEP/2014');

Expresii SQL
1.Dezactivarea unor constrangeri(pentru a permite introducerea tuturor datelor in tabel).
ALTER TABLE RETETA DISABLE CONSTRAINT ID_FARMACIST_FK;

ALTER TABLE FARMACIST DISABLE CONSTRAINT ID_FARMACIST_PK;

2.Activarea constragerilor.
ALTER TABLE FARMACIST ENABLE CONSTRAINT ID_FARMACIST_PK;

ALTER TABLE RETETA ENABLE CONSTRAINT ID_FARMACIST_FK;

3.Adaugarea colonei Specializare in tabela MEDIC.


ALTER TABLE MEDIC ADD(SPECIALIZARE VARCHAR2(20));

10

4.Adaugarea coloanei Pret in tabelul RETETA.


ALTER TABLE RETETA ADD(PRET NUMBER);

5.Redenumiti tabela RETETA in RETETE.


ALTER TABLE RETETA RENAME TO RETETE;

11

6.Modificati lungimea coloanei specializare din tabela MEDIC.


ALTER TABLE MEDIC MODIFY(SPECIALIZARE VARCHAR2(35));

7.Stergeti coloana specializare din tabela MEDIC.


ALTER TABLE CLIENT MEDIC DROP COLUMN SPECIALIZARE;

8.Sa se afiseze id-ul si prenumele clientilor care au numele necompletat.


SELECT ID_CLIENT, PRENUME
FROM CLIENT
WHERE NUME IS NULL;

12

9.Sa se afiseze numele si prenumele farmacistilor care s-au nascut in anul 1980.
SELECT NUME, PRENUME
FROM FARMACIST
WHERE CNP LIKE'_80%';

10.Crearea unei tabele MEDICI2 care sa preia id-ul, numele si email-ul din tabela MEDIC
cu numarul id-ului 1 si 4.
CREATE TABLE MEDICI2
AS SELECT ID_MEDIC, NUME, EMAIL
FROM MEDIC
WHERE ID_MEDIC IN(1, 4);

13