Вы находитесь на странице: 1из 10

INFORMATIC*I*

IF.02. Structurarea bazelor de date

Capitolul IF.02. Structurarea bazelor de date


Cuvinte-cheie:
Normalizare, prima form normal, a doua form
normal, a treia form normal, cheie candidat,
relatie 1 la 1, relaie 1 la n, relaie m la n

IA.02.1. Scurt istoric


n anii '60, A.F. Codd, cercettor la I.B.M., a studiat posibilitatea ameliorrii modului de
stocare a datelor n fiiere deoarece existena informaiilor redundante predispunea la erori greu de
depistat. n 1970 a publicat un articol, "A Relational Model of Data for Large Shared Databanks"
care a schimbat complet concepiile privind structura bazelor de date. Un programator, Larry
Ellison, sesiznd importana practic a teoriei lui Codd, a realizat un produs software, Oracle, i o
firm pentru promovarea acestuia, Oracle Corporation. L. Ellison a devenit astfel unul dintre cei
mai bogai oameni de pe planet.
IA.02.2. Anomalii rezolvate de modelul raional
S presupunem c ntr-o bibliotec, bibliotecara pstreaz evidena crilor cu ajutorul
calculatorului, ntr-un fiier pentru cri avnd urmtoarea structur:
NrInv

Autor

Titlu

Editura

Locul

Anul apariiei

Avnd n vedere posibilitile unui calculator legate de parcurgerea fiierelor, s-ar prea c
vor putea fi realizate uor o mulime de rapoarte. n timpul exploatrii pe calculator a fiierului s-au
depistat ns probleme cauzate de modul de structurare a informaiilor.

Anomalia la actualizarea datelor:

Conducerea bibliotecii a impus ca numele autorului s fie scris n alt mod, conform unui
format diferit.. Pentru autorii mai puin prolifici problema nu e dificil, dar unii autori se regsesc
n fiier de zeci de ori. Modificarea n zeci de locuri a aceluiai nume poate conduce la erori greu
de depistat. Aceast anomalie poart numele de anomalia la actualizare. Pentru eliminarea ei,
modelul relaional propune structurarea informaiilor n dou tabele: un tabel cu numele autorilor i
un tabel cu cri:

-1-

INFORMATIC*I*

CodAutor

IF.02. Structurarea bazelor de date

Autor

NrInv

CodAutor

Titlu

Editura

Locul

Anul apariiei

n momentul nregistrrii unei cri, dac autorul exista deja n tabelul de autori, i se
noteaz codul care apoi este folosit la nregistrarea crii. Dac autorul nu exist n fiierul de
autori, el va fi adugat, n momentul adugrii atribuindu-se un cod. n acest mod, modificarea
numelui autorilor se realizeaz simplu, numele fiecrui autor aprnd o singur dat.

Anomalia la tergerea datelor:

Aceast anomalie poate aprea dac se cere tergerea din fiierul de cri a nregistrrii
corespunznd unei cri pierdute. Odat cu titlul crii se terge i editura care a publicat-o.
Ulterior, dac se dorete realizarea unui raport privind editurile cu care biblioteca are relaii, n
raport nu va mai figura editura care a realizat cartea suprimat. Acest anomalie poart numele de
anomalia la tergerea datelor.

Anomalia la adugarea datelor:

Dac se dorete nregistrarea n baza de date a bibliotecii a datelor unei noi edituri, n
modelul elaborat acest lucru nu este posibil fr adugarea unei prime cri achiziionate de la
aceasta. Se spune atunci c baza prezint o anomalie la adugarea datelor.

IA.02.3. Normalizarea
Modelul relaional elaborat de Codd propune soluii pentru eliminarea acestor anomalii.
Procesul de structurare a bazei de date n vederea eliminrii anomaliilor sesizate poart numele de
normalizare. Normalizarea const n aducerea bazei de date ntr-una dintre formele normale, cele
mai importante fiind cele trei forme prezentate n continuare.
-

Prima form normal (1NF)

Prima form normal cere ca tabelele n care sunt pstrate informaiile s satisfac
urmtoarelor cerine:
a. Fiecare coloan trebuie s pstreze o informaie elementar (care nu se mai poate
descompune). n exemplul prezentat, dac o carte are mai muli autori coloana
CodAutor ar trebui s conin mai multe coduri, deci acest mod de structurare nu
respect aceast cerin.
b. Fiecare coloan trebuie s aib un nume unic;
c. Tabelul nu poate avea dou linii coninnd informaii identice. Fiecare tabel din
componena unei baze de date normalizate conine o cheie primar. O cheie primar este
un cmp care are valori distincte pentru toate liniile tabelului. Uneori, mai rar, cheia
primar este obinut prin alturarea valorilor dintr-un ansamblu de mai multe cmpuri.
-2-

INFORMATIC*I*

IF.02. Structurarea bazelor de date

Pot exista n baza de date tabele care nu au o cheie primar. Tabelele pentru care s-a
definit o cheie primar respect, de regul, cerina enunat.
d. ntr-un tabel nu se admit grupuri de informaii care se repet. n exemplul dat Editura i
Locul formeaz un grup care probabil se repet pentru toate crile provenind de la
aceeai editur.
-

