Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Avantaje SQL, ODBC, Delphi

sql



+ Font mai mare | - Font mai mic



DOCUMENTE SIMILARE

Avantaje SQL, ODBC, Delphi

Avantaje SQL, ODBC, Delphi

1 Avantaje oferite de SQL



In mod curent exista doua metode uzuale de utilizare a SQL intr-un program aplicativ:

Embedded SQL

Call level interface for SQL

Standardul ANSI defineste trei tipuri de realizare a interfetei cu SQL intr-un program de aplicatie:

Module Language

Embedded SQL

Direction Invocation

Dupa cum am spus, SQL dezvolta si respecta conceptele exprimate de dr. Cood in definirea modelului relational.Voi enumera in continuare ceea ce este cunoscut sub numele de cele ,,12 reguli ale lui Cood "(care sunt de fapt 13):

Un sistem de administrare a bazelor de date trebuie sa poata administra bazele de date in intregime prin functiile sale relationale.

Toate informatiile dintr-o baza de date (inclusiv numele de tabel si de coloana ) sunt reprezentate explicit ca valori in tabele.

Orice valoare dintr-o baza de date este accesibila prin folosirea unei combinatii intre numele tabelului, valoarea cheii primare si numele coloanei.

SGBD-ul ofera un suport sistematic pentru tratamentul valorilor nule, diferit de valorile prestabilite si independent de orice domeniu.

Trebuie sa existe cel putin un limbaj acceptat care sa aiba o sintaxa bine definita si sa fie multilateral, prin faptul ca suporta definirea si manipularea datelor,regulile de integritate,autorizarea si tranzactiile.

Descrierea bazei de date si a componentelor sale este reprezentata la nivel logic sub forma de tabele si de aceea poate fi interogata folosind limbajul bazei de date

Toate vederile care pot fi actualizate pot fi actualizate in cadrul sistemului.

SGBD-ul suporta nu numai regasirea datelor ci si inserari, stergeri si actualizari.

Programele de aplicatii si cele create pe moment nu sunt afectate din punct de vedere logic la deteriorarea metodelor de acces fizic sau a structurilor de memorare.

Programele de aplicatii si cele create pe moment nu sunt afectate din punct de vedere logic cand sunt facute modificari in structura tabelelor.

Limbajul bazei de date trebuie sa poata defini reguli de integritate.

Programele de aplicatii si cererile momentane nu sunt afetate din punct de vedere logic la prima distribuire a datelor sau la o distribuire ulterioara.

Nu trebuie sa fie posibil sa fie incalcate regulile de integritate definite prin limbajul bazei de date prin folosirea limbajelor de nivel inferior.

Toate aceste reguli sunt respectate de catre SQL.

Noul standard SQL3 preconizeaza o serie de extensii fata de standardul actual SQL2 in conditiile mentinerii compatibilitatii totale cu acesta:

Facilitati orientate obiect se refera la : posibilitatea de definire la nivel utilizator a tipurilor de date abstracte, incluzand metode, identitatea obiectelor, subtipuri si mostenire, polimorfism, etc;

Structuri de control specifice limbajelor complet computationale:IF, FOR, WHILE, etc ceea ce va transforma SQL intr-un limbaj de sine statator a carui putere e expresie nu este limitata la nivelul limbajelor relationale;

Facilitati pentru exprimarea prelucrarilor cu caracter recursiv;

Facilitati pentru lucrul in retea;

Facilitati pentru prelucrare distribuita,inclusiv pentru tehnologia client/server.Aceasta presupune mecanisme pentru crearea, memorarea si executia procedurilor la nivelul server-elor de date(stored procedure);

Facilitati multi-media care sunt inglobate in modulul specializat Multi-Media SQL

Facilitati pentru tratarea timpului in bazele de date, facilitati care fac parte din componenta Temporal SQL;

Ma voi referii intai la mediul Microsoft SQL 7.0 ca avantaje oferite din punctul de vedere al SGBD-ului.Pentru acest lucru voi explicita ce anume trebuie urmarit cand se face evaluarea unui produs ce gestioneaza date.

O notiune importanta este cea de tranzactie.O tranzactie este o unitate logica de prelucrare care asigura consistenta si siguranta bazei de date.In principiu orice executie a unui program se poate considera o tranzactie daca baza de date este intr-o stare consistenta atat inainte cat si dupa executia sa.

Acest lucru trebuie indeplinit indiferent daca:

-tranzactia a fost executata in mod concurent cu alte tranzactii;

-au aparut defecte in timpul executiei;

In general,o tranzactie consta dintr-o secventa de operatii de citire si scriere a bazei de date , la care se adauga o serie de operatii de calcul.Baza de date poate fi intr-o stare temporar inconsistenta in timpul executarii tranzactiei, dar trebuie sa fie in stari consistente atat inainte cat si dupa executia tranzactiei.

Dupa cum am mentionat mai inainte, apar doua puncte de vedere din a caror unghi trebuie sa privim probleme: controlul concurentei si rezistenta la defecte.

