Sunteți pe pagina 1din 36

COLEGIUL NATIONAL ,,ALEXANDRU LAHOVARI RAMNICUL VALCEA

LUCRARE DE ATESTAT PROFESIONAL EVIDENTA PERSOANELOR DINTR O CLINICA PRIVATA Clasa a XII-a A Matematimatica informatica intensiv
2012-2013

ndrumator, Prof. Cataraga Issabella

Elev, Angheluta Rares Gabriel

CUPRINS Capitolul 1. Introducere in Oracle..........................................................6

Capitolul 2. Modelarea datelor pentru o clinica privata Scenariu....10 Diagrama entitate-relatie initiala.11 Diagrama entitate-relatie finala........................................12 Explicatii ale diagramei entitate-relatie............................13 Contruirea bazei de date...................................................14 Exemple de interogari......................................................26

Bibliografie.........................................................................37

CAPITOLUL I INTRODUCERE N ORACLE


Acest capitol introductiv scoate in eviden facilitile oferite de Oracle . CE ESTE ORACLE? Oracle const dintr-un set complet de constructori de aplicaii i produse pentru utilizatori,cautnd s asigure soluii complete n tehnologia informaiei. Aplicaiile Oracle sunt portabile peste un numr mare de staii de lucru i sisteme de operare, de la calculatoare personale la procesoare paralele. Oracle este nzestrat cu un flexibil Sistem de Management al Bazelor de Date(DBMS)-Serverul Oracle-pentru stocarea i managementul informaiei utilizate de aplicaii. Serverul Oracle conduce o baz de date cu toate avantajele unei structuri relaionale, avnd n plus capacitatea de a stoca i executa obiecte de tip baza de date precum proceduri i mecanisme de siguran. Serverul Oracle cuprinde un DBMS care controleaza:

Stocarea de date n sfera bazelor de date dedicate Recuperarea de date pentru aplicaii utilizand tehnici de optimizare adecvate Securitatea bazelor de date si a taskurilor permise pentru anumiti utilizatori Consistena i protecia datelor, incluznd arhivarea taskurilor si mecanisme de cutare Comunicarea i integritatea informaiilor, cnd bazele de date sunt distribuite ntr-o reea.

Aplicaiile Oracle trebuie rulate pe acelai computer la fel ca si Serverul Oracle. Alternativ,aplicaiile i utilitarele utilizate de ele pot sa fie rulate pe un sistem local pentru utilizator (sistemul 'client'), n timp ce Oracle DBMS ruleaza pe un altul (sistemul 'server'). n acest mediu 'client-server', un numr mare de resurse de calcul pot fi rulate. De exemplu,o aplicatie 'Oracle Forms' poate rula pe un computer personal client,in timp ce accesarea datelor este condus convenional de un Server Oracle pe un computer central.

Produsele Oracle Printre multele dezvoltri de aplicaii i produse pentru utilizatori accesibile in familia Oracle,exist o posibilitate comun pentru a accesa baza de date. Produsele Oracle conin: Oracle TextRetrieval O tehnologie care adauga capabilitati de refacere completa a textului intr-o baza de date Oracle. Pro*Oracle O serie de precomilatoare care permit accesul bazelor de date Oracle la limbajele de programare C, Cobol,Fortran,PL/1,Pascal si Ada. Oracle Card O interfata utilizator pentru producerea aplicatiilor cu baze de date usor de folosit ce incorporeaza grafice si facilitati multimedia. Oracle CASE O familie de instrumente care ajuta la analiza , designul si generarea aplicatiilor Oracle. SQL*Plus Un instrument care permite o utilizare directa si interactiva a limbajului SQL pentru a accesa serverul Oracle,utilizand comenzi ad-hoc sau prin rularea fisierelor de comanda. Mediul de dezvoltare auxiliar(CDE) Instrumentul de dezvoltare a aplicatiilor principale formeaza un set inchis integrat numit 'Mediul de Dezvoltare Auxiliar'.Elementele de baza ale CDE includ limbajul procedural al lui Oracle,PL/SQL,facilitati grafice si comunicare intre produse. Principalele instrumente CDE sunt: Oracle Forms V4 Permite ca aplicatii sofisticate bazate pe utilizarea ecranului sa fie construite repede si usor si permite utilizatorului sa ceara si sa manipuleze date intr-o structura cu forma convenabila ,la fel de bine ca afisarea imaginilor vizuale,si facilitati de accesare prevazute de alte produse CDE. Oracle Reports V2 Un puternic instrument de scriere a rapoartelor pentru constructia si executia rapoartelor sofisticate cu fonturi de text si imagini multiple. Oracle Graphics V2 Permite construirea si afisarea aplicatiilor vizuale, incluzand harti,grafice,imagini si desene. Oracle Book V1 Prevede abilitatea de a crea si vizualiza documente care includ hipertexte,sunete digitale si videoclipuri.
7

SQL,SQL*PLUS si PL/SQL *SQL


este limbajul utilizat pentru a accesa o baza de date relationala, inclusiv Oracle. poate fi utilizat de fiecare instrument Oracle,cand accesul la baza de date este necesar.

*PL/SQL

este limbajul Procedural al lui Oracle pentru scrierea aplicaiilor i pentru manipularea datelor n afara bazei de date. poate include un subset al comenzilor SQL, cnd accesul la baza de date este cerut este accesibil in fiecare din produsele CDE.De asemenea in insusi serverul Oracle(daca optiunea procedurala este instalata). este un produs Oracle in care limbajele SQL si PL/SQL pot fi utilizate. de asemenea are propriul limbaj de comanda pentru controlul comportarii produsului si pentru formatarea rezultatelor interogarilor SQL.

*SQL*Plus

