Entități
O entitate este o clasă de lucruri, obiecte, persoane sau evenimente care aau o semnificație pentru proiectul modelat. Pentru orice entitate există mai multe instanțe ale ei. Entitățile se figurează prin dreptunghiuri cu colțurile rotunjite, având scris numele entității cu majuscule. Numele entității este un substantiv la singular. Exemple: PROFESOR, ELEV, DISCIPLINĂ.
Fiecare entitate posedă anumite caracteristici numite atribute. De exemplu, pentru o instanță a entității profesor trebuie să specificăm numele, disciplinele predate , școlile sau universitățile la care predă, numărul de telefon. Pentru elevi, trebuie specificat: numele, adresa, școala, clasa, notele la toate disciplinele. Unele atribute sunt obligatorii, ca de pildă numele, altele sunt opționale, ca de pildă adresa sau numărul de telefon. Unele atribute trebuie să fie unice, altele se pot repeta. Atributele sunt substantive la singular. Atributele care definesc în mod unic o instanță se numesc identificatori unici (UID) sau chei primare. Acești UID pot fi compuși dintr-un singur atribut, sau din concatenarea a mai multor atribute.
În diagrama entității, UID-il se marchează prin semnul #, atributele obligatorii prin semnul *, iar cele opționale cu un cerculeț sau fără niciun marcaj.
Relații între entități
După identificarea entităților și a atributelor acestora, se pun în evidență relațiile care se pot forma între obiectele diferitelor entități. O relație este o asociere, o legătură sau conexiune între obiecte, cu o semnificație bine precizată în funcționarea proiectului.
Orice relație este bidirecțională. O relație poate lega și o entitate de ea însăși. O relație este caracterizată de trei elemente: nume, opționalitate și cardinalitate.
De exemplu, avem entitățile JUCĂTOR și ECHIPĂ. Genul de relații care se pot forma sunt:
Un JUCĂTOR joacă într-o ECHIPĂ
Numele relației = joacă - verb
Opționalitatea: specifică dacă relația este obligatorie pentru toate instanțele entității JUCĂTOR.
Dacă considerăm că un jucător trebuie (este obligat) să joace într-o echipă, vom scrie:
Un JUCĂTOR trebuie să joace într-o ECHIPĂ.
Dacă considerăm că un JUCĂTOR poate la un moment dat să nu joace în nicio echipă, vom scrie:
Un JUCĂTOR poate să joace într-o ECHIPĂ.
Cardinalitatea: specifică numărul instanțelor entității din dreapta care pot intra în relație cu o instanță a entității din stânga relației.
Exemplu: La câte echipe poate juca un jucător? Avem două variante:
Un JUCĂTOR trebuie / poate să joace la o ECHIPĂ și numai la una
Sau
Un JUCĂTOR trebuie / poate să joace la mai multe ECHIPE.
Cea mai realistă situație este
Un JUCĂTOR poate să joace la o ECHIPĂ și numai la una.
În sens invers, relația se exprimă astfel:
La o ECHIPĂ trebuie să joace unul sau mai mulți JUCĂTORI.
Relația dintre două entități se figurează printr-o linie continuă spre entitatea unde este obligatorie, și punctată spre entitatea unde este opțională și având la capătul cu mai mulți o ramificație.
Tipuri de relații
După cardinalitatea la cele două capete, relațiile pot fi:
- Relații one-to-one
- Relații one-to-many
- Relații many-to-many
Relațiile many-to-many care apar în procesul de analiză și proiectare trebuie reduse la relații de tipul one-to-many, deoarece nu sunt acceptabile din punctul de vedere al logicii sistemului de gestiune al bazelor de date.
Rezolvarea acestor tipuri de relații se efectuează prin introducerea în baza de date a unei entități noi, de intersecție.
De exemplu, fie entitatea SOLIST cu atributele nume, data nașterii, nume de scenă și entitatea MELODIE, cu atributele titlu, compozitor, textier, data lansării. Între cele două entități există o relație many-to-many, întrucât un solist poate să cânte mai multe melodii, iar o melodie poate fi cântată de mai mulți soliști.
Înainte de rezolvare, un cântăreț putea cânta mai multe melodii, iar o melodie putea fi cântată de mai mulți cântăreți. După introducerea entității de intersecție ÎNREGISTRARE, un cântăreț poate avea mai multe înregistrări, o melodie poate fi înregistrată de mai multe ori, dar o înregistrare poate fi doar a unui cântăreț și numai unul, și a unui cântec și numai unul.
Cardinalitatea intersecției: cele două relații sunt de tipul one-to-many, iar partea cu many este înspre entitatea de intersecție.
CREAREA TABELELOR
În modelul fizic al Sistemului de Gestiune a Bazelor de Date (SGBD) ACCESS, corespondentul entităților îl reprezintă tabelele, iar atributele entității sunt implementate prin câmpuri (coloane). Instanțele entității sunt înregistrările (liniile) tabelei.
Câmpurile se caracterizează prin: nume, unicitate, obligativitate, tip, dimensiune, format și alte setări particulare. Toate aceste setări se realizeqază în meniul design table (proiectare tabel), sau accesând iconul în formă de echer.
Denumirea tabelei provine din denumirea entității, cu deosebirea că este un substantiv la plural. Exemplu: avem tabelele elevi, soliști, profesori, melodii.
Tipurile principale de date sunt: text, date/time, number, autonumber, yes/no, currency.
Prin setări speciale se pot stabili dimensiunile aparte ale câmpurilor, numărul de zecimale ale unui număr în simplă sau dublă precizie, valori implicite dacă există, obligativitatea completării, reguli speciale de validare, mesaje de eroare în cazul introducerii eronate de valori, etc.
Cheia primară este un câmp sau o combinație de câmpuri care au proprietatea că sunt unice. Prin cheia primară (primary key) s epot identifica în mod absolut toate înregistrările din tabel. Rolul ei este acela de a facilita un acces rapid la o înregistrare căutată.
Indexarea tabelelor. Un index este o tabelă auxiliară ca un fel de tablă de materii (sumar, cuprins), în care sunt două coloane: valoarea unui câmp din tabelă numit index și numărul înregistrării în care apare acea valoare. În mod implicit se realizează o indexare după cheia primară, dar se pot adăuga indecși după oricare alte câmpuri. Aceste tabele de indecși pot opțional permite sau nu valori duplicate. Indexarea este utilă pentru rapiditatea la accesarea informațiilor.
Operații cu tabele
Sortarea este plasarea pe ecran în ordine crescătoare sau descrescătoare după una sau mai multe coloane.
Filtrarea este afișarea pe ecran a unui subset de înregistrări care îndeplinesc anumite condiții.
Căutarea înregistrărilor este operația de regăsire a unor înregistrări cu un anumit conținut.
INTEROGĂRI
Pentru a crea o interogare prin metoda QBE (Querry By Exemple) procedăm astfel: Creare interogare (Create querry) apoi se intră în Design view. Selectăm mai întâi tabela (tabelele) și / sau interogările din care vom prelua datele de intrare ale interogării. Selectăm apoi din aceste tabele afișate mai sus, câmpul sau câmpurile care ne sunt necesare, prin drag&drop sau dublu-click. În afară de aceste câmpuri, putem adăuga noii interogări și alte câmpuri (coloane) rezultate în urma unor calcule.
Asupra valorilor câmpurilor se pot efectua următoarele operații:
- Sortare (ascendent sau descendent)
- Afișare / ascundere
- Filtare cu criterii (criteria) simple sau compuse. Criteriile compuse se formează fie aplicându-se mai multe criterii pe rânduri succesive, caz în care aceste criterii sunt combinate cu operatorul logic or, fie aplicându-se criterii pe același rând, dar asupra unor câmpuri diferite, caz în care criteriile sunt combinate cu operatorul and.
Operatorii în Access
- Operatori aritmetici: + - * / \ (câtul obținut la împărțirea întreagă) mod (restul) ^ (ridicare la putere)
- Operatori de comparare: < > <= >= = <> (diferit)
- Operatori logici: and or not xor
- Operatorul de concatenare &
Funcții
- Funcții pentru șiruri de caractere
- len(s) lungimea șirului s
- lcase(s) litere mari ->litere mici
- ucase(s) litere mici ->litere mari
- left(s,n) primele n caractere din sirul s
- right(s,n) ultimele n caractere din șirul s
- mid(s,p,n) cele n caractere din s care încep pe poziția p (implicit 1)
- instr(p,s1,s2) prima poziție în care apare s2 în s1, sau 0 dacă nu apare. P implicit 1 este poziția din care se începe căutarea.
2. Funcții pentru date calendaristice constantele de tip dată se includ între #: #28/02/2017#
- now() data și ora curentă
- date() data curentă
- time() ora curentă
- day(d) ziua din data d
- year(d) anul din data d
- month(d) luna din data d
Exemplu de aplicare a funcțiilor:
Câmpul nume al tabelei persoane conține numele și prenumele persoanei. Să se separe numele de prenume și să se afișeze în coloane separate.
Aceste coloane separate sunt bineînțeles câmpuri calculate, adăugate în interogare pe lângă câmpul de date nume și prenume.
Pren: left[persoane.nume], instr([persoane.nume],” “)+1
Se va crea coloana cu eticheta pren și conținutul prenumele persoanelor.
Num: mid([persoane.nume],instr([persoane.nume], “ “)+1
Se va crea coloana num cu conținutul numele persoanelor.
Realizarea unei interogări
O interogare este o selecție de câmpuri preluate după anumite criterii dintr-una sau mai multe tabele, la care se pot adăuga eventual unul sau mai multe câmpuri inexistente în tabele, dar obținute pe baza unor calcule aplicate câmpurilor din acele tabele. O interogare se prezintă exact ca și o tabelă. Are mai multe rânduri numite articole sau înregistrări și mai multe câmpuri. Interogările funcționează la fel ca tabelele. Oriunde se poate folosi o tabelă, se poate folosi în același mod și o interogare.
Se pot crea oricâte interogări pornind de la o tabelă dată. Se pot crea interogări pornind de la alte interogări, sau de la tabele + interogări. Într-o interogare se pot selecta unul, mai multe sau toate câmpurile prezente în tabelele și interogările de intrare.
Ca și tabelele, interogările pot fi vizualizate în două feluri: proiectare (echer) și date (tabel).
Selectând din meniu Creare Interogare (Querry) se va afișa o fereastră împărțită orizontal în două panouri. În panoul de sus se adaugă tabelele și interogările din care se preiau câmpurile, iar în panoul de jos se construiesc câmpurile interogării.
Fiecare câmp al interogării se construiește cu ajutorul unui mic tabel, ale cărui linii sunt etichetate astfel: field, table, sort, show, criteria, or.
dacă se apasă pe butonul SIGMA (Totals) se mai adaugă încă un rând, etichetat totals.
- Se face dublu click pe numele unui câmp, sau se face drag&drop pe numele unui câmp. După această operație, câmpul respectiv este inclus în noua interogare.
- Pentru a crea o interogare pornind de la tabela elevi, care să afișeze toți elevii, cu clasa și media fiecăruia, se copiază numele tuturor câmpurilor (elev, clasa și media) și se va bifa caseta show a fiecăruia. dacă nu dorim ca media să apară în interogare, nu vom copia câmpul media.
- dacă dorim ca obiectele listate într-o coloană să fie sortate, se selectează ascending sau descending în linia sort a coloanei respective. Schimbarea ordinii de afișare într-o coloană conduce la schimbarea ordinii în mod corespunzător și în coloanele corelate.
-dacă dorim o selecție pe baza valorilor dintr-o coloană, în linia Criteria se va scrie condiția sub forma unei expresii de egalitate sau inegalitate, de exemplu =1 în câmpul clasa va afișa doar elevii din clasa I. Dacă avem condiție complexă care implică operatori logici SAU (OR), acestea se vor scrie pe linii consecutive, în liniile care sunt etichetate cu or. Condițiile care se aplică pe câmpuri diferite, pe aceeași linie, sunt considerate legate prin operația ȘI (AND). Exemplu: clasa = 5 ȘI media >8.
Pentru a vedea efectul unei interogări, comutăm în vizualizarea "tabel" sau apăsăm semnul mirării (!) ceea ce produce rularea interogării.
Funcții agregate
a. Care este totalul creditelor fiecărei persoane, indiferent de bancă?
b. Ce sumă totală a împrumutat fiecare bancă?
c. La câte bănci este împrumutată fiecare persoană?
d. Care sunt persoanele care s-au împrumutat la mai multe bănci?
e. Scrieți o interogare care afișează toate persoanele care s-au împrumutat de la o anumită bancă, citită ca parametru.
f. Scrieți o interogare care afișează persoanele care au împrumutat minimum o sumă citită ca parametru de la o anumită bancă citită ca parametru.
g. Scrieți o interogare care afișează toate băncile car au împrumutat cel puțin un număr dat de persoane, citit ca parametru.
Funcții agregate
Sunt folosite pentru efectuarea calculelor pe verticală (adică asupra tuturor înregistrărilor din tabelă deodată), spre deosebire de funcțiile prezentate înainte, care se efectuau asupra câmpurilor unei singure înregistrări (pe orizontală).
Apăsăm butonul 𝚺 (sigma) aflat pe bara de unelte. În grila QBE apare rândul total, care conține o listă din care putem alege una din funcțiile agregate:
Group by
Sum
Avg
Min
Max
Count
First
Last
Tehnica este următoarea: se grupează datele după unul din câmpuri (primul) iar celelalte câmpuri calculează ceva: suma, contor, medie, etc. Este obligatoriu ca dacă unul din câmpuri are o funcție agregat, și celelalte câmpuri să aibă funcție agregat.
Exerciții
1. Se consideră tabelul de mai jos:
X
|
Y
|
2
|
3
|
4
|
5
|
1
|
9
|
8
|
7
|
a. Calculați printr-o interogare valoarea x1y1+x2y2+...+xnyn.
b. Calculați valoarea maximă dintre toate produsele xiyi.
c. Care este produsul dintre cea mai mare valoare a lui x și cea mai mare valoare a lui y.
2. Există persoane care au credite în același timp la mai multe bănci.
nume
|
banca
|
suma
|
Ionescu Grigore
|
banca1
|
500
|
Ionescu Grigore
|
banca2
|
300
|
Ionescu Mihai
|
banca2
|
400
|
Mihai Viteazu
|
banca1
|
500
|
Popescu Olguța
|
banca3
|
600
|
a. Care este totalul creditelor fiecărei persoane, indiferent de bancă?
b. Ce sumă totală a împrumutat fiecare bancă?
c. La câte bănci este împrumutată fiecare persoană?
d. Care sunt persoanele care s-au împrumutat la mai multe bănci?
e. Scrieți o interogare care afișează toate persoanele care s-au împrumutat de la o anumită bancă, citită ca parametru.
f. Scrieți o interogare care afișează persoanele care au împrumutat minimum o sumă citită ca parametru de la o anumită bancă citită ca parametru.
g. Scrieți o interogare care afișează toate băncile car au împrumutat cel puțin un număr dat de persoane, citit ca parametru.
Niciun comentariu:
Trimiteți un comentariu