A doua form normal (2NF)

A doua form normal se refer la tabele ale bazei de date care respect cerinele primei
forme dar au cmpuri care nu depind funcional de cheia primar. De exemplu urmtorul tabelul de
comenzi :
Comanda
1
2
3
4

Client
Leonida SRL
Suprem ABC S.A.
Transilvania grup S.A.
Rodna Trans S.R.L.

Pers. de contact
Marcel Bihoreanu
Ioan Moldovan
Vasile Pop
Carmen Ionescu

Total
4023.30
2048.50
1100.05
834.00

n exemplul dat, cheia primar este cmpul Comanda. Acest cmp nu este ntr-o relaie funcional
cu Pers. de contact, deoarece n cazul n care o firm a emis mai multe comenzi cmpul Pers. de
contact va conine n mod repetat aceeai valoare.
n acest caz aducerea bazei de date n a doua form normal va conduce la definirea a dou tabele,
unul pentru comenzi i unul care asociaz fiecrei firme o persoan de contact.

Comanda
1
2
3
4

Client
Leonida SRL
Suprem ABC S.A.
Transilvania grup S.A.
Rodna Trans S.R.L.

Client
Leonida SRL
Suprem ABC S.A.
Transilvania grup S.A.
Rodna Trans S.R.L.
-

Total
4023.30
2048.50
1100.05
834.00

Pers. de contact
Marcel Bihoreanu
Ioan Moldovan
Vasile Pop
Carmen Ionescu

A treia form normal (3NF)

Pentru a fi n a treia form normal un tabel trebuie s fie n a doua form normal i, n plus, toate
cmpurile care nu depind direct de cheia primar trebuie eliminate.
Exemplu de tabel care nu este n forma a treia normal:
-3-

INFORMATIC*I*

IF.02. Structurarea bazelor de date

Societate
Leonida SRL
Suprem ABC S.A.
Transilvania grup S.A.
Rodna Trans S.R.L.

Ora
Galati
Bacau
Sibiu
Bistrita

Cod potal
21450
11760
51280
23413

Judet
Galati
Bacau
Sibiu
Bistrita Nasaud

n exemplu cmpul Judet depinde de Ora si nu de Societate, deci trebuie eliminat. Pentru
memorarea judeelor va trebui adugat un tabel care s conin lista oraelor i, pentru fiecare ora,
judeul n care este situat.
Coloanele unui tabel care satisface a treia form normal conin informaii care depind direct de
cheia primar.

IA.02.4. Relaii ntre tabelele bazei de date


Pentru a satisface cerinele impuse de cele 3 forme normale prezentate, informaiile sunt de
regul pstrate ntr-un ansamblu de tabele ntre care exist relaii de diferite tipuri.
1. Relaii 1 la mai muli (1 la n, one to many)
Dac n exemplul considerat datele privind o editur sunt pstrate ntr-un fiier iar crile
sunt nregistrate n alt fiier, ntre cele dou tabele se stabilete o dependen de tip "unul la mai
muli".

cod editur
Edituri

CodE

Nume

Adresa

Telefon
editura

NrInv

CodA

Titlu

CodE

Anul

cod autor

carte

Acest tip de relaie este cel mai frecvent ntlnit i st la baza modelului relaional elaborat
de Codd.
Cheile primare din cele dou tabele sunt CodE pentru Edituri i NrInv pentru Cri. n
tabelul de cri, CodE i CodA (cod autor) sunt chei strine. O cheie strin dintr-un tabel A
-4-

INFORMATIC*I*

IF.02. Structurarea bazelor de date

permite regsirea unei linii dintr-un tabel asociat, B. n tabelul asociat, B, cheia strin din tabelul A
este de regul cheie primar. n cazul dat, cheia strin CodA permite regsirea n tabelul de autori a
numelui acestuia iar cheia strin CodE permite gsirea numelui editurii care a publicat cartea.
Observaie : Tabele ca de exemplu Edituri pot conine cmpuri care au n mod evident valori
distincte pentru toate articolele din tabel. De exemplu Numele sau Telefon. n teoria bazelor de date
astfel de cmpuri sunt denumite chei candidate, deoarece ar putea fi chei primare.
2. Relaii 1 la 1 (one to one)
O relaie de tipul 1 la 1 apare n cazul n care unei linii dintr-un tabel i corespunde o singur
linie n tabelul cu care acesta este n legtur.
n cazul n care fiecrei nregistrri dintr-un tabel i corespunde o nregistrare n al doilea
tabel nu este necesar nregistrarea informaiilor n dou tabele separate. Tabelele separate sunt
create n cazul n care nu toate liniile primului tabel au corespondent n al doilea tabel.
Exemplu:
Se consider perechea de tabele din exemplul de mai jos. Aceasta conine datele angajailor
unei companii i numele soilor / soiilor angajailor.
Angajati

Soti

Cod_ang

Nume

Prenume