Prima problema cea de control al concurentei se ocupa de mecanismele de sincronizare a acceselor astfel incat sa fie mentinuta integritatea bazei de date.Automat cand discutam despre controlul concurentei cu mecanisme de blocare apare o problema colaterala : cea a interblocarilor.

Cea de-a doua problema a rezistentei la defecte se refera la tehnicile prin care se asigura atat toleranta sistemului fata de defectele aparute, cat si la capacitatea de recuperare a acestuia, adica posibilitatea de revenire la o stare consistenta in urma aparitiei unui defect care a cauzat intrarea lui intr-o stare incostintenta. Asupra acestor probleme voi revenii mai incolo cu o detaliere mai profunda a problemei.

Pentru a raspunde cerintelor o tranzactie trebuie sa indeplineasca ceea ce in literatura este cunoscut sub acronimul de ACID.In continuare voi explicita importanta fiecarei proprietati si cum raspunde SQL-ul la indeplinirea lor.

a)ATOMICITATEA se refera la faptul ca o tranzactie este considerata o unitate elementara de prelucrare ceea ce inseamna ca tranzactiile se executa dupa regula ,, totul sau nimic", adica ori se executa toate operatiile din tranzactie ori nu se executa nimic. Dupa cum am spus o tranzactie este reprezentata de o operatie de scriere sau citire intercalate cu diferite operatii aplicate asupra datelor ce constituie obiectul tranzactiei.SGBD-ul ,in cazul intreruperii bruste si neprevazute a programului, are doua posibilitati: fie completeaza operatiile ramase neexecutate din cadrul tranzactiei ,terminand tranzactia cu succes fie anuleaza toate efectele executate de tranzactie.In cazul SQL-ului, o tranzactie poate fii reprezentata de-o operatie de selectare a unui set de date sau de o aceeasi operatie de selectare urmata si de-o prelucrare a datelor.Pentru a se privii o serie de operatii separate ca un tot unitar , SQL-ul ofera posibilitatea definirii corpului unei tranzactii intre ,,BEGIN TRANSACTION" si ,,END TRANSACTION" ceea ce va provoca SGBD-ul sa priveasca totul ca un tot unitar si deci intreruperea accidentala a programului va duce la eliminarea corecta a efectelor programului.Daca sistemul cade in timpul efectuarii unei operatii elementare inainte de validarea ei rezultatele ei vor fii anulate.

b)CONSISTENTA unei tranzactii consta pur si simplu in corectitudinea sa.Orice tranzactie, daca este executata independent, trebuie sa mentina consistenta bazei de date.Altfel spus, o tranzactie este un program corect care transforma o baza dintr-o stare consistenta intr-o alta stare consistenta.Prin consistenta bazei de date intelegem satisfacerea tuturor constrangerilor de integritate, explicite sau implicite, cum ar fi: unicitatea cheilor primare, integritatea referentiala, orice predicat exprimat in sens de constrangere de integritate asupra bazei de date.Sql-ul executa verificare de unicitate a cheii primare la fiecare introducere a unei tuple sau la modificarea unor tuple.In ce priveste integritatea referentiala, exista o posibilitate de verificare a integritatii referentiale prin utilizarea ,,DATABASE DIAGRAMS'' ceea ce permite SQL-ului sa verifice si sa nu se permita violarea integritatii.Dar fiecare moneda are reversul ei, folosirea ,,DATABASE DIAGRAM'' impunand anumite restrictii la stergerea si adaugarea unor noi tuple, deci o alta abordare a acestor probleme.Se poate renunta la acest lucru in schimbul preluarii acestui job de catre programator.De fapt aceasta proprietate este in mare parte asigurata de catre programatorul aplicatiei.Dar de remarcat faptul ca prin utilizarea unor facilitati oferite de SQL se minimizeaza rolul proiectantului.

Trebuie specificat faptul ca starile intermediare prin care trece baza de date in timpul executiei unei tranzactii nu sunt neaparat consistente.

c)IZOLAREA se refera la proprietatea oricarei tranzactii de-a avea acces doar la starile consistente ale bazei de date.Aceasta inseamna ca modificarile efectuate de catre o tranzactie sunt inaccesibile altor tranzactii concurente pana in momentul validarii acesteia.Prin proprietatea de izolare se creaza iluzia ca fiecare tranzactie este executata singura in sistem .Izolarea tranzactiilor este asigurata de algoritmii de control ai cocurentei.Proprietatea de izolare este importanta deoarece elimina fenomenul de ,,abortare in cascada" al tranzactiilor.Intr-adevar daca rezultatele incomplete ale unui tranzactii ar fi vizibile altor tranzactii inainte de validarea acesteia sidaca se intampla ca aceasta sa aborteze, atunci toate tranzactiile care au accesat rezultatele incomplete vor trebui abortate.Aceasta ar duce la abortare altor tranzactii s,a.m.d. rezultand efectul domino.