In concluzie,SQL si PL/SQL sunt limbaje care sunt utilizate intr-un numar de produse Oracle .SQL*PluS este unul din produsele pe care acestea se afla. Abordarea relaional Principiile modelului relaional au fost pentru prima dat expuse de Dr. E. F.Codd, care n iunie 1970 a publicat un articol numit 'Un model relaional de date pentru marile bnci de date'. n acest articol Dr. Codd a propus modelul 'relaional' pentru sistemele de baze de date. Baza de date relaional este perceput de utilizatorii si ca o colecie de tabele bidimensionale care sunt uor de neles. Exist patru concepte : tabele coloane rnduri cmpuri Modelul relaional imit procesele unei ramuri a algebrei cunoscut sub numele de 'Algebra relaionala'. Aceste procese implic:

o colecie de obiecte cunoscute sub numele de RELAII o mulime de operatori ce acioneza asupra relaiilor pentru a produce noi relaii
8

Operatori relaionali Relaia Descrierea Restricia este o operaie care preia i afieaz datele din relaie. Este posibil s se afieze toate rndurile sau doar rndurile care ndeplinesc o condiie sau mai multe condiii. Proiecia este operaia care afieaz anumite coloane din relaie. Produs este rezultatul obinut cnd rndurile a doua mulimi de date sunt concatenate conform condiiilor specificate. Join este rezultatul obtinut cand randurile a doua multimi de date sunt concatenate conform conditiilor specificate. Reuniunea afieaz toate rndurile care apar n una, n cealalt sau n ambele din cele dou relaii. Intersecia afieaz toate rndurile care apar n ambele din cele doua relaii. Diferena afieaz rndurile care apar numai ntr-o singur relaie (SQL utilizeaza operatorul minus ). Proprieti ale bazelor de date relaionale

O baz de date relaional apare ca o colecie de relaii(tabele) ctre utilizator. Formatul coloanei/rndului este familiar i uor pentru vizualizarea datelor . Exist o mulime de operatori pentru partiionarea i combinarea relaiilor(selecia, proiecia, produsul, joinul, uniunea, intersecia, diferena). Nu sunt pointeri explicii;conexiunile sunt facute numai pe baza datelor. Limbajul utilizat pentru interogarea bazei de date este non-procedural si similar limbii engleze. Utilizatorul nu specific calea de acces i nu are nevoie s tie cum este informaia aranjat fizic. Comenzile pentru refacerea datelor i acelea pentru realizarea schimbrilor n baza de date sunt incluse intr-un singur limbaj SQL. Exist o independen total a datelor.
9

CAPITOLUL II Modelarea datelor pentru o clinic privat


Scenariu
Managerul clinicii Health Center dorete s rein ntr-o baz de date informaiile referitoare la clinic: serviciile oferite, evidena personalului i a pacienilor. Aceast baz de date trebuie s fie optimizat astfel nct s corespund cerinelor. De asemenea, trebuie s fie flexibil s permit dezvoltarea sau extinderea activitilor centrului. Clinica Health Center ofer consultaii medicale, servicii de recuperare medical (fizioterapie i gimnastic de recuperare) i posibilitatea efecturii de analize medicale. n acest scop dispune de mai multe cabinete i laboratoare specializate. n fiecare cabinet funcioneaz unul sau doi doctori pe baza unui anumit orar. Unitatea medical nu furnizeaz servicii chirurgicale i nici nu are posibilitatea de a spitaliza pacieni. La fiecare consultaie, medicul nregistreaz datele pacientului. Clinica, pe lng medici i asisteni mai are i ali angajai: cei care se ocup de partea financiar i de relaiile cu clienii, persoane care se ocup de curenie s.a. Fiecare client achit contravaloarea serviciilor oferite prin una sau mai multe facturi. Reprezentarea necesitilor clinicii trebuie realizat astfel nct s fie un model ct mai apropiat de modul n care se desfoar activitile ei. Datele trebuie stocate astfel nct s fie permis o cutare ct mai eficient. Design-ul bazei trebuie s fie flexibil astfel nct s poat fi adugate noi programri, s apar noi cabinete, s fie realizat o eviden a angajailor. n viitor se poate avea n vedere crearea unei pagini web care s conin informaiile referitoare la clinic, potenialii clieni putnd avea acces la datelele legate de serviciile furnizate i personalul medical, dar nu i la datele pacienilor.

10

Diagrama entitate-relaie iniial:

FACTURA # id *data *valoare


s fie pltit

s plteasc

CLINICA #id *nume *adresa *telefon o mail

are aparine

CABINET #numar * tip o comentarii

are s fie programat

are

PACIENT # id (#)CNP *nume *prenume *data_nasterii *adresa *ocupaia *loc_munc o telefon o mail
are

s lucreze

PERSONAL #id (#)CNP *nume *prenume *data_nasterii *adresa *vechime *salariu *telefon o specializare o mail
s ocupe

pentru completa s fie completat

NREGISTRARE # nr *data o diagnostic include

pentru s fie ocupat

POST # cod *cerine o observaii

TRATAMENT #id *start_date o end_date *tip

11

Validarea modelului de date presupune urmtoarele etape: 1. Transformarea relaiilor - eliminarea relaiilor de tip M:M Relaia de tip M:M este nlocuit cu dou relaii de tip 1:M, corespunztoare entitii nou identificate. - eliminarea relaiilor complexe O relaie complex este format din dou sau mai multe entiti. n cazul cnd n modelul conceptual este identificat o reprezentare complex, ea trebuie descompus prin identificarea unei entiti intermediare. Relaia complex este nlocuit cu numrul necesar de relaii de tip 1:M corespunztoare noii entiti identificate. - eliminarea relaiilor recursive n cazul cnd n modelul conceptual este reprezentat o relaie recursiv, trebuie s o descompunem pentru a determina o entitate intermediar. - eliminarea relaiilor cu atribute n cazul cnd n modelul conceptual este reprezentat o relaie cu atribute, trebuie s fie descompus pentru a identifica o entitate. - eliminarea relaiilor redundante O relaie este redundant dac aceeai informaie poate fi obinut prin intermediul altor relaii. Relaiile redundante nu sunt necesare, acestea trebuie eliminate, fapt care se realizeaz dup ce se analizeaz semnificaia fiecrei relaii ntre entiti. n final rezult o simplificare a modelului de date conceptual. 2. Validarea modelului conceptual prin utilizarea normalizrii Normalizarea este utilizat pentru a mbunti modelul, astfel nct acestea s satisfac diverse constrgeri care evit dublarea inutil a datelor. Normalizarea garanteaz c modelul este mai apropiat de realitate, este coerent i are o redundan minim. Normalizarea are rolul de stabilire a atributelor care aparin unui tip de entitate. Conceptul fundamental al teoriei relaionale este acela c atributele sunt grupate, mpreun ntr-o entitate deoarece ntre ele exist o legtur logic. n general, n favoarea normalizrii pledeaz argumentul c proiectul normalizat organizeaz datele conform dependenelor lor funcionale. Normalizarea implic nelegerea n totalitate a fiecrui atribut care trebuie s fie reprezentat n baza de date. Normalizarea realizeaz validarea fiecrei entiti, conform celor trei forme normale. Procesul de normalizare conine urmtoarele etape: - prima form normal (1NF), care elimin grupurile repetitive. - a doua form normal (2NF), care elimin dependenele pariale de cheia primar - a treia form normal (3NF), care elimin dependenele tranzitive de cheia primar
12

