O bază de date corect proiectată vă oferă acces la informații actualizate și precise. Deoarece o proiectare corectă este esențială pentru atingerea obiectivelor în lucrul cu o bază de date, investind timpul necesar pentru a învăța principiile unei bune proiectări are sens. În final, este mult mai probabil să aveți o bază de date care se potrivește nevoilor dvs. și care poate face față cu ușurință schimbărilor.
Acest articol oferă instrucțiuni pentru planificarea unei baze de date desktop. Veți afla cum să decideți de ce informații aveți nevoie, cum să împărțiți acele informații în tabele și coloane corespunzătoare și cum se corelează aceste tabele. Ar trebui să citiți acest articol înainte de a crea prima bază de date desktop.
În acest articol
Câțiva termeni referitori la baze de date pe care trebuie să îi cunoașteți
Access vă organizează informațiile în tabele: liste de rânduri și coloane care amintesc de suportul contabilului sau de o foaie de calcul. Într-o bază de date simplă, este posibil să aveți un singur tabel. Pentru majoritatea bazelor de date, veți avea nevoie de mai multe. De exemplu, este posibil să aveți un tabel care stochează informații despre produse, un alt tabel care stochează informații despre comenzi și un alt tabel cu informații despre clienți.
Fiecare rând este denumit mai corect înregistrare, iar fiecare coloană, câmp. O înregistrare este un mod semnificativ și unitar de a combina informații despre ceva anume. Un câmp este un singur element informațional, un tip de element care apare în fiecare înregistrare. În tabelul Produse, de exemplu, fiecare rând sau înregistrare păstrează informații despre un produs. Fiecare coloană sau câmp cuprinde un anumit tip de informații despre acel produs, cum ar fi numele sau prețul.
Ce reprezintă o bună proiectare a bazei de date?
Anumite principii ghidează procesul de proiectare a bazei de date. Primul principiu este că informațiile dublate (numite și date redundante) sunt greșite, deoarece consumă spațiu și crește probabilitatea erorilor și inconsecvențelor. Al doilea principiu este că corectitudinea și integralitatea informațiilor este importantă. Dacă baza de date conține informații incorecte, toate rapoartele care extragă informații din baza de date vor conține, de asemenea, informații incorecte. Prin urmare, orice decizii pe care le luați care se bazează pe acele rapoarte vor fi apoi dezinformate.
O bună proiectare a bazei de date este, prin urmare, una care:
-
Împarte informațiile în tabele bazate pe subiect pentru a reduce datele redundante.
-
Oferă Access informațiile necesare pentru a reuni informațiile din tabele, după necesități.
-
Oferă suport și asigură acuratețea și integritatea informațiilor dvs.
-
Satisface necesitățile de procesare și raportare a datelor dvs.
Procesul de proiectare
Procesul de proiectare constă din următorii pași:
-
Determinarea scopului bazei de date
Acest pas vă ajută să vă pregătiți pentru restul pașilor.
-
Găsirea și organizarea informațiilor necesare
Colectați toate tipurile de informații pe care doriți să le înregistrați în baza de date, cum ar fi numele produsului și numărul comenzii.
-
Împărțirea informațiilor în tabele
Împărțiți elementele informaționale în entități sau subiecte majore, cum ar fi Produse sau Comenzi. Fiecare subiect devine apoi un tabel.
-
Transformarea elementelor informaționale în coloane
Decideți ce informații doriți să stocați în fiecare tabel. Fiecare element devine un câmp și este afișat sub formă de coloană în tabel. De exemplu, un tabel Angajați poate include câmpuri cum ar fi Numele de familie și Data de angajare.
-
Specificarea cheilor primare
Alegeți cheia primară a fiecărui tabel. Cheia primară este o coloană care se utilizează pentru a identifica în mod unic fiecare rând. Un exemplu ar putea fi ID produs sau ID comandă.
-
Configurarea relațiilor în tabel
Uitați-vă la fiecare tabel și decideți cum sunt corelate datele dintr-un tabel cu datele din alte tabele. Adăugați câmpuri la tabele sau creați tabele noi pentru a clarifica relațiile, după cum este necesar.
-
Rafinarea proiectării
Analizați proiectarea pentru a detecta eventuale erori. Creați tabelele și adăugați câteva înregistrări de date eșantion. Vedeți dacă puteți obține rezultatele dorite din tabele. Faceți ajustări la proiectare, după cum este necesar.
-
Aplicarea regulilor de normalizare
Aplicați regulile de normalizare a datelor pentru a vedea dacă tabelele sunt structurate corect. Efectuați ajustări la tabele, după cum este necesar.
Determinarea scopului bazei de date
Este o idee bună să notați scopul bazei de date pe hârtie , scopul său, modul în care vă așteptați să o utilizați și cine o va utiliza. Pentru o bază de date mică pentru o firmă la domiciliu, de exemplu, puteți scrie ceva simplu, cum ar fi "Baza de date pentru clienți păstrează o listă de informații despre clienți în scopul producerii de corespondență și rapoarte". Dacă baza de date este mai complexă sau este utilizată de mai multe persoane, așa cum se întâmplă adesea într-o setare de corporație, scopul poate fi cu ușurință un paragraf sau mai multe și ar trebui să includă când și cum va utiliza fiecare persoană baza de date. Ideea este de a avea o declarație bine dezvoltat misiune care poate fi menționată pe parcursul procesului de proiectare. O astfel de declarație vă ajută să vă concentrați asupra obiectivelor dvs. atunci când luați decizii.
Găsirea și organizarea informațiilor necesare
Pentru a găsi și a organiza informațiile necesare, începeți cu informațiile existente. De exemplu, puteți să înregistrați comenzile de achiziție într-un registru sau să păstrați informațiile clientului pe formulare de hârtie într-un cabinet de fișiere. Colectați documentele respective și listați fiecare tip de informații afișat (de exemplu, fiecare casetă pe care o completați într-un formular). Dacă nu aveți niciun formular existent, imaginați-vă în schimb că trebuie să proiectați un formular pentru a înregistra informațiile despre client. Ce informații ați pune în formular? Ce casete de completare ați crea? Identificați și listați fiecare dintre aceste elemente. De exemplu, să presupunem că în prezent păstrați lista de clienți pe fișele de index. Examinarea acestor fișe poate arăta că fiecare carte de vizită conține un nume, o adresă, o localitate, un stat, un cod poștal și un număr de telefon. Fiecare dintre aceste elemente reprezintă o coloană potențială dintr-un tabel.
Când pregătiți această listă, nu vă preocupați că trebuie să vă iasă perfect de la început. Mai degrabă, listați fiecare element care vă vine în minte. Dacă va mai utiliza cineva baza de date, cereți-i opinia. Puteți să rafinați lista mai târziu.
În continuare, luați în considerare tipurile de rapoarte sau corespondența pe care doriți să le produceți din baza de date. De exemplu, poate doriți ca raportul privind vânzările de produse să prezinte vânzările după regiune sau ca raportul de sinteză privind stocul să prezinte nivelurile stocului de produse. Se recomandă, de asemenea, să generați scrisori-formular pentru a le trimite către clienți care anunță un eveniment de vânzări sau oferă un bonus. Proiectați-vă raportul în minte și imaginați-vă cum ar arăta. Ce informații ați pune în raport? Listați fiecare element. Faceți același lucru pentru scrisoarea-formular și pentru orice alt tip de raport pe care anticipați că îl veți crea.
Gândindu-vă la rapoartele și la corespondența pe care doriți să le creați, veți reuși să identificați elementele de care aveți nevoie în baza de date. De exemplu, să presupunem că le oferiți clienților posibilitatea de a opta (sau nu) pentru actualizări periodice de e-mail și doriți să imprimați o listă a celor care au optat pentru aceasta. Pentru a înregistra informațiile respective, adăugați o coloană „Trimitere mesaje de e-mail” la tabelul de clienți. Pentru fiecare client, puteți să setați câmpul la Da sau Nu.
Cerința de a trimite mesaje de e-mail clienților sugerează alt element de înregistrat. Când știți că un client dorește să primească mesaje de e-mail, va trebui să știți și adresa de e-mail la care să le trimiteți. Prin urmare, trebuie să înregistrați o adresă de e-mail pentru fiecare client.
Se recomandă să construiți un prototip pentru fiecare raport sau listare de ieșire și să luați în considerare elementele de care aveți nevoie pentru a genera raportul. De exemplu, atunci când examinați o scrisoare-formular, vă vin, probabil, în minte câteva lucruri. Dacă doriți să includeți o formulă de salut adecvată: de exemplu, șirul „Dl”, „Dna” sau „Dra” care începe o formulă de salut, va trebui să creați un element de salut. De asemenea, puteți să începeți o scrisoare mai degrabă cu „Stimate domn Șerbănescu”, decât cu „Dragă Dl. Ion Șerbănescu”. Acest lucru sugerează, de obicei, că este bine să stocați numele de familie separat de prenume.
Un punct-cheie de reținut este că trebuie să fragmentați fiecare informație în părțile sale utile cele mai mici. În cazul unui nume, pentru ca numele de familie să fie ușor accesibil, va trebui să fragmentați numele de familie în două părți, Prenume și Nume de familie. Pentru a sorta un raport după numele de familie, de exemplu, este util să aveți numele de familie al clientului stocat separat. În general, dacă doriți să sortați, să căutați, să calculați sau să raportați pe baza unui element informațional, trebuie să puneți acel element în câmpul său propriu.
Gândiți-vă la întrebările la care doriți ca baza de date să răspundă. De exemplu, câte articole din produsul recomandat ați vândut luna trecută? Unde locuiesc cei mai buni clienți ai dvs.? Cine este furnizorul celui mai bine vândut produs al dvs.? Anticiparea acestor întrebări vă ajută să aveți zero elemente suplimentare de înregistrat.
După colectarea acestor informații, sunteți gata pentru următorul pas.
Împărțirea informațiilor în tabele
Pentru a împărți informațiile în tabele, alegeți entitățile sau subiectele majore. De exemplu, după găsirea și organizarea informațiilor pentru o bază de date pentru vânzarea unui produs, lista preliminară poate arăta astfel:
Entitățile majore afișate aici sunt produsele, furnizorii, clienții și comenzile. Prin urmare, se recomandă să începeți cu aceste patru tabele: unul pentru informații despre produse, unul pentru informații despre furnizori, unul pentru informații despre clienți și unul pentru informații despre comenzi. Deși acestea nu constituie o listă completă, reprezintă totuși un bun punct de plecare. Puteți continua să rafinați această listă până când veți avea o proiectare care funcționează bine.
Atunci când revizuiți prima dată lista preliminară de elemente, veți fi probabil tentați să le plasați într-un singur tabel în loc de patru, așa cum s-a indicat în exemplul anterior. Aici veți afla motivul pentru care această idee nu se recomandă. Luați în considerare tabelul afișat aici:
În acest caz, fiecare rând conține informații despre produs și despre furnizorul acestuia. Pentru că puteți avea mai multe produse de la același furnizor, informațiile despre numele și adresa furnizorului trebuie repetate de mai multe ori. Acest lucru consumă spațiu pe disc. Înregistrarea informațiilor despre furnizor o singură dată într-un tabel separat pentru Furnizori și apoi legarea acelui tabel la tabelul Produse reprezintă o soluție mult mai bună.
O a doua problemă legată de această proiectare se ivește atunci când trebuie modificate informațiile despre furnizor. De exemplu, să presupunem că trebuie să modificați adresa unui furnizor. Întrucât apare în mai multe locuri, ați putea să modificați din greșeală adresa într-un loc și să uitați să o modificați și în celelalte. Înregistrarea adresei furnizorului într-un singur loc rezolvă problema.
Când proiectați baza de date, încercați întotdeauna să înregistrați fiecare fapt doar o singură dată. Dacă vă dați seama că repetați aceeași informație în mai mult de un singur loc, cum ar fi adresa unui anumit furnizor, plasați această informație într-un tabel separat.
În fine, să presupunem că există un singur produs furnizat de Coho Winery și că doriți să ștergeți produsul, dar să păstrați informațiile despre numele și adresa furnizorului. Cum puteți să ștergeți înregistrarea produsului fără a pierde însă informațiile despre furnizor? Nu puteți. Întrucât fiecare înregistrare conține informații despre un produs, precum și informații despre un furnizor, nu puteți să ștergeți una fără a o șterge și pe cealaltă. Pentru a păstra aceste informații separat, trebuie să împărțiți un tabel în două: un tabel pentru informații despre produs și alt tabel pentru informații despre furnizor. Ștergerea unei înregistrări de produs ar trebui însemne numai ștergerea informațiilor despre produs, nu și ștergerea informațiilor despre furnizor.
După ce ați ales subiectul care este reprezentat printr-un tabel, în coloanele din acel tabel ar trebui să fie stocate numai informații despre subiect. De exemplu, în tabelul despre produse ar trebui să fie stocate numai informații despre produse. Întrucât adresa furnizorului este o informație despre furnizor și nu despre produs, aceasta face parte din tabelul despre furnizor.
Transformarea elementelor cu informații în coloane
Pentru a determina coloanele dintr-un tabel, decideți ce informații sunt necesare pentru a urmări subiectul înregistrat în tabel. De exemplu, pentru tabelul Clienți, informații precum Numele, Adresa, Localitatea, Județul, Codul, Trimitere e-mail, Formula de salut și Adresa de e-mail ar putea constitui un bun punct de plecare pentru lista de coloane. Fiecare înregistrare în tabel conține același set de coloane, astfel încât să puteți stoca Numele, Adresa, Localitatea, Județul, Codul, Trimitere e-mail, Formula de salut și Adresa de e-mail pentru fiecare înregistrare. De exemplu, coloana pentru adresă conține adresele clienților. Fiecare înregistrare conține date despre un client, iar câmpul adresă conține adresa acelui client.
După ce ați determinat setul inițial de coloane pentru fiecare tabel, puteți să rafinați coloanele. De exemplu, se recomandă să stocați numele clientului sub forma a două coloane separate: prenumele și numele de familie, astfel încât să puteți să sortați, să căutați și să indexați numai acele coloane. În mod similar, adresa constă de fapt din cinci componente separate, adresa, localitatea, județul, codul poștal și țara/regiunea și se recomandă, de asemenea, să stocați aceste informații în coloane separate. Dacă doriți să efectuați o operație de căutare, de filtrare sau de sortare după județ, de exemplu, aveți nevoie de informații despre județ stocate într-o coloană separată.
De asemenea, luați în considerare dacă baza de date va conține informații numai de origine națională sau și de origine internațională. De exemplu, dacă intenționați să stocați adrese internaționale, se recomandă să aveți o coloană pentru Regiune în loc de Județ, întrucât o astfel de coloană poate cuprinde informații și despre județe, dar și despre regiunile din alte țări/zone. În mod similar, puteți utiliza Cod Poștal/Zip dacă urmează să stocați adrese internaționale.
Lista următoare afișează câteva sfaturi pentru stabilirea coloanelor.
-
Nu includeți date calculate
În majoritatea cazurilor, nu trebuie să stocați în tabele rezultatul unor calcule. În schimb, puteți dispune ca Access să efectueze calculele când doriți să vedeți rezultatul. De exemplu, să presupunem că există un raport despre Produse comandate care afișează subtotalul de unități comandate pentru fiecare categorie de produse din baza de date. Cu toate acestea, nu există nicio coloană cu subtotalul Unităților comandate în niciun tabel. În schimb, tabelul Produse include o coloană de Unități comandate, care stochează unitățile comandate pentru fiecare produs. Folosind acele date, Access calculează subtotalul de fiecare dată când imprimați raportul. Subtotalul propriu-zis nu trebuie stocat într-un tabel.
-
Stocarea de informații în cele mai mici părți logice ale sale
Este posibil să fiți tentat să aveți un singur câmp pentru nume complete sau pentru nume de produse, împreună cu descrierile produselor. Atunci când combinați mai multe tipuri de informații într-un câmp, este dificil să regăsiți date individuale mai târziu. Încercați să împărțiți informațiile în părți logice; de exemplu, creați câmpuri separate pentru nume și prenume sau pentru numele, categoria și descrierea produsului.
După ce ați rafinat coloanele de date din fiecare tabel, sunteți pregătit să alegeți cheia primară a fiecărui tabel.
Specificarea cheilor primare
Fiecare tabel trebuie să includă o coloană sau un set de coloane care identifică în mod unic fiecare rând stocat în tabel. Acesta este, adesea, un număr unic de identificare, cum ar fi numărul ID al unui angajat sau un număr de serie. În terminologia bazelor de date, această informație se numește Cheia primară a tabelului. Access utilizează câmpurile cheie primară pentru a asocia rapid date din mai multe tabele și a reuni datele pentru dvs.
Dacă aveți deja un identificator unic pentru un tabel, cum ar fi un număr de produs, care identifică în mod unic fiecare produs din catalogul dvs., puteți utiliza identificatorul respectiv drept cheie primară a tabelului, dar numai dacă valorile din această coloană vor fi întotdeauna diferite pentru fiecare înregistrare. Nu puteți avea valori dublate într-o cheie primară. De exemplu, nu utilizați numele persoanelor drept cheie primară, pentru că numele nu sunt unice. Ați putea avea cu ușurință două persoane cu același nume în același tabel.
O cheie primară trebuie să aibă întotdeauna o valoare. Dacă valoarea unei coloane poate deveni neatribuită sau necunoscută (valoare care lipsește) la un moment dat, ea nu poate fi utilizată drept componentă într-o cheie primară.
Trebuie să alegeți întotdeauna o cheie primară a cărei valoare nu se va modifica. Într-o bază de date care utilizează mai multe tabele, cheia primară a unui tabel poate fi utilizată ca referință în alte tabele. Dacă cheia primară se modifică, modificarea trebuie să se aplice, de asemenea, oriunde este se face referire la cheie. Utilizarea unei chei primare care nu se va modifica reduce posibilitatea ca cheia primară să nu mai fie sincronizată cu alte tabele care fac referire la ea.
Adesea, un număr arbitrar unic este utilizat drept cheie primară. De exemplu, puteți atribui fiecărei comenzi un număr de comandă unic. Scopul numărului comenzii este doar de a identifica o comandă. Odată atribuit, aceasta nu se modifică niciodată.
Dacă nu aveți în minte o coloană sau un set de coloane care pot constitui o cheie primară bună, luați în considerare utilizarea unei coloane care are tipul de date Numerotare automată. Atunci când utilizați tipul de date Numerotare automată, Access atribuie automat o valoare pentru dvs. Un astfel de identificator este lipsit de informație; nu conține informații factuale care să descrie rândul pe care îl reprezintă. Identificatorii lipsiți de informație sunt ideali pentru a fi utilizați drept cheie primară, deoarece nu se modifică. O cheie primară care conține informații despre un rând, numărul de telefon sau numele unui client, de exemplu, este mai probabil să se modifice, întrucât informațiile factuale propriu-zise se pot modifica.
1. O coloană setată la tipul de date Numerotare automată poate constitui adesea o cheie primară bună. Două ID-uri de produs nu sunt niciodată identice.
În unele cazuri, se recomandă să utilizați două sau mai multe câmpuri care, împreună, asigură cheia primară a unui tabel. De exemplu, un tabel Detalii comandă care stochează elemente de linie pentru comenzi poate utiliza două coloane în cheia sa primară: ID comandă și ID produs. Atunci când o cheie primară utilizează mai multe coloane, se mai numește cheie compusă.
Pentru baza de date pentru vânzarea unui produs, puteți să creați o coloană Numerotare automată pentru fiecare dintre tabele pentru a servi drept cheie primară: IDProdus pentru tabelul Produse, IDComandă pentru tabelul Comenzi, IDClient pentru tabelul clienți și IDFurnizor pentru tabelul Furnizori.
Crearea relațiilor între tabele
După ce ați împărțit informațiile în tabele, aveți nevoie de o modalitate de a reuni aceste informații în moduri semnificative. De exemplu, următorul formular include informații din mai multe tabele.
1. Informațiile din acest formular provin din tabelul Clienți...
2. ...tabelul Angajați...
3. …tabelul Comenzi...
4. …tabelul Produse...
5. …și tabelul Detalii comandă.
Access este un sistem de gestionare a bazelor de date relaționale. Într-o bază de date relațională, împărțiți informațiile în tabele separate, bazate pe subiect. Apoi, utilizați relațiile în tabele pentru a reuni informațiile, după cum este necesar.
Crearea unei relații unu-la-mai-mulți
Luați în considerare acest exemplu: tabelele Furnizori și Produse din baza de date despre comenzile de produs. Un furnizor poate furniza orice număr de produse. Prin urmare, pentru orice furnizor reprezentat în tabelul Furnizori pot exista mai multe produse reprezentate în tabelul Produse. Relația dintre tabelul Furnizori și tabelul Produse este, prin urmare, o relație de tip unu-la-mai-mulți.
Pentru a crea o relație unu-la-mai-mulți în proiectarea bazei de date, luați cheia primară din partea „unu” a relației și adăugați-o ca o coloană sau coloane suplimentare la tabelul din partea „mai-mulți” a relației. În acest caz, de exemplu, adăugați coloana ID furnizor din tabelul Furnizori la tabelul Produse. Access poate apoi să utilizeze numărul ID al furnizorului din tabelul Produse pentru a găsi furnizorul corect pentru fiecare comandă.
Coloana ID furnizor din tabelul Produse se numește cheie străină. O cheie străină este o cheie primară a altui tabel. Coloana ID furnizor din tabelul Produse este o cheie străină, întrucât este și cheia primară din tabelul Furnizori.
Furnizați baza pentru asocierea de tabele corelate, stabilind perechi de chei primare și chei străine. Dacă nu sunteți sigur ce tabele trebuie să partajeze o coloană comună, prin identificarea unei relații unu-la-mai-mulți se asigură faptul că cele două tabele implicate necesită, într-adevăr, o coloană partajată.
Crearea unei relații mai-mulți-la-mai-mulți
Luați în considerare relația dintre tabelul Produse și tabelul Comenzi.
O singură comandă poate include mai mult de un produs. Pe de altă parte, un singur produs poate apărea în mai multe comenzi. De aceea, pentru fiecare înregistrare din tabelul Comenzi pot exista mai multe înregistrări în tabelul Produse. În plus, pentru fiecare înregistrare din tabelul Produse, pot exista mai multe înregistrări în tabelul Comenzi. Acest tip de relație este denumită relație mai-mulți-la-mai-mulți, întrucât pentru fiecare produs pot exista mai multe comenzi, iar pentru orice comandă pot exista mai multe produse. Rețineți că, pentru a detecta existența relațiilor mai-mulți-la-mai-mulți în tabelele dvs., este important să luați în considerare ambele părți ale relației.
Subiectele celor două tabele, comenzile și produsele, au o relație de tip mai-mulți-la-mai-mulți. Acest lucru prezintă o problemă. Pentru a înțelege problema, imaginați-vă ce s-ar întâmpla dacă ați încerca să creați relații între cele două tabele, adăugând câmpul ID Produs în tabelul Comenzi. Pentru a avea mai mult de un produs pentru fiecare comandă, aveți nevoie de mai multe înregistrări în tabelul Comenzi pentru fiecare comandă. Ați repeta informații despre comenzi pentru fiecare rând care se referă la o singură comandă, rezultând o proiectare ineficientă care ar putea duce la date incorecte. Veți întâmpina aceeași problemă dacă puneți câmpul ID comandă din tabelul Produse: veți avea mai mult de o înregistrare în tabelul Produse pentru fiecare produs. Cum rezolvați această problemă?
Răspunsul este să creați un al treilea tabel, denumit adesea tabel de asociere, care împarte relația mai-mulți-la-mai-mulți în două relații unu-la-mai-mulți. Inserați cheia primară din fiecare dintre cele două tabele în cel de-al treilea tabel. În consecință, al treilea tabel înregistrează fiecare ocurență sau instanță a relației.
Fiecare înregistrare din tabelul Detalii comandă reprezintă un articol de linie pe o comandă. Cheia primară a tabelului Detalii comandă constă din două câmpuri: cheile străine de la tabelele Comenzi și Produse. Numai câmpul ID comandă singur nu funcționează ca o cheie primară pentru acest tabel, deoarece o singură comandă poate avea mai multe articole de linie. ID comandă se repetă pentru fiecare articol de linie pe o comandă, astfel încât câmpul nu conține valori unice. Utilizarea câmpului ID produs singur nu se recomandă întrucât un singur produs poate apărea în mai multe comenzi diferite. Dar luate împreună cele două câmpuri produc întotdeauna o valoare unică pentru fiecare înregistrare.
În baza de date cu vânzările de produse, tabelul Comenzi și tabelul Produse nu sunt legate între ele direct. În schimb, sunt corelate indirect prin tabelul Detalii comandă. Relația mai-mulți-la-mai-mulți între comenzi și produse este reprezentată în baza de date utilizând două relații unu-la-mai-mulți:
-
Tabelul Comenzi și tabelul Detalii comandă au o relație unu-la-mai-mulți. Fiecare comandă poate avea mai multe elemente de linie, dar fiecare element de linie este conectat la o singură comandă.
-
Tabelul Produse și tabelul Detalii comandă au o relație de unu-la-mai-mulți. Fiecare produs poate avea mai multe elemente de linie asociate cu el, dar fiecare element de linie se referă la un singur produs.
Din tabelul Detalii comandă, puteți să determinați toate produsele pentru o anumită comandă. De asemenea, puteți determina toate comenzile pentru un anumit produs.
După încorporarea tabelului Detalii comandă, lista de tabele și câmpuri ar putea arăta astfel:
Crearea unei relații de tip unu-la-unu
Un alt tip de relație este relația de tip unu-la-unu. De exemplu, să presupunem că trebuie să înregistrați unele informații speciale suplimentare despre produs care vă vor trebui rar sau care se aplică doar la câteva produse. Întrucât nu aveți nevoie des de aceste informații și întrucât stocarea informațiilor din tabelul Produse ar avea ca rezultat un spațiu gol pentru fiecare produs la care nu se aplică, le veți plasa într-un tabel separat. Asemenea tabelului Produse, utilizați ID produs drept cheie primară. Relația dintre acest tabel suplimentar și tabelul Produs este o relație de tip unu-la-unu. Pentru fiecare înregistrare din tabelul Produse, există o singură înregistrare care se potrivește în tabelul suplimentar. Când identificați o astfel de relație, ambele tabele trebuie să aibă un câmp comun.
Atunci când este necesară o relație de tip unu-la-unu în baza de date, luați în considerare dacă puteți pune informațiile din cele două tabele împreună într-un tabel. Dacă nu doriți să faceți acest lucru dintr-un anumit motiv, întrucât ar putea rezulta în mult spațiu necompletat, lista următoare afișează cum s-ar reprezenta relația în proiectarea dvs.:
-
Dacă cele două tabele au același subiect, vă puteți configura probabil relația utilizând aceeași cheie primară în ambele tabele.
-
Dacă cele două tabele au subiecte diferite cu chei primare diferite, alegeți unul dintre tabele (oricare) și inserați cheia sa primară în celălalt tabel ca o cheie străină.
Determinarea relațiilor dintre tabele vă ajută să vă asigurați că aveți tabelele și coloanele corecte. Atunci când există o relație unu-la-unu sau unu-la-mai-mulți, tabelele implicate trebuie să partajeze o coloană sau mai multe coloane comune. Atunci când există o relație mai-mulți-la-mai-mulți, este necesar un al treilea tabel pentru a reprezenta relația.
Procesul de rafinare a proiectării
Odată ce aveți tabelele, câmpurile și relațiile necesare, ar trebui să creați și să populați tabele cu date eșantion și să încercați să lucrați cu informațiile: crearea interogărilor, adăugarea de înregistrări noi și așa mai departe. Astfel, veți evidenția eventualele probleme, de exemplu, poate fi necesar să adăugați o coloană pe care ați uitat să o inserați în timpul fazei de proiectare sau este posibil ca un tabel să trebuiască împărțit în două tabele pentru a elimina dublarea.
Verificați dacă puteți să utilizați baza de date pentru a obține răspunsurile dorite. Creați schițe brute pentru formulare și rapoarte și verificați dacă acestea afișează datele așteptate. Căutați dublurile inutile de date și, atunci când găsiți vreuna, modificați proiectarea pentru a o elimina.
Pe măsură ce încercați baza de date inițiale, veți descoperi probabil că se pot face îmbunătățiri. Iată câteva lucruri de verificat:
-
Ați uitat o coloană? Dacă da, se încadrează informațiile în tabelele existente? Dacă sunt informații despre altceva, poate fi necesar să creați alt tabel. Creați o coloană pentru fiecare informație pe care trebuie să o urmăriți. Dacă informațiile nu pot fi calculate din alte coloane, probabil veți avea nevoie de o nouă coloană.
-
Există coloane inutile deoarece pot fi calculate din câmpurile existente? Dacă o informație poate fi calculată din alte coloane existente, de exemplu un preț redus calculat din prețul de vânzare cu amănuntul, se recomandă, de obicei, să faceți acest lucru și să evitați să creați o nouă coloană.
-
Introduceți în mod repetat informații dublate în unul dintre tabele? Dacă da, probabil că trebuie să împărțiți tabelul în două tabele care au o relație unu-la-mai-mulți.
-
Aveți tabele cu multe câmpuri, un număr limitat de înregistrări și mai multe câmpuri goale în înregistrările individuale? Dacă da, gândiți-vă la reproiectarea tabelului, astfel încât să aibă mai puține câmpuri și mai multe înregistrări.
-
A fost fiecare informație divizată în cele mai mici părți utile ale sale? Dacă trebuie să raportați, să sortați, să căutați sau să calculați o informație, puneți acea informație într-o coloană proprie.
-
Conține fiecare coloană un fapt despre subiectul tabelului? Dacă o coloană nu conține informații despre subiectul tabelului, înseamnă că face parte dintr-un tabel diferit.
-
Sunt toate relațiile dintre tabele reprezentate fie prin câmpuri comune, fie printr-un al treilea tabel? Relațiile de tip unu-la-unu și unu-la-mai-mulți necesită coloane comune. Relațiile mai-mulți-la-mai-mulți necesită un al treilea tabel.
Rafinarea tabelului Produse
Să presupunem că fiecare produs din baza de date pentru vânzări se încadrează într-o categorie generală, cum ar fi băuturi, condimente sau fructe de mare. Tabelul Produse ar putea include un câmp care afișează categoria fiecărui produs.
Să presupunem că după examinarea și rafinarea proiectării bazei de date, vă hotărâți să stocați o descriere a categoriei împreună cu numele său. Dacă adăugați un câmp Descrierea categoriei la tabelul Produse, trebuie să repetați descrierea fiecărei categorii pentru fiecare produs care se încadrează în acea categorie, iar aceasta nu este o soluție bună.
Se recomandă, în schimb, să transformați Categorii într-un subiect nou de urmărit pentru baza de date, cu propriul tabel și propriile chei primare. Apoi, puteți să adăugați cheia primară din tabelul Categorii la tabelul Produse ca o cheie străină.
Tabelele Categorii și Produse au o relație unu-la-mai-mulți: o categorie poate include mai multe produse, dar un produs poate aparține unei singure categorii.
Când examinați structurile de tabel, căutați grupurile care se repetă. De exemplu, să luăm în considerare un tabel care conține următoarele coloane:
-
ID produs
-
Nume
-
ID1 produs
-
Nume1
-
ID2 produs
-
Nume2
-
ID3 produs
-
Nume3
Aici, fiecare produs este un grup de coloane care se repetă, care diferă de celelalte doar prin adăugarea unui număr la sfârșitul numelui coloanei. Atunci când vedeți coloane numerotate astfel, ar trebui să revizuiți proiectarea.
O astfel de proiectare prezintă mai multe probleme. Pentru începători, vă obligă să plasați o limită superioară la numărul de produse. Când depășiți limita, trebuie să adăugați un nou grup de coloane la structura de tabel, care este o activitate administrativă principală.
O altă problemă este că furnizorii care au mai puțin decât numărul maxim de produse vor pierde spațiu, întrucât coloanele suplimentare vor fi necompletate. Cea mai gravă problemă în cazul acestei proiectări este că îngreunează efectuarea multor activități precum sortarea sau indexarea tabelului după ID produs sau nume.
Ori de câte ori vedeți grupuri care se repetă, examinați proiectarea îndeaproape, luând în considerare posibilitatea scindării tabelului în două. În exemplul de mai sus este mai bine să utilizați două tabele, unul pentru furnizori și unul pentru produse, legate prin ID furnizor.
Aplicarea regulilor de normalizare
Puteți aplica regulile de normalizare a datelor (denumite uneori doar reguli de normalizare) ca pas următor în proiectarea dvs. Utilizați aceste reguli pentru a vedea dacă tabelele sunt structurate corect. Procesul de aplicare a regulilor la proiectarea bazei de date se numește normalizare a bazei de date sau doar normalizare.
Normalizarea este foarte utilă după ce ați reprezentat toate informațiile și ați ajuns la o proiectare preliminară. Scopul este acela de a vă ajuta să vă asigurați că ați repartizat informațiile în tabele corespunzătoare. Normalizarea însă nu vă poate asigura că dispuneți de toate elementele de date corecte cu care să începeți.
Aplicați regulile succesiv, la fiecare pas asigurându-vă că proiectul ajunge la una dintre cele cunoscute drept "forme normale". Cinci forme normale sunt acceptate pe scară largă - prima formă normală prin intermediul celei de-a cincea forme normale. Acest articol se extinde pe primele trei, deoarece acestea sunt toate că este necesar pentru majoritatea proiectări de baze de date.
Prima formă normală
Conform primei forme normale, la fiecare intersecție de rânduri și coloane din tabel există o singură valoare și niciodată o listă de valori. De exemplu, nu puteți avea un câmp denumit Preț în care să puteți plasa mai mult de un Preț. Dacă vă gândiți la fiecare intersecție de rânduri și coloane ca la o celulă, fiecare celulă poate conține doar o singură valoare.
A doua formă normală
În cazul celei de-al doua forme normale, fiecare coloană non-cheie trebuie să fie complet dependentă de cheia primară întreagă, nu doar de o parte din cheie. Această regulă se aplică atunci când aveți o cheie primară care constă din mai multe coloane. De exemplu, să presupunem că aveți un tabel care conține următoarele coloane, în care ID comandă și ID produs alcătuiesc cheia primară:
-
ID comandă (cheia primară)
-
ID produs (cheia primară)
-
Nume produs
Această proiectare încalcă a doua formă normală, întrucât Numele produsului este dependent de ID produs, dar nu de ID comandă, prin urmare nu este dependent de întreaga cheie primară. Trebuie să eliminați Nume produs din tabel. Acesta face parte dintr-un tabel diferit (Produse).
A treia formă normală
Conform celei de-a treia forme normale, nu doar fiecare coloană non-cheie trebuie să depindă de întreaga cheie primară, ci coloanele non-cheie trebuie să fie independente una de alta.
Cu alte cuvinte, fiecare coloană non-cheie trebuie să fie dependentă exclusiv de cheia primară și nu de altceva. De exemplu, să presupunem că aveți un tabel care conține următoarele coloane:
-
IDProdus (cheia primară)
-
Nume
-
Preț de vânzare sugerat
-
Reducere
Să presupunem că Reducerea depinde de prețul de vânzare cu amănuntul sugerat. Acest tabel încalcă cea de-a treia formă normală, deoarece o coloană non-cheie, Reducere, depinde de altă coloană non-cheie, Preț de vânzare sugerat. Independența coloanei înseamnă că ar trebui să puteți modifica orice coloană non-cheie fără a afecta nicio altă coloană. Dacă modificați o valoare în câmpul Preț de vânzare sugerat, Reducerea ar trebui să se modifice în mod corespunzător, încălcând prin urmare acea regulă. În acest caz, ar trebui să mutați Reducere în alt tabel, care are cheia în Preț de vânzare sugerat.