d)DURABILITATEA este proprietatea prin care se garanteaza faptul ca odata tranzactia validata , rezultatele sale devin permanente.SQL dispune de un jurnal cu care chiar daca dupa momentul validarii apare un defect, care impiedica inscrierea normala a rezultatelor in baza de date, acestea vor fi trecute in baza de date la reluarea activitatii.

Dupa cum am mai mentionat, aplicatia este una de tip client-server.Acest lucru implica automat aparitia unor situatii de conflict datorate accesului concurent la bazele de date prin accesarea simultana.Modul de rezolvare a conflictului depinde de natura cererilor de acces la date, functie de care distingem doua cazuri:

Cereri de acces de tip ,,regasire", atunci secventializarea accesului la mediul de memorare este suficienta pentru a nu mai fi nevoi de alte precautii.Rezolvarea situatiilor conflictuale cauzate de operatii de citire simultane poate fi lasate in seama sistemului de operarecare stabileste ordinea de satisfacere a cererilor dupa criteriul asigurarii concurentei maxime de operare minimizand timpul gobal de satisfacere a cererilor.

Cereri de acces de tip ,,actualizare''.In aceste cazuri este necesara aplicarea unor strategii adecvate de tratare a cererilor de acces.

Calea cea mai simpla de evitare a interactiunilor este de a executa tranzactiile in mod independent una de alta.Este clar ca o asemenea alternativa prezinta interes doar din punct de vedere teoretic si din punct de vedere practic este inacceptabila deoarece reduce la minim nivelul concurentei.In fapt nivelul de concurenta (numarul de tranzactii executate concurent ) este un factor deosebit de important al unui programator.De accea trebuie facut un compromis intre mentinerea consistentei bazei de date si obtinerea unui nivel de concurenta cat mai ridicat.

SQL pune la dispozitie mai multe instrumente de control al concurentei:

Una ar fi posibilitatea de setare a nivelului de izolare a tranzactiei. SET TRANSACTION ISOLATION LEVEL este o comanda care permite accest lucru.Setarea se face in functie de nevoile tranzactiei care este setata.Avem 4 tipuri de setari: READ COMMITTED, READ UNCOMMITTED, REPEATABLE READ, SERIALIZABLE

La READ COMMITTED datele sunt blocate pana cand datele au inceput sa fie citite eliminandu-se ceea ce se cunoaste sub numele de dirty reads, dar datele pot fi modificate inainte de terminarea tranzactiei ceea ce duce la aparitia fenomenului de date fantoma(phantom data).Este optiunea default a SQL serverului.

La READ UNCOMMITTED favorizeaza dirty reads si blocaje de gradul 0.Cand aceasta optiune este setata se favorizeaza citirea inainte de validare si citirea de dirty date;datele se vor schimba inainte de terminarea tranzactiei si tuple vor aparea si disparea in timpul executiei unei tranzactii.Este echivalenta cu utilizarea lui NONLOCK.Este cea mai putin restrictiva directiva dintre cele 4.

La REPEATABLE READ sunt blocate toate inregistrarile care sunt selectate in query,nepermitand utilizatorilor sa modifice datele blocate,dar nu sunt impie-dicate introducerea de noi randuri de catre un alt utilizator in setul de date care vor afecta citirile ulterioare din cadrul tranzactiei.Avand cel mai scazut grad de concurentialitate, se recomanda utilizarea lui doar cand este necesar.

La SERIALIZABLE se blocheaza tot setul de date.Este cea mai restrictiva de aceea are nivelul de concurenta cel mai scazut.

Daca nu se doreste utilizarea acestor setari care actioneaza pe durata setarii, se poate jongla la select sau in tranzactii mai explicit prin utilizare unitatii de acces a SQL-ului.Aceasta unitate de acces (items) reprezinta o portiune a bazei de date care poate constitui obiectul unei operatii de blocare(lock).Prin blocarea unei unitati de acces o tranzactie poate impiedica accesul altor tranzactii la unitatea blocata pana in momen-tul deblocarii acestei unitati de catre tranzactia care a efectuat blocarea.Gestiunea operatiilor de blocare, precum si arbitrarea cererilor de blocare venite din partea tranzactiilor este realizata de catre o componenta speciala :lock manager.Natura si dimensiunea unitatilor de acces este stabilita de proiectantul sistemului.Exista si o unitate de acces minima care in cazul SQL 7.0 este de o inregistrare ceea ce sporeste considerabil nivelul concurentei.Prin utilizarea unor unitati mari de acces se dimensiuni mari se reduce numarul de operatii de blocare ceea ce inseamna reduce-rea excesului de timp consumat de sistem pentru gestionarea acestor operatii, precum si reducerea spatiului de memorie necesar inregistrarii blocajelor.In schimb utilizarea unei unitati de acces de dimensiuni mici creste considerabil gradul de concurenta. SQL-ul permite utilizarea unor comenzi ca nolock,lockall,etc.