3. Validarea modelului conform specificaiei utilizatorului Aceast etap const n verificarea faptului c modelul fizic cuprinde toate cerinele utilizatorilor. Acestea au fost deduse din documentaia acestora. Dac apare o neconcordan, nseamn c exist o problem n cadrul modelului de date, care este necesar s fie rezolvat. n acest caz, este posibil s se fi omis o entitate, o relaie sau un atribut din componena modelului de date. 4. Desenarea diagramei entitate-relaie (ERD) finale Obiectivul acestei etape const n desenarea unei diagrame entitate-relaie (ERD) finale, care s constituie o reprezentare logic a datelor utilizatorului. Acest diagram a fost validat 5. Definirea constrngerilor de integritate Constrngerile de integritate trebuie impuse pentru a proteja baza de date fa de situaia de a deveni incoerent. n acesta se va specifica numai ce constrngeri de integritate sunt necesare, fr a stabili modul n care se va realiza acesta. Constrngerile se refer la: - Datele necesare. Se identific atributele care trebuie s conin obligatoriu o valoare, adic atributele care nu au voie s conin informaii lips sau valori NULL. - Domeniile atributelor. Domeniul unui atribut definete mulimea de valori permise pe care le poate conine acesta. - Integritatea entitilor. Cheia primar a unei entiti nu trebuie s admit valori NULL. - s. n general relaiile dintre entiti sunt reprezentate prin crearea unei copii a cheii primare a entitii printe n relaia copil. Integritatea referenial semnific faptul c, dac cheia strin a unei relaii copil conine o valoare, acea valoare trebuie s se refere la o apariie existent i valabil din relaia printe. Se va asigura integritatea referenial prin specificarea unor constrngerii de existen asupra cheilor primare i strine. Aceste constrngeri definesc condiiile n care sunt reactualizate sau terse apariiile unei chei primare, respectiv inserate sau reactualizate apariiile unei chei strine. 6. Revizuirea modelului fizic mpreun cu utilizatorul Este foarte important ca modelul, s constituie o reprezentare adevrat a lumii reale, aa cum este ea perceput de ctre beneficiar. Diagrama acioneaz ca un mijloc de comunicare ntre realizatorul modelului i utilizatorul lui. Modelul de date fizic cuprinde un model ERD i documentaie care descrie componentele acesteia.

13

CLINICA #id *nume *adresa *telefon o mail

are

FACTURA # id *data *valoare


s fie pltit

PROGRAMARE * data * ora


pentru aparine pentru s plteasc

ofer

CABINET #numar *etaj o comentarii

are

are

are

PACIENT # id (#)CNP *nume *prenume *data_nasterii *adresa *ocupaia *loc_munc o telefon o mail
are

s lucreze

s conduc

PERSONAL #id (#)CNP *nume *prenume *data_nasterii *adresa *vechime *salariu *telefon o mail

s lucreze

pentru

MEDIC * specialitate * user_name * password ASISTENT * tip * specialitate ALII * funcia

completa

NREGISTRARE # nr *data o diagnostic


s fie completat conine

TRATAMENT #id * start_date o end-date include

pentru

include

s ocupe s fie condus

s fie ocupat

s fie inclus

s fie inclus

POST # cod *cerine o observaii

SERVICIU # cod *nume TERAPIE o contraindicaii


s fie oferit

REETA # cod *tip o observaii

conine

ANALIZA *tip CONSULT * tip ALTELE * tip

MEDICAMENT # cod *nume *indicaii *contraindicaii o observaii


s fie coninut

14

Explicaii ale diagramei entitate-relaie: Entitatea clinica reine informaiile referitoare la firma respectiv: numele, adresa, numarul de telefon i, eventual adresa de e-mail. Fiecare pacient poate avea una sau mai multe programari la cabinetele specializate de care dispune clinica. O programare trebuie s fie pentru un singur pacient. Pentru serviciile de care beneficiaz, pacientului i este emis o factur. Fiecare cabinet poate oferi unul sau mai multe servicii : analiza, terapie, consult. Exist angajai cu diverse atribuii, de aceea trebuie folosite subtipuri pentru definirea entitii personal. Fiecare pacient va fi nregistrat n baza de date a clinicii de ctre medicul care a realizat consultaia, a efectuat analizele sau a supervizat terapia. n urma stabilirii diagnosticului se poate recomanda un anumit tratament. Acesta include fie o reet , fie investigaii sau terapie. O reet conine unul sau mai multe medicamente. n realizarea modelului trebuie respectate anumite constrngeri: a) ntre angajai exist o relaie de subordonare, figurat n ERD prin intermediul unei relaii recursive de la entitatea personal la ea nsi. b) Pe un post poate fi la un moment dat un singur angajat, dar un angajat i poate schimba postul, dac promoveaz. Unele posturi pot fi vacante. c) Datele unui pacient pot fi nregistrate numai de ctre medic. Fiecare medic dispune de un cont propriu i o parol astfel nct un medic nu poate avea acces dect la datele propriilor pacieni. d) O nregistrare aparine unui singur pacient i este netransferabil. e) Tratamentul poate fi o reet medical sau poate fi furnizat de un cabinet specializat prin serviciile oferite. f) Pentru un tratament end_date trebuie s fie ulteriar datei la care a inceput tratamentul. g) Reeta trebuie s conin cel puin un medicament h) Data i ora la care se efectueaz programarea trebuie s fie ulterioare datei curente (data i ora sistemului)

