Proiect SGBD

59
ADASCALITEI IOAN GRUPA 1026 Proiect SGBD Descriere proiect: Proiectul consta in crearea unei baze de date privind informatiile referitoare la recoltarea probelor de sange in cadrul spitalului Polisano, Sibiu. Am stocat date in 4 tabele, interconectate. Datele stocate se refera la persoana careia i se ia sange (tabela PERSOANE), grupele sanguine (GRUPE), doctorii la care acestia apeleaza (tabela DOCTORI), si consultatiile pe care acestia le realizeaza in momentul recoltarii sangelui (tabela CONSULTATII). Reguli si structura tabelelor: La inceput, intre persoane si doctori exista o relatie de tip M:M. Pentru asigurarea integritatii bazei de date, am creat tabela Consultatii care se leaga de cele 2 tabele prin doua relatii de tip 1:M. O persoana poate avea o singura grupa sanguina. Mai multe persoane pot avea aceeasi grupa sanguina. La o consultatie poate sa participe o singura persoana, dar o persoana poate fi consultata de mai multe ori. Un doctor poate realiza mai multe consultatii. La o consultatie poate participa un singur doctor.

description

Proiect SGBD

Transcript of Proiect SGBD

ADASCALITEI IOAN GRUPA 1026

Proiect SGBD

Descriere proiect: Proiectul consta in crearea unei baze de date privind informatiile referitoare la recoltarea probelor de sange in cadrul spitalului Polisano, Sibiu. Am stocat date in 4 tabele, interconectate. Datele stocate se refera la persoana careia i se ia sange (tabela PERSOANE), grupele sanguine (GRUPE), doctorii la care acestia apeleaza (tabela DOCTORI), si consultatiile pe care acestia le realizeaza in momentul recoltarii sangelui (tabela CONSULTATII).

Reguli si structura tabelelor: La inceput, intre persoane si doctori exista o relatie de tip M:M. Pentru asigurarea integritatii bazei de date, am creat tabela Consultatii care se leaga de cele 2 tabele prin doua relatii de tip 1:M. O persoana poate avea o singura grupa sanguina. Mai multe persoane pot avea aceeasi grupa sanguina. La o consultatie poate sa participe o singura persoana, dar o persoana poate fi consultata de mai multe ori. Un doctor poate realiza mai multe consultatii. La o consultatie poate participa un singur doctor.

Tabelele si schema bazei de date:Tabela PERSOANE:CampTipRestrictiiComentarii

Cod_persoanaNUMBER(5)Primary Key

Nume_persoanaVARCHAR2(15)Not null

Prenume_persoanaVARCHAR2(20)Not null

SexVARCHAR2(1)

Data_nasteriiDATE

AdresaVARCHAR2(50)

Email_persoanaVARCHAR2(30)Check

TelefonVARCHAR2(15)Not null

Cod_grupaNUMBER(5)Foreign key, not nullCheie externa catre tabela PERSOANE. Fiecare perosoana are o grupa sanguina.

Tabela GRUPE:CampTipRestrictiiComentarii

Cod_grupaNUMBER(5)Primary key

Nume_grupaVARCHAR2(4)Not null

Tabela DOCTORI:CampTipRestrictiiComentarii

Cod_doctorNUMBER(5)Primary key

Nume_doctorVARCHAR2(15)Not null

Prenume_doctorVARCHAR2(20)Not null

Adresa_doctorVARCHAR2(50)

Email_doctorVARCHAR2(30)Check

Telefon_doctorVARCHAR2(15)

Tabela CONSULTATII:CampTipRestrictiiComentarii

Cod_consultatieNUMBER(5)Primary key

Data_consultatieDATENot null

Cod_persoanaNUMBER(5)Foreign keyCheie externa catre Persoane

Cod_doctorNUMBER(5)Foreign keyCheie externa catre Doctori

CONSULTATII

Cod_consultatie

Data_consultatie

Cod_persoana

Cod_doctor

Schema bazei de date in format FN3:PERSOANE

Cod_persoana

Nume_persoana

Prenume_persoana

Sex

Data_nasterii

Adresa

Email_persoana

Telefon

Cod_grupa

GRUPE

Cod_grupa

Nume_grupa

DOCTORI

Cod_doctor

Nume_doctor

Prenume_doctor

Adresa_doctor

Email_doctor

Telefon_doctor

