Database Normalization
Definition
Levels of Normalization
Redundancy
Number of Tables
Most databases should be 3NF or BCNF in order to avoid the database anomalies.
Complexity
Levels of Normalization
Each higher level is a subset of the lower level
DKNF
1NF
2NF
3NF
4NF
5NF
First Normal Form (1NF)
First Normal Form (1NF)
EMP_ID | EMP_NAME | EMP_PHONE | EMP_STATE |
14 | John | 7272826385,�9064738238 | UP |
20 | Harry | 8574783832 | Bihar |
12 | Sam | 7390372389,�8589830302 | Punjab |
Example: Relation EMPLOYEE is not in 1NF because of multi-valued attribute EMP_PHONE.
EMPLOYEE table:
First Normal Form (1NF)
EMP_ID | EMP_NAME | EMP_PHONE | EMP_STATE |
14 | John | 7272826385 | UP |
14 | John | 9064738238 | UP |
20 | Harry | 8574783832 | Bihar |
12 | Sam | 7390372389 | Punjab |
12 | Sam | 8589830302 | Punjab |
The decomposition of the EMPLOYEE table into 1NF has been shown below:
Example (Not 1NF)
First Normal Form (1NF)
Author and AuPhone columns are not scalar
0-321-32132-1
Balloon
Sleepy, Snoopy, Grumpy
321-321-1111, 232-234-1234, 665-235-6532
Small House
714-000-0000
$34.00
0-55-123456-9
Main Street
Jones, Smith
123-333-3333, 654-223-3455
Small House
714-000-0000
$22.95
0-123-45678-0
Ulysses
Joyce
666-666-6666
Alpha Press
999-999-9999
$34.00
1-22-233700-0
Visual Basic
Roman
444-444-4444
Big House
123-456-7890
$25.00
ISBN
Title
AuName
AuPhone
PubName
PubPhone
Price
Example (1NF)
1NF - Decomposition
0-321-32132-1
Balloon
Small House
714-000-0000
$34.00
0-55-123456-9
Main Street
Small House
714-000-0000
$22.95
0-123-45678-0
Ulysses
Alpha Press
999-999-9999
$34.00
1-22-233700-0
Visual Basic
Big House
123-456-7890
$25.00
ISBN
Title
PubName
PubPhone
Price
ISBN
AuName
AuPhone
0-123-45678-0
Joyce
666-666-6666
1-22-233700-0
Roman
444-444-4444
0-55-123456-9
Smith
654-223-3455
0-55-123456-9
Jones
123-333-3333
0-321-32132-1
Grumpy
665-235-6532
0-321-32132-1
Snoopy
232-234-1234
0-321-32132-1
Sleepy
321-321-1111
Example 1
Functional Dependencies
0-321-32132-1
Balloon
$34.00
0-55-123456-9
Main Street
$22.95
0-123-45678-0
Ulysses
$34.00
1-22-233700-0
Visual Basic
$25.00
ISBN
Title
Price
Table Scheme: {ISBN, Title, Price}
Functional Dependencies: {ISBN} 🡪 {Title}
{ISBN} 🡪 {Price}
Example 2
Functional Dependencies
1
Big House
999-999-9999
2
Small House
123-456-7890
3
Alpha Press
111-111-1111
PubID
PubName
PubPhone
Table Scheme: {PubID, PubName, PubPhone}
Functional Dependencies: {PubId} 🡪 {PubPhone}
{PubId} 🡪 {PubName}
{PubName, PubPhone} 🡪 {PubID}
AuID
AuName
AuPhone
6
Joyce
666-666-6666
7
Roman
444-444-4444
5
Smith
654-223-3455
4
Jones
123-333-3333
3
Grumpy
665-235-6532
2
Snoopy
232-234-1234
1
Sleepy
321-321-1111
Example 3
Table Scheme: {AuID, AuName, AuPhone}
Functional Dependencies: {AuId} 🡪 {AuPhone}
{AuId} 🡪 {AuName}
{AuName, AuPhone} 🡪 {AuID}
Database to track reviews of papers submitted to an academic conference. Prospective authors submit papers for review and possible acceptance in the published conference proceedings. Details of the entities
FD – Example
Functional Dependencies
FD – Example
Second Normal Form (2NF)�
Second Normal Form (2NF)�
TEACHER_ID | SUBJECT | TEACHER_AGE |
25 | Chemistry | 30 |
25 | Biology | 30 |
47 | English | 35 |
83 | Math | 38 |
83 | Computer | 38 |
TEACHER table:
In the given table, non-prime attribute TEACHER_AGE is dependent on TEACHER_ID which is a proper subset of a candidate key. That's why it violates the rule for 2NF.
TEACHER_ID | TEACHER_AGE |
25 | 30 |
47 | 35 |
83 | 38 |
TEACHER_DETAIL table:
TEACHER_ID | SUBJECT |
25 | Chemistry |
25 | Biology |
47 | English |
83 | Math |
83 | Computer |
TEACHER_SUBJECT table:
Third Normal Form (3NF)�
Third Normal Form (3NF) �
X → Y.
Third Normal Form (3NF) �
EMP_ID | EMP_NAME | EMP_ZIP | EMP_STATE | EMP_CITY |
222 | Harry | 201010 | UP | Noida |
333 | Stephan | 02228 | US | Boston |
444 | Lan | 60007 | US | Chicago |
555 | Katharine | 06389 | UK | Norwich |
666 | John | 462007 | MP | Bhopal |
Example:
EMPLOYEE_DETAIL table:
Third Normal Form (3NF) �
Super key in the table above:
Candidate key: {EMP_ID}
Third Normal Form (3NF) �
Third Normal Form (3NF) �
EMP_ID | EMP_NAME | EMP_ZIP |
222 | Harry | 201010 |
333 | Stephan | 02228 |
444 | Lan | 60007 |
555 | Katharine | 06389 |
666 | John | 462007 |
EMPLOYEE table:
Third Normal Form (3NF) �
EMP_ZIP | EMP_STATE | EMP_CITY |
201010 | UP | Noida |
02228 | US | Boston |
60007 | US | Chicago |
06389 | UK | Norwich |
462007 | MP | Bhopal |
EMPLOYEE_ZIP table:
�Boyce Codd normal form (BCNF)�
EMP_ID | EMP_COUNTRY | EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
264 | India | Designing | D394 | 283 |
264 | India | Testing | D394 | 300 |
364 | UK | Stores | D283 | 232 |
364 | UK | Developing | D283 | 549 |
EMPLOYEE table:
In the above table Functional dependencies are as follows:
Candidate key: {EMP-ID, EMP-DEPT}
The table is not in BCNF because neither EMP_DEPT nor EMP_ID alone are keys.
EMP_ID | EMP_COUNTRY |
264 | India |
264 | India |
To convert the given table into BCNF, we decompose it into three tables:EMP_COUNTRY table:
EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
Designing | D394 | 283 |
Testing | D394 | 300 |
Stores | D283 | 232 |
Developing | D283 | 549 |
EMP_DEPT table:
EMP_ID | EMP_DEPT |
D394 | 283 |
D394 | 300 |
D283 | 232 |
D283 | 549 |
EMP_DEPT_MAPPING table:
Functional dependencies:
EMP_ID → EMP_COUNTRY
EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Candidate keys:
For the first table: EMP_ID�For the second table: EMP_DEPT�For the third table: {EMP_ID, EMP_DEPT}
Fourth normal form (4NF)�
Example�
STU_ID | COURSE | HOBBY |
21 | Computer | Dancing |
21 | Math | Singing |
34 | Chemistry | Dancing |
74 | Biology | Cricket |
59 | Physics | Hockey |
STUDENT
The given STUDENT table is in 3NF, but the COURSE and HOBBY are two independent entity. Hence, there is no relationship between COURSE and HOBBY.
In the STUDENT relation, a student with STU_ID, 21 contains two courses, Computer and Math and two hobbies, Dancing and Singing. So there is a Multi-valued dependency on STU_ID, which leads to unnecessary repetition of data.
STU_ID | COURSE |
21 | Computer |
21 | Math |
34 | Chemistry |
74 | Biology |
59 | Physics |
STUDENT_COURSE
STU_ID | HOBBY |
21 | Dancing |
21 | Singing |
34 | Dancing |
74 | Cricket |
59 | Hockey |
STUDENT_HOBBY
Fifth normal form (5NF)�
SUBJECT | LECTURER | SEMESTER |
Computer | Anshika | Semester 1 |
Computer | John | Semester 1 |
Math | John | Semester 1 |
Math | Akash | Semester 2 |
Chemistry | Praveen | Semester 1 |
Example
In the above table, John takes both Computer and Math class for Semester 1 but he doesn't take Math class for Semester 2. In this case, combination of all these fields required to identify a valid data.
Suppose we add a new Semester as Semester 3 but do not know about the subject and who will be taking that subject so we leave Lecturer and Subject as NULL. But all three columns together acts as a primary key, so we can't leave other two columns blank.
SEMESTER | SUBJECT |
Semester 1 | Computer |
Semester 1 | Math |
Semester 1 | Chemistry |
Semester 2 | Math |
SUBJECT | LECTURER |
Computer | Anshika |
Computer | John |
Math | John |
Math | Akash |
Chemistry | Praveen |
P2
SEMSTER | LECTURER |
Semester 1 | Anshika |
Semester 1 | John |
Semester 1 | John |
Semester 2 | Akash |
Semester 1 | Praveen |
P3