15

Construirea bazei de date Transformarea modelului conceptual n model fizic se numete mapare. Terminologia se va modifica astfel: Entitatea devine tabel. Instana devine linie (rnd). Atributul devine coloan. Identificatorul unic primar devine cheie primar. Identificatorul unic secundar devine cheie unic. Relaia se transform ntr-o coloan cheie strin i o constrngere de cheie strin. Numele tabelului este format din pluralul numelui entitii, iar prescurtarea se face ca regul din primele litere ale primelor dou silabe (sau primele dou litere ale numelui - n cazul numelor monosilabice, sau primele litere ale primelor dou cuvinte n cazul mai multor cuvinte) i din ultima liter a numelui.

Tipul cheii fiecrei coloane va fi pk pentru cheie primar, uk pentru cheie unic, fk pentru cheie strin sau blank dac acea coloan nu face parte din nici o cheie.

Opionalitatea coloanei se marcheaz cu * pentru cele obligatorii i cu o pentru cele opionale.

Exist i anumite restricii n folosirea notaiilor. Numele tabelelor i coloanelor: Trebuie s nceap cu o liter Pot conine maxim 30 caractere alfanumerice Nu pot conine caractere speciale (cu excepia lui $, # i _) Trebuie s fie unice Trebuie evitate cuvintele rezervate Oracle, dintre care amintim: NUMBER, SEQUENCE, ORDER, VALUES, LEVEL, TYPE. Maparea relaiilor O relaie creeaz una sau mai multe coloane foreign-key n tabelul dinspre partea cu mai multe a relaiei.

Se folosesc prescurtrile numelui tabelului pentru coloana foreign-key. Coloana foreign-key este obligatorie sau opional, depinznd de tipul relaiei. Maparea respect opionalitatea pentru relaii 1:M doar la captul M.

La captul 1 relaia nu poate fi forat prin DDL s fie obligatorie. Este necesar programare procedural pentru realizarea acestui deziderat.

Entitile PACIENT i FACTURA ntre care exist o relaie 1:M devin dou tabele PACIENI i FACTURI. Pentru fiecare dintre ele transformarea n tabele se face astfel:
PACIENT # id (#)CNP *nume *prenume *data_nasterii *adresa *ocupaia *loc_munc o telefon o mail

FACTURA # id *data *valoare

s fie pltit s plteasc

PACIENTI FACTURI
Key Type Pk Fk Optionality * * * * Column Name id data valoare pacient_id Key Type pk uk Optionality * * * * * * * * o o Column Name id cnp nume prenume data_nasterii adresa ocupatia loc_munca telefon mail

Cheia primar din entitatea PACIENI devine cheie strin n tabela FACTURI. Scrierea efectiv a tabelelor se face prin comanda SQL: CREATE TABLE facturi( id VARCHAR2(6) PRIMARY KEY, data DATE NOT NULL, valoare NUMBER(6,2), client_id VARCHAR2(6) FOREIGN KEY); CREATE TABLE pacienti( id VARCHAR2(6) PRIMARY KEY, cnp VARCHAR2(15) NOT NULL, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20) NOT NULL, data_nasterii DATE, adresa VARCHAR2(40), ocupaia VARCHAR2(20), loc_munc VARCHAR2(25), telefon VARCHAR2(10), mail VARCHAR2(30));
17

CLINICA #id *nume *adresa *telefon o mail

are aparine

CABINET #numar *etaj o comentarii

Entitile CLINICA i CABINET ntre care exist o relaie 1:M devin dou tabele CLINICI i CABINETE. CLINICI
Key Type Pk Optionality * * * * o Column Name Id Nume Adresa Telefon Mail

CABINETE
Key Type pk fk Optionality * * o o Column Name numar etaj comentarii clinica_id

Crearea tabelei CLINICI se realizeaz folosind comanda: CREATE TABLE clinici( id VARCHAR2(6) PRIMARY KEY, nume VARCHAR2(25)NOT NULL, adresa VARCHAR2(35), telefon VARCHAR2(10), mail VARCHAR2(10)); Crearea tabelei CABINETE se realizeaz folosind comanda: CREATE TABLE cabinete( numar NUMBER(6) PRIMARY KEY, etaj NUMBER(2), comentarii VARCHAR2(35), clinica_id VARCHAR2(6) FOREIGN KEY); Cnd trebuie s trecem n tabele o entitate de intersecie, inem cont c ea preia atribute din cele dou entiti iniiale, dar poate avea i atribute proprii. Unicul identificator al entitii de intersecie provine din atribute din cele dou entiti iniiale, este cel mai adesea o combinaie de atribute, dar se poate defini i un unic identificator artificial.

18

PROGRAMARE * data * ora


pentru

pentru are

PACIENT # id (#)CNP *nume *prenume *data_nasterii *adresa *ocupaia *loc_munc o telefon o mail

are

CABINET #numar *etaj o comentarii

PACIENTI
Key Type pk uk Optionality * * * * * * * * o o Column Name id cnp nume prenume data_nasterii adresa ocupatia loc_munca telefon mail

PROGRAMARI
Key Type pk,fk pk,fk Optionality * * * Column Name Data pacient_id cabinet_id Key Type pk

CABINETE
Optionality * * o Column Name numar etaj comentarii