Avand in vedere ca limbajul SQL constituie partea cea mai importanta a lucrarii,in continuare voi face o scurta prezentare a limbajului SQL si a principalelor moduri de lucru cu el.

Operatia fundamentala in SQL este maparea, reprezentata din punc de vedere sintactic printr-o constructie SELECT-FROM-WHERE(pe scurt constructie SELECT). Aceasta constructie corespunde unei succesiuni de operatori algebrici de forma selectie-proiectie-cuplare foarte frecventa in algebra relationala.

Clauza SELECT realizeaza operatia de proiectie si este urmata de lista de atribute care se retin in relatia rezultat.Ea nu trebuie confundata cu selectia din algebra relationala asa cum am fi tentati in mod eronat asa cum am fi tentati in mod eronat ca urmare a asemanarii intre denumiri.De remarcat ca proiectia SQL difera de operatorul de proiectie definit in cadrul algebrei relationale prin faptul ca nu elimina in mod automat tuplelel duplicat.Eliminarea tuplelor duplicat, atunci cand este necesara ,trebuie solicitata in mod explicit de catre utlizator prin folosirea operatorului DISTINCT.In SQL s-a adoptat aceasta strategie din motive de eficienta, operatia de eliminare a duplicatelor fiind relativ costisitoare.

Operatia de cuplare poate fi realizata cu ajutorul clauzei FROM, atunci cand ea este urmata de o lista formata din cel putin doua nume de relatie,impreuna cu conditia de cuplare formulata in cadrul clauzei WHERE.

Selectia este realizata prin cea de-a treia clauza, WHERE , care de cale mai multe ori este urmata de un predicat (calificator) referitor la atributele relatilor din clauza FROM.Clauza WHERE este insa mult mai complexa decat operatia de selectie din algebra relationala, deoarece expresia care o urmeaza poate contine atat comparatii de atribute si/sau expresii aritmetice, cat si operatori logici(AND, OR, NOT), operatori pe pe multimi(UNION, INTERSECT, MINUS) si operatori de apartenenta la multimi cu negarile acestora(X IN S, X NOT IN S,S CONTAINS X,S DOES NOT CONTAINS X, unde S este o relatie si X este o tulpa sau o relatie caz in care este vorba de operatii de incluziune intre multimi).Expresia care urmeaza clauzei WHERE pote de asemeni sa contina operanzi care sunt relatii rezultate din alte constructii SELECT ceea ce asigura posibilitatea imbricarii acestora in interogari oricat de complexe.

Facilitatile limbajului SQL provenite din calculul relational al tuplelor se refera in principal la posibilitatea de a declara variabile de tupla asociate unor relatii. Asocierea se face in cadrul clauzei FROM sub forma: SELECT .FROM R T WHERE . unde R este o relatie, iar T este o variabila de tupla.

Variabila de tupla T poate fi folosita in cadrul expresiei care urmeaza dupa clauza WHERE, unde se pot face referiri la valoarea componentei A din tulpa T prin notatia T.A.

Sintaxa completa a constructiei SELECT este urmatoarea :

SELECT [DISTINCT] nume_atribut1.

FROM nume_relatie[variabila_de_tupla].

[WHERE calificator1]

[GROUP BY nume_atribut 2.

[HAVING calificator2]]

[ORDER BY nume_atribut3[ASC/DESC].]

unde [] desemneaza o componenta optionala a constructiei, iar. indica repetarea de unul sau mai multe ori a parametrului clauzei curente(lista de parametri).

Valoarea (valorile) corespunzatoare parametrului (parametrului) nume_atribut1 precizeaza in mod explicit atributele dupa care se face proiectia.Daca exista ambiguitati referitor la relatiile din care fac parte atributele specificate, atunci acestea vor fi precedate de numele relatiei corespunzatoare fiecarui atribut.Daca in locul acestei liste se foloseste simbolul * atunci proiectia se face dupa toate atributele relatiei (relatiilor) specificate in clauza FROM.In lipsa operatorului optional DISTINCT proiectia se face fara eliminarea duplicatelor iar daca acesta apare, atunci se elimina eventualele duplicate rezultate in urma operatiei de proiectie propriu-zisa.In cazul cel mai general, parametrul nume_atribut_1 poate fi o expresie aritmetica combinand atribute si /sau functii de agregare avand ca operanzi unul sau mai multe atribute.

Prin parametrul nume_relatie se specifica relatia (relatiile ) care constitue operandul (operanzii ) operatorului de mapare prin parametrul variabila_de_tupla putem asocia fiecarei relatii cate o variabila de tupla.

Parametrul calificator1 precizeaza criteriul de selectie al tuplelor unei relatii.