Crearea tabelelor:Cerina:S se creeze tabelele PERSOANE, GRUPE, DOCTORI SI CONSULTATII pe baza structurii si tipurilor de date prezentate mai sus.CREATE TABLE PERSOANE (cod_persoana NUMBER(5) PRIMARY KEY, nume_persoana VARCHAR2(15) NOT NULL, prenume_persoana VARCHAR2(20) NOT NULL, sex VARCHAR2(1), data_nasterii DATE, adresa VARCHAR2(50), email_persoana VARCHAR2(30), telefon VARCHAR2(15) NOT NULL, CONSTRAINT ck1 CHECK (email_persoana LIKE '%@%.%'), cod_grupa REFERENCES GRUPE(cod_grupa));

Column NameData TypeNullableDefaultPrimary Key

COD_PERSOANANUMBER(5,0)No1

NUME_PERSOANAVARCHAR2(15)No

PRENUME_PERSOANAVARCHAR2(20)No

SEXVARCHAR2(1)Yes

DATA_NASTERIIDATEYes

ADRESAVARCHAR2(50)Yes

EMAIL_PERSOANAVARCHAR2(30)Yes

TELEFONVARCHAR2(15)No

COD_GRUPANUMBER(5,0)Yes

CREATE TABLE GRUPE (cod_grupa NUMBER(5) PRIMARY KEY, nume_grupa VARCHAR2(4) NOT NULL);Column NameData TypeNullableDefaultPrimary Key

COD_GRUPANUMBER(5,0)No1

NUME_GRUPAVARCHAR2(4)No

CREATE TABLE DOCTORI (cod_doctor NUMBER(5) PRIMARY KEY, nume_doctor VARCHAR2(15) NOT NULL, prenume_doctor VARCHAR2(20) NOT NULL, adresa_doctor VARCHAR2(50), email_doctor VARCHAR2(30), telefon_doctor VARCHAR2(15) NOT NULL, CONSTRAINT ck2 CHECK (email_doctor LIKE '%@%.%'));Column NameData TypeNullableDefaultPrimary Key

COD_DOCTORNUMBER(5,0)No1

NUME_DOCTORVARCHAR2(15)No

PRENUME_DOCTORVARCHAR2(20)No

ADRESA_DOCTORVARCHAR2(50)Yes

EMAIL_DOCTORVARCHAR2(30)Yes

TELEFON_DOCTORVARCHAR2(15)No

CREATE TABLE CONSULTATII (cod_consultatie NUMBER(5), data_consultatie DATE NOT NULL, cod_persoana NUMBER(5) REFERENCES PERSOANE(cod_persoana), cod_doctor REFERENCES DOCTORI(cod_doctor), CONSTRAINT ck3 CHECK(cod_persoana IS NOT NULL), CONSTRAINT ck4 CHECK(cod_doctor IS NOT NULL));Column NameData TypeNullableDefaultPrimary Key

COD_CONSULTATIENUMBER(5,0)Yes

DATA_CONSULTATIEDATENo

COD_PERSOANANUMBER(5,0)Yes

COD_DOCTORNUMBER(5,0)Yes

Adaugarea inregistrarilor in tabele:PENTRU TABELA GRUPA:INSERT INTO GRUPE(cod_grupa, nume_grupa) VALUES (140, '0')INSERT INTO GRUPE(cod_grupa, nume_grupa) VALUES (141, 'A')INSERT INTO GRUPE(cod_grupa, nume_grupa) VALUES (142, 'B')INSERT INTO GRUPE(cod_grupa, nume_grupa) VALUES (143, 'AB')