n tabela PROGRAMARI se vor introduce dou cmpuri pacient_id i cabinet_id care sunt chei primare n tabelele PACIENI, respectiv CABINETE. Ele devin chei strine n tabela PROGRAMARI. pacient_id i cabinet_id formeaz chei primare n PROGRAMARI datorit faptului c aceasta este o entitate de intersecie. CREATE TABLE programari( data DATE NOT NULL, pacient_id VARCHAR2(6) FOREIGN KEY, cabinet_id VARCHAR2(6) FOREIGN KEY);
19

SERVICIU # cod *nume TERAPIE o contraindicaii CABINET #numar *etaj o comentarii


ofer s fie oferit

ANALIZA *tip CONSULT * tip ALTELE * tip

Maparea subtipurilor Implementarea supertipului folosete un singur tabel pentru supertip i toate subtipurile sale. Pentru fiecare atribut al supertipului se creeaz o coloan cu opionalitatea iniial. Pentru fiecare atribut al fiecrui subtip se creeaz o coloan opional. alt coloan obligatorie (de discriminare, cu numele tabel_type) va reine crui subtip i aparine instana (nregistrarea) respectiv. Identificatorii unici devin chei primare i chei unice. Relaiile supertipului se transform ca de obicei. Relaiile la nivelul subtipurilor sunt implementate prin coloane foreign-key opionale. Sunt necesare check constraints pentru a ne asigura c, pentru fiecare subtip, toate coloanele ce provin din atributele sale obligatorii nu sunt nule. Implementarea supertipului (cu un singur tabel) se prefer cnd: Majoritatea atributelor sunt la nivel de supertip. Majoritatea relaiilor sunt la nivel de supertip. Regulile afacerii sunt cam aceleai pentru toate subtipurile. SERVICII CABINETE
Key Type pk Optionality * * o Column Name numar etaj comentarii fk Key Type pk Optionality * * * o o o o Column Name cod nume tip_serviciu contraindicaii tip_analiz tip_consult cabinet_id
20

Entitatea PERSONAL poate fi modelat folosind o unic tabel care are, n plus, un cmp discriminator, de exemplu cmpul tip_personal. Un angajat (manager) este n relaie cu ceilali angajai, faptfigurat printr-o relaie recursiv. Aceasta va fi trecut n tabel , prin introducerea unui cmp care este cheie strin (manager_id). Se va face o relaionare ntre cheia primar i aceast cheie strin.
PERSONAL #id (#)CNP *nume *prenume *data_nasterii *adresa *vechime *salariu *telefon o mail

MEDIC * specialitate * user_name * password ASISTENT * tip * specialitate ALII * funcia

s conduc

s fie condus

PERSONALKey TypeOptionalityColumn
Namepk*iduk*cnp*nume*prenume*data_nas terii*adresa*vechime*salariu*telefonomail*ti p_personalospecialitateouser_nameopassword otip_asistentofunciafkomanager_id

Dar, entitatea PERSONAL se afl n legtur cu entitile CABINET i POST, astfel nct n tabela PERSONAL vor aprea nc dou chei strine cabinet_id i cod_post.
21

s conduc

PERSONAL #id (#)CNP *nume *prenume *data_nasterii *adresa *vechime *salariu *telefon o mail

MEDIC * specialitate * user_name * password


s lucreze

ASISTENT * tip * specialitate ALII * funcia

are

CABINET #numar *etaj o comentarii

s fie condus s ocupe

fie ocupat

POST # cod *cerine o observaii

PERSONAL
Key Type pk uk Optionality * * * * * * * * * o * o o o o o o * * Column Name id cnp nume prenume data_nasterii adresa vechime salariu telefon mail tip_personal specialitate user_name password tip_asistent funcia manager_id cabinet_id cod_post

CABINETE
Key Type pk Optionality * * o Column Name numar etaj comentarii

fk fk fk

POSTURI
Key Type pk Optionality * * o Column Name cod cerinte observaii 22

Nontransferabilitatea unei relaii nseamn c datele din coloana foreign-key a tabelului nu se pot modifica. Constrngerile foreign-key nu pot asigura acest lucru, fiind necesar programare procedural suplimentar.

s conduc

PERSONAL #id (#)CNP *nume *prenume *data_nasterii *adresa *vechime *salariu *telefon o mail

MEDIC * specialitate * user_name * password ASISTENT * tip * specialitate ALII * funcia

completa s fie completat

NREGISTRARE # nr *data o diagnostic

s fie condus

PERSONALKey TypeOptionalityColumn
Namepk*iduk*cnp*nume*prenume*data_nas terii*adresa*vechime*salariu*telefonomail*ti p_personalospecialitateouser_nameopassword otip_asistentofunciafkomanager_id

INREGISTRARI
Key Type pk fk Optionality * * o * Column Name nr data diagnostic personal_id

Pentru crearea tabelelor PERSONAL i POSTURI se folosesc urmtoarele comenzi:


23

Crearea tabelei PERSONAL

CREATE TABLE personal( id VARCHAR2(6) PRIMARY KEY, cnp VARCHAR2(15) UNIQUE KEY NOT NULL, nume VARCHAR2(20) NOT NULL, prenume VARCHAR2(20) NOT NULL, data_nasterii DATE, adresa VARCHAR2(40), vechime NUMBER(2), salariu NUMBER(7,2), telefon VARCHAR2(10), mail VARCHAR2(30), tip_personal VARCHAR2(15) NOT NULL, specialitate VARCHAR2(15), user_name VARCHAR2(10), password VARCHAR2(10), tip_asistent VARCHAR2(15), funcia VARCHAR2(15), manager_id VARCHAR2(6) FOREIGN KEY, cabinet_id NUMBER(6) FOREIGN KEY, cod_post VARCHAR2(6) FOREIGN KEY);

Crearea tabelei POSTURI

CREATE TABLE posturi( cod VARCHAR2(6) PRIMARY KEY, cerinte VARCHAR2(25), observaii VARCHAR2(30)); n mod asemntor se transform n tabele entitile PACIENT i NREGISTRARE. La captul 1 relaia nu poate fi forat prin DDL s fie obligatorie. Este necesar programare procedural pentru realizarea acestui deziderat.
PACIENT # id (#)CNP *nume *prenume *data_nasterii *adresa *ocupaia *loc_munc o telefon o mail