Clauza GROUP BY are ca efect grupare tuplelor unei relatii pe baza valorilor unui atribut sau grup de atribute.Parametrul nume_atribut2, furnizeaza parametrul de grupare(partitionare ) al tuplelor unei relatii in submultimi de tuple, toate avand aceeasi valoare pentru atributul(atributele) nume_atribut2.Criteriul de grupare este format din unul sau mai multe atribute.Aceste submultimi sau grupuri de tuple urmeaza a fi tratate ca un tot unitar in anumite operatii cum ar fi aplicare functiilor de agregare care se calculeaza nu pe intreaga relatie, ci pentru fiecare grup de tuple in parte.Relatia rezultat al oricarei interogari care are o clauza GROUP BY caracterizeaza aceste grupuri de tuple si nu tuple individuale.Parametrii clauzei SELECT dintr-o constructie SELECT in care apare clauza GROUP BY trebuie sa reprezinte o proprietate unica de grup.Prin aceasta intelegem fie un atribut de grupare, fie o functie de agregare aplicata tuplelor unui grup, fie o expresie formata pe baza primelor doua.

Clauza HAVING , optiune a clauzei GROUP BY, este o optiune speciala a clauzei WHERE caracterizata prin faptul ca se aplica nu unor tuple individuale ci unor submultimi (grupuri) de tuple, rezultate ca urmare a partitionarii prin clauza GROUP BY.

Parametrul calificator2 furnizeaza criteriul de selectie al grupurilor de tuple. Acest parametru se refera intotdeauna la proprietatile globale ale unui grup de tuple si nu la tuple individuale.Astfel tuplele unui grup nu sunt tratate impreuna, in bloc, conform criteriului dat de parametrul calificator2.Exprimarea acestui criteriu se face cu ajutorul atributelor de grupare si al functiilor de agregare aplicate grupurilor.

Clauza ORDER BY specifica ordonare tuplelor unei relatii rezultat dupa nume_atribut3, iar cuvintele cheie ASC/DESC indica modul in care se face ordonarea, in mod crecator sau descrescator ale atributului specificat.

Interogarile care implica mai multe relatii, dar returneaza date dintr-o singura relatie pot fi rezolvate prin imbricarea a mai multe constructii SELECT. Datorita posibilitatii de imbricare datele rezultate dintr-un tabel pot fi folosite la selectia datelor dintr-un alt tabel. Desi aceasta facilitate este aproape similara cu operatorul de cuplare, difera totusi de acesta prin faptul ca din rezultatul final nu pot face parte decat datele rezultate din ultimul tabel (cel corespunzator blocului celui mai exterior). Majoritatea implementarilor limbajului SQL, permit imbricarea pe mai multe nivele, la cele mai performante fiind posibila pana la 16 nivele de imbricare a constructilor SELECT.

Limbajul SQL nu dispune de cuantificatori, cum apar acestia in calculul relational de aceea efectul acestora trebuie simulat prin folosirea relatilor de apartenenta de tipul element-multime , de incluziune multime-multime sau de egalitate intre multimi.

In SQL relatia de aprtenenta a unei valori la o multime este reprezentata prin operatorul IS IN sau IN simplu.La fel se reprezinta si relatia de incluziune intre multimi.Deci A IN B semnifica: "A apartine lui B" daca A este o valoare, sau "A este inclusa in B" daca A este o multime.B trebuie sa fie o multime in ambele cazuri.Simetricul operatorului IN este operatorul CONTAINS.A CONTAINS B semnifica : "A contine pe B" unde A este multime iar B este o valoare sau multime.De asemeni se pot folosi si negarea acestor acestor operatori, anume NOT IN , DOES NOT CONTAIN.Testare aegalitatii sau inegalitatii a doua multimi se face prin operatorii = si # (sau != sau <>).

Un alt instrument puternic de lucru oferit de SQL il reprezinta posibilitatea definirii de proceduri stocate.Acestea reprezinta in lucrarea mea principalul mijloc de prelucrare a datelor.Definirea de proceduri stocate ne permite pelucarea datelor in mod avantajos, realizandu-se performante deosebite prin faptul ca contin grupuri mari de instructiuni SQL.Aceste functii sunt apelate si executate ca si functiile C,Fortran sau VBASIC.O procedura rezidenta poate incapsula un set logic de comenzi care sunt executate mai des in cadrul aplicatiei.Acest lucru permite programatorului sa apleze pur si simplu procedura rezidenta ca pe o functie in locul executarii repetate a instructiunilor din cadrul acesteia.De asemeni, crearea unei proceduri stocate, permite programatorului sa apleze un anumit set de instructiuni din alte programe realizand o anumita operatie complexa asupra unui set de date.

Procedurile au fost introduse in domeniul bazelor de date firma Sysbase Inc., in produsul SQL server, la sfarsitul anilor '80.Aceste proceduri au fost create si apoi stocate ca parte a bazei de date la fel ca si tabelele si indecsii.Transact-SQL permite introducerea in apelurile de proceduri stocate si a parametrilor de intrare si a celor de iesire.Astfel, procedurile pot fi create intr-o maniera eleganta, in sensul ca variabilele pot fi transferate dintr-una in alta.

