You are on page 1of 26

Normalization

Normalization is performed to reduce or eliminate Insertion, Deletion or Update anomalies. However, a completely normalized database may not be the most efficient or effective implementation. Denormalization is sometimes used to improve efficiency. Normalization splits database information across multiple tables. To retrieve complete information from a normalized database, the JOIN operation must be used. JOIN tends to be expensive in terms of processing time, and very large joins are very expensive.

Normalization -Contd..
Introduction In this exercise we are looking at the optimisation of data

structure. The example system we are going to use as a model is a database to keep track of employees of an organisation working on different projects.
Objectives By the end of the exercise you should be able to: Show understanding of why we normalize data Give formal definitions of 1NF, 2NF & 3NF Apply the process of normalization to your own project

The Scenario
The data we would want to store could be expressed as:
Project No Project Name Employee No Employee Name Jessica Brookes
Andy Evans Max Fat Jessica Brookes Alex Branton

Rate category A
B C A B

Rate

1203

Madagascar travel site

11
12 16

90
80 70 90 80

1506

Online estate agency

11 17

Why Normalization?
Three problems become apparent with our current model: Tables in a RDBMS use a simple grid structure Each project has a set of employees so we cant even use this format to enter data into a table. How would you construct a query to find the employees working on each project? All tables in an RDBMS need a key Each record in a RDBMS must have a unique identity. Which field should be the primary key? Data entry should be kept to a minimum Our main problem is that each project contains repeating groups, which lead to redundancy and inconsistency.

Why Normalization? Contd..


We could place the data into a table called: tblProjects_Employees
Project No. 1203 1203 Project Name Employee No. Employee Name Jessica Brookes Andy Evans A B Rate category Rate

Madagascar travel site Madagascar travel site

11 12

90 80

1203
1506 1506

Madagascat travel site


Online estate agency Online estate agency

16
11 17

Max Fat
Jessica Brookes Alex Branton

C
A B

70
90 70

Why Normalization? Contd..


Addressing our three problems: Tables in a RDBMS use a simple grid structure We can find members of each project using a simple SQL or QBE search on either Project Number or Project Name
All tables in an RDBMS need a key We CAN uniquely identify each record. Although no primary key exists we can use two or more fields to create a composite key. Data entry should be kept to a minimum Our main problem that each project contains repeating groups still remains. To create a RDBMS we have to eliminate these groups or sets.

Why Normalization? Contd..


Did you notice that Madagascar was misspelled in the 3rd record! Imagine trying to spot this error in thousands of records. By using this structure (flat filing) we create: Redundant data Duplicate copies of data we would have to key in Madagascar travel site 3 times. Not only do we waste storage space we risk creating Inconsistent data;
Inconsistent data The more often we have to key in data the more likely we are to make mistakes.

Normalization Process
The solution is simply to take out the duplication. We do this by: Identifying a key In this case we can use the project no and employee no to uniquely identify each row
Project No 1203 1203 1203 1506 1506 Employee No 11 12 16 11 17

Unique Identifier
120311

120312
120316 150611

150617

Normalization Process Contd..


We look for partial dependencies We look for fields that depend on only part of the key and not the entire key.
Field Project Name Project No

Employee No

Employee Rate Category


Rate

We remove partial dependencies The fields listed are only dependent on part of the key so we remove them from the table.

Normalization Process Contd..


We create new tables Clearly we cant take the data out and leave it out of our database. We put it into a new table consisting of the field that has the partial dependency and the field it is dependent on. Looking at our example we will need to create two new tables:
Dependent On Partially Dependent Project Name Dependent On
Employee No

Partially Dependent
Employee Name Rate category Rate

Project No

Normalization Process Contd..


We now have 3 tables:
tblProjects_Employees
Project No Employee No

tblProjects
Project No
1203

Project Name
Madagascar travel site

1203 1203
1203 1506 1506

11 1506 12
16 11 17

tblEmployees
Employee No 11 12 16 Employee Name Jessica Brookes Andy Evans Max Fat Rate Category A B C

Online estate agency


Rate 90 80 70

17

Alex Branton

80

Normalization Process Contd..


Looking at the project, note the reduction in: Redundant data The text Madagascar travel site is stored once only, not for each occurrence of an employee working on the project.
Inconsistent data Because we only store the project name once we are less likely to enter Madagascat The link is made through the key, Project No. Obviously there is no way to remove this duplication without losing the relation altogether, but it is far more efficient storing a short number repeatedly, than a large chunk of text.

Normalization Process Contd..


Our model has improved but is still far from perfect. There is still room for inconsistency.
Employee No Employee Name Rate Category Rate Alex Branton is being paid 80 while Jessica Brookes gets 90 but theyre in the same rate category!

11
12 16 17

Jessica Brookes
Andy Evans Max Fat Alex Branton

A
B C A

90
80 70 80

Again, we have stored redundant data: the hourly rate- rate category relationship is being stored in its entirety i.e. We have to key in both the rate category AND the hourly rate.

