Documente Academic
Documente Profesional
Documente Cultură
Normalizarea
6.1. Obiective
6.2. Dependenţe
93
A în liniile lui R are asociată cu ea la un moment dat fix o valoare a lui B în
R. Adică:
liniile lui R cu o valoare dată pentru A, trebuie să aibă toate aceaşi valoare
pentru B.
atunci când două linii ale lui R au aceaşi valoare a lui B, ele nu trebuie să
aibă aceaşi valoare pentru A.
Dependenţă multivalorică. Să considerăm relaţia
RESPONSABILITATE (MARCA#, CURS#, NUME_COMITET);
Să presupunem că fiecare valoare MARCA# are asociate cu ea una sau mai
multe valori CURS#. Mulţimea valorilor CURS# asociate cu o valoare
MARCA# dată este, totuşi aceeaşi pentru oricare COMITET# care este de
asemenea asociat cu acea MARCA#.
Să presupunem că MARCA# = 12345 apare în trei linii în relaţia
RESPONSABILITATE, cu valorile CURS#: 100. 200 şi 300. Pentru a
adăuga că MARCA# serveşte COMITET# = 12 ar cere ca trei linii
MARCA#, CURS#, NUME_COMITET să fie adăugate relaţiei
RESPONSABILITATE:
12345, 100, 12
12345, 200, 12
12345, 300, 12
Mulţimea valorilor CURS# asociate cu o valoare MARCA# dată
(aici 12345) trebuie să fie exact aceaşi pentru orice valoare COMITET#.
Astfel COMITET# = 12 nu poate apare cu MARCA# = 12345 şi numai cu
una din valorile CURS# din mulţimea {100, 200, 300}.
CURS# se spune a fi dependent multivaloric de MARCA#, şi se
notează:
MARCA# CURS#
şi citim “MARCA# determină multivaloric CURS#”.
Să considerăm acum relaţia R cu atributele A, B şi C. Atributul B se
spune a fi dependent multivaloric de atributul A dacă şi numai dacă mulţimea
valorilor lui B în R care se potrivesc cu o pereche de valori <A, C> în R este
independentă de valoarea lui C. Adică, următoarele sunt adevărate:
nu toate liniile lui R cu o valoare dată a lui A trebuie să aibă aceeaşi
valoare a lui B (B-valorile din aceste linii sunt referite ca “mulţimea B-
valorilor determinate de A-valoare”);
ori de câte ori două linii ale relaţiei R au aceaşi valori pentru A, ele nu
trebuie să aibă aceeaşi valori pentru B, dar valorile lor pentru B trebuie să
fie elemente ale mulţimii de valori determinate de valoarea lui A;
schimbarea valorii lui C într-o linie a lui R nu poate afecta valoarea lui B
în acea linie;
când două linii ale relaţiei R au aceaşi valori pentru B, ele nu trebuie să
aibă în mod necesar aceleaşi valori pentru A;
94
să considerăm două valori ale lui C, C1 şi C2. Mulţimea valorilor lui B în
liniile lui R cu o valoare dată pentru A şi cu C-valoarea C1 trebuie să fie
exact aceeaşi ca şi mulţimea valorilor lui B în liniile lui R cu aceeaşi A-
valoare şi cu C-valoarea C2.
Producerea lui 1NF. Pentru a normaliza o relaţie în forma 1NF este necesar
să “netezim” liniile, astfel încât nici o linie să nu conţină atribute care se
repetă. Fig.6.2. dă o tabelă de instanţe pentru relaţia FACULTATE_1,
modificată pentru a fi 1NF. Să notăm că schema relaţiei nu s-a modificat.
Cheia primară pentru relaţia exemplu este MARCA#, NUME_CATEDRA,
CURS#, MATRIC# şi toate patru atribute sunt necesare pentru a identifica
liniile.
Obiectivele lui 1NF. Cele două raţiuni principale sunt că semantica
unei relaţii 1NF este mai explicită - nici un atribut nu poate avea mai mult de
o valoare în orice linie dată – şi pentru a folosi relaţii 1NF în loc de relaţii
nenormalizate că operatorii relaţionali sunt aplicabili relaţiilor plate, adică
1NF. Schema unei relaţii nenormalizate nu permite stabilirea atributelor cu
valori multiple. Pe de altă parte, cunoscând că o relaţie este în 1NF ştim că
nici un atribut nu poate avea valori multiple.
95
6.4. A doua formă normală
O relaţie este în a doua formă normală (2NF) dacă şi numai dacă ea este în
1NF şi orice atribut non cheie este dependent funcţional complet de cheia
primară. Adică, o relaţie 2NF nu poate avea un atribut care este dependent
funcţional numai de o parte a cheii primare.
Nu este posibil a stabili dacă o relaţie este în 2NF pe baza schemei
ei; cunoaşterea dependenţelor funcţionale existente fiind de asemenea
necesară. Să considerăm din nou relaţia FACULTATE_1, care este acum în
1NF:
96
97
FACULTATE_1
NUME_ MARCA# NUME_ MATRIC# NUME_ CURS TEXT GRAD COMITET# ZI_ ORA_
PROF. STUDENT CATEDRA INTILNIRE INTILNIRE
Luca 12751 Albu 469213 IT 231 Unu A 12 L 9
Barbu 532162 IT 231 Unu B 20 J 8
Tatu 112146 MF 201 Doi B
Matei 21936 Albu 469213 EG 512 Patru A
Novac 51326 Sandu 513251 IT 531 Unu A 12 L 9
20 J 8
18 J 9
Oprea 31962 Cociu 219623 MF 200 Doi A 5 V 8
Lupu 319216 EG 512 Patru B
Fig.6.1. Tabela de instanţe pentru relaţia FACULTATE_1.
FACULTATE_1
NUME_ MARCA# NUME_ MATRIC# NUME_ CURS TEXT GRAD COMITET# ZI_ ORA_
PROF. STUDENT CATEDRA INTILNIRE INTILNIRE
Luca 12751 Albu 469213 IT 231 Unu A 12 L 9
Luca 12751 Barbu 532162 IT 231 Unu B 20 J 8
Luca 12751 Tatu 112146 MF 201 Doi B 20 J 8
Matei 21936 Albu 469213 EG 512 Patru A
Novac 51326 Sandu 513251 IT 531 Unu A 12 L 9
Novac 51326 Sandu 513251 IT 531 Unu A 20 J 8
Novac 51326 Sandu 513251 IT 531 Unu A 18 J 9
Oprea 31962 Cociu 219623 MF 200 Doi A 5 V 8
Oprea 31962 Lupu 319216 EG 512 Patru B 5 V 8
Fig.6.2. Tabela de instanţe pentru relaţia FACULTATE_1 în 1NF.
97
Rezolvarea relaţiei FACULTATE_1 dă următoarele patru relaţii:
FACULTATE_2 (MARCA#, NUME_PROFESOR, COMITET#, ZI_INTILNIRE,
ORA_INTILNIRE, NUME_CATEDRA, CURS#);
STUDENT (MATRIC#, NUME_STUDENT);
CURS_STUDENT (NUME_CATEDRA, CURS#, MATRIC#, GRAD);
CURS (NUME_CATEDRA, CURS#, TEXT);
În toate relaţiile, toate atributele non cheie sunt dependente de
întreaga cheie primară. Să notăm că NUME_CATEDRA , CURS# este un
atribut cheie străină compusă în FACULTATE_2 , care arată o relaţie unu-la-
mai-mulţi între CURS şi FACULTATE_2. Ea este de asemenea un atribut
cheie străină compusă în relaţia CURS_STUDENT. CURS_STUDENT are
un alt atribut cheie străină, MATRIC#, care arată o relaţie unu-la-mai-mulţi şi
între STUDENT şi CURS_STUDENT. Fig.6.3. este o diagramă model de
date pentru relaţia FACULTATE_1 iar fig.6.4. este o diagramă model de date
pentru mulţimea de relaţii 2NF rezultate din rezolvarea în 2NF a lui
FACULTATE_1.
O relaţie 1NF cu o cheie dintr-un singur atribut este întotdeuna în
2NF. Atributul respectiv fiind cheia primară, nu vor putea exista două linii
ale relaţiei pentru care atributul respectiv să aibă aceaşi valoare, ca atare orice
alt atribut va fi dependent funcţional de acesta.
Facultate_1
Marca#
Matric#
Nume_catedră
Curs#
Nume_profesor
Nume_student(0)
Text(0)
Grad(0)
Comitet#(0)
Zi_întâlnire(0)
Ora_întâlnire(0)
Obiectivele lui 2NF. Cele două raţiuni pentru a folosi relaţii 2NF în
loc de relaţii 1NF sunt:
98
semantica unei relaţii 2NF este mai explicită - toate atributele sunt
dependente de întreaga cheie primară;
o bază de date proiectată cu relaţii 2NF ca evita anumite anomalii de
actualizare prezente în relaţiile 1NF.
Schema unei relaţii 1NF nu permite stabilirea dependenţelor funcţionale
dintre atribute. Pe de altă parte, cunoscând că o relaţie este în 2NF ştim că
orice atribut non cheie este dependent de întreaga cheie. Actualizarea faptelor
într-o relaţie 1NF poate cauza anomalii care nu apar în cazul 2NF. Aceste
situaţii pot apare atunci când se inserează noi linii, se şterg linii sau se
modifică linii.
Curs Student
Nume_catedră Matric#
Curs#
Nume_student
a înrolat
Z Text
este
predat
ia
de
Facultate_2 Curs_student
Marca# Nume_catedră(Fk,0)
Curs#(Fk)
Nume_profesor Matric#(Fk)
Comitet#(0)
Zi_întâlnire(0) Grad
Ora_întâlnire(0)
Nume_catedră(Fk,0)
Curs#(Fk,0)
99
asociat cu un MARCA#, NUME_CATEDRA şi CURS#, deoarece toate
aceste patru atribute formează cheia primară. Dacă este necesar să modificăm
numele unui student, atunci orice linie din FACULTATE_1 în care apare
numele studentului trebuie să fie modificată, altfel relaţia va conţine date
contradictorii. Studentul poate apare în mai multe linii, deoarece el poate lua
mai multe cursuri. Spărgând relaţia FACULTATE_1 în FACULTATE_2 şi
STUDENT evităm aceste probleme.
Argrumente similare pot fi aduse pentru spargerea în relaţiile
CURS_STUDENT şi CURS.
O relaţie este în a treia formă normală (3NF) dacă şi numai dacă ea este în a
doua formă normală şi nici un atribut non cheie nu este dependent tranzitiv
de cheia primară. Adică, o relaţie 3NF nu poate avea nici un atribut non cheie
dependent de un alt atribut non chie.
De exemplu, relaţia precedentă
100
Comitet Student
Comitet# Nume_catedră Matric#
Curs#
Z a înrolat
Zi_întâlnire Z Text Nume_student
Ora_întâlnire
este
predat ia
de
este compus
din Facultate_3 Curs_student
Marca# Nume_catedră(Fk,0)
Curs#(Fk)
Nume_profesor Matric#(Fk)
Comitet#(Fk,0)
Nume_catedrã(Fk,0) Grad
Curs#(Fk,0)
101
O relaţie 2NF cu numai un atribut non cheie (sau cu nici unul) este
întotdeuna o relaţie 3NF. Nici un atribut non cheie nu poate fi dependent de
un altul dacă nu există cel puţin două atribute non cheie în relaţie.
102
3NF în aceea că ea cere o dependenţă funcţională completă pentru fiecare
cheie candidată, pe când 3NF cere o astfel de dependenţă numai pentru cheia
primară. Regulile sunt echivalente, dacă relaţia nu are mai multe chei
candidate.
Relaţiile COMITET şi FACULTATE_3 sunt ambele atât în 3NF cât
şi în BCNF, cu mulţimea dependenţelor funcţionale propusă. Dacă însă se
introduce şi NUME_PROFESOR ca şi cheie candidată pentru relaţia
FACULTATE_3, aceasta nu mai este în 3NF. COMITET#,
NUME_CATEDRA şi CURS# sunt determinate de un atribut non cheie
NUME_PROFESOR ca şi de cheia primară MARCA#. BCNF potriveşte
această anomalie, deoarece NUME_PROFESOR este o cheie candidată.
Să considerăm, de asemenea, următoarea relaţie:
DEALER (ORAS, MASINA, NUME_DEALER);
cu dependenţele:
NUME_DEALER ORAS Fiecare dealer este într-un singur oras.
MASINA, ORAS NUME_DEALER Pentru fiecare oras şi fiecare masină
există un singur dealer autorizat.
Să presupunem că fiecare maşină poate fi vândută în mai multe
oraşe şi că fiecare oraş poate avea mai mulţi dealer-i autorizaţi.
Cheile candidate sunt ORAS, MASINA şi MASINA,
NUME_DEALER.
Următoarea tabelă arată dependenţa atributelor:
103
O relaţie 3NF cu o singură cheie candidată (care este ca atare şi
cheia primară) este întotdeuna o relaţie BCNF.
O relaţie 3NF numai cu chei candidate care nu coincid în parte este
întotdeuna în BCNF.
Obiectivele lui BCNF. Cele două raţiuni principale pentru a folosi
relaţii BCNF în loc de relaţii 3NF sunt:
semantica cheilor candidate multiple este mai explicită - toate atributele
sunt dependente numai de chei candidate;
baza de date proiectată cu relaţii BCNF va evita anumite anomalii de
actualizare ce apar la relaţii 3NF.
Definirea tuturor cheilor candidate ale unei relaţii este importantă
atunci când se stabilesc aserţiuni de unicitate. Aceste aserţiuni ar putea fi
forţate atunci când se inserează, se şterg sau se modifică linii în relaţie. Toate
cheile candidate, şi nu numai cheia primară trebuie să aibă valori unice.
Există anomalii ce apar când se actualizează fapte într-o relaţie 3NF
şi pot fi evitate la relaţii BCNF. De exemplu, în relaţia DEALER, nu putem
şterge faptul că Dacia este vândută în Oradea. MASINA este parte a cheii.
Neconsiderând chei candidate ea este desemnată ca şi cheie primară. O
informaţie oraş şi o informaţie dealer nu pot exista fără informaţie maşină,
căci MASINA nu poate fi nul. Similar, nu este posibilă inserarea informaţiei
cum că “Milescu” este dealer la “Arad” fără a desemna şi MASINA.
Problema este că NUME_DEALER este un determinant, dar nu o cheie
candidată, astfel că relaţia nu este în BCNF. Nu există atribute non cheie
dependente de alte atribute non cheie (NUME_DEALER), atributul ORAS
dependent funcţional de NUME_DEALER fiind parte din cheie. Relaţia e
deci în 3NF. Spărgând relaţia în LOC_DEALER şi PRODUS vom evita
aceste probleme.
O relaţie este în a patra formă normală (4NF) dacă şi numai dacă ori de câte
ori există o dependenţă multivalorică de un determinant, toate atributele sunt
dependente funcţional de determinant.
O relaţie 4NF nu poate avea mai mult de o dependenţă
multivalorică.
De exemplu, să considerăm din nou relaţia
FACULTATE_3 (MARCA#, NUME_PROFESOR, COMITET#, NUME
_CATEDRA, CURS#);
Dependenţele indicau că un profesor este asignat unui singur comitet
şi predă un singur curs. Să schimbăm situaţia astfel încât un profesor să poată
fi asignat la mai multe comitete şi să predea mai multe cursuri, introducând
astfel două dependenţe multivalorice:
MARCA# COMITET#
MARCA# NUME_CATEDRA, CURS#
104
Relaţia trebuie să aibă acum pentru cheia sa pe MARCA#,
COMITET#, NUME_CATEDRA, CURS#.
Relaţia nu este în 4NF, căci ea conţine mai mult de o dependenţă
multivalorică. De fapt ea nu este nici măcar în 2NF deoarece axistă un atribut
non cheie dependent de numai o parte a cheii.
Despărţind atributul care este dependent numai de MARCA# de
rest, obţinem două relaţii:
FACULTATE (MARCA#, NUME_PROFESOR)
FACULTATE_4 (MARCA#, COMITET#, NUME_DEPARTAMENT, CURS#);
105
Marca#(Fk) Marca#(Fk) Nume_catedră(Fk)
Comitet#(Fk) Nume_catedrã(Fk) Curs#(Fk)
Curs#(Fk) Matric#(Fk)
Grad
Fig.6.6. Model de date logice, normalizat în 4NF în cazul adăugării de dependenţe multivalorice
106
Obiectivele lui 4NF. Cele două raţiuni principale pentru a prefera
relaţii 4NF în loc de relaţii BCNF sunt:
semantica unei relaţii 4NF este mai explicită - toate dependenţele sunt
înlănţuite;
o bază de date proiectată cu relaţii 4NF va evita anumite anomalii de
actualizare prezente în 3NF precum şi în BCNF.
Schema unei relaţii BCNF nu evidenţiază dependenţele
multivalorice şi nici dacă componentele cheii primare sunt mutual
independente. De pe altă parte, ştiind că o relaţie este în 4NF suntem
asiguraţi că nici o componentă a cheii nu este independentă de orice altă
componentă.
Să urmărim ce tipuri de anomalii ce pot apărea la actualizarea unei
relaţii BCNF sunt evitate în cazul relaţiilor 4NF. Aceste situaţii pot apărea
atât la inserarea de linii noi, la ştergerea de linii cât şi la modificarea unor
linii şi sunt similare cu anomaliile care le-am trecut în revistă în cazurile
1NF, 2NF şi 3NF.
Să considerăm relaţia FACULTATE_4, care este în BCNF. Să
presupunem că profesorul cu MARCA# = 12345 predă cinci cursuri şi
serveşte în patru comitete. Nu este posibilă inserarea unor date despre
asignarea profesorului la un alt comitet fără a insera cinci linii, câte una
pentru fiecare curs pe care profesorul numit îl predă. Aceleaşi valori
NUME_CATEDRA, CURS# trebuie să existe în relaţie pentru fiecare
valoare COMITET# asociată cu MARCA#. Dacă o asignare de comitet
pentru profesorul numit este ştearsă, atunci acea ştergere înseamnă în fapt
ştergerea a cinci linii, câte una pentru fiecare curs. Aceeaşi mulţime de valori
COMITET# trebuie să existe în relaţie pentru fiecare valoare
NUME_CATEDRA, CURS# asociate cu MARCA#. Dacă este necesară
schimbarea unui CURS# pentru un curs predat de profesorul respectiv, atunci
această schimbare trebuie să se reflecte în patre linii, câte una pentru fiecare
comitet pe care îl serveşte profesorul. Din nou, aceeaşi mulţime de valori
NUME_CATEDRA, CURS# trebuie să existe în relaţie pentru fiecare
valoare COMITET# asociată cu MARCA#. Spargerea relaţiei
FACULTATE_4 în relaţiile FACULTATE_COMITET şi
FACULTATE_CURS evită aceste probleme.
107
Deoarece proprietăţile lui 5NF par a fi neclare, vom explica această
ultimă formă normală pe baza unui exemplu mai extins. Să considerăm
relaţia:
PARADA_CAINI (JUDECATOR, RASA, EVENIMENT);
Această relaţie este în 5NF dacă ea nu poate fi descompusă fără
pierdere în:
ASIGNARE (JUDECATOR, RASA); INTRARE (RASA, EVENIMENT);
CALIFICARE (JUDECATOR, EVENIMENT);
Dacă relaţia iniţială nu era în 5NF, cele trei relaţii de mai sus se vor putea
reuni pentru a forma o relaţie cu trei atribute cu exact aceaşi tabelă de
instanţe ca şi cea a relaţiei PARADA_CAINI. Dacă PARADA_CAINI este în
5NF atunci cele trei atribute combinate sunt necesare pentru a exprima
semantici valide. Dacă este în 5NF, PARADA_CAINI poate fi interpretată
incluzând aserţiuni ca:
o persoană este calificată pentru a juriza evenimente despre anumite rase;
numai anumitor rase li se pot asigna anumite evenimente.
O tabelă de instanţe valide este dată în fig.6.7.
PARADA_CAINI
JUDECATOR RASA EVENIMENT
Albu Ciobanesc german Confirmatie
Albu Pudel Ascultare
Morar Ciobanesc german Ascultare
Morar Pudel Dresaj
Morar St.Bernard Dresaj
Petrisor Ciobanesc german Confirmatie
Vasiu Pudel Dresaj
Vasiu Pudel Ascultare
108
fig.6.8. Să notăm diferenţele între relaţia combinată şi relaţia
PARADA_CAINI din fig.6.7. Modelele de date pentru aceste patru relaţii
sunt prezentate în fig.6.9.
O relaţie care este în 4NF şi are numai două atribute în cheia sa
primară este în 5NF deoarece nu există nici un mod de a o descompune fără a
pierde date.
ASIGNARE
JUDECATOR RASA
Albu Ciobanesc german
Albu Pudel
Morar Ciobanesc german
Morar Pudel
Morar St.Bernard
Petrisor Ciobanesc german
Vasiu Pudel
INTRARE
RASA EVENIMENT
Ciobanesc german Confirmatie
Ciobanesc german Ascultare
Pudel Ascultare
Pudel Dresaj
St.Bernard Dresaj
CALIFICARE
JUDECATOR EVENIMENT
Albu Confirmatie
Albu Ascultare
Morar Ascultare
Morar Dresaj
Petrisor Confirmatie
Vasiu Dresaj
Vasiu Ascultare
Fig. 6.8.a. Tabele de instanţe pentru trei relaţii binare proiectate din
PARADA_CAINI
109
semantica lui 5NF este mai explicită - nu există dependenţe nelegate între
grupuri de atribute;
o bază de date proiectată cu relaţii 5NF va evita anumite anomalii
prezente la relaţii 4NF;
relaţiile 5NF sunt în forma cea mai granulară şi aceasta este un avantaj la
modificări ulterioare ale schemei.
Judecător Rasa
Nume_judecător Nume_rasa
poate avea
Eveniment
Nume_eveniment
Fig. 6.9.a
Există anomalii ce apar la actualizarea unor relaţii din 4NF care pot
fi evitate la relaţiile din 5NF. Ele apar atât la inserare de linii noi, cât şi la
ştergere sau modificare de linii şi sunt aproape similare cu cele de la formele
normale precedente. În relaţiile 4NF, anomaliile sunt cauzate de redundanţe
în tabela de instanţe a relaţiei.
110
Judecător Rasa Eveniment
este poate
poate judeca poate avea
judecată introduce
de
Parada_câini Intrare
Nume_judecător(Fk) Nume_rasa(Fk)
Nume_rasa(Fk) Nume_eveniment(Fk)
Nume_eveniment(Fk)
Calificare
Nume_judecător(Fk)
Nume_eveniment(Fk) este
poate judecat
judeca de
111
“Reuniunea “ relaţiilor ASIGNARE, INTRARE, CALIFICARE
JUDECATOR RASA EVENIMENT
Albu Ciobanesc german Confirmatie
Albu Ciobanesc german Ascultare
Morar Ciobanesc german Ascultare
Vasiu Ciobanesc german Ascultare
Petrisor Ciobanesc german Confirmatie
Albu Pudel Ascultare
Albu Pudel Dresaj
Morar Pudel Ascultare
Vasiu Pudel Ascultare
Morar Pudel Dresaj
Morar St.Bernard Dresaj
112
iniţiale de atribute din relaţii care au sens semantic ca entităţi, înainte de
aplicarea procedurii de descompunere poate fi complicată. În cap.9. vom
discuta obţinerea acestor relaţii.
113
bazelor de date fizice rezidă în principal în extensiunea (i.e. populaţia)
relaţiilor. La prima vedere pare ineficient să spargem o tabelă în mai multe
tabele pentru a satisface restricţiile regulilor de normlizare, cu toate că o
astfel de descompunere poate înbunătăţi performanţa prin reducerea
numărului de linii din fiecare tabelă. Mai important însă, integritatea datelor
poate fi menţinută mai eficient dacă relaţiile din baza de date sunt proiectate
pentru a satisface regulile normalizării. Dar proiectarea fizică a bazelor de
date relaţionale înseamnă în fapt mai mult decât identificarea relaţiilor de
bază. De exemplu, indecşii şi structurile de căutare pot fi selectate şi
distribuţia relaţiilor în fişiere fizice poate fi specificată. În fine să menţionăm
că aplicarea principiilor normalizării pentru a reduce replicarea datelor poate
conduce la baze de date relaţionale fizice mai eficiente şi mai flexibile.
Memento
114
Extensiunea unei relaţii Normalizare
A cincea formă normală (5NF) Cheie primară
Prima formă normală (1NF) A doua formă normală (2NF)
Atribut cheie străină Sinteza
A patra formă normală (4NF) A treia formă normală (3NF)
Dependenţă funcţională
Bibliografie
1. Aho, A.V.; Beeri, C.; Ullman, J.D. (1979) The theory of joins in
relational databases, ACM Trans. on Database Systems 4 : 297-314.
2. Armstrong, W.W. (1974) Dependency structurea of database
relationships, Proc.IFIP Congress.
3. Brown, R.G. (1982) Logical Database Design Techniques, Mountain
View, CA: The DBDG July 1982.
4. Codd, E.F. (1979) Extending the database relational model to capture
more meaning, ACM Trans. on Database Systems (Dec. 1979) 397-434.
5. *** (1971) Normalized database structure: a brief tutorial, Proc. ACM
SIGFIDET.
6. Date, C.J. (1981) Further normalization, Chapter 14 in An Introduction to
Database Systems, Addison Wesley, 232-272.
115