Una dintre marile avantaje ale procedurilor sta in proiectul lor de executie.Atunci cand executa un set mare de instructiuni pe un server de baze de date prin retea, aplicatia este in comunicatie permanenta cu serverul respectiv(pentru aplicatiile cu un singur utilizator aceasta nu e problema, dar apare intrebarea daca pentru o aplicatie cu un singur utilizator este necesar un server de baze de date).Aceasta comunicatie intre server si statia de lucru poate incarca rapid reteaua de calculatoare cu un trafic imens. Pe masura ce tot mai multi utilizatori sunt implicati in comunicatie, performantele retelei si ale serverului de baze de date devin tot mai putin performante.

Folosind proceduri stocate, programatorul reduce foarte mult aceasta comunicate cu serverul de baze de date.Dupa executarea unei proceduri stocate, instructiunile SQL sunt executate secvential pe serverul de baze de date.Numai in cazul in care procedura stocata se termina cu un mesaj sau cu un set de date, este redat controlul calculatorului utilizatorului.Aceasta metoda determina o crestere a performantei.Sunt si alte avantaje, la fel de bune, ale acestei metode.Procedurile stocate sunt compilate de sistemele de gestiune ale bazelor de date atunci cand sunt utilizate prima data.De aceea, instructiunile SQL nu trebuie sa fie re-optimizate la fiecare executie.De asemenea, si aceasta determina la cresterea performantei.

Sintaxa unei declaratii de procedura stocata este de forma:

CREATE PROCEDURE nume_procedura

@nume_parametru1 tip_de_data,[@parametru2 tip_de_data.],

[@nume_parametru tip_de_data output] AS

SQL stqtements.

Numele parametrilor de intrare trebuie sa inceapa cu @ si trebuie sa fie urmate de tipuri de data valide in limbajul SQL.In plus parametrii de iesire trebuie sa succedata de sintaxa OUTPUT. Proceduriel pot fi imbricate pentru a creste modularitatea programarii.

Aceasta inseamna ca o procedura poate apela o alta procedura rezidenta care la randul ei apeleaza o alta procedura si asa mai departe.Imbricarea procedurilor este o metoda excelenta din cateva motive.

Primul ar fi reducerea celor mai complexe interogari la un nivel functional. Un alt motiv excelent pentru imbricarea procedurilor este performanta. Programul de optimizare a interogarilor realizeaza optimizarea unor grupuri mai mici si mai compacte de interogari mult mai eficient decat pentru un singur grup mare de instructiuni.

Este un lucru recunoscut ca SQL nu beneficiaza de o interfata prea prietenoasa dar acesta impresie se pastreaza doar pentru inceput. Un alt avantaj il constituie posibilitatea de legare la mai multe servere SQL in functie de necesitati. Conectarea la un server se face intai cu ajutorul ,,SQL Server Client Configuration" (Start->Setings). Se permite conectare la diferite servere prin utilizarea a diferite protocoale TCP/IP(se precizeaza alias-ul computerului server si portul pe care se face legatura),IPX/SPX(prin precizarea alias-ului serverului, a adresei de retea).Demonstrand o mare mobilitate, SQL mai permite conectarea utilizand diferite protocoale cum ar fi: Apple Talk, Banyan Vines, etc. odata intrat in Enterprise Manager se pot defini baze de date la care se pot seta mai multi parametri cum ar fi inclusiv modul de crestere al bazei de date. In primul rand in cadrul unei baze de date se pot defini pentru aceasta baza de date o serie de users si pentru fiecare dintre acesti users drepturi foarte bine specificate de acces.Pentru a se evita ca la fiecare dintre users sa se faca setari, pentru mai multi users care intra intr-un grup de interes se poate defini un role in cadrul caruia se seteaza drepturile astfel ca la aparitia unui nou user el va fi atribuit direct la acel grup drepturiile de acces fiind-ui automat setate.Acest lucru se face din ,,Databases users" si ,,Databases Roles".Drepturile de acces sunt atat de bine descompuse incat ajung la nivel de drept de insert,update,stergere sau executie in cazul unei proceduri.Se mai pot executa wiews.Mecanismul de generare a vederilor este foarte bine pus la punct oferind o mare rapiditate si eficienta in crearea lor. Definirea de tabele se face tot in acest meniu.Un mare avantaj al SQL-ului este ca in definirea tabele se pot deta o serie de optiuni:allows null,default values,etc.

Alt avantaj il reprezinta numarul mare de tipuri de date predefinite: de la cele uzuale int,char,varchar sau varint pana la money,smalldatatime,uniqueidentificator sau image.Acest lucru reprezinta un mare avantaj extinzand efectiv domeniul de aplicabilitate al programului.Unele dintre cele mai importante instrumente pe care SQl-ul le mai pune la dispozitie sunt procedurile stocate.Acestea permit definirea de seturi operatii complexe asupra datelor si ce este cel mai important permit apelul lor din alte medii de programare ceea ce ne permite sa executam intreaga suita de operatii asupra datelor doar prin intermediul SQL-ului celalat program fiind pastrat doar pentru interfata.Acesta lucru este aplicat de mine in acest proiect.