Nr_pers

Nume

Prenume

Cod_ang

12

Ionescu

Valer

101

Pop

Ioan

13

13

Pop

Diana

103

Ionescu

Lucia

12

14

Popescu

Marius

Se observ c angajatul de la poziia 14 nu are corespondent n tabelul Soti.


3. Relaii mai muli la mai muli (m la n, many to many)
O relaie de acest tip apare n exemplul dat ntre tabelul de autori i cel de cri. Astfel un
scriitor poate fi autor la mai multe cri iar o carte poate avea mai muli autori (CodA_2 respectiv
NrInv_3 n exemplul din schem).
Autori

Cri

CodA_1

NrInv_1

CodA_2

NrInv_2

CodA_3

NrInv_3

CodA_4

NrInv_4

CodA_5

NrInv_5

CodA_6

NrInv_6

CodA_7

NrInv_7
NrInv_8
NrInv_9

-5-

INFORMATIC*I*

IF.02. Structurarea bazelor de date

n astfel de situaii se va proceda la crearea unui tabel suplimentar, de legtur, care va


transforma relaia evideniat (many to many) n relaii one to many. Fiecare articol din tabelul de
legtur va conine o pereche de chei strine, una fiind cheie primar n primul tabel i una n al
doilea tabel:
Autori

Tab. de legtur

CodA_1

Cri

CodA_2

NrInv_1

NrInv _1

CodA_2

CodA_2

NrInv _3

NrInv _2

CodA_3

CodA_3

NrInv _3

NrInv _3

CodA_4

CodA_6

NrInv _3

NrInv _4

CodA_5

CodA_2

NrInv _8

NrInv _5

CodA_6

NrInv _6

CodA_7

NrInv _7
NrInv _8

IA.02.5. Aplicaii
1. Pornii aplicaia Oracle SQL Developer i creai n schema biblio urmtoarele tabele:
cititori
cod_cit
number (4, 0)
cnp
number (13, 0)
nume
varchar2 (30)
prenume
varchar2 (20)
localitatea
varchar2 (30)
judetul
varchar2 (20)
adresa
varchar2 (80)
telefon
number (10, 0)
e_mail
varchar2 (50)
cheie primar : cod_cit

cod_carte
cod_autor

autcarti
number (4, 0)
number (4, 0)

chei strine : cod_carte, cod_autor

imprumut
cod_carte
number (4, 0)
cod_cit
number (4, 0)
data_imprumut
date
data_rest
date
chei strine : cod_carte, cod_cit

Obs.
e-mail-ul poate fi null
data_rest poate fi null
-6-

INFORMATIC*I*

IF.02. Structurarea bazelor de date

formatul datei este ZZ-LLL-AA, de ex. 01-OCT-2006


2. Introducei n aceste tabele urmtoarele nregistrri:

- n tabelul cititori:
1 || 1246845691231 || Popescu || Marin || Turda || Cluj || str. Mica, nr. 123 || 0264122112 || popescu@personal.ro
2 || 2342356786431 || Maniu || Laura || Dej || Cluj || str. Zambilelor, nr. 321 || 0744123456 || laura_maniu@yahoo.com
3 || 2897654356789 || Rotaru || Clin || Sighisoara || Mure || str. Grii, nr. 43 || 0265012021 || calinrotaru@personal.ro

- n tabelul autcarti:
(1; 1), (2; 2), (3; 3), (4; 4)

- n tabelul imprumut:
1; 1; 10 octomrie 2001; 15 octombrie 2001
1; 2; 10 februarie 2007; etc.

3. Realizai o copie a schemei biblio dup modelul urmtor:


Selectai n Oracle SQL Developer opiunea Tools / Database Export:

n fereastra afiat (pasul 1) selectai schema i indicai fiierul care va conine


copia:

-7-

INFORMATIC*I*

IF.02. Structurarea bazelor de date

n paii urmtori (2 5) selectai butonul Next fr a modifica opiunile implicite:

-8-

INFORMATIC*I*

IF.02. Structurarea bazelor de date

Pentru verificarea salvrii schemei tergei fiierele definite anterior. Comanda de


tergere a unui tabel este DROP i poate fi aceesat pornind de la opiunea Table din
meniul contextual aferent tabelului de suprimat, ca n exemplul urmtor:

Observaie: Stergerea se va realiza ntr-o ordine permis de integritatea referenial. n exemplul dat
se ncepe cu tabelul Copii si apoi se terge tabelul Angajati.
Deschidei fiierul care conine salvarea realizat (File / Open):

-9-

INFORMATIC*I*

IF.02. Structurarea bazelor de date

Executai comenzile din fiierul deschis selectnd butonul evideniat n inaginea de


mai jos:

Observaie: Aplicaia va cere indicarea conexiuni folosite la restaurarea obiectelor din fiierul de
comenzi:

Pentru finalizarea operaiilor se apas butonul evideniat n imaginea urmtoare


(Commit) . Dup deconectarea la serve i reconectare, tabelele terse anterior reapar.

- 10 -

Вам также может понравиться