
1NF: If any tables have a many to many relationship this must be broken out using a JOIN table. For example Customers can have many Suppliers and Suppliers can supply to many Customers. This is known as a many to many relationship. You would need to create a JOIN table that would have a primary key made up of a foreign key reference to the Customers table and a foreign key reference to the suppliers table. Therefore the SuppliersPerCustomer table would be {
SupplierID CustomerID}. Now the Suppliers table will have a 1 to many relationship with the SuppliersPerCustomer table and the Customers table will also have a 1 to many relationship with the SuppliersPerCustomer table.
2NF: The database must meet all the requirements of the 1NF.
In addition records should not depend on anything other than a table's primary key (a primary key can be made up of more than one field only if absolutely necessary like in a JOIN table).
Example:A customers address is needed by the Customers table but also by the Orders and Invoices tables. Instead of storing the customer's address as a separate entry in each of these tables store it in one place either in the Customers table or in a separate Addresses table.
3NF : The database must meet all the requirements of the 1NF and 2NF.
A relational table is in third normal form (3NF) if it is already in 2NF and every non-key column is non transitively dependent upon its primary key.
The Customer table contains information such as address city postcode imagine it also contained a column called shipping cost. The value of shipping cost changes in relation to which city the products are being delivered to and therefore is not directly dependent on the customer even though the cost might not change per customer but it is dependent on the city that the customer is in. Therefore we would need to create another separate table to hold the information about cities and shipping costs.