De asemeni avem posibilitatea definirii de proprii tipuri de date cu USER DEFINED DATATYPE.Se mai pot definii si diagrame cu ajutorul DATABASES DIAGRAMS.La aceste doua ultime facilitati am renuntat :nu am avut nevoie de definirea unor noi tipuri si la diagrama bazei de date am renuntat pentru ca am dorit sa controlez singur integritatea referentiala( cu diagrama creata nu as fi putut sa sterg intotdeauna ceea ce doream mai ales daca ).

De cele mai multe ori unele date se introduc simultan in mai multe tabele deodata ceea ce implica complicatii la stergere sau modificarea lor.In cazul meu neutilizand diagramele bazei de date singurul instrument de control al integritatii referentiale si al corectitudinii datelor corespondente din diferite tabele il reprezinta abilitatea programatorului.O abordare gresita a acestei probleme poate duce la aparitia de date eronate prin modificarea unor date intr-un tabel si nerealizarea acestor modificari in alte tabele unde mai apar aceaste date.In acest scop ,SQL-ul ofera posibilitatea definirii de triggers.Aceste proceduri explozive se ataseaza unui tabel si se declanseaza automat la executia unuia dintre cele 3 operatii de baza:insert,delete,update.Astfel cu ajutorul acestui trigger se poate defini o stergere complexa din mai multe tabele a unei date care se sterge din tabelul respectiv.

O alta problema intalnita o reprezinta transferul de imagini.Acestea sunt BLOB-uri(Binary Large Objects).S-a propus la inceput pastrarea caii catre imagine.Tin sa atrag atentia asupra acestei solutii care nu rezolva problema ci o ocoleste cauzand distrugerea consistentei informatiei si incapsularea tabelei.Aceste lucruri se pot intampla prin simpla mutare a directorului unde sunt imaginile depuse.In fapt SQL permite foarte bine lucrul cu Blob-uri, pentru imagini avand, dupa cum am mai spus, campuri de tip imagine.Acestea sunt reprezentate in campuri sub forma de biti.Pentru a optimiza transferul avand in vedere dimensiunea mare a fisierului de copiat, am ales ca solutie utilizarea utilitarului BCP(Bulk COPY).Voi face o scurta prezentare a acestui utilitar extrem de util.Are ca parametrii tabela de in/out, felul operatiei in/out ,fisierul de iesire sau intrare precum si o serie de optiuni.

" bcp database..table felul_operatiei -f"cale_fisierul_format"fisierul_sursa -Sserver -Uuser -Pparola"

felul_operatiei :in sau out;

-f "fisier_format.FMT":fisierul format reprezinta un fisier care este construit interactiv la primul transfer al unui fisier de un anumit tip si care contine parametrii transferului.

-S numele serverului SQL cu care se doreste a se lucra.

-U numele userului care va realiza tranzactia.In cazul in care nu se introduce corect acest nume tranzactia nu va fi realizata generandu-se un mesaj de eroare.

-P parol pentru atestare userului.Similara este reactia sistemului la introducerea unei parole gresite.

Acest utilitar poate fi apelat din Command prompt in forma prezentata mai sus angajand utilizatorul intr-un transfer interactiv completandu-se date specifice transferului(fisierul fmt), sau se poate apela in cadrul Query Analyzer avand o comanda de forma:exec master..xp_cmdshell(" bcp database..table felul_operatiei -f"cale_fisierul format"fisierul _sursa -Sserver -Uuser -Pparola").Acest utilitar realizeaza copierea unui fisier intr-o baza de date si invers prin copierea masiva a informatiei.Cu acest utilitar se poate copia orice tip de informatie de la text pana la imagini.

Am discutat despre securitatea informatiei in acest program.Se va putea observa ca dispunem de o dubla securitate :una oferita de program si un oferita de SQL.Voi aborda intai cea oferita de aplicatie. Securitatea informatiei este asigurata prin impunerea de restrictii asupra drepturilor de acces ale utilizatorilor la program in functie de loginul si parola introdusa.Daca nu se are parola corecta, nu se pot face anumite modificari asupra datelor.De asemeni SQL-ul introduce si el sistemul lui de securizare a datelor.Una dintre metodele de securizare a informatiei este accea ca informatia specifica fiecarei baze de date este accesibila doar din SQL, din exterior(windows explorer,norton comander, etc) fiind vizibile doar doua fisiere cu extensia:MDF si LDF(pentru date si pentru log-uri).Aceste fisiere nu pot fi sterse in mod normal dar exista posibilitate stergerii lor prin artificii.Al doilea punct forte al securitatii bazelor de date il reprezinta posibilitatea definirii de utilizator,roles si a drepturilor acestora.

Dupa cum am evidentiat, o caracteristica a aplicatiei o reprezinta proiectarea ei ca si aplicatie client-server.Aceasta tehnologie introduce procesarea separata intre calculatoarele client si server de baze de date, oferind o modificare radicala de la programarea aplicatiilor bazate pe calculatoare mainframe.Din numeroasele avantaje oferite de aceasta arhitectura se remarca urmatoarele :