Normalization Process Contd..


The solution, as before, is to remove this excess data to another table. We do this by:
Looking for Transitive Relationships Relationships where a non-key attribute is dependent on another non-key attribute. Hourly rate should depend on rate category BUT rate category is not a key. Removing Transitive Relationships As before we remove the redundant data and place it in a separate table. In this case we create a new table tblRates and add the fields rate category and hourly rate. We then delete hourly rate from the employees table.

Normalization Process Contd..


We now have 4 tables:
tblProjects_Employees
Project No
1023 1023

tblProjects
Project No Project Name

Employee No
11

1023
1056

Madagascar travel site


Online estate agency

12

tblEmployees
Employee No 11
12 16

1023
1056 1056

16
11 17

Employee Name Jessica Brookes


Andy Evans Max Fat

Rate Category A
B

tblRates
Rate Category A B Rate 90 80 70

17

Alex Branton

Normalization Process Contd..


Again, we have cut down on redundancy and it is now impossible to assume Rate category A is associated with anything but 90. Our model is now in its most efficient format with: Minimum REDUNDANCY
Minimum INCONSISTENCY

Normalization Process Contd..


What we have formally done is NORMALIZE the database: At the beginning we had a data structure:
Project No Project Name Employee No (1n) Employee name (1n) Rate Category (1n) Hourly Rate (1n)

(1n indicates there are many occurrences of the field it is a repeating group).

To begin the normalization process we start by moving from zero normal form to 1st normal form.

st 1

Normal Form

The definition of 1st normal form; There are no repeating groups All the key attributes are defined All attributes are dependent on the primary key So far, we have no keys, and there are repeating groups. So we remove the repeating groups and define the keys and are left with: Employee Project table Project number part of key Project name Employee number part of key Employee name Rate category Hourly rate This table is in first normal form (1NF)

2nd Normal Form


A table is in 2nd normal form if: Its already in first normal form It includes no partial dependencies (where an attribute is dependent on only part of the key) We look through the fields: Project name is dependent only on project number Employee name, rate category and hourly rate are dependent only on employee number. So we remove them, and place these fields in a separate table, with the key being that part of the original key they are dependent on. We are left with the following three tables:

2nd Normal Form-Contd..


Employee Project table Project number part of key Employee number part of key Employee table Employee number - primary key Employee name Rate category Hourly rate Project table Project number - primary key Project name

The tables are now in 2nd normal form (2NF). Are they in 3rd normal form?

rd 3

Normal Form

A table is in 3rd normal form if: Its already in second normal form It includes no transitive dependencies (where a non-key attribute is dependent on another non-key attribute) We can narrow our search down to the Employee table, which is the only one with more than one non-key attribute. Employee name is not dependent on either Rate category or Hourly rate, the same applies to Rate category, but Hourly rate is dependent on Rate category.

So, as before, we remove it, placing it in it's own table, with the attribute it was dependent on as key.

3rd Normal Form Contd..


Employee project table Project number part of key Employee number part of key Employee table Employee number - primary key Employee name Rate Category Rate table Rate category - primary key Hourly rate

Project Table Project number - primary key Project name These tables are all now in 3rd normal form, and ready to be implemented.

Other Normal Forms


Boyce-Codd Normal Form (BCNF) Strengthens 3NF by requiring the keys in the functional dependencies to be superkeys (a column or columns that uniquely identify a row)
A 3NF relation is NOT in BCNF if: Candidate keys in the relation are composite keys (they are not single attributes) There is more than one candidate key in the relation, and The keys are not disjoint, that is, some attributes in the keys are common

Other Normal Forms Contd..


Fourth Normal Form (4NF) Eliminate trivial multivalued dependencies. Eliminate non-trivial multivalued dependencies by projecting into simpler tables
Fifth Normal Form (5NF) Eliminate dependencies not determined by keys. A relation is in 5NF if every join dependency in the relation is implied by the keys of the relation Implies that relations that have been decomposed in previous NF can be recombined via natural joins to recreate the original relation. These Forms are very rarely used for business applications. In most cases, tables in 3rd normal form are already in these normal forms anyway

Summary
What normal form is this table in? Giving it a quick glance, we see:

no repeating groups, and a primary key defined, so it's at least in 1st normal form. There's only one key, so we needn't even look for partial dependencies, so it's at least in 2nd normal form. How about transitive dependencies? Well, it looks like Town might be determined by Postcode. And in most parts of the world that's usually the case.
So we should remove Town, and place it in a separate table, with Postcode as the key?

Summary Contd..
No! Although this table is not technically in 3rd normal form, removing this information is not worth it. Creating more tables increases the load slightly, slowing processing down. This is often counteracted by the reduction in table sizes, and redundant data. But in this case, where the town would almost always be referenced as part of the address, it isn't worth it. Perhaps a company that uses the data to produce regular mailing lists of thousands of customers should normalize fully. It always comes down to how the data is going to be used. Normalization is just a helpful process that usually results in the most efficient table structure, and not a rule for database design.

You might also like