are pentru

NREGISTRARE # nr *data o diagnostic

24

PACIENTI
Key Type pk uk Optionality * * * * * * * * o o Column Name id cnp nume prenume data_nasterii adresa ocupatia loc_munca telefon mail

INREGISTRARI
Key Type pk fk Optionality * * o * Column Name nr data diagnostic pacient_id

Crearea tabelei INREGISTRARI

CREATE TABLE inregistrari( nr NUMBER(6) PRIMARY KEY, data DATE NOT NULL, diagnostic VARCHAR2(20), personal_id VARCHAR2(6) FOREIGN KEY, pacient_id VARCHAR2(6) FOREIGN KEY); Pe baza diagnosticului reinut de o nregistrare se prescrie un anumit tratament.
TRATAMENT #id * start_date o end-date

NREGISTRARE # nr *data o diagnostic

conine pentru

INREGISTRARI
Key Type pk Optionality * * o Column Name nr data diagnostic

TRATAMENTE
Key Type pk fk Optionality * * o * Column Name id start_date end_date nr_inreg

25

TRATAMENT #id * start_date o end-date


include include

s fie inclus

s fie inclus

SERVICIU # cod *nume TERAPIE o contraindicaii ANALIZA *tip CONSULT * tip ALTELE * tip

REETA # cod * tip o observaii

Entitatea cu arc va deveni un tabel ce conine coloane foreign key de la tabelele din captul 1 al relaiei. Chiar dac relaia cu arc este obligatorie la captul M, coloanele foreign key rezultate trebuie s fie opionale (excluzndu-se mutual). Trebuie scris cod suplimentar pentru a asigura una din valori nenul, de exemplu: CHECK (cod_serviciu is not null AND cod_reteta is null) OR (cod_serviciu is null AND cod_reteta is not null) TRATAMENTE
Key Type pk fk fk Optionality * * o o o Column Name id start_date end_date cod_serviciu cod_reteta

SERVICII
Key Type pk Optionality * * * o o o Column Name cod nume tip_servicii contraindicaii tip_analiz tip_consult

REETE
Key Type pk Optionality * * o Column Name cod tip observatii
26

Pentru crearea tabelei TRATAMENTE se folosete urmtoarea comand: CREATE TABLE tratamente( id VARCHAR2(6) PRIMARY KEY, start_date DATE NOT NULL, end_date DATE, nr_inreg NUMBER(6) FOREIGN KEY, cod_serviciu VARCHAR2(6) FOREIGN KEY, cod_retete VARCHAR2(6) FOREIGN KEY); Pentru crearea tabelei RETETE se folosete urmtoarea comand: CREATE TABLE retete( cod VARCHAR2(6) PRIMARY KEY, tip VARCHAR2(10) NOT NULL, observatii VARCHAR2 (20) ); O reet trebuie s conin cel puin un medicament.
MEDICAMENT # cod *nume *indicaii *contraindicaii o observaii

REETA # cod * tip o observaii

conine s fie coninut

Entitile RETETA i MEDICAMENT ntre care exist o relaie 1:M devin dou tabele RETETE i MEDICAMENTE. REETE
Key Type pk Optionality * * o Column Name cod tip observatii

MEDICAMENTE
Key Type pk Optionality * * * * o o Column Name cod nume indicaii contraindicaii observaii cod_reteta

fk

Pentru crearea tabelei MEDICAMENTE se folosete urmtoarea comand: CREATE TABLE medicamente( cod VARCHAR2(6) PRIMARY KEY, nume VARCHAR2(15) NOT NULL, indicaii VARCHAR2(40), contraindicaii VARCHAR2(40),
27

cod_reteta VARCHAR2(6) FOREIGN KEY); Structured Query Language este folosit pentru interogarea bazelor de date. Cele mai simple dintre comenzile SQL sunt:

Comanda DESCRIBE afieaz structura tabelului. Sintaxa este:

DESCRIBE <table name>; Exemplu: afiarea structurii tabelei PACIENTI DESCRIBE pacienti; are ca efect, afiarea structurii n urmtorul format:

Comanda SELECT * afieaz toate liniile unui tabel. Sintaxa:

SELECT * FROM <table name>; Exemplu: afiarea liniilor din tabela PACIENTI SELECT * FROM pacienti;

Pentru a obine un subset al datelor, modificm instruciunea SELECT astfel:

SELECT <column name 1, column name 2, etc.> FROM <table name> WHERE <condition>
28

Exemple: 1. afiai datele persoanelor nscute dup 1970 SELECT nume,prenume,data_nasterii,telefon FROM pacienti WHERE TO_CHAR(data_nasterii,'RRRR')>=1970

2. afiai numrul total de pacieni SELECT count(*) As "Numarul pacientilor" FROM pacienti;

Pentru a modifica structura unui tabel se folosesc urmtoarele instruciuni: Adugarea unei noi coloane ntr-un tabel se face cu comanda ALTER TABLE. Sintaxa este:

ALTER TABLE <table name> ADD (<new_column_name> <data type>); Pentru a terge o coloan dintr-un tabel se folosete comanda ALTER TABLE cu sintaxa:

ALTER TABLE <table name> DROP COLUMN <column_name>; Inserarea liniilor ntr-un tabel se realizeaz cu ajutorul comenzii INSERT. Sintaxa comenzii INSERT este: INSERT INTO <nume tabel>(<coloana 1>, <coloana 2>, ....<coloana n>) VALUES (<valoare 1>, <valoare 2>, ....<valoare n>) Denumirile coloanelor pot fi scrise explicit, sau pot lipsi (se recomand numai n cazul n care utilizatorul este foarte sigur asupra structurii tabelului, dar trebuie s fie atent la valorile trecute n clauza VALUES i la tipul acestora).

29

De exemplu, pentru inserarea unei linii n tabela PACIENI se utilizeaz comanda: INSERT INTO pacienti (id, cnp, nume, prenume, data_nasterii, adresa, telefon) VALUES (14400, 208018511009,Ion,Anca,08-JAN-85,Oradea, Aleea Teilor, nr.70, 0743097800); SELECT * FROM pacienti;

Comanda UPDATE este folosit pentru a modifica o valoare ntr-un tabel. Dac n momentul crerii unei coloane, aceasta nu are definit o valoare implicit, Oracle introduce valoarea NULL n coloana respectiv. Sintaxa acestei comenzi este: UPDATE <tabel> SET <coloana> = <valoare sau subquery> WHERE <condiie pt. linia selectat> Exemplu: modificarea numrului de telefon al pacientului Ionescu Liviu. UPDATE pacienti SET telefon= 0765432190 WHERE UPPER(nume)=IONESCU and UPPER(prenume)=LIVIU; SELECT * FROM pacienti;

Pentru a terge o linie dintr-un tabel se folosete comanda DELETE:

DELETE from <table name> WHERE <column_name> = 'some value'

30

DELETE FROM pacienti WHERE id='14300'; SELECT * FROM pacienti;

JOIN-uri proprietatea Oracle Pentru a prelua date din mai multe tabele, forma de baz a unei instruciuni SELECT const n adugarea unei condiii de legatur (join) in clauza WHERE: SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 =table2.column2; Numele coloanei trebuie prefixat de numele tabelei n situaiile cnd acelai nume de coloan apare n mai multe tabele. Produsul cartezian (CARTESIAN PRODUCT) - Presupune ca toate liniile din prima tabel s fie unite (legate) cu toate liniile din tabela a doua. - Se produce atunci cnd: 1) condiia de join este omis 2) condiia de join nu este valid - Pentru a evita produsul cartezian trebuie adaugat o condiie de join valid. - Produsul cartezian genereaz foarte multe linii i este folosit foarte rar. Exemplu: SELECT pacienti.nume,pacienti.prenume,programari.data,programari.ora FROM pacienti ,programari; EQUIJOIN (simple join sau inner join) - este o legatur ntre tabele care combin linii ce au valori echivalente pentru coloanele specificate. Atunci cnd denumirile coloanelor i tabelelor sunt mari, devine incomod de lucrat cu acestea. Pentru a scurta denumirile respective, se folosesc alias-urile. Se pot folosi alias-uri att pentru coloane, ct i pentru tabele.
31

Dac este precizat un alias pentru o tabel n clauza FROM, atunci alias-ul respectiv trebuie s nlocuiasc numele tabelei n clauza SELECT. Exemple: 1. Tabela PACIENTI conine urmtoarele date: SELECT * FROM pacienti;

Tabela PROGRAMARI conine urmtoarele date: SELECT * FROM programari;

S se realizeze un equijoin ntre tabelele PACIENTI i PROGRAMARI, pe baza valorilor comune existente n coloana id din tabela PACIENTI i coloana pacient_id din tabela PROGRAMARI. SELECT a.nume,a.prenume,b.data,b.ora FROM pacienti a,programari b WHERE (a.id=b.pacient_id); n urma executrii acestei comenzi se va afia:

2. S se realizeze o interogare care s afieze, pentru fiecare pacient cabinetul , data i ora la care este programat. SELECT a.nume, a.prenume, b.data, b.ora, c.numar, c.etaj FROM pacienti a, programari b, cabinete c
32

WHERE (a.id=b.pacient_id) and (b.cabinet_id=c.numar) and (b.data>=SYSDATE); Uneori, dorim s extragem toate datele dintr-o tabel, chiar dac nu au valori care s se potriveasc n cealalt tabela( missing data). Acest lucru se realizeaz folosind outer join-ul. Operatorul pentru outer join este semnul plus pus intre paranteze rotunde (+). Un outer join este folosit pentru a vizualiza toate liniile care au valoare corespondent n cealalt tabel i liniile dintr-o tabel care nu au valoare corespondent n cealalt tabel. Pentru a indica tabela deficitar (care poate avea date lipsa missing data), se pune operatorul (+) dup numele coloanei din tabel, n clauza WHERE. SELECT p.data, p.ora, c.numar, c.etaj FROM programari p, cabinete c WHERE p.cabinet_id=c.numar(+) ; n data modeling, uneori este necesar s punem n eviden o entitate n relaie cu ea nsi. Un exemplu este entitatea PERSONAL . Un membru al personalului poate fi i manager. Odat ce avem tabela PERSONAL, devine necesar o relaie special numit self join (un join de la tabela PERSONAL la ea nsi), pentru a afla numele managerului pentru fiecare angajat. Pentru a face join de la o tabel la ea nsi, tabelei i sunt asociate 2 aliasuri. Astfel, pentru baza de date, exist n aparen 2 tabele. Exemplu: SELECT p.nume as "Nume angajat", p.prenume as "Prenume angajat", p.id as "ID angajat", m.nume as "Nume manager", m.prenume as "Prenume manager", p.id as "ID angajat", FROM personal e, personal m WHERE p.manager_id = m.id; NATURAL JOIN Este un ANSI/ISO SQL:1999 join echivalent cu equijoin-ul. Se face pe baza tuturor coloanelor care au acelai nume din 2 tabele; coloanele respective trebuie s aib acelai tip de date. Sunt selectate liniile care au valori egale n toate coloanele corespondente.
33

CROSS JOIN Realizeaz produsul cartezian pentru dou tabele. SELECT nume, prenume, data, ora FROM pacienti CROSS JOIN programari; este echivalent cu instruciunea: SELECT a.nume, a.prenume, b.data, b.ora FROM pacienti a, programari b; i are urmtorul efect:

Clauza USING ntr-un natural join, dac tabelele au coloane cu acelai nume, dar tipuri diferite, se produce eroare. Pentru a evita aceast situaie, clauza JOIN se nlocuieste cu clauza USING. Clauza USING specific coloanele care ar trebui folosite pentru pentru equijoin. Coloana specificat n clauza USING nu trebuie s aib nici un specificator (nume de tabel sau alias), n nici o parte din instruciunea SELECT.

