În accepþiunea Microsoft Access o bazã de date este o colecþie de obiecte: tabele (tables), cereri de prelucrare (queries) formulare (forms) rapoarte (reports) pagini Web (pages) comenzi macro (macros) ºi module (modules).
Bazele de date se prezintã pe suporþi magnetici ca fiºiere cu extensia .mdb.
Se mai folosesc extensiile .mde pentru baze de date compilate, .ldb pentru fiºierele index asociate unei baze de date, .mdz pentru ºabloane de baze date ACCESS (templates) ºi .mda pentru baza de date sistem ACCESS (conþine informaþii de securitate).
Tabelele dintr-o bazã de date stocheazã datele ºi le pun la dispoziþia tuturor celorlate obiecte dintr-o aplicaþie a bazei de date pentru prelucrare, afiºare ºi raportare.
Tabelele au o structurã (capul de tabel împreunã cu informaþiile privitoare la natura ºi proprietãþile fiecãrei coloane/câmp) ºi conþinut (datele concrete stocate în tabel sub formã de rânduri denumite în englezã records, adicã articole sau înregistrãri).
A crea un tabel înseamnã a defini structura, a specifica acele câmpuri care pot fi folosite pentru indexare, câmpul/câmpurile ce constituie cheie primarã precum ºi relaþiile tabelului cu alte tabele (dacã existã).
Pentru a crea un tabel, trebuie sã avem declaratã ºi deschisã baza de date din care va face parte acel tabel. Altfel spus, trebuie sã avem în faþã o fereastrã ca cea din figura de mai jos (aceasta este fereastra managerului bazei de date din Access 2000; cea din Access '97 va avea lista cu obiecte dispusã pe orizontalã, deasupra chenarului principal):
Dacã nu avem o bazã de date în care sã creem un tabel,
vom iniþializa o bazã de date.
Pentru aceasta din Meniul File vom alege opþiunea New, iar din fereastra New care apare vom alege paleta General ºi
apoi butonul (icoana) Database. Dupã ce, în fereastra File New Database care a apãrut, vom alege directorul de destinaþie al noii baze de date ºi numele sãu, vom da clic pe butonul Create. Acum vom avea în faþã imaginea de mai sus (imaginea fereastrei managerului bazei de date din Access).
Pentru a crea un tabel nou vom da clic pe obiectul Tables , iar din fereastra care apare vom alege una din cele trei metode disponibile ºi anume:
- DataSheet View (create table by entering data - prin introducerea datelor);
- Table Wizard (utilizând instrumentul Wizard).
Mai existã douã posibilitãþi de creare a unui tabel, dar prin derivare din alte tabele ºi anume: Import Table ºi Link Table . Deosebirea între ele constã în aceea cã o tabelã importatã intrã în gestiune bazei de date curente , în timp ce una cuplatã prin Link, râmâne unde este iar SGBD Access doar foloseºte acel tabel.
Cea mai sigurã metodã este Design View. Dând clic pe aceastã opþiune, vom obþine fereastra numitã Table1: table unde vom putea introduce structura noultui tabel numit pentru moment Table1.
Dupã
salvarea structurii, vom fi solicitaþi sã-i dãm un
nume acestui tabel ºi ulterior acel nume* va apare în titlul
ferestrei în loc de Table1.
Pentru a introduce structura tabelului
Table1, fiecãrui câmp din tabel îi vom da un nume* (Field Name), îi vom atribui un tip de datã (Data Type) ºi eventual o scurtã descriere (Description). Se recomand[ s[ ne limit[m la max. 30 de c\mpuri. Pentru a alege tipul de datã, în coloana Data Type existã o listã ascunsã (combobox) din care dând clic pe triunghiul negru, putem alege tipurile de date din imaginea de mai jos.
|
zonei pentru introducerea valorii Field Size. Dacã la rubrica Data Type era ales tipul Number, dând clic la extremitatea dreaptã a liniei cu date pentru Field Size, ni se va deschide un combobox cu subtipurile/opþiunile prezentate în imaginea din dreapta tabelului de mai jos. Pentru a sti ce subtip sã alegem trebuie sã ºtim cã de subtipul ales depinde intervalul de valori ce putem stoca în câmpul respectiv, numãrul de octeþi ocupat de acel câmp, precum ºi numãrul maxim de zecimale ce se pot stoca în acel câmp. Toate acestea rezultã din tabelul urmãtor:
Field size/Subtipuri |
Zecimale |
Interval valoric |
Octeþi |
Byte |
de la 0 la 255 | ||
Integer |
de la -32.768 pânã la 32.767 | ||
Long Integer |
de la -2.147.483.648 pânã la +2.147.483.647 | ||
Single |
de la -3,4*1038 pânã la +3,4*1038 | ||
Double |
de la -1,797*10308 pânã la +1,797*10308 | ||
Replication ID |
Identificator global unic | ||
Decimal |
de la -1028 pânã la +1028 |
Pentru a ºti ce sã alegem din lista ascunsã cu tipuri de
date este bine sã avem cunoºtinþã de specificul acestor tipuri aºa cum este el
prezentat în tabelul de mai jos:
Date |
Tipul datelor |
Descrierea tipului datelor |
|
Alfanumerice |
Text | ||
Memo |
Pot conþine pânã la 64.000 de caractere. Aceste câmpuri pot fi vizualizate în modul DataSheet View. Un câmp memo nu poate fi cheie ºi nici nu putem indexa dupã el |
||
Numerice |
Number | ||
Autonumber |
Se foloseºte de obicei la câmpurile cheie. La rubrica Field Size acesta ia automat subtipul Long Integer iar dupã proprietatea Field Size nu mai apare Format ci o propriete specificã acestui tip numitã Increment care poate lua valorile Increment sau Random. Dacã am ales Increment, la introducerea unui nou articol câmpul de tip Autonumber va fi incrementat cu 1, dacã am ales Random se alege un numãr aleatoriu unic. Numãrul maxim de înregistrãri ce se pot stoca într-un tabel contorizat cu o cheie de tip autonumber este de 2 miliarde. |
||
Yes/No |
Este folosit pentru reprezentarea câmpurilor de tip logic pentru care se folosesc valorile -1 pentru True sau Yes ºi 0 pentru False sau No. Nu pot fi folosite ca index ºi cu atât mai mult nu pot fi folosite drept cheie. Sã remarcãm cã aceste câmpuri totdeauna vor lua vlaoarea 0 sau orice alt numãr diferit de zero (respectiv -1), dar la introducerea datelor, noi nu introducem decât True/False, Yes/No, sau Onn/Off (depinde ce alegem în momentul completãrii proprietãþii Format unde existã un combobox cu aceste trei oferte ºi noi putem sã alegem una dintre ele). |
||
Currency |
Este un format special, fix, cu patru zecimale proiectat sã previnã erorile de rotunjire care ar opera operaþiile contabile acolo unde valoarea trebuie sã se potriveascã la nivel zecimale. |
||
Date calendaristice |
Date/Time | ||
Obiecte mari |
Object OLE (BLOB - binary large object)) |
Se referã la obiecte grafice realizate prin puncte (bitmap), desene vectoriale, fiºiere cu semnale audio ºi alte tipuri de date care pot fi create de o aplicaþie OLE server. Câmpurile de acest tip nu pot fi folosite drept cheie ºi nici index. |
|
Adrese Internet |
Hyperlink |
Este un text sau o combinaþie de text cu numere, stocatã ca un text ºi folositã ca adresã a unei pagini Web. Este formatã din trei pãrþi: textul afiºat, adresã ºi subadresã. Fiecare din cele trei pãrþi poate fi compusã din maximum 2048 de caractere. |
|
Informaþii preluate |
Lookup Wizard |
|
Practic din cele prezentate mai sus, putem completa doar proprietatea Field Size. Sã vedem în continuare efectul formatului predefinit ales în linia numitã Format pentru tipurile Number, Date/Time ºi Yes/No (acest efect se poate vedea doar la afiºarea datelor):
Tipul datelor |
Format disponibil |
Aspect |
Number |
General Number | |
Currency | ||
Fixed | ||
Standard | ||
Percent | ||
Scientific |
1.23E+03 |
|
Date/Time |
General Date |
10/I/92 4:00:00 Pm |
Long Date |
Thursday, October 1, 1992 |
|
Medium Date |
1 -Oct-92 |
|
Short Date | ||
Long Time |
4:00:00 PM |
|
Medium Time |
04:00 PM |
|
Short Time | ||
Yes/No |
Yes/No |
Yes sau No |
True sau False |
||
On sau Off |
||
-1 sau 0 |
Formatele de mai sus sunt predefinite. Pentru tipul text ºi memo nu existã formate predefinite ca cele de mai sus. În afarã de formate predefinite existã formate ce se construiesc de programator cu ajutorul diferitelor simboluri.
a) Pentru text/memo se pot folosi simbolurile @, &, < ºi > cu urmãtoarele semnificaþii:
se cer caractere de tip text (inclusiv spaþiu).
< scrie toate caracterele cu litere mici
> scrie toate caracterele cu majuscule
Formatele pentru text/memo pot avea pânã la douã secþiuni, fiecare secþiune conþinând formatul pentru o anume situaþie ºi anume: prima secþiune pentru câmpuri cu text ºi secþiunea doua pentru câmpuri de lungime nulã sau cu valoarea Null.
Astfel dacã pentru situaþia cã în câmp nu existã text putem cere sã se scrie "Necompletat", vom folosi formatul @;" Necompletat " . În acest caz simbolul @ va fi folosit pentru cazul când existã text, iar dacã nu existã text va fi folositã secþiunea doua, adicã va scrie cuvântul Necompletat .
Notã. Mai existã funcþia Format care poate returna o valoare pentru un ºir de lungime zero ºi alta pentru ºirul Null.
Proprietatea Format poate fi folositã ºi în modul Datasheet View, pentru a forma automat câmpuri din tabelul deschis în acest mod de lucru.
De exemplu puteþi folosi urmãtorul format pentru tipul currency:
#0.00[green];($#,##0.00)[Red];"Zero";"Null".
Culorile se scriu în englezã!
Acest numãr conþine patru secþiuni, separate prin ; ºi foloseºte un format diferit pentru fiecare secþiune. Dacã folosim mai multe secþiuni, dar nu specificãm format pentru fiecare secþiune, în situaþia în care cãdem peste o secþiune ce nu are format fie cã nu se va afiºa nimic, fie se va aplica automat formatul asociat cu prima secþiune.
Se pot crea formate pentru numere folosind urmãtoarele simboluri:
Simbol Descriere
. (punct) Separator de zecimale. Separatorii se pot stabili dând dublu clic pe zona Regional Settings din Windows Control Panel.
, (virgula) Separator pentru mii
simbol pentru cifre (vom folosi atâtea zerouri câte cifre vrem sã obþinem) Vom obþine o cifrã sau zero.
simbol pentru cifre. Vom obþine o cifrã sau nimic.
afiºeazã caracterul $
procentaj. Valoarea este înmulþitã cu 100 ºi se adaugã semnul %.
E- sau e- Notaþia ºtiinþificã pentru numere. Se pune semnul minus dupã exponenþii negativi ºi nimic dupã exponenþii pozitivi. Acest simbol se va folosi cu alte simboluri ca în 0.00E-00 sau 0.00E00.
E+ sau e+ Notaþia ºtiinþificã pentru numere. Se pune semnul minus dupã exponenþii negativi ºi semnul plus (+) dupã exponenþii pozitivi. Acest simbol se va folosi cu alte simboluri ca în 0.00E+00
Observaþie: se poate folosi proprietatea Decimal Places pentru a ignora numarul implicit de zecimale prevãzut în formatul predefinit ales cu proprietatea Format.
Formatele predefinite currency ºi euro se conformeazã setãrilor din Regional Settings existente în Windows Control Panel. Noi putem ignora acele setãri folosind propriul nostru format pentru tipul Currency
Notã Dacã doriþi sã. adãugaþi în formatul Dv. un separator, acesta va fi încadrat între apostroafe duble ca în exemplul urmãtor: mmm d", "yyyy.
d) Pentru datele de tip Yes/No formatele programator pot conþine pânã la trei secþiuni: prima fãrã nici un efect, dar trebuie marcatã de semnul ; , a doua conþine textul ce va fi pus în locul lui Yes, True sau On ºi a treia conþine textul ce va fi pus în locul lui No, False sau Off.
Vom prezenta în continuare semnificaþia proprietãþilor ce urmeazã dupã Format:
- Numãrul de zecimale (Decimal places). În cadrul acestei proprietãþi se stabileºte numãrul de zecimale ce pot fi atribuite câmpului. Existã o listã de opþiuni ºi se pot selecta valori cuprinse între 0 ºi 15 sau Auto pentru determinarea automatã a numãrului de zecimale.
- Formatul
de introducere (Input Mask). Prin aceastã proprietate se impune un format
pentru toate datele ce se vor introduce în câmpul curent. Un astfel de format
se poate crea mai uºor cu Input Mask Wizard care se obþine dând clic pe
extremitatea dreaptã a liniei unde trebuie sã introducem proprietatea Input
Mask, mai exact pe butonul .
Acest format de intrare are mare importanþã în cazul câmpurilor de tip Text sau Date/Time .
Proprietatea InputMask poate conþine pânã la trei secþiuni:
- prima conþine formatul de introducere propriu-zis, de exemplu !(999) 999-9999. A se vedea mai jos lista caracterelor ce se pot folosi pentru a defini un format de intrare.
- a doua specificã dacã Access trebuie sã stocheze în tabel ºi caracterele din afiºajul literal folosit la introducerea datelor. Mai exact le va introduce pentru valoarea 0 din aceastã secþiune ºi nu le va introduce pentru valoarea 1 sau blank. Afiºajul literal derivã din faptul cã de exemplu pentru un numãr de telefon putem defini formatul de intrare sub forma (999) 999-9999. La introducerea datelor pe ecran, pe lângã cifrele introduse în locul liniilor, vor apare ºi parantezele. Dacã în aceastã secþiune am pus 0, parantezele vor fi stocate ºi ele împreunã cu cifrele.
- a treia secþiune specificã un caracter pe care Access îl va afiºa în locul unde este de aºteptat, conform formatului de intrare, sã se introducã date.
Pentru a defini un format de intrare (Input Mask) se pot folosi urmãtoarele caractere:
se cer doar cifre; nu se admite semnul + sau -;
se pot introduce cifre ºi spaþiu; nu se admite semnul + sau -;
se pot introduce cifre ºi spaþiu; spaþiile sunt afisate pe timpul editãrii ca blancuri, dar la stocare blancurile se eliminã; se admite semnul + sau -;
L se cer litere de la A la Z; introducere obligatorie;
se cer litere de la A la Z; introducere opþionalã;
A litere sau cifre; introducere obligatorie;
a litere sau cifre; introducere opþionalã;
& orice caracter sau spaþiu; introducere obligatorie;
C orice caracter sau spaþiu; introducere opþionalã;
/ marcheazã loc pentru zecimale ºi separatori pentru mii, datã ºi timp. Adevãratul caracter folosit, va fi cel din cutia de dialog Regional Settings Properties din Windows Control Panel;
< toate caracterele vor fi convertite la litere mici;
> toate caracterele vor fi convertite la majuscule;
cere formatului de intrare sã afiºeze de la dreapta la stânga ºi nu de la stânga la dreapta cum ar fi normal. Acest semn poate fi inclus oriunde în formatul de intrare;
cere formatului de intrare sã afiºeze caracterele ce urmeazã dupã semnul mirãrii ca niºte caractere literale: de ex. din \A va rezulta A
Notã: dacã Input Mask este pusã sub forma cuvântului "Password", orice caracter tastat în zona unde trebuie tastate datele de intrare va fi afiºat ca steluþã.
În zona unde trebuie tastate datele de intrare, dacã acolo este in vigoare un format de intrare, se scrie în regim Insert Off, adicã se scrie peste. Dacã acolo se foloseºte tasta back space, în locul caracterului ºters va râmâne un spaþiu.
La afiºarea datelor ce au fost citite cu un format de intrare, dacã a fost definit ºi un format de afiºare (cu proprietatea Format), acesta din urmã este prioritar.
- Eticheta (Caption). Permite specificarea unui anumit nume atribuit câmpului în cazul în care acesta este utilizat în cadrul formularelor sau când tabela creatã este afiºatã.
- Valoarea implicitã (Default Value). Este utilã atunci când o valoare este foarte comunã pentru multe înregistrãri (rânduri din tabel). Ea se inroduce la declararea structurii tabelului, iar la introducerea datelor este introdusã automat. Dacã pentru un anumit articol nu se potriveºte, putem s-o modificãm, dar ea rãmâne valabilã pentru restul articolelor.
- Regula de validare (Validation Rule). Dacã a fost prevãzutã o regulã de validare (exprimatã printr-o expresie) la introducerea unei valori în câmpul respectiv, expresia se calculeazã pentru valoarea respectivã ºi se confruntã cu criteriul de validare. Pe lângã operatori (=, -, *, /, \, Mod, <, >, £ ³, AND, OR, BETWEEN, IN, IS NULL), expresiile conþin ºi operanzi reprezentaþi prin identificatori (daþi în paranteze rotunde), funcþii ºi constante. Exemplu: regula >= #1/1/98# And <#1/1/99# cere ca data calendaristicã ce va fi introdusã sã fie în limitele anului 1998.
- Textul de validare (Validation Text) este textul care va apãrea ca mesaj în cazul în care nu s-a respectat regula de validare.
- Introducere obligatorie (required). Se aplicã pentru toate câmpurile a cãror lipsã ar face nerelevant articolul în care ele nu ar fi completate. De exemplu o facturã fãrã datã nu poate fi luatã în serios din cauzã cã ar rãmâne în afara multor rapoarte ºi situaþii generate de calculator ºi poate chiar în afara listei cu facturile ce trebuie achitate.
- Indexat (Indexed). Prin aceastã proprietate ne pronunþãm cu privire la utilizarea câmpului curent la indexarea bazei de date, ca index simplu, iar dacã rãspunsul este Da, atunci trebuie sã precizãm dacã la indexare se iau în calcul ºi înregistrãrile care vin cu valori ce se repetã (Duplication OK) sau ne limitãm numai la câte o înregistrare de fiecare valoare a câmpului curent (No duplication). Dacã am ales câmpul ca index ºi apoi renunþãm putem folosi opþiunea No, care alãturi de primele douã se gãsesc într-o combobox de pe linia Indexed.
- Valori Noi (New Values) se aplicã doar la câmpurile de tip Autonumber. Prin combobox de pe aceastã linie precizãm dacã valoarea din câmpul curent se obþine prin incrementare (opþiunea Increment) sau prin generarea de numere aleatoare unice (Random).
- Se admite lungime zero (Allow Zero Length) se preteazã numai la câmpurile de tip text ºi memo. Valoarea introdusã la aceastã proprietate este corelatã cu cea de la proprietatea required, conform tabelului de mai jos.
Allow zero length |
Required |
Acþiune |
Valoare memoratã |
No |
Yes |
Enter |
Null |
Spacebar |
Null |
||
ªir de lungime zero |
Nu este acceptat |
||
Yes |
No |
Enter |
Null |
Spacebar |
Null |
||
ªir de lungime zero |
ªir de lungime zero |
||
No |
Yes |
Enter |
Nu este acceptat |
Spacebar |
Nu este acceptat |
||
ªir de lungime zero |
Nu este acceptat |
||
Yes |
No |
Enter |
Nu este acceptat |
Spacebar |
ªir de lungime zero |
||
ªir de lungime zero |
ªir de lungime zero |
Centralizarea atributelor tipurilor de date. Tabelul de mai jos marcheazã prin steluþã care sunt atributele (proprietãþile) care se preteazã fiecãrui tip de date:
Property |
Text |
Memo |
Num-ber |
Date/ Time |
Cu-rrency |
Auto- Number |
Yes/ No |
OLE Object |
Hyper- link |
Field Size | |||||||||
Format | |||||||||
Input Mask | |||||||||
Caption | |||||||||
Valida-tion Rule | |||||||||
Valida-tion Text |
| ||||||||
Required | |||||||||
Allow zero Length | |||||||||
Decimal Places | |||||||||
New Values | |||||||||
Indexed |
2. DisplayControl este o proprietate care nu apare împreunã cu cele enumerate în tabelul de mai sus, dar ea se poate introduce selectând pagina LookUp de lângã pagina General unde se aflã celelalte proprietãþi.
Aceastã proprietate conþine o listã ascunsã (combobox) ce conþine tipurile de obiecte de control disponibile pentru tipul de date selectat pentru câmpul de care ne ocupãm în acel moment. Pentru câmpurile de tip Text sau Number, aceastã proprietate poate fi pusã Text Box, List Box, sau Combo Box. Pentru câmpurile de tip Yes/No, aceastã proprietate poate fi pusã pe Check Box, Text Box, sau Combo Box.
Remarcãm cã în momentul în care aþi ales un obiect de control pentru aceastã proprietate, orice alte proprietãþi necesare pentru a configura acel obiect de control, sunt imediat afiºate pe pagina Lookup. Prezentãm mai jos, aceste proprietãþi.
De fapt ceea ce se întâmplã pe aceastã paginã, puteaþi obþine dacã în partea de sus a ferestrei utilizate pentru introducerea câmpurilor din compunerea tabelului, în coloana Data Type, aþi fi ales tipul Lookup Wizard.
- proprietatea RowSourceType ºi RowSource
Aceste proprietãþi se folosesc corelat pentru a transmite mediului de programare Access, cum sã furnizeze datele pentru obiectul de control ales (listã, listã ascunsã sau chiar un obiect OLE liber cum ar fi o hartã. Este vorba de hãrþile speciale folosite de Excel, care sunt de fapt un fel de obiect de control prin care se stocheazã date ca într-o listã, numai cã în loc sã vezi un rând din listã vezi un punct de pe hartã, cãruia i-au fost asociate anumite proprietãþi ) . Aºa de exemplu, pentru a afiºa pe rândurile dintr-un obiect de tip listã, date provenite de la o query numitã Lista_Clienþi, la proprietatea RowSourceType vom rãspunde cu Table/Query, iar la proprietatea RowSource vom rãspunde cu query Lista_Clienþi.
Pentru completarea proprietãþii RowSourceType Setting se pot folosi urmãtoarele opþiuni:
- Table/Query, însemnând cã datele se vor lua dintr-un tabel, o query, sau o instrucþiune SQL, ce se va specifica prin proprietatea RowSource.
- Value List. Datele vor fi o listã de valori ce se specificã prin intermediul proprietãþii RowSource. Acolo datele vor fi separate prin punct ºi virgulã (;).
- Field List Datele vor fi o listã de câmpuri dintr-un tabel, query, sau instrucþiune SQL, specificat(ã) prin RowSource.
Pe pagina Lookup mai sunt specificate ºi alte proprietãþi ale obiectului ales, cum ar fi:
- bound column - din ce coloanã a listei sau listei ascunse sã se ia datele atunci când aceasta este folositã ºi când ea dispune de mai multe coloane; de obicei aceste liste sunt prevãzute cu o singurã coloanã;
- column count - câte coloane sã fie afiºate;
- column heads - când obiectul va fi activat coloanele sale cu ce sã fie etichetate? (cu denumire câmpuri, etichete, primul rând de date din tabel sau etichetele de pe hãrþi?);
- column widths - lãþimea coloanelor (în cazul unor obiecte cu coloane multiple) din compunerea obiectului de control ales;
- list rows - numãrul maxim de rânduri dintr-un tabel ce se vor afiºa în lista ascunsã;
- list width - lãþimea listei ascunse ce se deruleazã la activarea obiectului Combobox;
- limit to list - (poate lua valorile Yes sau No); dacã utilizatorul în loc sã aleagã o opþiune din listã tasteazã un text, atunci dacã proprietatea limit to list a fost pusã pe Yes ºi acel text nu se poriveºte cu unul din cele afisate pe lista ascunsã, textul va fi respins, chiar dacã el s-ar fi potrivit cu unul care este în sursa de date a coloanei listei ascunse, dar nu este vizibil.
3. Indecºi ºi chei. Indecºii au de a face cu indexarea. Aceasta se materializeazã în crearea unui fiºier ce conþine cheile (poziþia) articolelor din compunerea tabelului, ordonate dupã valorile din câmpul desemnat ca index. Articolele nu sunt mutate de la locul lor! Existã indecºi care iau în consideraþie ºi valori multiple (Duplicates Ok), indecºi care nu iau în consideraþie articolele ce vin cu valori ce se repetã (No duplicates) ºi indecºi compusi adicã valoarea dupã care se face ordonarea în fisierul index se obþine prin combinarea valorilor din douã pânã la zece câmpuri indicate de programator la stabilirea indecºilor. În cazul unui tabel se admit maximum 5 indecºi compusi. Nu putem indexa câmpuri de tip memo, hyperlink sau OLE objects.
Cheia primarã este un caz special de index ºi anume este un
index care nu numai cã nu ia în seamã articolele cu valori repetate în câmpul
index primar, dar nici nu admite existenþa unor astfel de articole pentru cã
atunci acest index ºi-ar pierde rolul de identicator al articolelor din tabel. Cu alte cuvinte vom
alege drept cheie primarã numai câmpuri care pot identifica exact orice
înregistrare. Cheile primare nu trebuie declarate mai întâi ca index; ele se
declarã direct din modul Design, prin selectare ºi apãsarea butonului cheie
primarã , de pe bara de
instrumente. Dacã se doreºte o cheie primarã compusã, se selecteazã primul câmp
ºi apoi þinând tasta Ctrl apãsatã se selecteazã cu mouse-ul ºi celelalte
câmpuri din compunerea cheii primare. Când s-au selectat toate câmpurile se dã
click pe butonul cheie primarã. Cheie primarã, este desemnatã cu intenþia de lega tabelul care deþine o
cheie primarã (tabel pãrinte) cu un alt tabel (copil) care deþine o cheie
externã. În aceastã operaþiune unei chei primare îi corespunde o cheie
externã, adicã un câmp din alt tabel, cu aceeaºi semnificaþie fizicã ºi cu
acelaºi tip (Excepþie fac cheile primare de tip Autonumber, cãrora le
vor corespunde chei externe de tip number, subtip Long integer) ºi
lungime, dar nu neapãrat cu pretenþia ca acolo el sã includã valori unice.
Dealtfel, de regulã, relaþiile se creazã tocmai pentru cã cheia externã este un câmp cu valori multiple altminteri este foarte posibil ca cele douã tabele sã poatã fi combinate într-unul singur.
Într-un tabel nu poate fi decât o singurã cheie primarã, dar existenþa unei chei primare este obligatorie pentru cã altfel, pentru tabelul respectiv nu existã nici un criteriu de sortare. Dacã mai existã un câmp care ar putea identifica unic înregistrãrile, dar nu a fost desemnat cheie primarã, acela poate fi considerat cheie candidatã. Singurul index obligatoriu este cheia primarã.
Specificarea indecºilor simpli se face în modul de
afiºare Design cu ajutorul proprietãþii Indexed. Indecºii
compuºi, dar ºi cei simpli se pot selecta cu opþiunea Indexes din View sau
cu butonul Indexes de pe bara cu instrumente Table Design,
la selectarea cãrora va apare fereastra Indexes de mai jos,
4. Relaþii între tabele
Din fereastra managerului bazei de date selectaþi Tools/ Relationship. Va rezulta fereastra fereastra Relationship ºi odatã cu ea ºi fereastra Show Table.
Dacã
aceasta nu a apãrut, apã-saþi butonul Show Table ºi o sã aparã. De acolo
selectaþi câte un tabel ºi apãsând pe butonul Add, mutaþi-l în fereastra
Relationship. Când toate tabelele de care aveþi nevoie au fost mutate în fereastra Relationship, apãsaþi Close ºi veþi râmâne doar cu fereastra Relationship.
În aceste tabele toate cheile primare apar scrise cu
caractere aldine (bold).
Daþi clic pe câmpul cheie primarã din tabelul care vã intereseazã (tabelul pãrinte) ºi þinând butonul mouse-ului apãsat mutaþi cursorul pe cheia externã a tabelului copil. Acum va apare fereastra Edit Relationship de unde putem selecta caseta de validare Enforce referential Integrity ºi eventual Cascade Update Related Fiels ºi Cascade Delete Related Records.
De remarcat cã pentru a crea o relaþie între o cheie primarã compusã ºi o cheie externã simplã, trebuie selectat câmpul scris cu bold, din cheia primarã ºi apoi tinând Ctrl apãsat, vom da clic ºi pe cel de al doilea câmp implicat în cheia primarã apoi, þinând butonul mouse-ului apãsat, putem trage cursorul spre cheia externã ce ne intereseazã.
Definirea unei relaþii de tip mai multe la mai multe
Pentru aceasta vom crea un al treilea tabel numit reuniune unde, printre altele, vom defini ºi douã câmpuri identice cu cele douã câmpuri desemnate cheie primarã, în cele douã tabele ce urmeazã a fi puse în relaþia mai multe la mai multe. În acest tabel ele vor forma o singurã cheie primarã (compusã) care va funcþiona drept cheie externã în relaþiile cu cele douã tabele date.
Dacã este cazul, în tabela reuniune, se pot aduce ºi alte câmpuri din tabelele ce urmeazã a fi puse în relaþia mai multe la mai multe.
În final vom defini câte o relaþie una la mai multe între fiecare din cele douã tabele date ºi tabelul reuniune. Adãugarea de articole se face fie creând o query care lucreazã cu mai mult de un tabel, fie un formular care lucreazã cu mai mult de un tabel.
UN exemplu de tabel reuniune poate fi unul numit Linie_facturã care va conþine un câmp cu numãrul facturii ºi un câmp cu codul produsului, în condiþiile în care existã deja un tabel cu facturi ºi unul cu produse. În acest tabel o facturã se poate regãsi la mai multe produse, iar un produs se poate regãsi pe mai multe facturi.
Este bine ca toate modificãrile de tip, subtip, index, chei, etc. sã se facã înainte de începerea completãrii tabelului cu date, pentru cã ulterior schimbãrile care presupun condiþii mai restrictive de lungime câmp sau de subtip, pot duce la piederi de informaþii sau la erori grave.
Dacã existã relaþii, nu se pot ºterge articole decât dupã ce s-au ºters toate articolele ce conþin în cheia externã valoarea cheii primare aflatã în articolul ce se doreºte a fi ºters.
Redenumirea unui tabel din compunerea unei baze de date In fereastra Database se dã clic pe denumirea tabelului ºi apoi se mai dã clic odatã, dar nu sub formã de dublu clic ºi ca urmare denumirea tabelului se transformã într-o cutie de text în care apare un cursor pentru editare. Se poate ºterge vechea denumire sau pãrþi din ea ºi se pot scrie alte caractere. În final se dã Enter.
|