reducerea costurilor de intretinere

reducerea incarcarii retelei( procesarea are loc fie pe un server de baze de date fie pe un calculator client)

mai multe sisteme de operare pot interopera atata timp cat folosesc un protocol de retea comun

cresterea integritatatii datelor datorate plasarii lor centralizate

Bernard H. Boar a definit tehnologia client/server astfel:

"tehnologia client server este modul d procesare in care o singura aplicatie este folosita in comun de mai multe procesoare (front-end si back-end), care coopereaza (intr-un mod transparent pentru utilizator) pentru terminarea procesarii ca pe un singur task unificat.Un produs client/server combina impreuna procesoarele pentru a asigura o singura imagine a sistemului (iluzie).Resursele partajabile sunt pozitionate la clientii care au cereri care acceseaza servicii autorizate.Aceasta arhitectura este total recursiva ; pe rand serverele pot deveni clienti si pot cere servicii de la alte servere din retea si asa mai departe "

Acest tip de dezvoltare de aplicatii a generat nevoia unui set de instrumente de programare complet diferite de cele existente.Programarea interfetei utilizator este acum scrisa pentru interfetele grafice cu utilizatorul, indiferent ca este vorba de MS Windows, IBM OS/2, Apple Machintos.Folosind SQl o conexiune la retea , aplicatia poate realiza interfata cu o baza de date existenta pe un server la distanta.Datorita puterii crescande a hardware-ului calculatoarelor personale, informatiile critice(importante) ale bazei de date pot fi memorate pe un server independent relativ ieftin.

Una dintre marile avantaje SQL este ca acesta este un adevarat limbaj pentru pentru platforme combinate.Mai mult de atat, este virtual un limbaj produs combinat pentru platforme combinate.Deoarece este, de asemenea ceea ce programatorii numesc 8n limbaj de nivel inalt sau de a patra generatie (4GL), se poate realiza foarte foarte mult numai in cateva linii de cod.

Oracle Corporation a lansat pe piata primul SGBDR care folosea SQL.Desi versiunea originala a fost dezvoltata pentru sisteme VAX/VMS, Oracle a fost unul dintre primii furnizori care a lansat o versiune DOS a sistemului propriu de gestiune bazelor de date relationale.La jumatatea anilor '80 Sybase a lansat pe piata propriul sau SGBDR ,SQL server.Avand biblioteci de client pentru accesul la baza de date, asigurand supoertul pentru biblioteci de functii rezident si interoperabilitate cu diverse sisteme de operare.Unul dintre cele mai puternice puncte pentru sistemele amintite este scalabilitatea lor pe diferite platforme de lucru.

Firul comun in dezvoltarea tuturor aplicatiilor client/server este folosirea SQL si a bazelor de date relationale.De asemenea, folosirea acestei tehnologii de baze de date intr-o aplicatie comerciala mono-utilizator pregateste aplicatia pentru dezvoltarea si scalabilitatea ulterioara.In plus odata cu dezvoltarea si aparitia instrumentelor de dezvoltare client/server(Visual Basic,Borland Delphi, ODBC, Visual C++) si mutarea catorva baze de date mari pe platforma PC, majoritatea aplicatiilor comerciale dezvoltate in zilele noastre necesita cunostinte de SQL.

Dupa cum s-a observat, un pret foarte mare se pune pe viteza de raspuns a aplicatiei la interogari.Optimizarea interogarilor este un proces important. De obicei reorganizarea se face dupa testarea sidezvoltarea la un nivel satisfacator al interogarilor si a secventelor de cod.In continuare am sa descriu cateva dintre metodele uzuale de crestere a performantei interogarilor.Cateva dintre ele le-am folosit si eu.

Conversia tuturor interogarilor de mari dimensiuni care sunt executate mai des, in proceduri rezidente.Aceasta metoda reduce traficul pe retea si are ca rezultat in baza de date o procedura rezidenta pre-compilata in locul unei interogari de mari dimensiunicare trebuie re-optimizata la fiecare executie.

Crearea indecsilor care maresc performanta interogarilor in special a jonctiunilor .

Indecsii ar trebui creati pentru interogari care returneaza mai putin de 5 la suta din liniile unui tabel

Indexarea coloanelor care sunt folosite in clauza WHERE

Indexarea coloanelor care sunt folosite de obicei in clauzele JOIN

Ne -indexarea coloanelor care contin un numar redus de valori distincte.O indexare indexare in acest caz nu duce la o imbunatatire a performantei(de fapt o alegere proasta a unui index poate sa incetineasca foarte mult o interogare )

Clauzele Group By si subinterogarile sunt executate mult mai incet decat decat jonctiunile.In situatiile in care doua coloane indexate pot fi combinate impreuna, este bine sa se procedeze astfel, deoarece este un procedeu mult mai rapid de returnare a datelor decat folosirea subinterogarilor.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1911
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved