+ All Categories

4BD_SQL

Date post: 02-Mar-2016
Category:
Upload: cosmin-oana
View: 3 times
Download: 0 times
Share this document with a friend
Description:
DRETYRETRETBGBDFGH H HRHRTHRTYHRTHF

of 56

Transcript
  • Parte din slide-uri preluate din lucrarileDatabase systems concepts, A. Sillberschatz

    Database management systems, R Ramakrishnan

    Referinte

    Database management systems , R. Ramakrishnan pag.119Baze de date si gestiunea tranzactiilor, R Dollinger, pag.119

    ftp://ftp.utcluj.ro/pub/users/civan Cosmina [email protected]

    SQL

  • 4.2Introducere in Baze de date,2006

    SQLSQLn SQL limbaj de nivel inalt, evita complexitatea in manipularea

    datelor specifica C , Java, conceptual : what to do in loc de how to do it

    n Definirea datelor n Structuri de interogare de baza (Basic Query)

    l Operatii Set l Functii agregatl Valori Nulll Subinterogari imbricatel Interogari complexe l Vederil Modificari ale bazei de datel Relatii Join

  • 4.3Introducere in Baze de date,2006

    SQL - istoricSQL - istoricn IBM Sequel - dezvoltat ca parte a proiectului System R - IBM San Jose

    Research Laboratory -redenumit Structured Query Language (SQL)n Standard ANSI si ISO :

    l SQL-86l SQL-89l SQL-92 SQL2l SQL:1999 - SQL3l SQL:2003

    n Sistemele comerciale ofera cele mai multe din functiile standardizate SQL-92 plus diverse alte caracteristici specifice , mici diferente de sintaxa

  • 4.4Introducere in Baze de date,2006

    Componente SQLComponente SQL

    DDL (data definition language) - permite specificarea setului de relatii si a informatiilor despre acestea:

    l crearea , modificarea , stergerea schemelor de relatii si vederil Constrangeri de integritate : domeniul de valori asociat fiecarui atributl Setul de indici mentinuti de relatiel Info de securitate si autorizare a accesului pentru relatie/vederel Structura de stocare fizica a relatiei pe disc

    n LMD - crearea de interogari , inserare/modificare/stergere tuplen SQL embedded (cod SQL apelat din C),SQL dinamic interogari

    construite si executate run-timen Triggere - actiuni executate SGBD la modificari survenite in BD ce

    indpelinesc conditiile specificate in triggern Securitate si managementul tranzactiilorn Executie client-server si acces la BD remote conectare la server de BD

    sau acces la date in retea

  • 4.5Introducere in Baze de date,2006

    Constructia Create TableConstructia Create Tablen O relatie SQL e definita prin comanda create table :

    create table r (A1 D1, A2 D2, ..., An Dn,(constrangere_de_integritate1),...,

    (constrangere_de_integritatek))r - numele relatieiAi - nume de atribut in schema r a relatiei Di tipul de date pentru valorile din domeniu ale atributului Ai

    sucursala (sucursala_nume, sucursala_oras, cod)client (client_nume, client_strada, client_oras)imprumut (imprumut_numar, sucursala_nume, valoare)imprumutator (client_nume, imprumut_numar)cont (cont_numar, sucursala_nume, balanta)depozit (client_nume, cont_numar)

    create table sucursala(sucursala_nume char(15) not null,sucursala_oras char(30),cod integer)

  • 4.6Introducere in Baze de date,2006

    Constrangeri de integritate in Create TableConstrangeri de integritate in Create Table

    n primary key (A1, ..., An )Ex.: Declararea cheii primare

    create table sucursala (sucursala_nume char(15), sucursala_oras char(30), cod integer, primary key (sucursala_nume))

    Declararea de cheie primara (primary key ) a unui atribut asigura automat valori not null (SQL-92 )

  • 4.7Introducere in Baze de date,2006

    Drop si Alter TableDrop si Alter Table

    n drop table - sterge toate informatiile aferente relatiei specificate (tabelei) din baza de date

    n alter table adauga atribute unei relatii existente: alter table r add A D

    unde A numele atributului ce va fi adaugat relatiei r iar D este domeniul atributului A.tuplelor relatiei i se asociaza valoarea null , ca valoare a

    noului atribut.

    n alter table poate fi utilizata pentru a elimina atribute din relatie:alter table r drop A

  • 4.8Introducere in Baze de date,2006

    Structuri de interogare de baza Structuri de interogare de baza n SQL - bazat pe un set de operatori relationali cu anumite modificari si

    extensii ( select-from-where = selectia, proiectia, produs cartezian)n o interogare tipica are forma:

    select A1, A2, ..., Anfrom r1, r2, ..., rmwhere P

    Ai reprezinta atributulRi reprezinta relatiaP este un predicat

    Select specifica ce coloane vor fi retinute in rezultat From specifice produsul cartezian al tabelelorWhere ( optional) specifica conditii de selectie din tabelele

    mentionate in Fromn interogarea echivalata unei expresii de algebra relationalan rezultatul unei interogari este tot o relatie.

    ))(( 21,,, 21 mPAAA rrrn

  • 4.9Introducere in Baze de date,2006

    Strategia de evaluareStrategia de evaluaren Semantica unei interogari SQL definita in termenii strategiei de

    evaluare conceptuala:

    l Calculul produsului cartezian pentru lista de relatiil Eliminarea tuplelor rezultat ce nu respecta predicatull Stergerea atributelor ce nu se gasesc in lista tinta (clauza select)

    l Strategie mai putin eficienta solutii optimizatoare de interogari implementate

  • 4.10Introducere in Baze de date,2006

    Clauza selectClauza select

    n Clauza select listeaza atributele specificate ca rezultat al interogarii , corespunde operatiei de proiectie din algebra relationala :sucursala_nume (imprumut)

    l Ex.: numele sucursalelor din relatia imprumut :select sucursala_numefrom imprumut

    SQL permite duplicate in relatii si in rezultate query .n Eliminarea duplicatelor- cuvant cheie distinct dupa select.

    n Cuvantul cheie all specifica mentinerea duplicatelor : select all sucursala_nume

    select distinct sucursala_numefrom imprumut

  • 4.11Introducere in Baze de date,2006

    Clauza selectClauza select

    n Asteriscul denota toate atributeleselect *from imprumut

    n Clauza select poate contine expresii aritmetice ( operatorii +, , , /, si constante sau atribute de tuple).

    I1: select imprumut_numar, sucursala_nume, valoare> 100

    from imprumut

  • 4.12Introducere in Baze de date,2006

    Clauza fromClauza from

    n Clauza from listeaza relatiile ce intervin in interogarel Corespunde operatorului produs cartezian din AR.

    I3: Nume client, numar imprumut si valoare pentru clientii ce au un imprumut la sucursala Cluj

    select client_nume, imprumutator.imprumut_numar, valoare from imprumutator, imprumut where imprumutator.imprumut_numar = imprumut.imprumut_numar and sucursala_nume = 'Cluj'

    I 2: produs cartezian imprumutator X imprumutselect *from imprumutator, imprumut

  • 4.13Introducere in Baze de date,2006

    Clauza whereClauza where

    n Clauza where specifica conditiile ce vor fi satisfacute de rezultatl Corespunde operatorului selectie din algebra relationala.

    n Rezultatele comparatiei pot fi combinate prin operatori logici and, or, not.

    n Comparatiile pot fi aplicate rezultatelor expresiilor aritmetice

    I4: Numarul imprumuturilor la sucursala Cluj cu valoare imprumut >1200.

    select imprumut_numarfrom imprumutwhere sucursala_nume = 'Cluj' and valoare > 1200

    I5:

    select imprumut_numarfrom imprumutwhere valoare between 90000 and 100000

  • 4.14Introducere in Baze de date,2006

    Operatia RenameOperatia Rename

    n SQL permite redenumirea relatiilor si atributelor folosind clauza as :nume_vechi as nume-nou

    n Simplifica intaxa expresiilor, permite utilizarea in interogari a doua copii ale aceleiasi relatii

    I6: Nume, Numar imprumut si valoare pentru toti clientii cu redenumirea coloanei imprumut_numar ca si imprumut_id.

    select client_nume, imprumutator.imprumut_numar as imprumut_id, valoarefrom imprumutator, imprumutwhere imprumutator.imprumut_numar = imprumut.imprumut_numar

  • 4.15Introducere in Baze de date,2006

    Tuple variabileTuple variabile

    n Tuplele variabile sunt definite prin selectia prin clauza from utilizand clauza aditionala as .

    n as e optional Ex. imprumutator as T imprumutator T

    I8: Numele sucursalelor cu cod mai mare decat Brasov. select distinct T.sucursala_nume from sucursala as T, sucursala as S where T.cod > S.cod and S.sucursala_oras = 'Brasov'

    I7: Nume clienti si numar imprumut pentru clientii ce poseda imprumuturi la oricare sucursala.

    select client_nume, T.imprumut_numar, S.valoare from imprumutator as T, imprumut as S where T.imprumut_numar = S.imprumut_numar

  • 4.16Introducere in Baze de date,2006

    Operatii stringOperatii string

    n SQL include un operator specializat pentru comparatia sirurilor de caractere. Operatorul like foloseste patternuri bazat pe caractere speciale, astfel :

    l (%) - potrivire orice subsir

    l (_) - potrivire orice caracter

    I9: Numele clientilor a caror strada include substringul escu.select client_numefrom clientwhere client_strada like '% escu%'

    n SQL suporta diverse operatii pe siruril concatenare ( ||)l conversie -upper -lower l lungime sir, extragere subsir, etc.

  • 4.17Introducere in Baze de date,2006

    Ordonarea afisarii tuplelorOrdonarea afisarii tuplelor

    n Prin specificarea desc / asc pentru fiecare atribut, ascendent e implicit.

    l Ex: order by client_nume desc

    I10: Listare ordonata alfabetic a clientilor cu un imprumut la sucursala Cluj

    select distinct client_numefrom imprumutator, imprumutwhere imprumutator imprumut_numar = imprumut.imprumut_numar

    and sucursala_nume = 'Cluj' order by client_nume

  • 4.18Introducere in Baze de date,2006

    Operatii SetOperatii Set

    n Operatiile union, intersect, si except opereaza asupra relatiilor si corespund operatorilor de algebra relationala , , .Operatiile elimina duplicatele; pentru a le mentine e necesara

    specificarea versiunilor corespunzatoare multiset union all, intersect all , except all.

    Se presupune ca o tupla apare de m ori in r si de n ori in s, atunci aparitia ei corespunzatoare operatiilor set va fi:

    m

    + n ori in r union all s min(m,n) ori in r intersect all s max(0, m n) ori in r except all s

  • 4.19Introducere in Baze de date,2006

    Operatii SetOperatii Set

    I13: Clientii ce poseda un cont dar nu au un imprumut.(select client_nume from depozit)except(select client_nume from imprumutator)

    I12: Clientii ce poseda si un imprumut si un cont.(select client_nume from depozit)intersect(select client_nume from imprumutator)

    I11: Clientii cu un imprumut, cont sau ambele:(select client_nume from depozit)union(select client_nume from imprumutator)

  • 4.20Introducere in Baze de date,2006

    Functii AgregatFunctii Agregatn efectueaza un calcul asupra unui set de valori si returneaza ca rezultat

    o singura valoare: avg, min,max,sum,count

    l Cu exceptia functiei COUNT toate functiile de agregare ignora valorile NULL

    l Functiile de agregare sunt folosite impreuna cu clauza GROUP BY, pentru a calcula valori agregate la nivelul grupurilor de tuple

    l Functiile de agregare pot fi utilizate doar in lista SELECT (principala sau imbricata) sau intr-o clauza HAVING

  • 4.21Introducere in Baze de date,2006

    Functii Agregat (Cont.)Functii Agregat (Cont.)I14: Valoarea medie a balantei conturilor la sucursala Cluj .

    select avg (balanta)from contwhere sucursala_nume = 'Cluj'

    I15: Numarul de tuple din relatia client .

    select count (*)from client

    I16: Numarul de depozite bancareselect count (distinct client_nume)

    from depozit

  • 4.22Introducere in Baze de date,2006

    Functii Agregat Group ByFunctii Agregat Group By

    Nota: atributele clauzei select externe functiei agregat trebuie sa apara in lista group by

    I17: Numarul de depozite per sucursale.

    select sucursala_nume, count (distinct client_nume) from depozit, cont where depozit.cont_numar = cont.cont_numar group by sucursala_nume

  • 4.23Introducere in Baze de date,2006

    Functii Agregat Clauza HavingFunctii Agregat Clauza Having

    Nota: predicatele din clauza having sunt aplicate dupa formarea grupurilor iar ,predicatele clauzei where sunt aplicate inaintea formarii grupurilor

    I18: Sucursalele in care balanta medie este peste 1200.

    select sucursala_nume, avg (balanta) from cont group by sucursala_nume having avg (balanta) > 1200

  • 4.24Introducere in Baze de date,2006

    Valori NullValori Nulln E posibil ca in cadrul tuplelor sa existe atribute a caror valoare sa fie nulln null semnifica valoare necunoscuta sau valoare inexistentan predicatul is null poate fi utilizat pentru a verifica aceste valori.

    I19: Imprumuturile ce apar cu valori null .select imprumut_numarfrom imprumutwhere valoare is null

    n Rezultatul oricarei expresii aritmetice in care intervine valoarea null este nulln Functiile agregat ignora valorile nulln Toate operatiile agregat (exceptie count(*) ignora tuplele cu valori null ale

    atributelor agregate.n Orice comparatie cu null returneaza unknownn Logica NULL ( valori, T, F, unknown) :

    l OR: (unknown or true) = true, (unknown or false) = unknown (unknown or unknown) = unknown

    l AND: (true and unknown) = unknown, (false and unknown) = false, (unknown and unknown) = unknown

    l NOT: (not unknown) = unknown

  • 4.25Introducere in Baze de date,2006

    Imbricarea interogarilorImbricarea interogarilor

    I21: Clientii ce au un imprumut dar nu au cont

    select distinct client_numefrom imprumutatorwhere client_nume not in (select client_nume

    from depozit )

    I20: Clientii ce au un cont si un imprumut bancar.select distinct client_nume

    from imprumutatorwhere client_nume in (select client_nume

    from depozit )

    n SQL ofera un mecanism pentru imbricarea subinterogarilor.n Subinterogarea (subquery) este tot o secventa select-from-where

    imbricata in cadrul unei alte interogari, la clauzele where sau fromn Utilitate teste de apartenenta , comparatii, cardinalitate seturi

  • 4.26Introducere in Baze de date,2006

    Operatorul INOperatorul IN

    n Nota : poate fi scris mult mai simplu..

    Clientii ce poseda cont si imprumut la sucursala Cluj select distinct client_nume

    from imprumutator, imprumutwhere imprumutator.imprumut_numar = imprumut.imprumut_numar and

    sucursala_nume = 'Cluj' and (sucursala_nume, client_nume ) in

    (select sucursala_nume, client_nume from depozit, cont where depozit.cont_numar = cont.cont_numar )

    n Expresia IN ise adevarata daca si numai daca tupla este membra a relatiei.

    l NOT IN

    Expresiile IN - pot aparea in clauze WHERE Relatia este de obicei o subinterogare

  • 4.27Introducere in Baze de date,2006

    Comparatii de seturiComparatii de seturi

    Interogare cu clauza some select sucursala_nume

    from sucursalawhere cod > some (select cod from sucursala where sucursala_oras = 'Brasov')

    Sucursalele cu codul mai mare decat Brasov.select distinct T.sucursala_nume

    from sucursala as T, sucursala as Swhere T.cod > S.cod and S.sucursala_oras = 'Brasov

    F some r t r a.i. (F t )unde poate fi: , =,

    Interogare cu clauza allselect sucursala_nume

    from sucursalawhere cod > all

    select codfrom sucursalawhere sucursala_oras = 'Brasov')

    F all r t r (F t)

    Operatorii any , some,all

  • 4.28Introducere in Baze de date,2006

    ExempluExemplu

    Clintii ce au un cont la toate sucursalele din Brasov.select distinct S.client_nume

    from depozit as Swhere not exists (

    (select sucursala_numefrom sucursalawhere sucursala_oras = 'Brasov')

    except(select R.sucursala_numefrom depozit as T, cont as Rwhere T.cont_numar = R.cont_numar and

    S.client_nume = T.client_nume ))

    X Y = X Y

    n constructia exists returneaza valoarea true daca argumentul subinterogarii este nonempty.

    l exists r r ; not exists r r =

  • 4.29Introducere in Baze de date,2006

    Test tuple duplicatTest tuple duplicat

    n Clauza unique testeaza daca o subinterogare poseda tuple duplicat ca rezultat.

    Clientii ce poseda cel mult un cont la sucursala Cluj.

    select T.client_nume from depozit as T where unique (select R.client_nume

    from cont, depozit as R where T.client_nume = R.client_nume and

    R.cont_numar = cont.cont_numar and cont.sucursala_nume = 'Cluj')

  • 4.30Introducere in Baze de date,2006

    ExempluExemplu

    Clientii ce poseda cel putin 2 conturi la sucursala Cluj .

    select distinct T.client_numefrom depozit as Twhere not unique ( select R.client_nume from cont, depozit as R where T.client_nume = R.client_nume and

    R.cont_numar = cont.cont_numar and cont.sucursala_nume = 'Cluj')

    n Variabila nivelului exterior de imbricare este numita variabila de corelare

  • 4.31Introducere in Baze de date,2006

    Relatii derivateRelatii derivate

    n SQL permite utilizarea unei expresii de subintergare in clauza from

    Balanta medie a conturilor pentru acele sucursale unde este >1200.

    select sucursala_nume, avg_balantafrom (select sucursala_nume, avg (balanta)

    from cont group by sucursala_nume )

    as sucursala_avg ( sucursala_nume, avg_balanta )where avg_balanta > 1200

    Nota: nu este necesara clauza having deoarece se construieste relatia temporara ( vederea) sucursala_avg in clauza from , iar atributele relatiei sucursala_avg pot fi utilizate direct in clauza where .

  • 4.32Introducere in Baze de date,2006

    Clauza WithClauza With

    n Clauza with confera modalitatea de definire a unor vederi temporare a caror definitie este valida doar pentru interogarea in care apare clauza

    Conturile cu balanta maxima

    with max_balanta (value) as select max (balanta) from cont select cont_numar from cont, max_balanta where cont.balanta = max_balanta.value

  • 4.33Introducere in Baze de date,2006

    VederiVederi

    n Situatii in care nu e necesar/de dorit ca modelul logic sa fie vizibil tuturor utilizatorilor BD ( relatiile stocate in BD)

    n Ex : datele : nume, numar imprumut si nume sucursala pot deveni publice insa valoarea imprumutului ramane privata.

    (select client_nume, imprumutator.imprumut_numar, sucursala_nume from imprumutator, imprumut where imprumutator.imprumut_numar = imprumut.imprumut_numar )

    n Vederea (view) mecanism prin intermediul caruia se ascund anumite date anumitor utilizatori

    n Vederea - orice relatie ce nu apartine modelului conceptual insa este vizibila utilizatorului ca o relatie virtuala este numita vedere

  • 4.34Introducere in Baze de date,2006

    Definitie vederiDefinitie vederi

    n Vederea este definita folosind sintaxa create view create view v as < query expression >

    unde reprezinta orice expresie legala SQL . Iar v este numele vederii

    n Dupa definirea vederii, numele acesteia poate fi utilizat pentru a referi relatia virtuala astfel creata

    n crearea vederii presupune stocarea expresiei de interogare(query) in baza de date. Expresia va fi astfel substituita in toate interogarile ce utilizeaza vederea.

  • 4.35Introducere in Baze de date,2006

    ExempluExemplu

    Sucursalele si clientii:

    create view all_client as (select sucursala_nume, client_nume from depozit, cont where depozit.cont_numar =cont.cont_numar )

    union

    (select sucursala_nume, client_nume from imprumutator, imprumut where imprumutator.imprumut_numar =imprumut.imprumut_numar )

    Clientii sucursalei Cluj

    select client_numefrom all_clientwhere sucursala_nume = 'Cluj'

  • 4.36Introducere in Baze de date,2006

    Expansiunea vederilorExpansiunea vederilor

    n Vederea poate fi utilizata intr-o expresie ce defineste o alta vedere (fie vederea v1 , acesta depinde direct de vederea v2 daca v2 e utilizata intr-o expresie ce defineste v1)

    vedere v este recursiva daca depinde de ea insasi. definirea vederilor in termenii altor vederi.

    n Expansiunea ( executia) inlocuirea vederii prin expresia aferenta (definita in pseudocod):

    repeatFind any view relation vi in e1Replace the view relation vi by the expression defining vi

    until no more view relations are present in e1

    Se termina daca definitiile de vederi nu sunt recursive

  • 4.37Introducere in Baze de date,2006

    Modificari in baza de date - stergereaModificari in baza de date - stergerea

    Stergerea tuplelor sucursalei Clujdelete from contwhere sucursala_nume = 'Cluj'

    Stergerea conturilor de la fiecare sucursala din orasul Timisoara.delete from contwhere sucursala_nume in (select sucursala_nume

    from sucursala where sucursala_oras = Timisoara')

  • 4.38Introducere in Baze de date,2006

    Modificari in baza de date - insertiaModificari in baza de date - insertia

    n Adaugarea unei tuple in tabela continsert into cont

    values ('A-9732', 'Cluj', 1200)

    echivalent cu: insert into cont (sucursala_nume, balanta, cont_numar)

    values ('Cluj', 1200, 'A-9732')

    n Adaugare cu valori nuleinsert into cont

    values ('A-777','Cluj', null )

  • 4.39Introducere in Baze de date,2006

    n Actualizari la conditiel Fie actualizarile:

    update contset balanta = balanta 1.06where balanta > 10000update contset balanta = balanta 1.05where balanta 10000

    l Ordinea actualizarilor este importantal Solutie pentru ordonare : structuri case

    Modificari in baza de date - actualizareaModificari in baza de date - actualizarea

    update cont set balanta = case when balanta

  • 4.40Introducere in Baze de date,2006

    Actualizari prin vederiActualizari prin vederi

    n Crearea vederiicreate view imprumut_sucursala as

    select imprumut_numar, sucursala_numefrom imprumut

    n Adaugarea unei noi tupleinsert into imprumut_sucursalavalues ('L-37, 'Cluj)

    Executia presupune inserarea tuplei ('L-37', 'Cluj', null ) in relatia imprumut

  • 4.41Introducere in Baze de date,2006

    Relatii JoinRelatii Join

    n Operatii Join regasirea datelor din mai multe tabele ale BD, opereaza asupra a doua relatii cu generarea unei relatii rezultat

    l Se specifica coloanele din cele doua relatii , se compara continutul tupla cu tupla, se leaga acele tuple ce poseda valori identice pentru criteriul coloana

    n Utilizate ca interogari independente sau expresii de subinterogare in operatii insert,update, delete, select , in clauza from

    n Tabelele se pot afla in baze de date diferite

    !! Caracteristica SBD Relationale, pentru alte sisteme ( retea, ierarhice, dupa stabilirea BD dificil de realizat interogari ce implica relatii ce nu au fost PREDEFINITE intre date)In sistemele relationale relatiile nu sunt stabilite-fixate la definirea BD, ele devin explicita la manipularea datelor ( interogari), relatiile intre tabele ( entitatile BD) sunt definite prin operatii JOIN

    FLEXIBILITATE in adaugarea dinamica de date in BD

  • 4.42Introducere in Baze de date,2006

    Relatii JoinRelatii JoinConditie Join defineste ce tuple din cele doua relatii respecta conditia join si ce atribute sunt transferate in relatia rezultat tip Join defineste modul in care sunt tratate tuplele din cele doua relatii ,care nu respecta conditia join operatori de egalitate sau comparatie

    Inner preia doar tuplele ce satisfac conditia joinOuter tuplele ce satisfac conditia plus tuple suplimentare din cele doua relatii

  • 4.43Introducere in Baze de date,2006

    imprumut full outer join imprumutator using (imprumut_numar)

    Clientii ce au un cont sau un imprumut la banca.

    select client_numefrom (depozit natural full outer join imprumutator )where cont_numar is null or imprumut_numar is null

    Relatii JoinRelatii Join

    Toate tuplele

  • 4.44Introducere in Baze de date,2006

    imprumut right outer join imprumutator

    Relatii JoinRelatii Join

    Tuple comune si cele ale relatiei dreapta

    imprumut left outer join imprumutator onimprumut.imprumut_numar = imprumutator.imprumut_numar

    Tuple comune si cele ale relatiei stanga

    imprumut inner join imprumutator onimprumut.imprumut_numar = imprumutator.imprumut_numar

    Tuple comune

  • 4.45Introducere in Baze de date,2006

    Alte tipuri de date Alte tipuri de date n Extragerea valorilor unor campuri individuale din date/time/timestamp

    l Ex: extract (year from r.starttime) n cast tipuri string la date/time/timestamp

    l Ex: cast as datel Ex: cast as time

    n create type crearea unui tip definit utilizatorEx,: create type Dollars as numeric (12,2) final

    create domain crearea unui domeniu utilizatorEx. : create domain person_nume char(20) not null

    n Obiectele mari sunt stocate (photos, videos, CAD , etc.) in format specific ca large object:

    l blob: binary large object -- o colectie de date binare neinterpretate (interpretabile in aplicatie in afara SBD)

    l clob: character large object -- o colectie larga de date charl La interogare - este returnat un pointer

  • 4.46Introducere in Baze de date,2006

    Constrangeri de domeniuConstrangeri de domeniu

    n Constrangerile de domeniu forma elementara de constrangere de integritate, testeaza valorile inserate in BD si testeaza interogarile pentru a asigura sens pentru diverse comparatii

    n Creare de noi domenii din tipuri de date Ex.: create domain Dollars numeric(12, 2)

    create domain Pounds numeric(12,2)

    Nu pot fi asignate/comparate Pot fi convertite

    (cast r.A as Pounds) ( si generata valoarea)

  • 4.47Introducere in Baze de date,2006

    Constrangeri de integritateConstrangeri de integritate

    n unique ( A1, A2, , Am)

    Specificatia unique mentioneaza ca atributele A1, A2, Am formeaza o cheie candidat.

    Atributele cheii candidat pot fi null (contrast cu cheia primara!!).

    n not nulln uniquen check (P ), where P is a predicate

    nConstrangerile de integritate gardeaza distrugerea accidentala a bazei de date asigurand ca modificarile autorizate nu determina pierderea consistentei datelor.

  • 4.48Introducere in Baze de date,2006

    Clauza checkClauza check

    n check (P ), P este predicatEx.: nume_sucursala cheie primara si valori ne-negative.

    create table sucursala (sucursala_nume char(15), sucursala_oras char(30), valoare integer, primary key (sucursala_nume), check (valoare >= 0))

    n clauza check asigura restrictionarea domeniilor

  • 4.49Introducere in Baze de date,2006

    Integritate referentialaIntegritate referentiala

    n Asigura ca o valoare ce apare intr-o relatie pentru un set de atribute apare pentru un anume set de atribute si in alta relatie

    n Cheile pot fi specificate in secventa create table :l

    primary key - clauza identifica atributele ce reprezinta cheia primara.

    l unique key - clauza identifica atributele ce reprezinta cheia candidat.

    l foreign key - clauza identifica atributele ce compun cheia straina si numele relatiei referentiate de aceasta (implicit atributele cheii primare din relatia referita)

  • 4.50Introducere in Baze de date,2006

    create table client(client_nume char(20),client_street char(30),client_oras char(30),primary key (client_nume ))

    create table sucursala(sucursala_nume char(15),sucursala_oras char(30),valoare numeric(12,2),primary key (sucursala_nume ))

    create table cont(cont_numar char(10),sucursala_nume char(15),balanta integer,primary key (cont_numar), foreign key (sucursala_nume) references sucursala )

    create table depozit(client_nume char(20),cont_numar char(10),primary key (client_nume, cont_numar),foreign key (cont_numar ) references cont,foreign key (client_nume ) references client )

    Integritate referentialaIntegritate referentiala

    sucursala (sucursala_nume, sucursala_oras, cod)client (client_nume, client_strada, client_oras)imprumut (imprumut_numar, sucursala_nume, valoare)imprumutator (client_nume, imprumut_numar)cont (cont_numar, sucursala_nume, balanta)depozit (client_nume, cont_numar)

  • 4.51Introducere in Baze de date,2006

    AsertiuniAsertiunin Asertiuni predicate ce exprima o conditie pe care BD o va satisface

    intotdeaunan Sintaxa: create assertion check n Sistemul va testa asertiunea pentru validitate si o va testa la fiecare

    actualizare ce ar putea viola aceasta asertiunen Testarea introduce incarcare utilizare cu precautie

    Suma valorii imprumuturilor pentru fiecare sucursala mai mic decat suma balantelor conturilor din sucursala

    n create assertion sum_constraint check (not exists (select * from sucursala

    where (select sum(suma ) from imprumut

    where imprumut.nume_sucursala = sucursala.nume_sucursala )

    >= (select sum (amount ) from cont

    where imprumut.nume_sucursala = sucursala.nume_sucursala )))

  • 4.52Introducere in Baze de date,2006

    Autorizari de accesAutorizari de acces

    Forme de autorizare asupra unor parti din BD:

    Read citira fara modificare. Insert inserare fara modificare. Update modificare fara stergere. Delete - stergere.

    Forme de autorizare a modificarii schemei BD: Index creare/stergere indecsi. Resources creare de noi relatii. Alteration adaugare /stergere atribute in relatie. Drop stergere relatii.

  • 4.53Introducere in Baze de date,2006

    Specificarea autorizarilorSpecificarea autorizarilor

    n grant - confera autorizaregrant on to

    n este:l user-idl public, toti userii valizi

    Note userul ce asigneaza trebuie sa detina respectivul privilegiu asignarea unui privilegiu asupra unei vederi nu implica

    asignarea acestuia si pentru relatiile incluse in vedere

  • 4.54Introducere in Baze de date,2006

    PrivilegiiPrivilegii

    n select: acces de citire ( read ) pentru relatie sau acces de interogare prin vederi

    l Ex: grant select on sucursala to U1, U2, U3

    n insert: inserare tuplen update: actualizare tuplen delete: stergere tuplen all privileges: toate privilegiile permise

  • 4.55Introducere in Baze de date,2006

    Revocarea autorizarilorRevocarea autorizarilor

    n revoke - revocarea unei autorizari.revoke on from

    n Ex:revoke select on sucursala from U1, U2, U3

    poate fi all privileges pentru a revoca toate privilegiile.

    Daca include public, toti userii pierd privilegiu m.p. cel ce la asignat.

    Privilegiile ce depind de cel revocat vor fi revocate

  • 4.56Introducere in Baze de date,2006

    SQL-sumarSQL-sumar Definirea datelor: create table Structura de interogare de baza: select from where Operatii Set: union, intersect, except Functii Agregat: count, sum, avg, min, max Valori Null: is null, is unknown Subinterogari imbricate:

    in (set membership), some, all (set comparison) Imbricari de interogari: exists, unique

    n Vederi (views)n Modificari ale bazei de daten Relatii Join

    Optimizari ale expresiilor de interogare SGBD detine mecanisme de eficientizare a interogarilor, transformarea loe in expresii echivalente cu timp de executie redus

    Transact SQL online bookhttp://manuals.sybase.com/onlinebooks