## Introduction

Normalization refers to organizing data within a database by creating tables and establishing relationships between them to protect the data and make the __Database__ more efficient and flexible. Usually, we consider every table in a relational database to be in the first normal form, which says the tuples must be atomic, which means there must be no multiple values in a single row.

The table must be free of any partial dependencies to be in the second normal form. The table must not have any transitive dependency for the third normal form. Finally, to be in BCNF, the determinant in the given dependency must be a super key.

This article will learn how to find the highest normal form of a given relation after revising all the terms related to 2NF, 3NF, and BCNF.

## Important terms in Normalization

**Attribute**: An attribute in a table describes characteristic defining items under a single category in the cells of a column.

**Superkey:** A super key is an attribute or set that uniquely identifies data items in a table. Superkey attributes can contain null values too, which is not the case for a primary key.

**Candidate key**: We could say that the candidate key is a super key to records in the table. A candidate key can either be an attribute (column) or a group of attributes that uniquely identify every data item, i.e., all individual records in a relation or a table. A Candidate Key is a Super Key whose no proper subset is a super key.

**Non-prime attributes**: All other columns in a relation that do not occur in any candidate key are non-prime attributes.

**Prime-attributes**: Any candidate key column will make a prime attribute.

**Dependency: **In a relation, dependency is a constraint defining a relationship between two or more attributes. Dependency occurs when data stored in the same table can be used to determine some other information stored in the table uniquely. There are various dependencies in relational databases, including Functional Dependency, Fully-functionally Dependency, transitional dependency, and Partial Dependency.

**Functional dependency: **It is a constraint specifying the relationship between two attributes where one attribute helps determine the value of the other. Functional dependency is denoted as X â†’ Y. Here, X is a set of attributes that can help determine the value of Y.

**Determinant: **The set of attributes to the left of the arrow that helps determine the value of the other attributes is called the determinant. In Xâ†’Y, X is the determinant.

**Dependent: **The attribute to the right of the arrow, whose value is determined by the determinant, is called the dependent. In Xâ†’Y, Y is the dependent.

**Transitive functional dependency: **When a dependent is indirectly dependent on the determinant, it is a transitive functional dependency. This means that if a â†’ b and b â†’ c, then a â†’ c.