Baze de date pentru telecomunicatii [602972]
1
Universitatea Politehnica Bucuresti
Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei
Baze de date pentru telecomunicatii
Student: [anonimizat]: Galatchi Dan
Grupa: TSAC I
Bucuresti
2
Cupr ins :
1. Notiuni generale ……………………………………………………………………………… 3
1.1 Baza de date – definitie …………………………………………………………….. 3
1.1 Baza de date relationala …………………………………………………………….. 3
2. Sistemul de baze de date ……………………………………………………………………… 4
3. De ce se prefera utiliza rea sistemelor de baze de date?……………….. ………………………. …..5
4. Categorii de baze de dat e…………………………………………………………………….. 6
4.1 Clasificare dupa modelul de date ………………………………………………………………….. ……….. ..6
4.2 Clasificare dupa numarul de utilizatori ……………………………………………… ……… .6
4.3 Clasificare dupa numarul de statii pe care este stocata baza de date …………………. …….. 6
5. Nivelele unei baze de date …………………………………………………………………….. 8
6. Modelul Enti tate-Asociere ……………………………………………………………………. 9
7. Modelul Entitate -Asociere Extins ……………………………………………………………. 11
8. Modelul relational………………………………………………………………………………………….. 12
9. Realizarea bazei d e date ……………………………………………………………………… 14
10. Bibliografie………………………………………………………………………………………………….54
3
BAZE DE DATE
1. Notiuni generale
1.1 Baza de date – definitie
O baza de date (database ) este o colectie de date corelate din punct de vedere logic, care
reflecta un anumit aspect al lumii reale si este destinata un ui anumit grup de utilizatori. În acest
sens, bazele de date pot fi create si mentinute manual (de exemplu, fisele de evidenta a cartilor
dintr -o biblioteca , asa cum erau folosite cu ani i n urma) sau computerizat, asa cum este
majoritatea bazelor de date f olosite în momentul de fata.
O definitie intr -un sens mai restrans a unei baze de date este urmatoarea: o baza de date
este o colectie de date creata si mentinuta computerizat, carepermite operatii de introducere,
stergere, actualizare si interogare a dat elor.
Necesitatea stocarii datelor a existat din totdeauna, zilnic stocam informatie folosind
dosare, biblioteci, sticky notes etc. Dezavantajul apare insa in momentul cand cantitatea de
informatie devine considerabila si gasirea unei anumite parti din ea devine cu adevarat
problematica. In era sistemelor de calcul acestea se pot ocupa in locul nostru atat de memorarea
datelor cat si de cautarea lor, insa acest lucru presupune structurarea informatiei pentru a putea fi
mai usor de gestionat.
Pentru a putea defini strucutra unei astfel de baza de date si a memora efectiv informatiile
inauntrul sau avem nevoie de un software care sa realizeze toate functiile pe care aceasta nevoie
le implica. Un astfel de software se numeste sistem de gestionare a bazelor de d ate , prescurtat
SGBD.
Un SGBD asigura structurarea datelor, accesul concurent al utilizatorilor, selectivitatea
accesului si timpi de executie normali pentru cereri. Dar acestea sunt doar o parte din operatiile
pe care acesta trebuie sa le asigure.
Asup ra unei baze de date se pot efectua urmatoarele tipuri de operatii:
introducerea de noi date ( insert )
stergerea unora din datele existente ( delete )
actualizarea datelor memorate ( update )
interogarea bazei de date ( query ) pentru a regasi anumite informati i, selectate
dupa un criteriu ales
1.2 Baza de date relationala
Modelele existente pentru implementarea unei baze de date sunt urmatoarele:
ierarhic
retea
relational
Modelele ierarhic si retea se bazeaza pe parcurgerea legaturilor dintre date pentru a l ucra
4
cu baza de date; de regula sunt utilizate pentru sisteme -cadru generale, vaste si nu fac obiectul
cursului nostru.
Sistemele de gestionare a bazelor de date relationale ( SGBDR) au cunoscut o larga
raspa ndire, datorita modelului simplu, relational d e date pe care – l utilizeaza.
Acest model relational de date se bazeaza pe urmatoarele lucruri:
datele se prezinta sub forma unei colectii (unui set) de relatii
fiecare relatie are forma unui tabel (cea mai importanta componenta a unei baze de date)
randurile (inregistrarile) tabelului reprezinta entitati
coloanele (campurile) tabelului sunt atribute/proprietati ale acestor entitati
fiecare tabel are un set de atribute, care impreuna reprezinta o “cheie” care defineste
fiecare entitate in mod unic
2. Sistemul de baze de date
O aceeasi baza de date poate fi privita din diverse perspective rezultand descrieri diferite.
Termenul consacrat pentru descrierea structurii unei baze de date este acela de schema, in
literatura de specialitate exista o clasificare pe trei nivele a acestor descrieri.
Sistemul de gestiune a bazei de date receptioneaza cererile utilizatorilor de acces la baza
de date (pentru operatii de introducere, stergere, modificare sau interogare ), le interpreteaza,
executa operatiile corespunzato are si returneaza rezultatul catre utilizatori.
Arhitectura interna a unui sistem de baze de date contine trei niveluri functionale:
nivelul extern
nivelul conceptual
nivelul intern
a)Nivelul extern este o colectie de scheme externe, care sunt vederi ale diferitelor grupuri de
utilizatori, existând câte o vedere individuala a datelor pentru fiecare grup . O schema externa
(vedere utilizator ) (external schema, user’s view )contine o subschemaconceptuala a bazei de
date, mai precis descrierea datelor care sunt folosite de acel grup de utilizatori.
b)Nivelul conceptual contine schema conceptuala (logica) a bazei de date. Schema
conceptuala a bazei de date (conceptual schema )corespunde unei reprezentariunice (pentru toti
utilizatorii) si abstracte a datelor, descriind ce date sunt stocate in baza de date si care sunt
asocierile dintre acestea.
c)Nivelul intern contine schema interna (fizica) a bazei de date. Schema interna (fizica) a
bazei de date (internal schema )specifica modul de reprezentare adatelor pe su portul fizic.
5
In figura urmatoare se poate vizualiza arhitectura unui sistem de baze de date:
3. Dece se prefera utilizarea sistemelor de baze de date?
Se poate afirma ca sistemele de baze de date au e serie de avantaje. Avantajele oferite de
sistemele de baze de date sunt urmatoarele:
compactitate ridicata : volumul ocupat de sistemele de baze de date este mult mai redus
decatvolumul ocupat de documente scrise sau de fisiere necorelate
viteza mare de regasire si actualizare a informatiilor
redund anta scazutaa datelor memorate, care se obtine prin partajarea datelor între mai
multiutilizatori si aplicatii. De exemplu, o aplicatie de personal si o aplicatie de rezultate
la examene dintr -o universitate care exploateaza o singura baza de date, pot folos i
aceleasi informatii referitoare la structurarea facultatilor si a sectiilor.
posibilitatea de introducere a standardelor privind modul de stocare a datelor, ceea ce
permite interschimbul informatiilor intre diferite organizatii
mentinerea integritatii datelor prin politica de securitate (drepturi de acces diferentiate în
functie de rolul utilizatorilor), prin gestionarea tranzactiilor si prin refacerea datelor în
caz de functionare defectuoasa a diferitelor componente hardware sau software.
independent a datelor fata de suportul hardware utilizat. Sistemele de gestiune a bazelor
de date ofera o vedere ( view ) externa a datelor, care nu se modifica atunci când se
6
schimba suportul de memorare fizic, ceea ce asigura imunitatea structurii bazei de date si
a aplicatiilor la modificari ale sistemului hardware utilizat .
4. Categorii de baze de date
Bazele de date se pot imparti in mai multe categorii in functie de criteriul de clasificare. Aceste
criterii sunt:
Modelul de date
Numarul de utilizatori
Numarul de stat ii pe care este stocata baza de date
4.1 Clasificare dupa modelul de date
Majoritatea sistemelor de baze de date actuale sunt realizate în modelul de date relational
sau în modelul de date obiect. Dezvoltarea continua a acestor modele a condus catre o noua
categorie de baze de date, numite obiect -relationale , care combina caracteristicile modelului
relational cu cele ale modelului obiect. De asemenea, mai sunt inca in functiune baze de date in
modele mai vechi ( modelul ierarhic sau modelul retea ).
4.2 Clasifica re dupa numarul de utilizatori
Majoritatea sistemelor de baze de date sunt sisteme multiutilizator , adica permit accesul
concurent (in acelasi timp) a mai multor utilizatori la aceeasibaza de date. Un numar redus de
sisteme de baze de date sunt de tip mono utilizator , adica suporta accesul doar al unui singur
utilizator (la un moment dat).
4.3 Clasificare dupa numarul de statii pe care este stocata baza de date
Sistemele de baze de date se impart in : sisteme centralizate si sisteme distribuite.
Un sistem de b aze de date centralizat (Centralized Database System ) este un sistem de baze
de date in care datele si sistemul de gestiune sunt stocate pe o singura statie. Un sistem
centralizat poate suporta unul sau mai multi utilizatori, dar in orice situatie datele s i sistemul de
gestiune rezida in intregime pe o singura statie. Un sistem de baze de date distribuit poate avea
atat datele, cat si sistemul de gestiune, distribuite in mai multe statii interconectate printr -o retea
de comunicatie.
Sistemele de baze de dat e pot fi reprezentate din punct de vedere al functionarii lor printr -o
arhitectura de tip client -server. Intr-un sistem centralizat exista un singur server , care este chiar
sistemul SGBD, care raspunde cererilor unui singur client (în sistemele mono -utiliz ator) sau mai
multor clienti (in sistemele multi – utilizatori) care acceseaza baza de date
respectiva. Clientii suntprograme de aplicatii oferite de furnizorul sistemului de gestiune sau
dezvoltate de programatori.
7
In figura de mai jos se poate observa un sistem de baze de date monoutilizator.
In figura de mai jos se poate observa un sistem de baz e de date centralizate de tip
multiutilizator.
Utilizatorii privilegiati au dreptul de a efectua toate tipurile de operatii puse la dispozitie de
sistem. Te rmenul generic pentru acest tip de utilizatori este cel de administrator al bazei de date
si in general este vorba de una sau mai multe persoane careraspund de buna functionare a SGBD –
ului.
Administratorul bazei de date este responsabil de urmatoarele ac tivitati:
crearea si modificarea structurii bazei de date (operatiile de creare si modificare a
tabelelor si a celorlalte obiecte ale bazei de date )
gestiunea utilizatorilor (administrarorul este cel care creaza noi utilizatori pentru SGBD,
confera dreptu rile de acces la date si poate schimba acest tip de informatii pentru orice
utilizator)
8
modificarea parametrilor SGBD (administratorul este cel care monitorizeaza
performantele sistemului si poate schimba parametrii acestuia pentru optimizarea
anumitor op eratii)
salvarea periodica a bazei de date si restaurarea sa in caz de incident software sau
hardware
Administratorul poate transfera unele dintre drepturile sale de acces si altor utilizatori
care nu sunt administratori ai bazei de date in cazurile in c are acest lucru este necesar.
Utilizatorii neprivilegiati dispun de drepturile de acces care le -au fost alocate de
administratorul bazei de date. Majoritatea sistemelor de gestiune permit definirea de categorii
generice de utilizatori, iar fiecare utilizat or individual are asociat unul sau mai multe roluri,
mostenind drepturile de acces ale acestora. Este usurata astfel operatia de creare a unui nou
utilizator.
5. Nivelele unei baze de date
a) Nivelul fizic
La acest nivel baza de date este descrisa din pers pectiva stocarii sale pe dispozitivele
fizice: identificarea discurilor si a cailor unde este stocata, numele fisierelor care formeaza baza
de date, structura fizica a acestora, etc. Descrierea bazei de date la acest nivel poarta numele de
schema fizica si sistemul de gestiune a bazelor de date pune la dispozitie facilitatile pentru
inregistrarea si modificarea acesteia. Fiecare SGBD are în general asociat un model specific de
descriere la nivel fizic a bazei de date.
b) Nivelul conceptual
Descrierea ba zei de date la acest nivel poarta numele de schema conceptuala (numita
uneori si schema logica) a bazei de date. Ea consta intr -o descriere abstracta dar exacta a
structurii acesteia, lasand la o parte detaliile fizice de implementare. Schema conceptuala e ste
facuta in termenii modelului de date utilizat. Astfel in cazul adoptarii modelului relational,
aceasta consta in: t abelele care formeaza baza de date, s tructu ra (coloanele) fiecarei tabele,t ipul
de dat e asociat coloanelor, e lementele pe baza carora se realizeaza interconecta rea tabelelor
(coloane comune), constrangeri de integritate, o peratii declansate automat la modificarea unor
elemente ale bazei de date
c) Nivelul extern
Diferitele categorii de utilizatori ai unei baze de date au nevoie in activit atea lor doar de
portiuni specifice ale acesteia. Descrierea acestor portiuni poarta numele de scheme externe. O
baza de date are deci asociata o singura schema fizica si o singura schema conceptuala dar mai
multe scheme externe. Schemele externe sunt desc rise de obicei cu ajutorul modelului de date
folosit pentru schema conceptuala. In plus se specifica modul in care se face corespondenta intre
obiectele celor doua descrieri. Daca pentru administratorului bazei de date schema externa
coincide cu schema con ceptuala, celelalte categorii de utilizatori acceseaza baza de date doar
prin intermediul schemelor externe specifice acestora. Din aceasta cauza orice prelucrare lansata
de un utilizator este translatata de catre SGBD mai intai la nivel conceptual si apoi la nivel fizic.
9
Aceste operatii pot fi consumatoare de timp, de aceea nu toate sistemele de gestiune dispun de
mecanisme de descriere pentru fiecare dintre cele trei nivele.
In cazul multor pachete de programe pentru calculatoare personale descrierea sch emei fizice
se face cu ajutorul LDD, o data cu schema conceptuala. De asemenea facilitatile pentru definirea
schemelor externe sunt reduse sau inexistente.
In cazul sistemelor de gestiune a bazelor de date complexe, descrierea schemelor externe se
face p rin definirea de vederi utilizator. O astfel de vedere este in cazul modelului relational o
tabela virtuala care nu exista la nivel fizic si conceptual in baza de date dar care se poate calcula
pe baza tabelelor continute în aceasta ori de cate ori este fo losita de operatiile lansate de
utilizator.
6. Modelul Entitate -Asociere
Modelele specializate de date (modelul ierarhic, modelul retea, modelul relational,etc.)
impun anumite structuri speciale de reprezentare a multimilor de entitati si a asocierilor di ntre
acestea, structuri pe baza carora sunt dezvoltate sistemele de gestiune a bazelor de date. Intr -un
astfel de model de date, o baza de date este reprezentata printr -o schema conceptuala (logica)
specifica. Trecerea de la modelul conceptual de nivel îna lt la un model de date specific reprezinta
etapa de proiectare logica a bazei de date care asigura corespondenta dintre schema conceptuala
de nivel inalta bazei de date si schema conceptuala specifica modelului de date respectiv.
Un model este o abstractiza re a unui sistem, care capteaza cele mai importante
trasaturicaracteristice ale sistemului (concepte), relevante din punct de vedere al scopului pentru
care se defineste modelul respectiv. Tehnica de identificare a trasaturilor caracteristice esentiale
ale unui sistem se numeste abstractizare .
Un model de date stabileste regulile de organizare si interpretare a unei colectii de date.
Înproiectarea bazelor de date se folosesc, de regula, mai multe modele de date, care se pot
clasifica în doua categorii: mode le conceptuale de nivel inalt si modele specializate .
Un model conceptual de nivel inalt al datelor contine o descriere concisa a colectiilor de
datecare modeleaza activitatea dorita (numita schema conceptuala de nivel înalt ), fara sa
detalieze modul de r eprezentare sau de prelucrare a datelor.
Modelul Entitate -Asociere (Entity -Relationship Model) este un model conceptual de
nivel inalt al unei baze de date, care defineste multimile de entitati si asocierile dintre ele, dar nu
impune nici un mod specific de structurare si prelucrare (gestiune ) a datelor.
Modelul entitate -asociere este format din urmatoarele elemente:
entitate
atribut
asociere
O entitate (entity )este „orice poate fi identificat în mod distinctiv"; o entitate se refera la
unaspect al real itatii obiective care poate fi deosebit de restul universului si poate reprezenta un
obiect fizic, o activitate, un concept, etc. Orice entitate este descrisa prin atributele sale.
Un atribut (attribute) este o proprietate care descrie un anumit aspect al unei entitate.
Atributele prin care este descrisa o entitate se aleg pe baza criteriului relevantei relativ la
domeniul de interes pentru care se defineste modelul respectiv, astfel încât sa asigure
diferentierea acelei entitati fata de restul universului .Toate entitatile similare, care pot fi descrise
prin aceleasi atribute, apartin unui acelasi tip deentitate (entity type ), iar colectia tuturor
10
entitatilor de acelasi tip dintr -o baza de date constituie o multime de entitati (entities set ). În
general, în modelul E -A se foloseste aceeasi denumire atât pentruun tip de entitate cât si pentru
multimea entitatilor de acel tip.
De exemplu, tip ul de entitate „angajat” (al unei institutii) reprezinta orice persoana
angajata a institutiei, care are o anumita fun ctie si primeste un anumit salariu. Acest tip de
entitate poate fi descris prin mai multe atribute, dintre care o parte sunt atribute de identificare a
persoanei (Nume,Prenume,DataNasterii,Adresa), iar altele sunt atribute legate de activitatea
acesteia în institutia respectiva (Functie,Salariu).
Prin analogie cu modelul obiect, se poate spune ca un tip de entitate corespunde unei
clase, o entitate este o instanta a unui tip de entitate si corespunde unui obiect, iar multimea
entitatilor de un tip dat cores punde multimii obiectelor (instantelor) unei clase.
Entitatile normale au o existenta proprie in cadrul modelului, in timp ce entitatile slabe nu
pot exista decat daca exista o entitate normala (puternica) cu care sunt asociate. De exemplu, o
entitate „d ependent” poate sa reprezinte o persoana care depinde de un angajat al unei institutii
(adica se afla în intretinerea acestuia). O entitate „angajat” este o entitate puternica, deoarece ea
exista in mod normal in modelul activitatii institutiei, in timp ce o entitate “dependent” este o
entitate slaba: nu se va inregistra o astfel de persoana decât daca parintele (sustinatorul) acesteia
este angajat în acea institutie.
O asociere (relationship )este o corespondenta între entitati din doua sau mai multe
multimide entitati.
O asociere (tip de asociere) dintre doua sau mai multe tipuri de entitati se reprezinta
printr – un romb conectat prin link -uri (linii continue, formate din unul sau mai multe segmente)
la tipurile de entitati asociate. O asociere poate sa a iba sau nu un nume; daca are un nume, acesta
poate fi înscris în rombul respectiv sau in vecinatatea acestuia. Categoria asocierii se noteaza
prin inscrierea multiplicitatii pe fiecare link care conduce la un tip de entitate. Este posibil ca o
asociere sa prezinte ea însasi atribute, si aceste atribute se reprezinta prin elipse conectate la
asocierea respectiva.
Gradul unei asocieri este dat de numarul de multimi de entitati asociate . Asocierile pot
fibinare (de gradul 2, între 2 multimi de entitati) sau m ultiple. Asocierile binare sunt, la randul lor, de trei categorii, dupa numarul elementelor din
fiecaredintre cele doua multimi puse in corespon denta de asocierea respectiva. Fiind date doua
multimi de entitati, E1 si E2, se definesc urmatoarele categorii de asocieri binare:
Asocierea “unul -la-unul” (one-to-one) este asocierea prin care unui element (entitate) din
multimea E1 ii corespunde un singur element din multimea E2 si invers. Se noteaza cu
1:1.
Asocierea „unul-la-multe” (one-to-many ) este asociere a prin care unui element din
multimea E1 ii corespund unul sau mai multe elemente din multimea E2, dar unui element
din E2ii corespunde un singur element în multimea E1. Se noteaza cu 1: N.
Asocierea „multe -la-multe” (many -to-many ) este asocierea prin care unui element din
multimea E1 ii corespund unul sau mai multe elemente din multimea E2 si reciproc.Se
noteaza cu M:N.
Aceste categorii de asocieri binare se pot observa in imaginea de mai jos. Categoriile sunt
prezentate in urmatoarea ordine de la stanga la dreapta: asocierea one -to-one, asocierea one -to-
many, asocierea many -to-many.
11
Diagrama Entitate -Asociere (Entity -Relationship Diagram )reprezinta modelul Entitate –
Asociere prin multimile de entitati si asocierile dintre acestea .
Cardinalitatea (m ultiplicitatea) unei asocieri fata de o multime de entitati
(cardinality,multiplicity ) este numarul maxim de elemente din acea multime care pot fi asociate
cu un element din alta multime a asocierii Exista numeroase variante de notatii pentru redarea
diagra mei E-A. Una dintre cele mai folosite notatii reprezinta un tip de entitate (precum si
multimea de entitati de acel tip) printr -un dreptunghi, iar atributele tipului de entitate prin elipse
conectate printr -o linie continua la acesta. Pentru entitatile put ernice se utilizeaza un dreptunghi
incadrat cu o linie simpla, iar pentru entitatile slabe se utilizeaza un drep tunghi incadrat cu linie
dubla.
Notatiile descrise mai sus sunt reprezentate in figura urmatoare:
7. Modelul Entitate -Asociere Extins
Modelul Entitate -Asociere Extins (Enhanced Entity -Relationship Model ) permite
definirea de subtipuri ale unui tip de entitati, care mostenesc atribute de la tipul de entitate pe
care il extind (si care, în acest context, se numeste supertip ) si au in plus atribute specifice
semnificatiei lor. Prin definirea tipurilor si a subtipurilor de entitati se pot crea ierarhii de tipuri
de entitati pe mai multe niveluri. 8.
Ierarhiile de tipuri se pot crea prin specializare sau generalizare .Proprietatea principala a
12
ierarhiilo r de tipuri de entitati create prinspecializare sau generalizare este mostenirea atributelor :
atributele tipurilor de entitati de nivel ridicat (supertipuri) sunt mostenite de tipurile de entita ti de
nivel scazut (subtipuri).
Specializarea (specialization )este un proces de abstractizare a datelor prin care, pornind
dela un tip de entitate dat, se definesc unul sau mai multe subtipuri, diferentiate între ele în
functie de rolul specific pe care îl au în modelul de date.
Generalizarea (generalization )este pr ocesul de abstractizare invers specializarii, prin
carese creaza un supertip de entitate pornind de la mai multe tipuri de entitati. Modelul entitate -asociere este format din urmatoarele elemente: entitate, atribut, asociere.
Modelul entitate -asociere est e format din: entitate, atribut, asociere.
Entitatile modeleaza clase de obiecte concrete despre care se colecteaza informatii,
acestea pot fi identificate in mod unic. Entitatile sunt de doua feluri: entitati tari (independente)
sunt independente de alte entitati si entitati slabe (dependente) formate din instante dependente
de existenta altor entitati.
Pentru un operator de telefonie mobila, sunt posibilie urmatoarele entitati: ABONATI,
ABONAMENTE, CLIENTI_PREPAY, EXTRAOPTIUNI etc.
Atributele modeleaza pr oprietatile entitatilor. Acestea pot fi de indetificare sau de
descriere. Pentru entitatea ABONATI, atributele de indentificare pot fi fie numarul de telefon, fie
cnp, fie codul de client intrucat acestea sunt unice. Pentru entitatea CLIENTI_PREPAY poate f i
folosit ca atribut de identificare numarul de telefon. Pentru entitatea ABONAMENTE respectiv
EXTRAOPTIUNI, atributele de indentificare sunt tipul abonamentului respectiv tipul
extraoptiunii intrucat acestea trebuie sa fie unice.
Asocierile modeleaza int erdependentele dintre entitati. Spre exemplu, un abonat poate
benificia de un anumit abonament, respectiv un client prepay poate benificia de o anumita
extraoptiune.
8 Modelul relational
Modelul de date relational a fost propus de cercetatorul E.F. Codd de la compania IBM,
care a publicat în anul 1970 lucrarea "Un model Relational de Date pentru Banci Mari de Date
Partajate".
Primul Sistem de Gestiune a Bazelor de Date Relationale (SGBDR) a fost prototipul
SystemR , dezvoltat la compania IBM în anii 1970 , dupa care numeroase companii au realizat
sisteme degestiune relationale (Oracle, Microsoft, Ingres, Sybase, etc.) iar aplicatiile de baze de
date relationale au capatat o amploare deosebita .
Modelul relational (Relational Model ) se bazeaza pe notiunea de relatie (relation ) din
matematica, care corespunde unei mul timi de entitati de acelasi tip. Pe la nga avantajul unui
model de date precis si simplu, sistemele de baze de date relationale mai beneficiaza si de un
limbaj de programare unanim recunoscut si ac ceptat, limbajul SQL ( Structured Query
Language).
O relatie este un tabel cu coloane si randuri.
Un atribut este o coloana a unei relatii, cu o anumita denumire.
Un domeniu este multimea de valori permise pentru unul sau mai multe atribute. Pentru fiecare
atribut se defineste in mod central denumirea domeniului, sensul acestuia si domeniul
dedefinitie.Caurmaresistemulvaevitaoperatiileincorectesemantic.
Un tuplu este un rand dintr -o relatie.
13
Intensitatea unei relatii: structura tabelului, specificarea domenii lor si a altor restrictii
referitoare la valorile posibile. Intensitatea este de regula fixa.
Gradul unei relatii reprezinta numarul de atribute pe care il cont ine. O relatie cu doua atribute
se numeste binara.C ardinalitatea unei relatii este numarul d e tupluri continute de aceasta. Baza de
date relationala este u n set de relatii normalizate. O baza de date relationala consta din relatii
structurateadecvat .
Avantajele sistemelor de baze de date sunt urmatoarele:
Controlul redundantei datelor : nu se elimina în intregime redundanta, ci se
controleazavolumul inerent al acesteia in baza de date
Coerenta datelor : datorita eliminarii redundantei, orice reactualizare a unui articol (stocat
osingura data) se face o singura data, eliminandu -se incoerenta. Daca artic olul este stocat
de mai multe ori, SGBD garanteaza coerenta tuturor exemplarelor din articolul respectiv.
Mai multe informatii obtinute de la aceeasi cantitate de date ; ca urmare a integrarii
dateloroperationale, doua sau mai multe fisiere pot fi integrat e, extragandu -se mai multe
informatii.
Partajarea datelor ; fisierele sunt detinute de compartimentele organizatiei care le
utilizeaza,dar fiind parte din baza de date, ele sunt la dispozitia tuturor utilizatorilor
interesati.
Integritatea crescuta a date lor; se refera la validitatea si coerenta datelor stocate.
Integritateaeste exprimata prin constrangeri , care reprezinta reguli de coerenta pe care
baza de date nu are voie sa le încalce.
Securitatea crescuta ; se refera la protectia baza de date fata de u tilizatorii neautorizati.
Fara sisteme desecuritate, integrarea ar face datele foarte vulnerabile. Securitatea se
realizeaza prin nume de utilizatori plus parole. Se poate limita tipul de operatie efectuata.
Aplicarea standardelor ; prin integrare se pot a plica standarde organizationale, nationale
sauinternationale, ca de exemplu formatul datelor, conventii referitoare la denumire, pt. a
facilita schimburi între sisteme.
Economia de scala ; în loc de bugete pentru fiecare compartiment pentru crearea unui
sistempropriu de baze de date bazat pe fisiere, exista un buget unic combinat, care
permite alocarea fondurilor economisite pentru îmbunatatirea sistemului.
Echilibrul între cerintele aflate în conflict ; cerintele posibil în conflict ale
diferitelorcompart imente referitoare la utilizarea BD sunt gestionate la nivel de DBA,
care va lua deciziile ce se impun si va acorda prioritate aplicatiilor majore.
Imbunatatirea accesibilitatii datelor si capacitatii de raspuns ; limbajele de interogare
sigeneratoare de r apoarte asociate SGBD ofera utilizatorilor posibilitatea unor interogari
ad-hoc, fara a apela la programator.
Productivitatea crescuta ; SGBD furnizeaza standardele necesare aplicatiei,
economisindtimpul programatorului.
Capacitatea de întretinere îmbunat atita, prin independenta de date ; într -un SGBD
descrierile
datelor sunt separate de aplicatii, aplicatiile fiind imune la modificarea descrierii datelor;
este caracteris tica de independenta program -date, care usureaza întretinerea aplicatiilor
din BD.
Concurenta/simultaneitatea imbunatatita ; se garanteaza alterarea datelor în situatia
cândacelasi fisier este utilizat simultan de mai multi utilizatori.
14
Imbunatatirea serviciilor de salvare de siguranta si refacere . Se minimizeaza
pierderileaparute ca urma re a unor defectiuni. Nu este necesara realizarea zilnica de copii
de siguranta.
Sistemele de baze de date prezinta si o serie de dezavantaje. Aceste sunt enumerate mai jos:
Complexitatea – Pentr u ca un SGBD sa fie functional, acesta va evolua intr – un sistem
soft extremde complex. Functionalitatea trebuie cunoscuta de catre toti cei implicati in
baza de date.
Dimensiunea – Fiind un element soft foarte complicat, SGBD ocupa mult spatiu pe disc
sinecesita multa memorie pentru a functiona eficient.
Costul SGBD variaza in functie de mediu si functionalitate. De la 150 USD pentru un PC
cu unutilizator, la 750.000 USD pentru un sistem mainframe cu sute de utilizatori. Se
adauga cheltuieli periodice anuale de intretinere.
Costurile aditionale pentru eleme nte hardware – Pentru a sigura performantele SGBD
poate finevoie de achizitionarea unui calculator mai mare, chiar dedicat rularii SGBD, cu
disc si memorie mai mare.
Costul conversiei – la implementarea unui nou sistem SGBD si/sau a unei noi
configuratiih ard, conversia poate costa semnificativ mai mult decat noile elemente hard.
Se include costul instruirii personalului, angajarea de personal specializat. Apare
termenul de sistemmostenit , adica un sistem mai vechi, inferior, de care organizatia se
crampone aza din motivede costuri de conversie.
Performanta – SGBD (spre deosebire de cel bazat pe fisiere) este general, creat pentru
apermite diverse aplicatii; astfel unele pot functiona mai putin rapid decât în cazul
sistemului bazat pe fisiere, creat pentru o anume aplicatie.
Impactul crescut al unei defectiuni – Centralizarea (partajarea) resurselor
crestevulnerabilitatea SGBD. Esecul oricarei componente poate duce la sistarea tuturor
operatiilor.
Modelul relațional prezintă urmatoarele componente:
– domeniu
– relație
– atribut
– schema unei relații
– cheia unei relații
-valori nule
9 Realizarea baze i de date
Structura unei baze de date (entitatile, atributele, relatiile) este determinata in timpul
proiectariibazei de date. Abordarea proi ectarii unei baze de date este diferita de cea a sistemelor
pe baza de fisiere, unde totul era dictat de nevoile aplicative ale departamentelor individuale. In
cazul bazelor de date trebuie luat in considerare intai datele apoi aplicatiile. Aceasta schimba re a
modului de tratare se numeste s chimbare de paradigma.
15
Se pot identifica patru tipuri distincte de persoane implicate in mediul SGBD:
administratorii de date si de BD
proiectantii de BD
programatorii de aplicatii
utilizatorii finali
Sarcinile adminis tratorului de date sunt enumerate mai jos:
responsabil cu gestionarea resurselor de date: planificarea, elaborarea și
intreținerea strategiilor și procedurilor bazei de date
responsabil cu proiectarea conceptuală/logica a BD
consultarea și indrumarea manag erilor superiori cu privire la directia de dezvoltare a
bazei de date
Proiectarea bazei de date include proiectarea logică si fizica a bazei de date. In urma acestei
etape va fi elaboratmodelul BD care va constitui suportul obiectivelor si operațiunilor
organizatiei. Principaleleobiective ale proiectarii bazei de date sunt:
reprezentarea datelor si a relatiilor dintre date, formulare pe diferitele zone ale aplicatiei
si ale grupurilor de utilizatori
furnizarea unui model al datelor care sa permita orice t ranzactie autorizata asupra
acestora
construirea unui proiect care va atinge cerintele de performanta ale sistemului, cum ar
fi: securitatea sau timpul de raspuns.
Softul utilizat in vederea crearii bazei de date este Oracle Database 11g Express
Edition.
Baza de date creata este urmatoarea:
Tabelele trebuie sa stocheze date din cele mai diverse astfel ca pentru o stocare si o
utilizare facila a datelor este nevoie de tipuri variate de date, optimizate pentru diferite utilizari.
Sistemul Orac le pune la dispozitie un set optim de tipuri de date care pot fi asociate coloanelor
unei tabele, grupate in mai multe categorii:
Tipuri numerice scalare
Tipuri scalare sir de caractere
Tipuri scalare binare
16
Tipuri pentru date calendaristice, timp si interval de timp
Tipuri LOB (large object)
Tipuri compuse: TABLE si VARRAY
Tipul chareste utilizat pentru a defini o coloana care contine siruri de caractere de lungime
fixa. Lungimea acestor siruri este cuprinsa în domeniul 1 -255. Acest tip de da te stocheaza date
alfanumerice. Atunci cand utilizati tipul char, Oracle efectueaza urmatoarele operatii: la definirea
coloanei îi atribuie lungimea fixa specificata de dumneavoastra, iar la inserarea unei valori
aceasta este ajustata pentru a o aduce la l ungimea respectiva. Daca valoarea introdusa este mai
scurta decat lungimea de definitie a coloanei, valorii ii sunt adaugate spatii. Daca valoarea
introdusa este mai lunga decat lungimea de definitie a coloanei, Oracle returneaza un cod de
eroare. Daca val oarea care depaseste lungimea coloanei poseda spatii la sfarsit, acestea sunt
eliminate pentru a aduce data la lungimea fixata.
Tipul varchar2 este utilizat pentru a defini o coloana care contine siruri de caractere de
lungime variabila. Lungimea acestor caractere poate fi cuprinsa în domeniul 1 -2,000 octeti.
Pentru o coloana definita ca fiind de tip varchar2, fiecare data este stocata ca data de lungime
variabila.
Atunci cand utilizati tipul varchar2 pentru a defini o coloana, Oracle efectueaza
urmatoar ele operatii: la definirea coloanei ii atribuie lungimea maxima specificata de
dumneavoastra, iar la inserarea unei valori aceasta este de lungime variabila. Daca valoarea
introdusa este mai scurta decat lungimea de definitie a coloanei, nu sunt adaugate s patii la sfrsitul
valorii. Acesta este un tip de date in care valorile nu sunt completate cu spatii. Daca valoarea
introdusa este mai lunga decat lungimea de definitie a coloanei, programul Oracle returneaza un
cod de eroare. Daca valoarea care depaseste l ungimea coloanei poseda spatii la sfarsit, acestea
sunt eliminate pentru a aduce data la lungimea maxima fixata.
Datele de tip varchar stocheaza siruri de caractere de lungime variabila comparate cu
diverse expresii de comparatie.
Datele de tip number st ocheaza numere in virgula fixa si in virgula mobila. Practic pot fi
stocate numere oricat de mari. Tipul number permite definirea preciziei si a scalei. Precizia este
egala cu numarul total de cifre ale numarului; scala se refera la numarul de cifre din dr eapta
punctului zecimal. Aceste numere pot fi stocate cu o precizie de pâna la 38 de cifre.
Tipul date stocheaza data calendaristica si ora in coloanele unui tabel cu precizie de o
secunda. Acest tip de data stocheaza cele patru cifre ale anului, luna, zi ua, ora, minutele si
secundele scurse de la miezul noptii. Pentru operatiile de intrare/iesire de date, formatul
prestabilit este DD -MON -YY. Ora este stocata in format HH:MM:SS. Nu puteti specifica data in
litere. Daca nu specificati componenta pentru ora intr-o valoare de tip data, ora prestabilita este
12:00:00 AM. In mod similar, daca omiteti componenta corespunzatoare datei calendaristice a
unei valori de tip data, data prestabilita este prima zi a lunii curente.
Programul Oracle ofera mai multe combin atii de litere care pot fi utilizate drept coduri de
format.
Tipul de date long : coloanele, variabilele si constantele de tip long stocheaza date
17
caracter cu lungime variabila continând pâna la 2 gigaocteti de informatie. Desi tipul de date
long este uti l în numeroase situatii, el prezinta urmatoarele limitari:
Intr-un tabel este permisa cel mult o coloana de tip long
Coloanele de tip long nu pot fi indexate
Coloanele de tip long nu pot aparea în restrictii de integritate
Nu se pot face referiri l a coloane de tip long în functii SQL cum sunt substr, length si
asa mai departe
Coloanele de tip long nu pot fi utilizate în clauzele where, group by, order by si
connect by în unitati de program PL/SQL nu pot aparea variabile sau argumente de
tip long
Tipurile raw si long raw sunt destinate datelor binare. Ele nu trebuie utilizate atunci când
datele urmeaza sa fie interpretate de Oracle. Aceste tipuri de date sunt ideale pentru stocarea
datelor multimedia sau a altor fisiere binare.
Tipul de date rowid corespunde adresei fizice a unei linii dintr -un tabel Oracle care nu
apartine unui cluster. El este un identificator unic al fiecarei linii. O coloana sau variabila de tip
rowid utilizeaza o reprezentare binara a adresei fizice. Atunci cand este rezultatu l unei interogari
în limbaj SQL*Plus sau în limbajul unui alt instrument Oracle, reprezentarea binara este
convertita în reprezentare hexazecimala. Fiecare tabel al unei baze de date Oracle poseda propria
coloana rowid, pe care însa nu o veti vedea afisata atunci cand executati o instructiune select *
from sau describe. Cu toate acestea, adresa fiecarei linii poate fi citita prin intermediul unei
interogari SQL in care este folosit cuvantul rezervat rowid drept nume de coloana. Datele de tip
rowid ofera urm atoarele avantaje: r eprezinta cea mai rapida metoda de accesare a liniilor, p ot fi
folosite pentru a vedea modul în care este orga nizat un tabel, e le identifica in mod univoc datele
dintr -un anumit tabel. Coloanele rowid sunt utilizate la construirea indec silor.
Nullnu este un tip de data Oracle, insa este un concept important legat de valoareadatelor.
Valoarile null pot aparea in coloanele tabelelor si in expresii SQL. Null se defineste ca o valoare
care este necunoscuta, fara sens sau irelevanta. Orice tip de data Oracle poate avea valoarea nuli.
Daca într -o linie lipseste valoarea pentru o anumita coloana, valoarea acelei coloane este null.
Valorile null pot aparea în orice coloana atat timp cat aceasta nu este supusa restrictiilor de
integritate not nu ll sau primary key. Nu confundati valoarea zero cu null. Zero este un numar si
are o semnificatie. O valoare null intr -o coloana de tip number nu este acelasi lucru cu o valoare
zero. O valoare de tip sir de caractere de lung ime zero este considerata null.
Un tabel este reprezentarea practica a notiunii teoretic e de relatie (relatia este o not iune
abstracta, cu sensul de multime matematica).
In prima etapa a proiectului a fost creat tabelul abonati care contine doar id -ul clientului.
Pentru crearea tabelu lui s-a folosit comanda urmatoare:
create table abonati(id number(10) not null);
18
Pentru a adauga o noua coloana, coloana nume in tabelul abonati deja creat se utilizeaza
comanda:
alter table abonati add nume varchar(25) not null;
Daca se dorest e stergerea tabelului abonati se va folosi urmatoarea sintaxa:
drop table abonati;
19
In continuare se va crea tabelul abonati care va contine id , nume, prenume , cod client,
cnp, telefon, tipul de abonament, servicii oferite, cost, stare plati (la zi sau restantier), vechime in
rețea. Cheia primara a fost aleasa ca fiind numarul de telefon intrucat acesta este unic.
create table abonati(
id number(10) not null,
nume varchar(25) not null,
prenume varchar(25)not null,
cod_client varchar(20) n ot null,
cnp number(13) not null,
telefon char(10) not null,
tip_abonament varchar(15) not null,
servicii_folosite varchar(100) not null,
cost number(3,2) not null,
stare_plati varchar(10) not null,
vechime_in_retea number(2) no t null,
primary key (telefon)
);
Tabelul abonati deja creat este modificat utilizand comanda de mai jos. Se va adauga
coloana adresa avand ca default ca valoarea ’Romania’.
alter table abonati add adresa varchar (100) default 'Romania' not null;
20
O alta modificare care se face in tabelul ab onati este legata tot de adresa. Se va modifica
adresa de la lungimea maxima de 100 la 50.
alter table abonati modify adresa varchar(50);
Pentru a sterge coloana adresa adaugata in tabelul abonati se ut ilizeaza sintaxa:
alter table abonati drop column adresa;
Urmatoarea etapa in realizarea temei a fost adaugarea unei constrangeri care permite
introducerea unui cnp de 13 car actere.
alter table abonati add constraint ck_cnp check(length(cnp)=13);
21
Cu ajutorul comenzii create sequence sq_abonati start with 1 increment by 1 nomaxvalue ;
se creeaza o secventa cu pas de incrementare 1 si fara valoarea maxima.
După definirea secvenței, se creeaza un trigger pe tabela inainte de inserare. Acesta
selec teaza din secvența creata urmatoarea valoare pe care o va folosi pentru valoarea cheii
primare a noului tuplu introdus prin insert. Astfel, inainte de inserarea oricarei linii noi in tabela,
se executa triggerul .
create or replace trigger trg_abonati
before insert on abonati
for each row
begin
select sq_abonati.nextval into :new.id from dual;
end;
22
Un trigger este o procedura stocata speciala in sensul ca este declansata (executata)
automat in urma unei alte actiuni c e a fost facută asupra tabelei . Pentru a introduce date in tabelul
deja creat se utiliz eaza comanda :
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ('Bumbacea', 'Corina', 'RO15RNCBE290SV18183 3',
'292032278901','0746159346' , 'Orange Pantera' , 'internet, voce, sms, mms', 4 , 'zi', 2);
In acest caz cnp -ul este format din 12 caractere si din aceasta cauza se va afisa mesajul
care indica faptul ca constrangerea adaugata a fost incalcata.
Pentru a verifica cazul in care cnp -ul introdus este corect, are 13 caractere, se foloseste
comanda:
23
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ('Bumbacea', 'Cor ina', 'RO15RNCBE290SV181833',
'2920322789012','0746159346' , 'Orange Pantera', 'internet, voce, sms, mms', 4 , 'zi', 2);
De aceasta data nu se mai afiseaza niciun mesaj de avertizare. Randul a fost inserat cu
succes.
Pentru afisarea randului inserat se utilizeaza sintaxa: select * from abonati;
In continuare au fost inserate 10 randuri in tabelul abonati:
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ( 'Bumbacea', 'C orina', 'RO15RNCBE290SV181833',
24
'2920322789012',' 0746159346' , 'Orange Pantera', 'internet, voce, sms, mms', 4 , 'zi', 2);
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vec hime_in_retea)
values ('Popescu', 'Ion', 'RO12RBABE130SY192831', '2847312986113','0747183903' ,
'Orange Cangur', 'voce, sms, mms', 2 , 'restant', 1);
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, st are_plati, vechime_in_retea)
values ('Badea', 'Mircea', 'RO45RHJPO130PL346793', '2870531768150','0747190251' ,
'Orange Delfin', 'internet, voce, sms, mms, roaming', 6 , 'zi', 3);
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament ,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ('Bumbacea', 'Andrei', 'RO35YTJUN286PL342093',
'2920322091860','0741600416' , 'Orange Tigru', 'internet, voce, sms, roaming', 2 , 'zi', 7);
insert into abonati( nume, prenume, cod_client, c np, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ('Ionescu', 'Adela', 'RO10ASFXY128PY370717', '2631024690134','0745173299' ,
'Orange Fluture', 'voce, sms, mms', 0 , 'zi', 4);
insert into abonati( nume, prenume, c od_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ('Mihalcea', 'Viorel', 'RO09RFGBK179PZ319704',
'2530927784118','0740428781' , 'Orange Tigru', 'voce, sms, roaming', 0 , 'zi', 8);
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ('Agapescu', 'Cristian', 'RO18RKLYN128PU696726',
'2850714758280','0745589159' , 'Orange Colibri', 'internet, voce, sms, mms, roaming', 4 ,
'restant', 2);
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ('Popovici', 'Roxana', 'RO12RFDGO245BL370394',
'2831231582170','0748267924' , 'Orange Pantera', 'internet, voce, sms, roaming', 3 , 'zi', 2);
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
values ('Florescu', 'Adriana', 'RO28ACBGA480AG362893',
'2931129772951','074 7824065' , 'Orange Cangur', 'internet, voce, sms, mms', 1 , 'zi', 2);
insert into abonati( nume, prenume, cod_client, cnp, telefon, tip_abonament,
servicii_folosite, cost, stare_plati, vechime_in_retea)
25
values ('Scornicescu', 'Vlad', 'RO27QDFPO790XH34813 3',
'2810325489150','0741159274' , 'Orange Tigru', 'internet, voce, sms, mms', 0 , 'zi', 5);
Se utilizeaza select * from abonati pentru a afisa continutul tabelului:
Dupa crearea tabelu l abonati, s -a creat tabelul clienty_prepay.Structura tabelului
clienti_prepay va contine id, numar telefon, servicii folosite (voce, sms, mms, video call,
internet, roaming), suma disponibila, vechime in retea.
create table clienti_prepay (
id number(10) not null,
telefon varchar(10) not null,
servicii_folo site varchar(100) not null,
suma_disponibila varchar(3) not null,
vechime_in_retea number(2) not null,
primary key (telefon)
);
26
Secventa create sequence sq_clienti_prepay start with 1 increment by 1 nomaxvalue;
creeaza o secventa cu p as de incrementare 1 si fara valoarea maxima.
După definirea secvenței, se creeaza un trigger pe tabela inainte de inserare. Acesta
selecteaza din secvența creata urmatoarea valoare pe care o va folosi pentru valoarea cheii
primare a noului tuplu introdus prin insert.
create or replace trigger trg_c lienti_prepay
before insert on clienti_prepay
for each row
begin
select sq_clienti_prepay.nextval into :new.id from dual;
end;
27
Urmatoarea etapa a fost inserarea randurilor in tabelul clienti_prepay:
insert into clienti_prepay(telefon, servicii_folos ite, suma_disponibila,vechime_in_retea)
values ('0742053232','internet, voce, sms, mms',4, 2);
insert into clienti_prepay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0741924109','voce, sms, mms',2.1, 3);
insert into clienti_p repay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0747105109','voce, sms, mms, roaming',1.9, 4);
insert into clienti_prepay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0743028163','voce, sms, mms',6, 5);
insert into clienti_prepay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0749125378','internet, voce, sms, mms, roaming',0, 1);
insert into clienti_prepay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0748189222','internet, voce, sms, roaming',9, 7);
insert into clienti_prepay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0740265196','internet, voce, sms',1, 6);
insert into clienti_prepay(telefon, servicii_folosite, s uma_disponibila,vechime_in_retea)
values ('0747224397','internet, voce, sms, mms, roaming',7, 3);
insert into clienti_prepay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0743107103','voce, sms, mms',0, 4);
insert into clienti_ prepay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0749723198','voce, sms, mms, roaming',10, 9);
Se foloseste sintaxa select * from clienti_prepay; pentru a afisa continutul tabelului:
28
Se apeleaza la sintaxa alter table c lienti_prepay add(nume varchar(25)); pentru a adauga
coloana nume in tabelul clienti_prepay.
29
Pentru a afisa clientii_prepay in ordine descrescatoare dupa vechime se uitlizeaza
comanda: select * from clienti_prepay order by vechime_in_retea desc;
Daca se doreste stergerea coloanei nume pe care am adaugat -o se foloseste comanda: alter
table clienti_prepay drop(nume);
Pentru a se face update intr -o anumita coloana a unui client_prepay se va folosi comanda:
update clienti_prepay set vechime_in_rete a=1 where telefon='0749723198';. .In acest caz
upda te-ul s-a facut pentru clientul prepay care are numarul de telefon 0749723198.
30
Pentru a se verifica daca clientul_prepay cu numarul de telefon 0749723198 are
vechimea_in_retea egala cu 1 se foloseste sintax a: select * from clienti_prepay where
telefon='0749723198'; pentru a afisa informatiile.
Cheia unei relatii
O relatie este o multime (de tupluri) ce nu poate contine elemente duplicat, spre deosebire
de exemplu de un tabel Excel unde putem avea dubluri, de aici rezulta faptul ca tuplurile pot fi
deosebite intre ele prin valorile aflate pe una sau mai multe coloane din relatie.
Putem afirma ca multimea minima de atribute ale caror valori identifica unic un tuplu al
relatiei respective este denumita cheia relatiei. Cheia unei relatii este o caracteristica a schemei
acesteia si nu este determinate prin inspectarea valorilor aflate la un moment dat in relatie.
O relatie poate avea una sau mai multe chei. de exemplu pentru relatia Abonati pot fi
folosite ca si chei atributele: {Nume, Prenume} – presupunem ca nu exista doua persoane cu
acelasi nume si prenume astfel incat aceasta combinatii de atribute sa identifice in mod unic
tuplurile relatiei.
O cheie candidata reprezinta o supercheie ireductibila sau min imala. Astfel, o cheie
candidata prezinta urmatoarele caracteristici :
trebuie sa respecte proprietatea de unicitate (nu se vor intalni doua tupluri diferite
ale relatiei cu aceeasi combinatie de valori ale atributelor cheii)
ireductibilitatea (nu exist ă nici o submulțime proprie, nevida, a cheii care sa prezinte
31
proprietatea de unicitate).
Supercheia
O supercheie a unei relatii reprezinta o submultime de atribute ale relatiei caracterizata de
proprietatea de unicitate. Altfel spus, orice combinatie de valori ale atributelor supercheii va fi
unica, indiferent de starea relatiei.
De exemplu pentru tabelul abonati putem lua o combinatie de {nume, prenume,
cnp,telefon} – aceasta combinatie de atribute identifica unic un tuplu. Pentru a define aceasta
const rangere pe tabela dupa ce am creat deja tabela trebuie sa folosim o comanda de tip alter
table.
alter table abonati add constraint unique_nume_prenume_cnp_tel
unique(nume, prenume, cnp,telefon);
O alta combinatie care se poate lua in considerare este urmatoarea:
alter table abonati add constraint unique_cod_client_tel
unique(cod_client, telefon);
32
Daca se doreste stergerea unui constrangeri se foloseste sintaxa: alter table abonati drop
constraint unique_nume_prenume_cnp_tel. In cazul nostru s -a inlaturat prima constrangere
adaugata. Orice constrangere nou adaugata tabelului poate fi stearsa in cazul in care se constata
ca s-a ales eronat .
In situatia in care pentru un tabel avem mai multe posibilitati de a alege supercheia
relatiei este recoman data alegerea supercheii care contine mai putine atribute pentru a minimiza
impactul negativ al cautarii unui inregistrari din tabel asupra resurselor serverului care ruleaza
baza de date si pentru a minimiza pe cat posibil timpul de cautare in baza de dat e.
Cheie candidata
O cheie este cheie candidata in cazul in care ea reprezinta o supercheie ireductibila adica
nu exista o submultime a atributelor supercheii care sa aiba proprietatea ca identifica in mod unic
un tuplu. Pentru a defini o constrangere d e tip cheie candidata tabelei abonati se foloseste
comanda:
alter table abonati add constraint unique_cnp unique (cnp);
33
Cheie primara
Cheia primara reprezinta o cheie candidata, cu rol special de accesare si identificare a
tuplurilor relatiei si nu adm ite valori de NULL.
Cheia secundara reprezinta o cheie candidata care nu a fost desemnata de proiectant ca si
cheie primara. Acestea admit valori NULL pentru unele din atributele lor daca se respecta
conditia de unicitate a valorilor.
Cheile primare pot fi natural (formate din unul sau mai multe attribute existente in relatie)
sau pot fi construite artificial de catre administrator pentru identificarea unica a tuplurilor, de
obicei acestea sunt formate dintr -un singur atribut al relatiei.
O relatie poate avea mai multe chei, insa in momentul creerii tabelei corespunzatoare,
decat una dintre ele poate fi aleasa ca si cheie primara a tabelei. O tabela nu poate avea decat o
singura cheie primara, formata din unu sau mai multe atribute ale acesteia. Alegerea c heii
secundare se va face in concordanta cu tipul de aplicatie in care este utilizata tabela. Principalul
motiv pentru justificarea alegerii este urmatorul: de obicei, se utilizeaza in acest scop acele chei
care reprezinta coduri ale inregistrarilor memora te în baza de date. Valorile de cod, ocupa foarte
putin spatiu in comparatie cu informatiile pe care le identifica, ceea ce conduce la o importanta
economie de spatiu in cazul crearii unui index, precum si la accelerarea regasirii informatiilor in
cazul in care se fac corelatii intre tabele.
Inca de la crearea tabelului abonati a fost creata a cheie primara(telefon).Daca nu am fi
realizat acest lucru inca de la inceput, s -ar fi putut defini cheia primara prin comanda de mai jos.
S-a ales aceasta cheie prim ara intrucat numarul de telefon este unic. La fel de bine s -ar fi putut
alege si cnp -ul sau codul de client intrucat si ele identifica in mod unic abonatul.
alter table abonati add constraint pk_telefon_abonat primary key(telefon);
;
Se poate preciza acelasi lucru si pentru tabelul clienti _prepay: inca de la crearea tabelului
clienti_prepay a fost creata a cheie primara. Daca nu am fi realizat acest lucru inca de la inceput,
s-ar fi putut defini cheia primara prin comanda urmatoare:
alter table client i_prepay add constraint pk_telefon_client_prepay primary key(telefon);
34
Pentru a putea defini o noua cheie primara, trebuiesc sterse cheile deja definite la crearea
tabelelor, acest lucru se face prin comanda:
alter table abonati drop primary key;
Pentru a sterge cheia primara pentru tabelul clienti_prepay se utilizeaza urmatoarea
comanda:
alter table clienti_prepay drop primary key;
Pentru a verifica noile constrangeri adaugate, vom incerca introducerea unei noi
inregistrari folosind urmatoarele i nformatii:
insert into clienti_prepay(telefon, servicii_folosite, suma_disponibila,vechime_in_retea)
values ('0742053232','internet, voce, sms, mms',4, 2);
35
Dupa cum se observa, telefonul nu este unic deci inserarea nu s -a putut adauga cu succes.
Cheie straina
O cheie straina este o constrangere utilizata pentru modelarea corecta a asocierilor de tip 1:N
intre relatii. Sunt cazuri in care o multime de coloane ale unei tabele contin valori care exista pe
cheia primara a unei alte tabele. Se numeste che ie straina o submultime de atribute ale unei
relatii R2 care refera la R1 r espectand urmatoarele conditii: a tributele cheii straine sunt definite
pe domenii compatibile cu cele ale atribut elor unei chei candidate din R1 si v alorile atributelor
cheii strain e intr -un tuplu din relatia R2 sunt identice cu valorile cheii atributelor cheii candidate
ale unui tuplu din R1 sau iau valoarea NULL.
Avand in vedere ca cele doua tabele create nu dau posibilitatea exemplificarii cheilor
straine, este nevoie de crearea cel putin a unui tabel care model eaza tipul abonamentului sau
tipul extraoptiunii .
In continuare se va c rea un nou tabel, extraoptiuni.
create table extraoptiuni (
id number(5) not null,
tip_extraoptiun e varchar(20) not null,
servicii_folosite varchar(100) not null,
primary key(tip_extraoptiune)
);
36
Crearea secventei se executa cu comanda:
create sequence sq_extraoptiun i start with 1 increment by 1 nomaxvalue;
Crearea triggerului se executa cu comanda:
create or replace trigger trg_extraoptiuni
before insert on extraoptiuni
for each row
begin
select sq_extraoptiuni.nextval into :new.id from dual;
end;
37
In cazul in care se doreste la renuntarea cheii primare initiale si se doreste a se
selecta alta cheia primara, se vor executa comenzile de mai jos.
alter table extraoptiuni drop primary key ;
alter table extraoptiuni add constraint pk_servicii
primary key( servicii_folosite);
In cazul in care se doreste adaugarea unei noi coloane, se va executa comanda:
alter table extraoptiuni add pret number(2);
Popularea tabelului se face in continuare cu comenzile:
insert into extraoptiuni(tip_extraoptiune, servic ii_folosite, pret)
values ('Basic','voce, sms, mms', 4)
insert into extraoptiuni(tip_extraoptiune, servicii_folosite, pret)
values ('Basic Plus','voce, sms, mms, roaming',5)
insert into extraoptiuni(tip_extraoptiune, servicii_folosite, pret)
values ('Int ernet Basic','internet, voce, sms',6)
insert into extraoptiuni(tip_extraoptiune, servicii_folosite, pret)
values ('Internet Basic Plus','internet, voce, sms, mms', 7)
insert into extraoptiuni(tip_extraoptiune, servicii_folosite, pret)
values ('Super Inte rnet','internet, voce, sms, roaming', 8)
38
insert into extraoptiuni(tip_extraoptiune, servicii_folosite, pret)
values ('Super Internet Plus','internet, voce, sms, mms, roaming', 9)
Pentru a vedea tipurile de extraoptiuni vom folosi comanda: select * from
extraoptiuni;.
In continuare se va face legatura cu tabela clienti_prepay cu ajutorul cheii straine.
alter table clienti_prepay
add constraint fk_servicii_folosite
foreign key (servicii_folosite)
references extraoptiuni(servicii_folosite);
39
Pentru a vedea clientii cu anumite extraoptiuni vom crea o vedere cu ajutorul
comenzii join.
select clienti_prepay.telefon, clienti_prepay.servicii_folosite,
clienti_prepay.suma_disponibila, clienti_prepay.vechime_in_retea,
extraoptiuni.tip_extraoptiune, extraopti uni.pret
from clienti_prepay
join extraoptiuni
on clienti_prepay.servicii_folosite=extraoptiuni.servicii_folosite
Pentru modelarea tipul de abonament se va crea tabelul abonamente.
create table abonamente (
id int not nu ll,
tip_abonament varchar(15) not null,
servicii_oferite varchar(100) not null,
cost number(3,2) not null
);
40
Se va utiliza drept che ie primara coloana tip_abonament. Comanda folosita este
urmatoarea:
alter table abonamente add constraint pk_tip_abonament
primary key(tip_abonament);
Atributele care modeleaza tipul de abonament se regasesc si in tabelul abonati astfel ca
este ne cesara stergerea celor doua atribute (cost, servicii_oferite) din tabelul abonati. Acest lucru
se face prin intermediul comenzilor:
alter table abonati drop column cost;
41
Se foloseste comanda create sequence sq_abonamente start with 1 increment by 1
nomaxvalue; pentru a crea o secventa ca si in cazurile anterioare.
Pentru a crea trigger -ul se utilizeaza comanda:
create or replace trigger trg_abonamente
before insert on abonamente
for each row
begin
select sq_abonamente.nextval into :new.id from d ual;
end;
42
Dupa stergerea celor doua coloane, este necesara introducerea datelor care sa modeleze
abonamentele disponibile, acest lucru se face prin intermediul unei comenzi de tip insert:
insert into abonamente(tip_abonament, servicii_oferite, cost)
values('Orange Pantera', 'internet, voce, sms, mms', 6)
insert into abonamente(tip_abonament, servicii_oferite, cost)
values('Orange Tigru', 'voce, sms, roaming', 5)
insert into abonamente(tip_abonament, servicii_oferite, cost)
values('Orange Fluture', ' voce, sms, mms', 4)
insert into abonamente(tip_abonament, servicii_oferite, cost)
values('Orange Cangur', 'internet, voce, sms, mms, roaming', 8)
insert into abonamente(tip_abonament, servicii_oferite, cost)
values('Orange Delfin', 'internet, voce, sms, mms, roaming, video call', 9)
insert into abonamente(tip_abonament, servicii_oferite, cost)
values('Orange Colibri', 'internet, voce, sms, roaming, video call', 7)
43
Pentru a se vizualiza tabeulul se foloseste sintaxa select* from abonamente;
Inainte de a se adauga cheia straina trebuie ca tabelul abonamente sa fie populat.
Se apeleaza la urmatoarea comanda pentru a selecta cheia straina:
alter table abonati
add constraint fk_tip_abonament
foreign key (tip_abonament)
references abonamente(tip _abonament);
In comanda de mai jos s -a ilustrat utilizarea functiei join:
select abonati.nume, abonati.prenume, abonati.cod_client,
abonati.cnp, abonati.telefon, abonati.stare_plati,
abonati.vechime_in_retea,abonati.tip_abonament,
abonamente.servic ii_oferite, abonamente.cost
from abonati
join abonamente
on abonati.tip_abonament=abonamente.tip_abonament
44
Vederile
O vedere reprezinta o interogare de tip Select a carei definitie este stocata in baza de date
si care produce un set de rezult ate.
Actiunile care se pot face asupra unei vederi sunt urmatoarele:
din ea se pot extrage date
asupra ei se pot stabili privilegii
poate selecta date din una sau mai multe tabele
poate aplica prelucrari asupra datelor si poate agrega valorile obtinu te in caz de nevoie
poate furniza doar un subset al coloanelor din tabela/tabelele de provenienta a datelor,
selectand doar coloanele dorite in definitia vederii
poate furniza doar un subset al randurilor din tabela/tabelele de provenienta aplicand
clauza WHERE instructiunii SELECT ce defineste vederea
O vedere mai poarta numele si de tabela virtuala. Vederile sunt create utilizan d
instructiunea „create view”. Dupa ce vederea a fost creata, asupra acesteia se poate aplica o serie
de comenzi. Comenzile care se pot aplica sunt urmatoarele:
SELECT
INSERT
INPUT
UPDATE
DELETE
Vederile se folosesc pentru memorarea in baza de date a interogarilor efectuate in mod
frecvent si ale caror rezultate participa eventual in alte interogari.
45
Un alt motiv pentru care se folosesc vederile este faptul ca uneori dorim sa prezentam
anumitor clienti numai anumite informatii din baza de date – fie din motive de securitate (pentru
a nu oferi acces la date confidentiale sau pentru a nu risca ca ei sa modifice date din greseala), fie
din usurinta (clientul are nevoie numai de o parte a informatiei din tabela/baza de date). Putem
crea o vedere care selecteaza numai coloanele de interes accesibile clientului, stabilind
privilegiile de asa natura incat clientul sa nu po ata accesa decat coloanele dorite.
Utilizarea vederilor aduce o serie de avantaje:
furnizeaza un mecanism de securitate puternic
permite utilizatorilor accesarea datelor in mod personalizat; aceleasi date pot
fivizualizate simultan, in moduri diferite, de catre diversi utilizatori
poate simplifica operatiile complexe asupra relatiilor de baza
Vederile impart acelasi spatiu de nume cu tabelele bazei de date in care sunt create, de
aceea la definirea unei vederi trebuie avut in vedere ca sa nu existe d eja un tabel cu acelasi nume.
In cazul in care in baza de date exista deja o vedere cu acelasi nume, clauza OR REPLACE va
determina inlocuirea definitiei acestuia cu noua definitie. Clauza nu are insa efect daca in baza de
date se gaseste o tabela cu numel e respective, in acest caz crearea unei noi vederi va esua.
Pentru a crea o vedere se foloseste urmatoarea sintaxa:
CREATE [OR REPLACE] VIEW nume_view [(nume_coloana_1, nume_coloana_2,…)]
AS instructiune_select
Numele de coloane ale unei vederi trebuie sa fie unice in cadrul vederii, numele de
coloane implicite produse de vedere sunt cele returnate de interogarea SELECT ce o defineste.
Atunci cand numele coloanelor nu sunt unice se apeleaza la diferite metode pentru a evita acest
lucru. Masurile pe care le putem lua sunt:
folosirea clauzei AS in cadrul instructiunii SELECT pentru a redenumi coloanele “cu
probleme”
specificarea numelui tuturor coloanelor produse de vedere, specificandu -le intre
paranteze imediat dupa numele vederii in definitia acestu ia. Numarul de nume de coloane
specificate in definitia vederii trebuie sa fie egal cu numarul de coloane produse de
interogarea SELECT ce -l defineste
Atunci cand se creeaza o vedere trebuie sa se tina cont de o serie de restrictii. Aceste
restrictii sunt enumerate mai jos:
nu poate fi creata o vedere temporara (folosind clauza TEMPORARY, acceptabila in
cazul unei tabele)
vedere nu poate avea triggere asociate
instructiunea SELECT ce defineste vederea trebuie sa respecte urmatoarele cerinte:
trebuie s a refere numai la tabele si vederi deja existente,nu se poate referi la tabele
temporare, nu poate contine o subinterogare in FROM, nu poate referi variabile de orice
natura, poate contine ORDER BY, insa aceasta va fi ignorant daca vederea este folosita
in cadrul unei instructiuni care are la randul sau ORDER BY
46
O vedere este actualizabila este o vedere careia i se pot aplica instructiuni DML de
modificare a datelor. Restrictiile ce se pot aplica unei vederi pentru ca ea sa poate fi
actualizata difera in functie de instructiunea DML ce dorim sa functioneze.
O vedere poate suporta instructiunea INSERT, in acest scop ar trebuie sa fie o vedere
updatabila si sa respecte simultan cateva restrictii:
vederea trebuie sa contina toate coloanele din tabela de b aza care nu au valoare implicita
toate coloanele din vedere trebuie sa provina direct din coloanele tabelei
Vederile pentru clientii prepay
Clientii prepay care sunt in roaming
Vederea s -a creat in felul urmator:
create or replace view roaming_prepa y (id, telefon,
servicii_folosite, suma_disponibila, vechime_in_retea,
tip_extraoptiune, pret)
as select clienti_prepay.id, clienti_prepay.telefon,
clienti_prepay.servicii_folosite, clienti_prepay.suma_disponibila,
clienti_prepay.vechime_in_retea,extraoptiuni.tip_extraoptiune,
extraoptiuni.pret
from clienti_prepay, extraoptiuni
where clienti_prepay.servicii_folosite=extraoptiuni.servicii_folosite
and extraoptiuni.servicii_folosite like '%roaming%';
47
Pentru viz ualizarea vedere se va executa:
select * from roaming_prepay;
Clientii prepay care au vechime mai mare de 4 ani
Vederea s -a creat astfel:
create or replace view vechime_prepay (id, telefon,
servicii_folosite, suma_disponibila, vechime_in_retea,
tip_extraoptiune, pret)
as select clienti_prepay.id, clienti_prepay.telefon,
clienti_prepay.servicii_folosite, clienti_prepay.suma_disponibila,
clienti_prepay.vechime_in_retea,extraoptiuni.tip_extraoptiune,
extraoptiuni.pret
from clienti_prepay, extraop tiuni
where clienti_prepay.servicii_folosite=extraoptiuni.servicii_folosite
and clienti_prepay.vechime_in_retea >3;
48
Vizualizarea vederii: select * vechime_prepay order by vechime_in_retea
49
Clientii prepay care au o suma disponibila mai mare ca 3
create or replace view cost_prepay (id, telefon,
servicii_folosite, suma_disponibila, vechime_in_retea,
tip_extraoptiune, pret)
as select clienti_prepay.id, clienti_prepay.telefon,
clienti_prepay.servicii_folosite, clienti_prepay.suma_disponibila,
clienti_prepay.vechime_in_retea,extraoptiuni.tip_extraoptiune,
extraoptiuni.pret
from clienti_prepay, extraoptiuni
where clienti_prepay.servicii_folosite=extraoptiuni.servicii_folosite
and clienti_prepay.suma_disponibila > 4;
Vizualizarea vederii: select * from cost_prepay;
50
Vederile pentru abonati
Abonatii care sunt in roaming
Crearea vederii:
create or replace view abonati_roaming (id, nume, prenume, cod_client,
telefon, tip_abonament, servicii_oferite, cost, stare_plati,
vechime_in_retea)
as select distinct abonati.id, abonati.nume, abonati.prenume, abonati.cod_client,
abonati.telefon, abonati.tip_abonament,
abonamente.servicii_oferite,abonamente.cost,abonati.stare_plati,
abonati.vechime_in_retea
from abonati, abonamente
where abonati.tip_ abonament=abonamente.tip_abonament and
abonamente.servicii_oferite like '%roaming%';
51
Vizualizarea vederii:
select * from abonati_roaming order by id;
Abonatii al carui cost al abonamentului depaseste valoarea de 6
Creare vedere:
create or re place view abonati_cost (id, nume, prenume, cod_client,
telefon, tip_abonament, servicii_oferite, cost, stare_plati,
vechime_in_retea)
as select distinct abonati.id, abonati.nume, abonati.prenume,
abonati.cod_client, abonati.telefon, abonati.tip_aboname nt,
abonamente.servicii_oferite,abonamente.cost,abonati.stare_plati,
abonati.vechime_in_retea
from abonati, abonamente
where abonati.tip_abonament=abonamente.tip_abonament and abonamente.cost>6;
52
Vizualizare vedere:
select * from abonati_cost order b y cost;
Abonatii ce au o vechime mai mare de 3 ani in retea
Crearea vederii:
create or replace view abonati_vechime (id, nume, prenume, cod_client,
telefon, tip_abonament, servicii_oferite, cost, stare_plati,
vechime_in_retea)
as select distinct ab onati.id, abonati.nume, abonati.prenume,
abonati.cod_client, abonati.telefon, abonati.tip_abonament,
abonamente.servicii_oferite,abonamente.cost,abonati.stare_plati,
53
abonati.vechime_in_retea
from abonati, abonamente
where abonati.tip_abonament=abonament e.tip_abonament and abonati.vechime_in_retea>
3;
Vizualizarea vederii:
select * from abonati_vechime order by vechime_in_retea;
54
Bibliografie
– Curs „Baze de Date pentru Telecomunicatii”
– Laborator „Baze de Date pentru Telecomunicatii”
– http://www.w3schools.com/sql/
– http://www.oracle.com/technetwork/testcontent/windbinst2 -084353.html
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Baze de date pentru telecomunicatii [602972] (ID: 602972)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