PENTRU TABELA PERSOANE:INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES (1000, 'Muja', 'Stefan-Andrei', 'M',TO_DATE('20.09.1994', 'DD.MM.YYYY'), 'Ramnicu Valcea', '[email protected]', '0766361429', 140)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES (1001, 'Chitu', 'Robert-Ionut', 'M',TO_DATE('07.01.1996', 'DD.MM.YYYY'), 'Ramnicu Valcea', '[email protected]', '0751626362', 141)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES (1002, 'Vinereanu', 'Razvan-Nicolae', 'M',TO_DATE('30.10.1996', 'DD.MM.YYYY'), 'Ramnicu Valcea', '[email protected]', '0755317122', 140)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES (1003, 'Grecu', 'Andreea-Beatrice', 'F',TO_DATE('21.12.1992', 'DD.MM.YYYY'), 'Bucuresti', '[email protected]', '0780766894', 143)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1004, 'Usurelu', 'Daniel-Constantin', 'M',TO_DATE('05.10.1995', 'DD.MM.YYYY'), 'Cluj-Napoca', '[email protected]', '0752531875', 142)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES (1005, 'Mlisan', 'Ryad', 'M',TO_DATE('13.08.1998', 'DD.MM.YYYY'), 'Timisoara', '[email protected]', '0749302245', 140)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1006, 'Poenaru', 'Gabriel', 'M',TO_DATE('07.09.1996', 'DD.MM.YYYY'), 'Sibiu', '[email protected]', '0742901230', 141)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES (1007, 'Raducu', 'Ioan-Mircea', 'M',TO_DATE('12.05.1994', 'DD.MM.YYYY'), 'Bucuresti', '[email protected]', '0723125647', 142)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1008, 'Velcu', 'Endy-Robert', 'M',TO_DATE('18.10.1994', 'DD.MM.YYYY'), 'Bucuresti', '[email protected]', '0734128769', 143)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1009, 'Paleu', 'Stefan-Andrei', 'M',TO_DATE('08.10.1995', 'DD.MM.YYYY'), 'Sibiu', '[email protected]', '0746481334', 140)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1010, 'Stelea', 'Bogdan-Marian', 'M',TO_DATE('21.10.1991', 'DD.MM.YYYY'), 'Constanta', '[email protected]', '0767123908', 142)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1011, 'Dura', 'Alexandru', 'M',TO_DATE('19.05.1992', 'DD.MM.YYYY'), 'Sibiu', '[email protected]', '072905230', 140)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1012, 'Duca', 'Flavius-Alin', 'M',TO_DATE('13.07.1991', 'DD.MM.YYYY'), 'Sibiu', '[email protected]', '0729124906', 141)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1013, 'Jurca', 'Daiana-Nicole', 'F',TO_DATE('07.12.1995', 'DD.MM.YYYY'), 'Oradea', '[email protected]', '0671830197', 140)INSERT INTO PERSOANE(cod_persoana, nume_persoana, prenume_persoana, sex, data_nasterii, adresa, email_persoana, telefon, cod_grupa) VALUES(1014, 'Mocanu', 'Radu-Anton', 'M',TO_DATE('19.10.1991', 'DD.MM.YYYY'), 'Ramnicu Valcea', '[email protected]', '0729035781', 143) PENTRU TABELA DOCTORI:INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (100, 'Bizant', 'Leontin', 'Bucuresti', '[email protected]', '07662283398')INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (101, 'Calota', 'Virgil', 'Sibiu', '[email protected]', '0756278592)INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (102, 'Dumbravescu', 'Emil', 'Ploiesti', '[email protected]', '0723678129')INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (103, 'Enache', 'George', 'Constanta', '[email protected]', '0748498490')INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (104, 'Galmeanu', 'Horia', 'Targoviste', '[email protected]', '0756721399')INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (105, 'Helesteanu', 'Cosmin', 'Targu Jiu', '[email protected]', '0745689901')INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (106, 'Izmailov', 'Hariontiu', 'Sfantu-Gheorghe', '[email protected]', '0760123890')INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (107, 'Paraschiv', 'Ovidiu', 'Iasi', '[email protected]', '0723123789')INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (108, 'Richiteanu', 'Tudor', 'Timisoara', '[email protected]', '0782345130')INSERT INTO DOCTORI(cod_doctor, nume_doctor, prenume_doctor, adresa_doctor, email_doctor, telefon_doctor) VALUES (109, 'Stanescu', 'Vasile', 'Clu-Napoca', '[email protected]', '0773619014')

PENTRU TABELA CONSULTATII:INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (401, TO_DATE('12.03.2015', 'DD.MM.YYYY'), 1000, 103)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (402, TO_DATE('13.03.2015', 'DD.MM.YYYY'), 1005, 101)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (403, TO_DATE('14.03.2015', 'DD.MM.YYYY'), 1002, 109)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (404, TO_DATE('15.03.2015', 'DD.MM.YYYY'), 1007, 100)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (405, TO_DATE('16.03.2015', 'DD.MM.YYYY'), 1010, 103)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (406, TO_DATE('17.03.2015', 'DD.MM.YYYY'), 1012, 104)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (407, TO_DATE('18.03.2015', 'DD.MM.YYYY'), 1014, 108)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (408, TO_DATE('19.03.2015', 'DD.MM.YYYY'), 1013, 102)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (409, TO_DATE('20.03.2015', 'DD.MM.YYYY'), 1007, 105)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (410, TO_DATE('21.03.2015', 'DD.MM.YYYY'), 1006, 108)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (411, TO_DATE('22.03.2015', 'DD.MM.YYYY'), 1011, 106)INSERT INTO CONSULTATII(cod_consultatie, data_consultatie, cod_persoana, cod_doctor) VALUES (412, TO_DATE('23.03.2015', 'DD.MM.YYYY'), 1004, 107)

B.Interaciunea cu serverul Oracle prin intermediul comenzilor SQL(LDD I LMD)1. S se selecteze numele i telefonul doctorului care este din Constana.declarev_nume doctori.nume_doctor%type;v_telefon doctori.telefon_doctor%type;beginselect nume_doctor, telefon_doctor into v_nume, v_telefon from doctori where adresa_doctor='Constanta';dbms_output.put_line('Doctorul ' || v_nume|| ' are nr de telefon: ' || v_telefon);end;/

2. S se afle sexul persoanei cu codul de 1014.DeclareV_sex persoane.sex%type;V_nume persoane.nume_persoana%type;BeginSelect sex, nume_persoana into v_sex, v_nume from persoaneWhere cod_persoana=1014;Dbms_output.put_line(' Persoana '|| v_nume||' are sexul '||v_sex);End;/

3. Se creaz tabela pers n cadrul unui bloc pl/sql. i se adaug nregistrri din tabela persoane.beginexecute immediate 'CREATE table pers AS SELECT * FROM persoane where 1=2';end;/

--adaugarea inregistariideclarev_cod persoane.cod_persoana%type;v_nume persoane.nume_persoana%type;v_prenume persoane.prenume_persoana%type;v_sex persoane.sex%type;v_data persoane.data_nasterii%type;v_adresa persoane.adresa%type;v_email persoane.email_persoana%type;v_tel persoane.telefon%type;v_codgr persoane.cod_grupa%type;beginselect cod_persoana, nume_persoana,prenume_persoana,sex,data_nasterii,adresa,email_persoana,telefon,cod_grupa into v_cod,v_nume,v_prenume,v_sex,v_data,v_adresa,v_email,v_tel,v_codgr from persoanewhere cod_persoana=1000;insert into pers (cod_persoana, nume_persoana,prenume_persoana,sex,data_nasterii,adresa,email_persoana,telefon,cod_grupa) values(v_cod,v_nume,v_prenume,v_sex,v_data,v_adresa,v_email,v_tel,v_codgr);dbms_output.put_line('S-a adaugat in tabela pers persoana: '||v_cod||' '||v_nume||' '||v_prenume||' '||v_sex||' '||v_data||' '||v_adresa||' '||v_email||' '||v_tel||' '||v_codgr);end;/

4.S se adauge o nou coloan n tabela Grupe.DECLAREV_SIR VARCHAR2(200);BEGINV_SIR:='ALTER TABLE grupe ADD (RH varchar2 (50))';DBMS_OUTPUT.PUT_LINE (V_SIR);EXECUTE IMMEDIATE V_SIR;END;/

5. Se adaug o nou nregistrare n tabela grupe.BEGININSERT INTO grupe(cod_grupa, nume_grupa)VALUES (144, 'C');END;/

6. S se modifice codul unuia dintre doctori, la alegere.declarev_cod number;beginupdate doctori set cod_doctor=cod_doctor+1where cod_doctor=110;end;/

7.S se tearg grupa nou creat de mai sus.declarebegindelete from grupe where cod_grupa=144;end;/

8. S se afieze numele doctorului i al persoanei care au consultaia cu codul 403.declarev_numeP persoane.nume_persoana%type;v_numeD doctori.nume_doctor%type;v_cod consultatii.cod_consultatie%type;beginselect nume_persoana, nume_doctor,cod_consultatie into v_numeP, v_numeD, v_cod from persoane p, doctori d, consultatii cwhere p.cod_persoana=c.cod_persoana and d.cod_doctor=c.cod_doctor and c.cod_consultatie=403;dbms_output.put_line('Persoana '||v_numeP||' si doctorul '||v_numeD||' au consultatia cu codul de: '||v_cod);end;

9. Folosirea unui tip record pentru selectarea numelui i adresei unei persoane.DECLAREvrec_pers persoane%rowtype;BEGINSELECT * into vrec_pers from persoane where cod_persoana=1003;dbms_output.put_line('Persoana: '|| vrec_pers.nume_persoana|| ' sta in: '||vrec_pers.adresa);

C.Structuri alternative i repetitive1. S se afieze toate persoanele folosind o structur de tip for.declarev_min persoane.cod_persoana%type;v_max persoane.cod_persoana%type;v_nume persoane.nume_persoana%type;beginselect min(cod_persoana), max(cod_persoana) into v_min, v_max from persoane;for i in v_min..v_maxloopselect nume_persoana into v_nume from persoane where cod_persoana=i;dbms_output.put_line(v_nume);end loop;end;/

2.Afiai toi doctorii folosind o structur while.declarei doctori.cod_doctor%type;v_min doctori.cod_doctor%type;v_max doctori.cod_doctor%type;v_nume doctori.nume_doctor%type;beginselect min(cod_doctor),max(cod_doctor) into v_min, v_max from doctori;i:=v_min;while (i