Clauza ON Dac coloanele folosite pentru join au denumiri diferite sau dac sunt folosii operatorii:<,> sau BETWEEN, atunci nu putem folosi clauza USING. n aceast situaie se folosete clauza ON. Aceasta permite specificarea unei game variate de condiii pentru join-uri.
34

De asemenea, clauza ON ne permite s folosim WHERE pentru a restriciona linii dintr-o tabel sau din ambele tabele. Exemplu: Instruciunea SELECT a.nume,a.prenume,b.data,b.ora FROM pacienti a JOIN programari b ON (a.id=b.pacient_id); are ca efect afiarea urmtoarelor date:

Se poate folosi i clauza WHERE astfel: SELECT a.nume,a.prenume,b.data,b.ora FROM pacienti a JOIN programari b ON (a.id=b.pacient_id); WHERE (a.nume LIKE I%); se va afia:

n ANSI-99 SQL, un join cu dou sau mai multe tabele care returneaz doar liniile care se potrivesc se numete inner join. Atunci cnd un join returneaz att liniile care se potrivesc ct i cele care nu se potrivesc, acesta se numete outer join. Sunt trei tipuri de outer join n ANSI/ISO SQL: - LEFT OUTER JOIN - RIGHT OUTER JOIN - FULL OUTER JOIN

35

Exemple: 1. SELECT c.numar, c.etaj, s.nume, s.tip_serviciu FROM cabinete c LEFT OUTER JOIN servicii s ON (c.numar=s.cabinet_id);
-

sunt afiate i acele cabinete care nu au asociat un serviciu

2. SELECT s.nume, s.tip_serviciu, c.numar, c.etaj FROM cabinete c RIGHT OUTER JOIN servicii s ON (c.numar=s.cabinet_id) ORDER BY s.nume; -sunt afiate i acele servicii care nu sunt asociate unui cabinet, ordonate dup nume 3. SELECT c.numar, c.etaj, s.nume, s.tip_serviciu FROM cabinete c FULL OUTER JOIN servicii s ON (c.numar=s.cabinet_id); - returneaza att liniile care se potrivesc ct i cele care nu se potrivesc din ambele tabele. Funciile caracter single-row sunt mprite n dou categorii: Funcii care fac conversii asupra tipurilor de litere din irurile de caractere (LOWER, UPPER, INITCAP)

Funcii care realizeaz diverse operaii asupra irurilor de caractere -concatenare, extragere de subiruri, cutare etc. (CONCAT, SUBSTR, LENGTH, INSTR, LPAD | RPAD, TRIM, REPLACE)

Funciile single-row pot fi folosite n clauzele SELECT, WHERE i ORDER BY.

36

FUNCII CARE REALIZEAZ CONVERSII ASUPRA TIPURILOR DE LITERE DIN IRURILE DE CARACTERE 1) LOWER(column|expression) convertete toate literele n litere mici Exemplu: SELECT id, cnp, nume, prenume, data_nasterii FROM pacienti WHERE LOWER(nume)=ionescu;

2)UPPER(column|expression) convertete toate literele n litere mari. Exemplu: SELECT nume, prenume, adresa FROM pacienti WHERE UPPER(nume) = 'IONESCU' and UPPER(prenume)=LIVIU;

3) INITCAP( column|expression) convertete litera de nceput a fiecrui cuvnt n liter mare. FUNCII CARE REALIZEAZ DIVERSE OPERAII ASUPRA IRURILOR DE CARACTERE(CHARACTER-MANIPULATION FUNCTIONS) 1) CONCAT concateneaz dou iruri de caractere Exemplu: CONCAT (Oracle, Academy) rezult irul de caractere OracleAcademy SELECT CONCAT ('Oracle', 'Academy') FROM dual;

37

2) SUBSTR - extrage un subir de o dimensiune specificat Exemplu: SUBSTR (OracleAcademy, 1, 6) rezult irul de caractere Oracle 3) LENGTH: returneaz o valoare numeric ce reprezint lungimea unui ir de caractere Exemplu: LENGTH (Oracle) rezultatul este 6 4) INSTR: determin poziia primei apariii a unui caracter dat ntr-un ir de caractere Exemplu: INSTR (OracleAcademy, r) rezultatul este 2 5) LPAD: completeaz la afiare, cu un caracter dat, partea stang a valorii de afiat, pe o anumita lungime. Exemplu: LPAD (salariu, 10,*) rezultatul este *****24000 6) RPAD: completeaz la afiare, cu un caracter dat, partea dreapt a valorii de afiat, pe o anumita lungime. Exemplu: RPAD (salary, 10, *) rezultatul este 24000***** 7) TRIM: elimin toate caracterele specificate att de la nceputul ct i de la sfaritul unui ir de caractere (implicit se elimin i de la nceput i de la sfrit). Sintaxa este urmatoarea: TRIM ( [leading | trailing | both [character(s) to be removed ] from] string to trim) Exemplu: TRIM (O, FROM OracleAcademy) rezult irul de caractere racleAcademy 8) REPLACE: nlocuiete o secven de caractere dintr-un string cu un alt ir de caractere. Sintaxa este urmtoarea: REPLACE (string1, string_to_replace, [replacement_string] ) - string1 irul n care se face nlocuirea secvenei de caractere - string_to_replace secvena de caractere ce va fi nlocuit
38

- [replacement_string] irul de caractere ce va nlocui secvena Exemplu: REPLACE('JACK and JUE','J','BL') rezult irul de caracatere BLACK and BLUE

Bibliografie

Baze de date aplicatii oracle SQL si pl/sql ; doina narcis mierlan-craiova: else,2011

Manual de informatica pentru clasa a XIIa/ carmen popescu- bucuresti editura L&S info-mat, 2007

http://iacademy.oracle.com http://academy.oracle.com

39